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