{"id":350,"date":"2021-08-16T15:48:35","date_gmt":"2021-08-16T18:48:35","guid":{"rendered":"http:\/\/hackerzone.com.br\/blog\/?p=350"},"modified":"2022-08-13T00:19:39","modified_gmt":"2022-08-13T03:19:39","slug":"como-subir-um-projeto-zend-para-um-servidor-com-cpanel","status":"publish","type":"post","link":"http:\/\/hackerzone.com.br\/blog\/como-subir-um-projeto-zend-para-um-servidor-com-cpanel\/","title":{"rendered":"Como subir um projeto Zend para um servidor com CPanel"},"content":{"rendered":"<p>Surgiu algumas d\u00favidas quando precisei subir um projeto em Zend Framework para o diret\u00f3rio raiz da conta dentro do cpanel, pois quando voc\u00ea joga em um subdom\u00ednio voc\u00ea pode acessar o diret\u00f3rio raiz facilmente para o diret\u00f3rio &#8220;public&#8221;, por\u00e9m dentro do cpanel geralmente encontramos a seguinte arvore de diret\u00f3rios:<\/p>\n<p>Diret\u00f3rio Raiz do usu\u00e1rio:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n.cpan\r\n.cpanel\r\n.cphorde\r\n.htpasswds\r\n.spamassassin\r\n.trash\r\netc\r\nlogs\r\nmail\r\nperl\r\npublic_ftp\r\npublic_html\r\nssl\r\nsystem\r\ntmp\r\n.bash_logout\r\n.bash_profile\r\n.bashrc\r\n.contactemail\r\n.lastlogin\r\nacess-logs\r\nwww\r\n<\/pre>\n<p>Para fins de esclarecimentos, o diret\u00f3rio principal do projeto zend \u00e9 o &#8220;public&#8221;, por\u00e9m se eu jogar o projeto em &#8220;public_html&#8221; o diret\u00f3rio &#8220;public&#8221; vira mais uma pasta e o projeto n\u00e3o executa. Caso voc\u00ea ainda n\u00e3o saiba todo o projeto antes do diret\u00f3rio &#8220;public&#8221; deve ficar na \u00e1rea privativa do seu cpanel, ou seja, antes da pasta &#8220;public_html&#8221;, por\u00e9m se eu jogar no meu diret\u00f3rio raiz do usu\u00e1rio vai misturar tudo.<\/p>\n<p>Ent\u00e3o dentro do seu diret\u00f3rio raiz que demonstramos anteriormente crie uma pasta com o nome que voc\u00ea escolher, vamos supor que seja &#8220;sistema&#8221;.<\/p>\n<p>Posteriormente voc\u00ea joga seu projeto dentro desse diret\u00f3rio que criamos chamado &#8220;sistema&#8221;:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n.cpan\r\n.cpanel\r\n.cphorde\r\n.htpasswds\r\n.spamassassin\r\n.trash\r\netc\r\nlogs\r\nmail\r\nperl\r\npublic_ftp\r\npublic_html\r\nssl\r\nsystem\r\nsistema &lt;--- ****\r\ntmp\r\n.bash_logout\r\n.bash_profile\r\n.bashrc\r\n.contactemail\r\n.lastlogin\r\nacess-logs\r\nwww\r\n<\/pre>\n<p>Todo o conte\u00fado da pasta &#8220;public&#8221; voc\u00ea jogar\u00e1 dentro da pasta &#8220;public_html&#8221;.<\/p>\n<p>Agora abra o arquivo &#8220;index.php&#8221; de sua aplica\u00e7\u00e3o dentro de &#8220;public_html&#8221; e edite as seguintes linhas:<br \/>\n24, 36, 37, 38<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n&lt;?php\r\n\r\ndeclare(strict_types=1);\r\n\r\nuse Laminas\\Mvc\\Application;\r\nuse Laminas\\Stdlib\\ArrayUtils;\r\n\r\n\/**\r\n * This makes our life easier when dealing with paths. Everything is relative\r\n * to the application root now.\r\n *\/\r\nchdir(dirname(__DIR__));\r\n\r\n\/\/ Decline static file requests back to the PHP built-in webserver\r\nif (php_sapi_name() === 'cli-server') {\r\n    $path = realpath(__DIR__ . parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH));\r\n    if (is_string($path) &amp;&amp; __FILE__ !== $path &amp;&amp; is_file($path)) {\r\n        return false;\r\n    }\r\n    unset($path);\r\n}\r\n\r\n\/\/ Composer autoloading\r\ninclude __DIR__ . '..\/..\/sistema\/vendor\/autoload.php';\r\n\r\nif (! class_exists(Application::class)) {\r\n    throw new RuntimeException(\r\n        &quot;Unable to load application.\\n&quot;\r\n        . &quot;- Type `composer install` if you are developing locally.\\n&quot;\r\n        . &quot;- Type `vagrant ssh -c 'composer install'` if you are using Vagrant.\\n&quot;\r\n        . &quot;- Type `docker-compose run laminas composer install` if you are using Docker.\\n&quot;\r\n    );\r\n}\r\n\r\n\/\/ Retrieve configuration\r\n$appConfig = require __DIR__ . '..\/..\/sistema\/config\/application.config.php';\r\nif (file_exists(__DIR__ . '..\/..\/sistema\/config\/development.config.php')) {\r\n    $appConfig = ArrayUtils::merge($appConfig, require __DIR__ . '..\/..\/sistema\/config\/development.config.php');\r\n}\r\n\r\n\/\/ Run the application!\r\nApplication::init($appConfig)-&gt;run();\r\n\r\n?&gt;\r\n<\/pre>\n<p>Muito provavelmente seu projeto tamb\u00e9m vai reclamar referente ao diret\u00f3rio de cache, ent\u00e3o altere o seguinte arquivo:<br \/>\n<strong>\/sistema\/config\/application.config.php<\/strong><br \/>\nPoss\u00edvelmente Linha 42 ou pesquise por<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n'cache_dir' =&gt; __DIR__ . 'data\/cache\/',\r\n<\/pre>\n<p>Altere para:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n'cache_dir' =&gt; getcwd().'\/sistema\/data\/cache\/',\r\n<\/pre>\n<p>Tamb\u00e9m tive alguns probleminhas referente as permiss\u00f5es, pois acessei o servidor via ssh com usu\u00e1rio root e fiz a instala\u00e7\u00e3o do os m\u00f3dulos do composer e por conta disso dava erro de conex\u00e3o no PDO, nada a ver n\u00e3o \u00e9 mesmo? Pois \u00e9, vamos a solu\u00e7\u00e3o, acesse o diret\u00f3rio &#8220;sistema&#8221; novamente, agora vamos alterar as permiss\u00f5es de usu\u00e1rio e grupo:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nsudo chown -R nomeusuario:grupousuario vendor\/\r\n<\/pre>\n<p>Agora o diret\u00f3rio vendor criado pelo composer tem as permiss\u00f5es da conta do cpanel.<\/p>\n<p>E se voc\u00ea tiver desenvolvendo e subindo os arquivos para o servidor via ftp? Terei que subir separadamente os arquivos dos m\u00f3dulos e os arquivos do diret\u00f3rio p\u00fablico? Final de contas o diret\u00f3rio &#8220;public&#8221; basicamente n\u00e3o existe mais, ou n\u00e3o \u00e9 utilizado.<\/p>\n<p>Vou passar uma dica para resolver este problema, exclua o diret\u00f3rio &#8220;public&#8221; dentro de &#8220;sistema&#8221; e crie um atalho para &#8220;public_html&#8221;, acesse o diret\u00f3rio &#8220;sistema&#8221; e execute o seguinte comando:<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nln -s \/home\/nomedeusuario\/public_html\/ public\/\r\n<\/pre>\n<p>Acabamos de criar um atalho dentro da pasta &#8220;sistema&#8221; chamado &#8220;public&#8221; e que aponta para &#8220;public_html&#8221;.<\/p>\n<p>Espero ter ajudado a tira algumas d\u00favidas, vida texto \u00e9 um pouco chato de explicar algumas coisas, se houver alguma d\u00favida comente que talvez algum dia eu veja e responda rsrs<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Surgiu algumas d\u00favidas quando precisei subir um projeto em Zend Framework para o diret\u00f3rio raiz da conta dentro do cpanel, pois quando voc\u00ea joga em um subdom\u00ednio voc\u00ea pode acessar o diret\u00f3rio raiz facilmente para o diret\u00f3rio &#8220;public&#8221;, por\u00e9m dentro do cpanel geralmente encontramos a seguinte arvore de diret\u00f3rios: Diret\u00f3rio Raiz do usu\u00e1rio: Para fins [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":459,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,13],"tags":[161,15,20,160],"class_list":["post-350","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php","category-zend-framework-3","tag-cpanel","tag-php","tag-zend","tag-zend3","cat-12-id","cat-13-id","has_thumb"],"_links":{"self":[{"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/posts\/350","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/comments?post=350"}],"version-history":[{"count":1,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/posts\/350\/revisions"}],"predecessor-version":[{"id":352,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/posts\/350\/revisions\/352"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/media\/459"}],"wp:attachment":[{"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/media?parent=350"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/categories?post=350"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/hackerzone.com.br\/blog\/wp-json\/wp\/v2\/tags?post=350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}