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

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *