Como subir um projeto Zend para um servidor com CPanel
Surgiu algumas dúvidas quando precisei subir um projeto em Zend Framework para o diretório raiz da conta dentro do cpanel, pois quando você joga em um subdomínio você pode acessar o diretório raiz facilmente para o diretório “public”, porém dentro do cpanel geralmente encontramos a seguinte arvore de diretórios:
Diretório Raiz do usuário:
.cpan .cpanel .cphorde .htpasswds .spamassassin .trash etc logs mail perl public_ftp public_html ssl system tmp .bash_logout .bash_profile .bashrc .contactemail .lastlogin acess-logs www
Para fins de esclarecimentos, o diretório principal do projeto zend é o “public”, porém se eu jogar o projeto em “public_html” o diretório “public” vira mais uma pasta e o projeto não executa. Caso você ainda não saiba todo o projeto antes do diretório “public” deve ficar na área privativa do seu cpanel, ou seja, antes da pasta “public_html”, porém se eu jogar no meu diretório raiz do usuário vai misturar tudo.
Então dentro do seu diretório raiz que demonstramos anteriormente crie uma pasta com o nome que você escolher, vamos supor que seja “sistema”.
Posteriormente você joga seu projeto dentro desse diretório que criamos chamado “sistema”:
.cpan .cpanel .cphorde .htpasswds .spamassassin .trash etc logs mail perl public_ftp public_html ssl system sistema <--- **** tmp .bash_logout .bash_profile .bashrc .contactemail .lastlogin acess-logs www
Todo o conteúdo da pasta “public” você jogará dentro da pasta “public_html”.
Agora abra o arquivo “index.php” de sua aplicação dentro de “public_html” e edite as seguintes linhas:
24, 36, 37, 38
<?php declare(strict_types=1); use Laminas\Mvc\Application; use Laminas\Stdlib\ArrayUtils; /** * This makes our life easier when dealing with paths. Everything is relative * to the application root now. */ chdir(dirname(__DIR__)); // Decline static file requests back to the PHP built-in webserver if (php_sapi_name() === 'cli-server') { $path = realpath(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)); if (is_string($path) && __FILE__ !== $path && is_file($path)) { return false; } unset($path); } // Composer autoloading include __DIR__ . '../../sistema/vendor/autoload.php'; if (! class_exists(Application::class)) { throw new RuntimeException( "Unable to load application.\n" . "- Type `composer install` if you are developing locally.\n" . "- Type `vagrant ssh -c 'composer install'` if you are using Vagrant.\n" . "- Type `docker-compose run laminas composer install` if you are using Docker.\n" ); } // Retrieve configuration $appConfig = require __DIR__ . '../../sistema/config/application.config.php'; if (file_exists(__DIR__ . '../../sistema/config/development.config.php')) { $appConfig = ArrayUtils::merge($appConfig, require __DIR__ . '../../sistema/config/development.config.php'); } // Run the application! Application::init($appConfig)->run(); ?>
Muito provavelmente seu projeto também vai reclamar referente ao diretório de cache, então altere o seguinte arquivo:
/sistema/config/application.config.php
Possívelmente Linha 42 ou pesquise por
'cache_dir' => __DIR__ . 'data/cache/',
Altere para:
'cache_dir' => getcwd().'/sistema/data/cache/',
Também tive alguns probleminhas referente as permissões, pois acessei o servidor via ssh com usuário root e fiz a instalação do os módulos do composer e por conta disso dava erro de conexão no PDO, nada a ver não é mesmo? Pois é, vamos a solução, acesse o diretório “sistema” novamente, agora vamos alterar as permissões de usuário e grupo:
sudo chown -R nomeusuario:grupousuario vendor/
Agora o diretório vendor criado pelo composer tem as permissões da conta do cpanel.
E se você tiver desenvolvendo e subindo os arquivos para o servidor via ftp? Terei que subir separadamente os arquivos dos módulos e os arquivos do diretório público? Final de contas o diretório “public” basicamente não existe mais, ou não é utilizado.
Vou passar uma dica para resolver este problema, exclua o diretório “public” dentro de “sistema” e crie um atalho para “public_html”, acesse o diretório “sistema” e execute o seguinte comando:
ln -s /home/nomedeusuario/public_html/ public/
Acabamos de criar um atalho dentro da pasta “sistema” chamado “public” e que aponta para “public_html”.
Espero ter ajudado a tira algumas dúvidas, vida texto é um pouco chato de explicar algumas coisas, se houver alguma dúvida comente que talvez algum dia eu veja e responda rsrs