Feito com Chinaski

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.pl

O 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 chinaski dedicado 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 conter CHINASKI_SECRET e LISTEN_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/chinaski

Substitua 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.

  1. Construa ou obtenha um bundle offline (bash install/make-bundle.sh em uma máquina conectada) e siga a instalação do bundle.
  2. Copie install/hypnotoad.conf para o diretório da aplicação.
  3. Inicie:
export CHINASKI_SECRET=$(openssl rand -hex 32)   # uma vez; salve o valor
export CHINASKI_AIRGAP=1
hypnotoad cms.pl

Gerenciando 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ões

Dois 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.
Leia este site em