Referência de CLI & Servidor (`cms.pl`)
cms.pl é o daemon do CMS Chinaski: ele serve a interface de admin e a API, enquanto o site público é HTML estático construído separadamente. Esta página explica como executar o servidor em desenvolvimento, em produção e offline, mais as ferramentas de linha de comando que o acompanham.
Antes de começar
- O servidor não inicia sem
CHINASKI_SECRET. Ela é a chave de assinatura das sessões de admin e protege as credenciais armazenadas de serviços de terceiros . Defina-a com um valor aleatório longo e nunca a troque por impulso. - A sessão de admin dura 8 horas, e o cookie é enviado apenas por HTTPS.
Executando o servidor
Desenvolvimento
morbo cms.plO Morbo é o servidor de desenvolvimento: ele reinicia a cada mudança de código. Construa o site estático separadamente com perl builder/build.pl.
Produção (systemd / recomendado)
O diretório deploy/ embarca uma unit systemd com template, chinaski@.service, para que um único conjunto de arquivos execute qualquer número de instâncias do CMS no mesmo host. Habilite uma com o nome da instância:
systemctl enable --now chinaski@1(1 pode ser 2, prod, staging . Qualquer coisa alfanumérica.) O que a unit faz por você:
- Executa como um usuário
chinaskidedicado com o diretório de trabalho/var/www/chinaski<instance>. - Define os caminhos de banco de dados e saída automaticamente a partir do nome da instância (
CHINASKI_DB,CHINASKI_OUTPUT) . Você normalmente não define isso à mão. - Lê um único arquivo de env com permissões travadas,
/etc/chinaski<instance>/env, que você cria antes de iniciar. Ele deve conterCHINASKI_SECRETeLISTEN_URL. - Reinicia automaticamente em caso de falha (com backoff), espera as requisições em voo no shutdown (um esvaziamento de 330 segundos; um build em voo é cancelado em vez de esperado), e aplica limites de memória/CPU e hardening padrão para que um build descontrolado não multe o host de fome.
- Registra no journald: veja com
journalctl -u chinaski@<instance>.
Ligue o servidor ao loopback. Nesta configuração um reverse proxy (Caddy ou nginx) fica à frente e o exemplo da unit liga o LISTEN_URL a http://127.0.0.1:3001. O CMS confia em IPs de cliente encaminhados apenas de conexões loopback . Ligá-lo a uma interface pública permitiria que visitantes falsificassem seu IP e anulassem os rate limits e bloqueios de login.
Produção (sem service manager)
Deployments pontuais executam durante uma execução de deploy.sh <instance>, que puxa código, instala dependências, faz checagem de sintaxe, reconstrói a saída estática e reinicia o serviço. Se um build falha, o deploy aborta por padrão para que você nunca reinicie sobre uma saída quebrada; CHINASKI_ALLOW_BUILD_FAIL=1 sobrescreve isso para deploys emergenciais apenas de código.
Instalação de servidor em um comando
Em um servidor Debian/Ubuntu você pode levantar uma nova instância com um único comando; o instalador cuida de pacotes, dependências, o usuário chinaski, inicialização do banco de dados, o arquivo de env e o serviço systemd:
curl -fsSL https://chinaski.net/install | sudo bash -s -- 1 --repo https://github.com/bigjohncobb/chinaskiSubstitua 1 pelo nome da sua instância; passe --port PORT para sobrescrever a porta de escuta padrão.
Modo offline / “EOTW” (hypnotoad, HTTP puro)
Para máquinas sem acesso à internet . Sem DNS, sem autoridades certificadoras . O hypnotoad pode ser o único servidor, servindo HTTP puro na porta 8080 para sempre.
- Construa ou obtenha um bundle offline (
bash install/make-bundle.shem uma máquina conectada) e siga a instalação do bundle. - Copie
install/hypnotoad.confpara o diretório da aplicação. - Inicie:
export CHINASKI_SECRET=$(openssl rand -hex 32) # uma vez; salve o valor
export CHINASKI_AIRGAP=1
hypnotoad cms.plGerenciando uma instância em execução:
hypnotoad cms.pl # inicia, ou faz hot-reload de uma instância em execução
hypnotoad -s cms.pl # parada graciosa
kill -USR2 $(cat hypnotoad.pid) # hot-reload sem derrubar conexõesDois workers é seguro em uma máquina de 1 GB; suba para 4 em um host de 2+ GB com múltiplos editores simultâneos.
Segurança sem proxy: fora do loopback, o CMS ignora os headers X-Forwarded-For e usa o endereço real da conexão TCP, de modo que rate limiting e bloqueio de login funcionam corretamente sem configuração extra. Não há TLS neste modo . Não envie senhas por uma rede não confiável; use uma VPN ou regras de firewall para restringir quem pode alcançar o admin.
Variáveis de ambiente
| Variável | Propósito |
|---|---|
CHINASKI_SECRET | Obrigatória. Chave de assinatura de sessão (32+ bytes aleatórios); também desbloqueia as credenciais criptografadas que o CMS armazena |
CHINASKI_LISTEN | Endereço no qual o servidor escuta; padrão http://127.0.0.1:8080 |
CHINASKI_WORKERS | Número de workers do servidor; padrão 2. Use 4 em máquinas de 2+ GB com vários editores simultâneos |
CHINASKI_DB | Localização do arquivo de banco de dados; normalmente derivada do nome da instância pela unit systemd |
CHINASKI_OUTPUT | Diretório de saída do build estático; normalmente derivado do nome da instância |
CHINASKI_AIRGAP | Defina 1 para desabilitar toda requisição de saída: webhooks de build, webhooks de formulário e verificação de bot-check (a proteção de caixa de seleção também é ocultada) |
CHINASKI_TRUSTED_PROXIES | Endereços IP separados por vírgula ou faixas CIDR IPv4 autorizadas a encaminhar IPs de clientes. O loopback é sempre confiável; padrão é apenas loopback |
CHINASKI_ALLOW_BUILD_FAIL | Defina 1 na frente de deploy.sh para permitir deploys apenas de código quando um build falha |
CHINASKI_FORCE_FULL | Usada internamente pelo comando de rebuild full; normalmente não definida à mão |
MOJO_MODE | Defina production em deployments de produção (a unit systemd faz isso); o modo teste muda o hashing de senha para um custo mais rápido, apenas de teste |
Outras variáveis existem no código (CHINASKI_CMS_URL, CHINASKI_DOCS_DIR, CHINASKI_RELEASE_PUBKEY, CHINASKI_SMTP_INSECURE_NOVERIFY, CHINASKI_UPDATE_MANIFEST_URL, CHINASKI_URL_BASE, CHINASKI_FORCE_PROMOTE) mas suas configurações exatamente suportadas não são cobertas nestes docs.
Utilitários de linha de comando
Todos vivem em bin/ e leem o mesmo banco de dados que o CMS usa.
| Comando | O que faz |
|---|---|
perl bin/chinaski-setup.pl | Setup scriptado de primeira inicialização. Passe --username, --site-url e --password . Ou use a variável de ambiente CHINASKI_ADMIN_PASSWORD em vez disso, para que a senha não fique visível na lista de processos. Aplica o mínimo de 12 caracteres mais as regras de complexidade. |
perl bin/reset-admin.pl [username] | Devolve a conta de um administrador ao modo de configuração de primeira inicialização para que uma nova senha possa ser escolhida; exige acesso ao shell e uma confirmação YES digitada. A próxima visita ao site passa pela tela de configuração. |
perl bin/chinaski-config.pl get KEY / set KEY VALUE | Lê ou escreve qualquer configuração do site pela linha de comando. |
perl bin/force-full-build.pl | Limpa o cache de build e executa um rebuild estático completo. |
perl bin/check-schema-sync.pl | Confirma que o banco de dados corresponde ao schema embarcado; saída 0 significa em sincronia, 1 significa divergência. Útil após upgrades. |
bin/cron-build-monitor.sh | Script cron (destinado a cada 5 minutos) que alerta quando builds param de completar ou páginas desaparecem do diretório de saída. |