Publicar uma aplicação Ruby on Rails exige mais do que instalar a gem rails: é necessário escolher versões compatíveis, preparar banco de dados, variáveis secretas, servidor de aplicação, proxy HTTPS, processos auxiliares, logs, backup e uma forma segura de atualizar ou reverter. Este guia apresenta dois cenários atuais: cPanel com Application Manager/Passenger e VPS administrado diretamente.
/scripts/installruby, versões antigas do Rails e pacotes ea-ruby2*-mod_passenger não representam a instalação moderna em sistemas atuais. Confirme sempre a matriz de compatibilidade do sistema operacional, do cPanel, do Ruby e da aplicação.Antes de começar
- faça backup ou snapshot e tenha acesso ao console do provedor;
- use um usuário de aplicação sem privilégios de root;
- confira no
Gemfilee em.ruby-versiona versão exigida; - prepare domínio, DNS, certificado TLS e banco compatível;
- separe produção de desenvolvimento e homologação;
- registre um procedimento de rollback antes da primeira publicação.
1. Instalar Ruby no VPS
O gerenciador de pacotes da distribuição é simples e recebe atualizações do sistema, mas pode oferecer uma versão mais antiga. Quando a aplicação exige uma versão específica, use um gerenciador como rbenv, asdf ou mise seguindo a documentação do projeto escolhido. Não misture instalações globais e por usuário sem documentar os caminhos.
ruby -v
gem -v
bundle -v
Instale também as bibliotecas de compilação e os clientes de banco exigidos pelas gems nativas, usando os nomes de pacote da distribuição suportada. Em seguida, instale Bundler na versão compatível com o Gemfile.lock e execute a instalação como o usuário da aplicação:
bundle config set without 'development test'
bundle config set path 'vendor/bundle'
bundle install
2. Preparar a aplicação para produção
Envie o código por Git ou por um processo de implantação reproduzível. Nunca publique .env, chave mestra, credenciais ou dumps no repositório. Configure RAILS_ENV=production, RAILS_MASTER_KEY ou as variáveis equivalentes no ambiente protegido, além de DATABASE_URL, URL pública, e-mail e armazenamento usados pelo projeto.
RAILS_ENV=production bin/rails db:prepare
RAILS_ENV=production bin/rails assets:precompile
RAILS_ENV=production bin/rails runner 'puts Rails.version'
db:prepare pode criar ou migrar o banco conforme o estado encontrado. Em uma base crítica, revise as migrations, faça backup consistente e execute mudanças potencialmente bloqueantes em janela planejada. Teste a aplicação em homologação com dados anonimizados.
3. Publicar pelo Application Manager do cPanel
Esse menu só aparece se o provedor o habilitou no Feature Manager e instalou Passenger. Em servidores atuais, o pacote principal é ea-apache24-mod-passenger; ele não instala Ruby automaticamente. O administrador deve instalar um Ruby compatível e configurar o executável que o Passenger utilizará. Em hospedagem compartilhada, confirme previamente se o plano oferece essa função e qual versão está disponível.
- No cPanel, abra Software > Application Manager.
- Escolha Register Application.
- Defina domínio, URL base e caminho da aplicação fora de diretórios públicos desnecessários.
- Selecione o ambiente de produção e informe o arquivo de inicialização quando a interface solicitar.
- Cadastre somente variáveis necessárias; use o mecanismo de segredos recomendado pelo provedor.
- Registre a aplicação, revise o log indicado pela interface e teste uma rota de saúde.
Para Rails com Passenger, mantenha o arquivo config.ru da aplicação e assegure que o usuário do cPanel consegue ler o código e gravar apenas nos diretórios necessários. Depois de uma atualização, use o mecanismo de reinicialização suportado pelo Passenger/Application Manager em vez de matar processos indiscriminadamente.
4. Alternativa em VPS: Puma, serviço e proxy reverso
Em um VPS sem Application Manager, uma arquitetura comum executa Puma como serviço não privilegiado, com Apache ou NGINX terminando HTTPS e encaminhando para um socket Unix ou porta local. Crie uma unidade systemd específica, defina diretório de trabalho, usuário, ambiente e política de reinício. Não exponha a porta interna do Puma à internet.
Valide a configuração do proxy antes de recarregar o serviço, limite tamanho e tempo de requisição conforme a aplicação e preserve os cabeçalhos de protocolo e endereço do cliente. Configure renovação automática do certificado e teste a partir de uma rede externa.
5. Filas, tarefas agendadas e armazenamento
Workers de Active Job, Sidekiq ou outra fila devem ser processos separados, supervisionados e monitorados. Agendamentos precisam impedir sobreposição quando necessário e registrar saída sem expor segredos. Se a aplicação recebe arquivos, use armazenamento persistente ou objeto externo; diretórios dentro de uma nova release podem desaparecer no próximo deploy.
6. Permissões e segurança
- não execute servidor web, Bundler, migrations ou aplicação como root;
- mantenha sistema, Ruby, Rails e gems em versões com suporte;
- revise vulnerabilidades com ferramentas do ecossistema e aplique correções;
- restrinja banco e Redis à rede local ou privada;
- use firewall, MFA, chaves SSH e princípio do menor privilégio;
- não grave tokens, cookies ou dados pessoais nos logs;
- defina limites de memória, CPU, processos e disco.
7. Implantação com baixa indisponibilidade
- Execute testes e análise de segurança no commit que será publicado.
- Crie uma release imutável e instale dependências com lockfile.
- Faça backup do banco antes de migrations destrutivas.
- Compile assets e valide a inicialização fora do tráfego.
- Aplique migrations compatíveis com a versão anterior quando houver implantação gradual.
- Troque a release ativa e reinicie os processos de forma controlada.
- Teste login, gravação, upload, e-mail, jobs e rota de saúde.
- Monitore erros, latência e consumo; reverta se os critérios falharem.
Diagnóstico rápido
| Sintoma | Verifique |
|---|---|
| Application Manager não aparece | Feature Manager, plano e instalação do Passenger pelo administrador |
| Erro de versão do Ruby | .ruby-version, Gemfile, caminho do executável e ambiente do serviço |
| Gem não compila | Biblioteca de desenvolvimento, compilador, arquitetura e versão compatível |
| Erro 500 ao iniciar | log do Passenger/Puma, credenciais, chave mestra, banco e permissões |
| Assets ausentes | compilação em produção, URL base, permissões e configuração do proxy/CDN |
| Jobs não executam | worker, fila, credenciais, serviço e política de reinício |
Backup e recuperação
Mantenha cópias externas e testadas do banco, arquivos enviados, configuração e segredos cifrados. O repositório não substitui o backup de dados. Registre RPO e RTO, automatize verificações e faça restaurações periódicas em ambiente isolado. Um snapshot facilita rollback do servidor, mas não substitui uma cópia consistente do banco.
Referências oficiais: Application Manager do cPanel, aplicações Passenger no cPanel, instalação do Ruby e configuração do Rails.
Se você precisa controlar runtime, proxy, workers e banco, conheça o servidor VPS com acesso root ou o serviço de gerenciamento de servidores.
Recursos relacionados
Continue com materiais e serviços relacionados ao tema deste guia.