PageRenderTime 65ms CodeModel.GetById 35ms RepoModel.GetById 1ms app.codeStats 0ms

/pt/installation/advanced-installation.rst

https://github.com/steinkel/docs
ReStructuredText | 353 lines | 278 code | 75 blank | 0 comment | 0 complexity | d1447b374a1816f37386af497634c201 MD5 | raw file
  1. Instalação Avançada
  2. ###################
  3. Pode haver algumas situações onde você deseja colocar os diretórios do CakePHP
  4. em diferentes locais no sistema de arquivos. Isto pode ser devido a uma
  5. restrição do servidor compartilhado, ou talvez você queira apenas que algumas
  6. aplicações compartilhem as bibliotecas do Cake. Esta seção descreve como
  7. espalhar seus diretórios do CakePHP em um sistema de arquivos.
  8. Em primeiro lugar, note que três partes principais de uma aplicação CakePHP.
  9. #. As bibliotecas do núcleo do CakePHP, em /cake.
  10. #. O código da sua aplicação, em /app.
  11. #. Os arquivos públicos da sua aplicação, normalmente em /app/webroot.
  12. Cada um desses diretórios podem ser localizados em qualquer em seu sistema de
  13. arquivos, com exceção do webroot, que precisa ser acessível pelo seu servidor
  14. web. Você pode até mesmo mover a pasta webroot para fora da pasta app, desde
  15. que você diga ao Cake onde você colocou.
  16. Para configurar sua instalação do Cake, você precisa fazer algumas modificações
  17. nos seguintes arquivos.
  18. - /app/webroot/index.php
  19. - /app/webroot/test.php (se você utilizar o recurso de :doc:`Testes </development/testing>`.)
  20. três constantes que você precisa editar: ``ROOT``, ``APP_DIR``, e
  21. ``CAKE_CORE_INCLUDE_PATH``.
  22. - ``ROOT`` deve ser configurada para o diretório que contém sua pasta app.
  23. - ``APP_DIR`` deve ser definida como o nome de sua pasta app.
  24. - ``CAKE_CORE_INCLUDE_PATH`` deve ser definida como o caminho da sua pasta de
  25. bibliotecas do CakePHP.
  26. Vamos fazer um exemplo para que você possa ver como funciona uma instalação
  27. avançada na prática. Imagine que eu quero que a aplicação funcione como segue:
  28. - O núcleo do CakePHP será colocado em /usr/lib/cake.
  29. - O diretório webroot da minha aplicação será /var/www/mysite/.
  30. - O diretório app da minha aplicação será /home/me/myapp.
  31. Dado este tipo de configuração, eu preciso editar meu arquivo webroot/index.php
  32. (que vai acabar em /var/www/mysite/index.php, neste exemplo) para algo como o
  33. seguinte::
  34. // /app/webroot/index.php (parcial, comentários removidos)
  35. if (!defined('ROOT')) {
  36. define('ROOT', DS . 'home' . DS . 'me');
  37. }
  38. if (!defined('APP_DIR')) {
  39. define ('APP_DIR', 'myapp');
  40. }
  41. if (!defined('CAKE_CORE_INCLUDE_PATH')) {
  42. define('CAKE_CORE_INCLUDE_PATH', DS . 'usr' . DS . 'lib');
  43. }
  44. Recomenda-se a utilização da constante ``DS`` ao invés das barras para
  45. delimitar os caminhos de arquivos. Isso previne qualquer erros sobre falta de
  46. arquivos que você pode obter, por ter usado o delimitador errado, e isso torna
  47. o seu código mais portável.
  48. Apache e mod\_rewrite (e .htaccess)
  49. ===================================
  50. O CakePHP é desenvolvido para trabalhar com o mod\_rewrite, mas percebemos que
  51. alguns usuários apanharam para fazer isto funcionar nos seus sistemas, então
  52. nós lhe daremos algumas dicas que você pode tentar fazer para rodar corretamente.
  53. Aqui estão algumas coisas que você pode tentar fazer para rodar corretamente.
  54. Primeiro veja o seu httpd.conf (tenha certeza de estar editando o httpd.conf do
  55. sistema e não o de um usuário ou de um site específico).
  56. #. Tenha certeza que a sobreposição do .htaccess está sendo permitida, ou seja,
  57. que o AllowOverride está configurado como All para o `DocumentRoot`. Você
  58. deve ver algo similar a isso::
  59. # Cada diretório com o Apache tenha acesso pode ser configurado com
  60. # relação aos quais serviços e recursos são permitidos e/ou
  61. # desabilitados neste diretório (e seus subdiretórios).
  62. #
  63. # Primeiro, configuramos o o "padrão" para ter um conjunto muito
  64. # restrito de recursos.
  65. #
  66. <Directory />
  67. Options FollowSymLinks
  68. AllowOverride All
  69. # Order deny,allow
  70. # Deny from all
  71. </Directory>
  72. #. Tenha certeza de estar carregando o mod\_rewrite corretamente. Você deve ver
  73. algo como::
  74. LoadModule rewrite_module libexec/apache2/mod_rewrite.so
  75. Em muitos sistemas isso vem comentado por padrão (começando com um #), então
  76. você apenas precisa remover esses símbolos.
  77. Depois de fazer as alterações, reinicie o Apache para ter certeza que as
  78. configurações estão aivas.
  79. Verifique se os seus arquivos .htaccess estão nos diretórios corretos.
  80. Isso pode acontecer durante a cópia, pois alguns sistemas operacionais
  81. tratam arquivos que começam com '.' como oculto e, portanto, você não poderá
  82. -los copiar.
  83. #. Tenha certeza que sua cópia do CakePHP é veio da seção de downloads do nosso
  84. site ou do nosso repositório GIT, e foi descompactada corretamente
  85. verificando os seus arquivos .htaccess.
  86. No diretório raiz do Cake (precisa ser copiado para o seu DocumentRoot, este
  87. redireciona tudo para a sua aplicação)::
  88. <IfModule mod_rewrite.c>
  89. RewriteEngine on
  90. RewriteRule ^$ app/webroot/ [L]
  91. RewriteRule (.*) app/webroot/$1 [L]
  92. </IfModule>
  93. O diretório app do seu Cake (será copiado para o diretório principal da sua
  94. aplicação pelo bake)::
  95. <IfModule mod_rewrite.c>
  96. RewriteEngine on
  97. RewriteRule ^$ webroot/ [L]
  98. RewriteRule (.*) webroot/$1 [L]
  99. </IfModule>
  100. Diretório webroot do Cake (será copiado para a raiz da sua aplicação web
  101. pelo bake)::
  102. <IfModule mod_rewrite.c>
  103. RewriteEngine On
  104. RewriteCond %{REQUEST_FILENAME} !-d
  105. RewriteCond %{REQUEST_FILENAME} !-f
  106. RewriteRule ^(.*)$ index.php [QSA,L]
  107. </IfModule>
  108. Para muitos serviços de hospedagem (GoDaddy, 1and1), seu servidor web
  109. sendo servido a partir de um diretório de usuário que utiliza o
  110. mod\_rewrite. Se você está instalando o CakePHP dentro do diretório de
  111. um usuário (http://example.com/~username/cakephp/), ou qualquer outra
  112. estrutura de URL que utiliza o mod\_rewrite, você irá precisar
  113. adicionar instruções RewriteBase para os arquivos .htaccess do CakePHP
  114. (/.htaccess, /app/.htaccess, /app/webroot/.htaccess).
  115. Isto pode ser adicionado à mesma seção da diretiva RewriteEngine, por
  116. exemplo, o arquivo .htaccess do seu webroot seria algo como::
  117. <IfModule mod_rewrite.c>
  118. RewriteEngine On
  119. RewriteBase /path/to/cake/app
  120. RewriteCond %{REQUEST_FILENAME} !-d
  121. RewriteCond %{REQUEST_FILENAME} !-f
  122. RewriteRule ^(.*)$ index.php [QSA,L]
  123. </IfModule>
  124. Os detalhes dessa mudança vai depender de sua configuração, e pode incluir
  125. algumas coisas adicionais que não estão relacionadas ao Cake. Por favor,
  126. consulte a documentação online do Apache para mais informações.
  127. URLs amigáveis e Lighttpd
  128. =========================
  129. Embora o Lighttpd apresenta um módulo de reescrita, ele não é equivalente ao
  130. mod\_rewrite do Apache. Para obter 'URLs amigáveis' ao usar Lighty você tem
  131. duas opções. Uma é usar o mod\_rewrite a outra é usar um script LUA com o
  132. mod\_magnet.
  133. **Usando o mod\_rewrite**
  134. O modo mais fácil para se obter URLs amigáveis é adicionando este script
  135. na configuração do seu lighty. Basta editar a URL, e tudo deve funcionar.
  136. Por favor, note que isto não funciona em instalações do Cake em subdiretórios.
  137. ::
  138. $HTTP["host"] =~ "^(www\.)?example.com$" {
  139. url.rewrite-once = (
  140. # if the request is for css|files etc, do not pass on to Cake
  141. "^/(css|files|img|js)/(.*)" => "/$1/$2",
  142. "^([^\?]*)(\?(.+))?$" => "/index.php?url=$1&$3",
  143. )
  144. evhost.path-pattern = "/home/%2-%1/www/www/%4/app/webroot/"
  145. }
  146. **Usando o mod\_magnet**
  147. Para utiizar URLs amigáveis com o CakePHP e o Lighttpd, coloque este
  148. script LUA em /etc/lighttpd/cake.
  149. ::
  150. -- little helper function
  151. function file_exists(path)
  152. local attr = lighty.stat(path)
  153. if (attr) then
  154. return true
  155. else
  156. return false
  157. end
  158. end
  159. function removePrefix(str, prefix)
  160. return str:sub(1,#prefix+1) == prefix.."/" and str:sub(#prefix+2)
  161. end
  162. -- prefix without the trailing slash
  163. local prefix = ''
  164. -- the magic ;)
  165. if (not file_exists(lighty.env["physical.path"])) then
  166. -- file still missing. pass it to the fastcgi backend
  167. request_uri = removePrefix(lighty.env["uri.path"], prefix)
  168. if request_uri then
  169. lighty.env["uri.path"] = prefix .. "/index.php"
  170. local uriquery = lighty.env["uri.query"] or ""
  171. lighty.env["uri.query"] = uriquery .. (uriquery ~= "" and "&" or "") .. "url=" .. request_uri
  172. lighty.env["physical.rel-path"] = lighty.env["uri.path"]
  173. lighty.env["request.orig-uri"] = lighty.env["request.uri"]
  174. lighty.env["physical.path"] = lighty.env["physical.doc-root"] .. lighty.env["physical.rel-path"]
  175. end
  176. end
  177. -- fallthrough will put it back into the lighty request loop
  178. -- that means we get the 304 handling for free. ;)
  179. .. note::
  180. Se você estiver rodando sua instalação do CakePHP a partir de um
  181. subdiretório, você precisa definir o prefix = 'subdiretorio' no
  182. script acima
  183. Então, informe ao Lighttpd sobre o seu vhost::
  184. $HTTP["host"] =~ "example.com" {
  185. server.error-handler-404 = "/index.php"
  186. magnet.attract-physical-path-to = ( "/etc/lighttpd/cake.lua" )
  187. server.document-root = "/var/www/cake-1.2/app/webroot/"
  188. # Think about getting vim tmp files out of the way too
  189. url.access-deny = (
  190. "~", ".inc", ".sh", "sql", ".sql", ".tpl.php",
  191. ".xtmpl", "Entries", "Repository", "Root",
  192. ".ctp", "empty"
  193. )
  194. }
  195. URLs amigáveis no nginx
  196. =======================
  197. nginx é um servidor popular que, como Lighttpd, usa menos recursos do sistema.
  198. O inconveniente é que não faz uso de arquivos .htaccess como o Apache e
  199. o Lighttpd, por isso é necessário criar as URLs reescritas na configuração
  200. site-available. Dependendo de sua instalação, você terá que modificar isso,
  201. mas no mínimo, você irá precisar do PHP sendo executado como FastCGI.
  202. ::
  203. server {
  204. listen 80;
  205. server_name www.example.com;
  206. rewrite ^(.*) http://example.com$1 permanent;
  207. }
  208. server {
  209. listen 80;
  210. server_name example.com;
  211. # root directive should be global
  212. root /var/www/example.com/public/app/webroot/;
  213. index index.php;
  214. access_log /var/www/example.com/log/access.log;
  215. error_log /var/www/example.com/log/error.log;
  216. location / {
  217. try_files $uri $uri/ /index.php?$uri&$args;
  218. }
  219. location ~ \.php$ {
  220. include /etc/nginx/fastcgi_params;
  221. try_files $uri =404;
  222. fastcgi_pass 127.0.0.1:9000;
  223. fastcgi_index index.php;
  224. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  225. }
  226. }
  227. URL Rewrites no IIS7 (Windows hosts)
  228. ====================================
  229. O IIS7 não suporta nativamente os arquivos .htaccess. Embora haja add-ons que
  230. podem adicionar esse suporte, você também pode importar regras htaccess no IIS
  231. para usar as regras de reescritas nativas do CakePHP. Para fazer isso, siga
  232. estes passos:
  233. #. Use o `Microsift Web Plataform Installer` para instalar o URL
  234. Rewrite Module 2.0.
  235. #. Crie um novo arquivo dentro de sua pasta do CakePHP, chamado web.config.
  236. #. Usando o Notepad ou algum outro editor de XML, copie o seguinte código
  237. no seu novo arquivo web.config...
  238. ::
  239. <?xml version="1.0" encoding="UTF-8"?>
  240. <configuration>
  241. <system.webServer>
  242. <rewrite>
  243. <rules>
  244. <rule name="Imported Rule 1" stopProcessing="true">
  245. <match url="^(.*)$" ignoreCase="false" />
  246. <conditions logicalGrouping="MatchAll">
  247. <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  248. <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  249. </conditions>
  250. <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
  251. </rule>
  252. <rule name="Imported Rule 2" stopProcessing="true">
  253. <match url="^$" ignoreCase="false" />
  254. <action type="Rewrite" url="/" />
  255. </rule>
  256. <rule name="Imported Rule 3" stopProcessing="true">
  257. <match url="(.*)" ignoreCase="false" />
  258. <action type="Rewrite" url="/{R:1}" />
  259. </rule>
  260. <rule name="Imported Rule 4" stopProcessing="true">
  261. <match url="^(.*)$" ignoreCase="false" />
  262. <conditions logicalGrouping="MatchAll">
  263. <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
  264. <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  265. </conditions>
  266. <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
  267. </rule>
  268. </rules>
  269. </rewrite>
  270. </system.webServer>
  271. </configuration>
  272. Também é possível usar a funcionalidade de importação no modulo de reescrita
  273. de URL do IIS para importar regras diretamente dos arquivos .htaccess do
  274. CakePHP nas pastas /app/, e /app/webroot/ - embora algumas edições no IIS
  275. podem ser necessárias para fazê-los funcionar. Importando as regras desta
  276. maneira, o IIS irá automaticamente criar o arquivo web.config para você.
  277. Uma vez que o arquivo web.config é criado com o conjunto de regras de reescrita do IIS,
  278. links do CakePHP, css, js, e o redirecionamento devem funcionar corretamente.