Pôr uma aplicação CodeIgniter a funcionar na hospedagem com cPanel

Uma aplicação CodeIgniter corre bem em hospedagem com cPanel, desde que o domínio aponte para a pasta public da aplicação e não para a raiz do projecto. É a única coisa que quase toda a gente falha: o resto (a base de dados, o ficheiro .env, as pastas de escrita) é configuração. Este artigo fala do CodeIgniter 4, que é o actual; no fim há uma nota sobre o 3.

O CodeIgniter 4 separa o que o visitante pode pedir (a pasta public) do que nunca deve ser pedido (app, system e writable). Se o domínio apontar para a raiz, o site mostra uma listagem de pastas ou um erro, e o pior caso é deixar a configuração à vista.

Do computador para o cPanel, passo a passo

1 Confirme a versão do PHP. Cada versão do CodeIgniter 4 declara a versão mínima do PHP na documentação oficial. Escolha-a em Select PHP Version para a pasta do site: que versão do PHP usar.
2 Envie o projecto para FORA da pasta pública. Por exemplo para /home/CONTA/app-ci, ao lado de public_html. Se usa o Composer, corra lá o composer install e envie o resultado: o Composer em hospedagem partilhada.
3 Aponte o domínio à pasta public. Num domínio adicional ou num subdomínio escolhe-se a pasta ao criá-lo: indique /home/CONTA/app-ci/public. Para o domínio principal, veja no cPanel o ecrã dos domínios se deixa mudar a pasta; se não deixar, use um subdomínio para a aplicação.
4 Crie o ficheiro .env. O projecto traz um ficheiro modelo chamado env, sem o ponto. Copie-o para .env na raiz do projecto e edite-o (veja o quadro abaixo).
5 Crie a base de dados e o utilizador no cPanel, e ponha os dados no .env: criar bases de dados e usar o phpMyAdmin.
6 Dê escrita à pasta writable. É onde a aplicação guarda registos, sessões e cache. Se não puder escrever, o site dá erro logo no primeiro pedido.
7 Crie as tabelas com php spark migrate no Terminal ou em SSH, se a aplicação trouxer migrações. Use o PHP da versão que escolheu: correr o PHP certo na linha de comandos.

O que pôr no .env

Linha Para quê
CI_ENVIRONMENT = production Põe a aplicação em modo de produção: os erros deixam de aparecer ao visitante. Em development mostram-se detalhes que não deve expor.
app.baseURL = 'https://seudominio.tld/' O endereço do site, com a barra final e em https. Um endereço errado dá ligações e formulários partidos.
database.default.hostname Em regra localhost. Os nomes da base e do utilizador levam o prefixo da conta.
database.default.database, .username, .password Os dados que criou no cPanel. A palavra-passe fica aqui e nunca no código.
database.default.DBDriver = MySQLi O motor. Para PostgreSQL o valor é outro, e a extensão pgsql tem de ser ligada em Select PHP Version.
O ficheiro .env tem de ficar fora do alcance do navegador. Com o domínio a apontar para a pasta public, fica. Se alguém apontou o domínio à raiz do projecto, qualquer pessoa pode pedir o .env e levar as suas palavras-passe. Experimente abrir esse endereço: tem de dar 403 ou 404. Veja manter palavras-passe fora do código.
Erro 404 em todas as páginas menos na inicial? As ligações bonitas precisam das regras de reescrita do .htaccess que vêm dentro da pasta public. Se não foram enviadas (começam por ponto e escondem-se), a aplicação só responde com index.php no endereço. Veja o .htaccess para projectos PHP.
CodeIgniter 3? É mais antigo e corre em versões de PHP mais antigas. A diferença prática: o index.php fica na raiz do projecto, a configuração está em application/config e a pasta system deve ficar fora da pasta pública. A ideia é a mesma: o que é código nunca fica ao alcance do navegador. Se o site é antigo e ninguém o actualiza, pense num plano para o substituir.

Subiu a aplicação e só vê um erro? Envie-nos o endereço e a última linha do ficheiro de registo da pasta writable/logs.

Abrir um pedido de suporte

VEJA TAMBÉM

Pôr uma aplicação Laravel a funcionar

Palavras-passe fora do código: ficheiros .env

Onde está o registo de erros do PHP

Planos de hospedagem e o que cada um inclui

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?