Ambiente de Hospedagem Compartilhada

Ambientes de hospedagem compartilhada geralmente são muito limitados com relação a configuração e estrutura de diretórios. Ainda assim, na maioria dos casos, você pode executar Yii 2.0 em um ambiente de hospedagem compartilhada com poucos ajustes.

Implantação do Template Básico

Uma vez que em um ambiente de hospedagem compartilhada geralmente não há apenas um webroot, use o template básico, se puder. Consulte o Capítulo Instalando o Yii e instale o modelo de projeto básico localmente. Depois de ter sua aplicação funcionando localmente, vamos fazer alguns ajustes para que possa ser hospedado em seu servidor de hospedagem compartilhada.

Renomear webroot

Ao conectar no seu servidor compartilhado através de FTP ou outros meios, você provavelmente verá algo como a seguir:

config
logs
www

No exemplo acima, www é seu diretório raíz do servidor web e pode possuir nomes diferente. Nomes comuns são: www, htdocs, e public_html.

O diretório raíz de nosso template básico é chamado web. Antes de enviar a aplicação para seu servidor renomeie seu diretório raiz local de acordo com o do seu servidor, ou seja, de web para www, public_html ou qualquer que seja o nome do seu diretório raíz na hospedagem.

Diretório raiz FTP precisa ser gravável

Se você possui permissão de escrita no diretório raíz, (onde estão config, logs e www), então faça upload de assets, commands etc.

Recursos extras para servidor web

Se o seu servidor web é Apache você precisará adicionar um arquivo .htaccess com o seguinte conteúdo em web (ou public_html ou qualquer outro) (onde o arquivo index.php está localizado):

Options +FollowSymLinks
IndexIgnore */*

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

Se o seu servidor web é Nginx, você não precisa de nenhuma configuração extra.

Verifique os requisitos

Para executar Yii, o seu servidor web deve atender alguns requisitos. O requisito mínimo é PHP 5.4. Para verificar os requisitos copie o arquivo requirements.php da raíz da aplicação para o diretório raíz do servidor web e execute-o através do navegador usando o endereço http://example.com/requirements.php. Não se esqueça de apagar o arquivo depois.

Implantação do Template Avançado

A implantação do Template Avançado para a hospedagem compartilhada é um pouco mais complicada do que o Template Básico, porque ele tem duas webroots, que servidores web da hospedagem compartilhada não suportam. Vamos precisar de ajustar a estrutura de diretórios.

Mova os scripts de entrada para única raíz

Primeiro de tudo, precisamos de um diretório raíz. Crie um novo diretório e nomeie-o para corresponder à raíz de sua hospedagem, conforme descrito no Renomear webroot, por exemplo www ou public_html ou semelhante. Em seguida, crie a seguinte estrutura onde www é o diretório raíz de sua hospedagem que você acabou de criar:

www
    admin
backend
common
console
environments
frontend
...

www será nosso diretório frontend, então mova o conteúdo de frontend/web para ele. Mova o conteúdo de backend/web para www/admin. Em ambos os casos você precisará ajustar os caminhos em index.php and index-test.php.

Sessões e cookies separados

Originalmente, o backend e frontend destinam-se a ser executado em diferentes domínios. Quando movemos tudo para o mesmo domínio, tanto frontend quanto backend estarão partilhando os mesmos cookies, criando um problema. Para corrigi-lo, ajuste sua configuração backend backend/config/main.php da seguinte forma:

'components' => [
    'request' => [
        'csrfParam' => '_backendCSRF',
        'csrfCookie' => [
            'httpOnly' => true,
            'path' => '/admin',
        ],
    ],
    'user' => [
        'identityCookie' => [
            'name' => '_backendIdentity',
            'path' => '/admin',
            'httpOnly' => true,
        ],
    ],
    'session' => [
        'name' => 'BACKENDSESSID',
        'cookieParams' => [
            'path' => '/admin',
        ],
    ],
],