Tutorial Debian 8 x64 com ISPConfig e NginX: Instalação do Site

Neste artigo mostrarei como fazer o deploy (instalação e configuração) do website. Os exemplos serão apresentados para um site WordPress no Linux Debian 8 com painel de controle ISPConfig e servidor web NginX configurados anteriormente, mas pode-se adaptar para qualquer outra situação.

Existem muitas maneiras de se instalar ou migrar um site, mas pelas estatísticas dos leitores que me procuram aqui no Fator Binário somente algumas são as preferidas da galera. Escreverei sobre as que achei mais descomplicadas mesmo para iniciantes (se você tiver outras sugestões e caso queira compartilhar entre em contato ou escreva nos comentários).

Instalação do Site
  • Ao adicionar um espaço de site o ISPConfig por padrão criar um arquivo index.html. Antes de instalar os arquivos de um site novo ou copiá-los de outro servidor delete o arquivo /web/index.html para que o browser não o interprete como a página padrão do site.
1 Instalação de um novo site

Essa primeira opção é para quem decidir criar um espaço de site novo e iniciar um projeto, ou ainda para operadores avançados que farão a instalação/migração manualmente mas querem saber como adicionar um site ao painel somente.

Para usar o módulo de gerenciamento de sites no ISPConfig acesse: ISPConfig → Sites

1a ⇒ Adicione um novo site: Clique em “Add new website” e preencha conforme abaixo (note que a maioria dos campos não são obrigatórios, e se desejar usar o módulo Clientes sempre escolha para qual cliente o site pertence, mas isso é opcional):

[Aba Domain]

» Domínio: <– fatorbinario.com (substitua pelo seu domínio e NUNCA coloque o prefixo “www” neste campo)

» Auto SubDomínio: <– www. (pode-se ainda optar pelo catch all “*.” aqui mas na maioria dos casos isso é desnecessário. Lembre-se também de criar um registro Tipo A para o www na tabela DNS deste domínio)

» PHP: <– PHP-FPM (na nova versão do ISPConfig note que você DEVE selecionar uma opção neste campo pois ele é nulo por padrão. Caso queira poderá selecionar HHVM que usa o compilador JIT, mas faça isso por sua conta e risco)

[Aba Estatísticas]

» Tipo de Estatística Web: <– None (quando incluimos um novo espaço de site no ISPConfig automaticamente o Webalizer começa a coletar estatísticas, configure para não usar este recurso para o site)

[Aba Opções]

» NginX Directives: (em sites WordPress ou Magento é necessário adicionar diretivas personalizadas para que os permalinks (Links Permanentes com “Nome do Post”) funcionem corretamente). Desligaremos também os logs de acesso ao site pois os arquivos podem ficar muito grandes deixando-o lento:

* Observe que listei abaixo diferentes diretivas para os tipos de sites mais conhecidos, escolha somente a que representa o seu site.

#Desativando os logs para melhorar a performance
access_log off;
log_not_found off;
#Diretivas NginX para WORDPRESS
location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
} 
#Note a alteracao na diretiva location para o Magento. Se for usada a diretiva antiga uma URL aparecerá na caixa de pesquisa da loja dando a impressao de que a instalacao esta bugada.
#Para maiores informacoes veja o arquivo nginx.conf.example que esta incluido no download do proprio Magento

#Diretivas NginX para MAGENTO
location / {
    #try_files $uri $uri/ /index.php?q=$uri&$args;
    #Nas ultimas versoes do Magento esta diretiva foi alterada, use a linha abaixo
    try_files $uri $uri/ /index.php?$args;
}
location ~* \.php/ {
    rewrite ^(.*.php)/ $1 last;
}
#Diretivas NginX para JOOMLA
location / {
   try_files $uri $uri/ /index.php?$args;
}
#Diretivas NginX para OPENCART
location / {
   try_files $uri @opencart;
}
location @opencart {
   rewrite ^/(.+)$ /index.php?_route_=$1 last;
}
location /admin {
   index index.php;
}
location /image/data {
   autoindex on;
}
#Diretivas NginX para PRESTASHOP
location / {
   try_files $uri $uri/ /index.php?q=$uri&$args;

   rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2$3.jpg last;
   rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last;
   rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last;
   rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last;
   rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last;
   rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last;
   rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last;
   rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last;
   rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2$3.jpg last;
   rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last;
   rewrite ^/images_ie/?([^/]+)\.(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last;
}
#Diretivas NginX para SENDY da Amazon
#Sendy é a ferramenta de email marketing da Amazon
#As diretivas abaixo são para uma instalação em subdiretório (/sendy)
#Além destas diretivas ainda será necessário criar as tarefas no CRON para a ferramenta funcionar
location / {
   # try_files $uri $uri/ =404;
   index index.htm index.html index.php;
}

location /sendy {
   try_files $uri $uri/ $uri.php?$args;
}

location /sendy/l/ {
   rewrite ^/sendy/l/([a-zA-Z0-9/]+)$ /sendy/l.php?i=$1 last;
}

location /sendy/t/ {
   rewrite ^/sendy/t/([a-zA-Z0-9/]+)$ /sendy/t.php?i=$1 last;
}

location /sendy/w/ {
   rewrite ^/sendy/w/([a-zA-Z0-9/]+)$ /sendy/w.php?i=$1 last;
}

location /sendy/unsubscribe/ {
   rewrite ^/sendy/unsubscribe/(.*)$ /sendy/unsubscribe.php?i=$1 last;
}

location /sendy/subscribe/ {
   rewrite ^/sendy/subscribe/(.*)$ /sendy/subscribe.php?i=$1 last;
}

location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
   expires max;
   add_header Pragma public;
   add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
#Diretivas NginX para LARAVEL
#As regras abaixo são para uma instalação na pasta public dentro do site (substitua web1 pelo ID do site)

log_not_found off;

location / {
 root {DOCROOT}public;
 try_files $uri $uri/ /index.php?q=$uri&$args;
}

location @php {
 try_files $uri =404;
 root {DOCROOT}public;
 include /etc/nginx/fastcgi_params;
 fastcgi_pass unix:/var/lib/php5-fpm/web1.sock;
 #Para o tutorial de Debian 9 comentar a linha acima e usar esta abaixo
 #fastcgi_pass unix:/var/lib/php7.0-fpm/web1.sock;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_intercept_errors off;
}

» Após tudo configurado clique em Salvar

• Para criar sites de subdomínios usa-se este mesmo formulário que deverá ser preenchido com o prefixo em Domínio (exemplo: blog.fatorbinario.com), e no campo Auto-Subdomínio escolher “Não“.

• Para sites instalados em subdiretórios (exemplo: https://fatorbinario.com/blog) deve-se proceder adicionar o domínio principal em Sites e nas diretivas NginX acrescentar as linhas abaixo:

#Diretiva para permalinks de site instalado em subdiretório (adicionar este bloco logo abaixo do principal. Exemplo para sites WordPress em subdiretórios)
location /blog/ {
   try_files $uri $uri/ /blog/index.php?q=$uri&$args;
}

• O ISPConfig criará um diretório para o site em /var/www/nome_do_site e o subdiretório onde você deverá copiar/instalar os arquivos do site é /web. As duas maneiras mais conhecidas de se instalar os arquivos é via FTP ou SSH, neste exemplo mostrarei como fazer isso usando um usuário SSH em chroot (JailKit) baixando e descompactando o WordPress diretamente do repositório brasileiro.

1b ⇒ Crie um usuário Shell específico para o site: Como eu disse acima vamos adicionar um usuário em Jail e gerenciar os arquivos do site com ele para evitar problemas com permissões (pode-se usar o root e alterar as permissões manualmente, mas veremos isso em outro exemplo abaixo).

No ISPConfig acesse: Sites → Usuários de Shell → Adicionar novo usuário de shell

» Site: <– <selecione o site> (selecione para qual site o usuário shell será criado, isso fará com que todos os arquivos manipulados por este usuário fiquem com as permissões corretas)

» Nome do Usuário: <– usrsshwp (digite um nome sugestivo para o usuário do site como neste exemplo. Note que um prefixo será adicionado ao nome de usuário (para evitar que o sistema adicione um prefixo no ISPConfig acesse: Sistema → Interface → Main Config e delete os prefixos nos 5 primeiros campos daquele formulário))

» Senha: <– sgvKG9zQMRbR (digite uma senha segura como a do exemplo e redigite-a no próximo campo)

» Shell em Chroot: <– JailKit (se você não criar usuários shell de site em Jail então melhor nem usar essa opção, tente a próxima)

» Clique em Salvar

1c ⇒ Crie um banco de dados para o site:

No ISPConfig acesse: Sites → Database Users → Add New User

» Database User: <– usrdbwp (nome do usuário para o banco de dados, substitua por um de sua preferência)

» Database Password: <– sgvKG9zQMRbR (digite uma senha segura como a do exemplo e redigite-a no próximo campo)

Acesse: Sites → Banco de Dados → Add New Database

» Site: <– <selecione o site para qual irá adicionar o banco>

» Nome do Banco de Dados: <– dbsitewp (nome do banco de dados)

» Usuário do Banco de Dados: <– <selecione o usuário do BD que criamos acima>

* Em “Read Only Database” sempre deixar em branco

» Charset do Banco de Dados: <– <selecione a codificação do Banco de Dados, a mais usada é UTF8>

» Clique em Salvar

1d ⇒ Acesse o terminal SSH com o usuário em Jail: Pode-se usar o Putty. Digite os comandos abaixo para baixar e descompactar o WordPress, note que o site deverá ser instalado no diretório /web do usuário (o caminho de sistema completo é /var/www/seu_site/web)

usuario# cd /web

usuario# rm index.html; wget --no-check-certificate http://br.wordpress.org/latest-pt_BR.tar.gz; tar xzvf latest-pt_BR.tar.gz --strip-components=1; rm latest-pt_BR.tar.gz

1e ⇒ Acesse a URL do site pelo navegador e finalize a instalação do WordPress, note que por este método o banco de dados será configurado durante a instalação sendo desnecessário editar o arquivo wp-config.php para inserir as credenciais. Após clicar em “Vamos lá” preencha todos os campos com atenção ao “Servidor do banco de dados” que deverá ser localhost (preencha com as credenciais de banco de dados criadas no passo 1c). Ao prosseguir uma nova tela aparecerá com um botão de instalar, clique e preencha com as credenciais para o usuário administrador do WordPress.

*** De vez em quando o instalador do WordPress está bugado e não insere as credenciais do banco de dados no wp-config.php. Edite o arquivo via ftp ou ssh e coloque as informações que estão faltando incluindo as keys de SALT.

• Caso o domínio ainda não esteja propagado para o novo servidor então use o método alternativo apresentado neste link.

2 Migração de site usando plugin

Tenho aqui no site dois tutoriais ensinando como fazer backup e restaurar usando o UpdraftPlus. Este é o meu método preferido para sites de pequeno porte (até 500mb), pois facilita muito o trabalho.

2a ⇒ Crie um espaço de site e faça uma instalação nova de WordPress seguindo os passos do primeiro método acima

2b ⇒ Instale o plugin UpdraftPlus no site da hospedagem antiga. Clique em adicionar plugin no WordPress e procure por “UpdraftPlus”, o que nos interessa é o “UpdraftPlus Backup and Restoration” com mais de 600 mil downloads

Após ativar o plugin clique em “Configurações/Backups do UpdraftPlus”. Na tela da ferramenta clique em “Backup Agora” e confirme as próximas telas incluindo o banco de dados no backup

Serão gravados alguns arquivos compactados no diretório /wp-content/updraft. Copie o conjunto de backup para o seu desktop (ou se você for um operador avançado tente mover os arquivos para a raiz do site e recupere-os logado no servidor novo usando o comando wget, isso economizará tempo nas transferências)

2c ⇒ Instale o UpdraftPlus no WordPress novo, lembre-se que se o domínio não estiver propagado ainda use a dica de alterar o arquivo hosts do Windows/Mac

2d ⇒ Copie os arquivos para o diretório /wp-content/updraft do site no servidor novo. Pode-se fazer isso via upload do desktop ou usando wget como mencionei acima.

2e ⇒ Acesse o painel do UpdraftPlus e clique em “Restaurar“, ao lado do conjunto de backup que aparece clique novamente em “Restaurar“. Caso solicite outras opções ou confirmações siga o que está na tela.

* Importante: após finalizar a restauração provavelmente você terá que fazer login no WordPress novamente com as credenciais do site original. Depois de fazer login note uma mensagem do UpdraftPlus exibida no topo da página admin avisando para deletar os arquivos antigos, clique na mensagem e delete os arquivos (se não fizer isso as imagens do site não abrem corretamente)

3 Migração de site via SSH com o usuário root

Pelas minhas estatísticas este é o método mais utilizado pelos usuários experientes e curiosamente também pelos novatos. E o problema que mais acontece é com as permissões de arquivos exibindo erros diversos após a descompactação (Erro 404, 500, 503, etc)

3a ⇒ Backup: Se a hospedagem anterior estiver em um cPanel existe uma opção no painel para gerar o backup do site em arquivo compactado, se der escolha a cópia em .tar ou .gz. No painel existe também a opção de se fazer o dump do banco de dados.

• Caso tenha acesso SSH no servidor antigo pode-se fazer o backup dos arquivos com o comando (supondo que você esteja dentro do diretório do site):

root# tar czvf backupsite.tar.gz *

• E caso decida fazer o dump do banco de dados pelo phpMyAdmin faça login na ferramenta, selecione o Banco de Dados do site e clique na aba “Exportar“. Selecione exportação rápida e formato SQL. Ao clicar em Executar será solicitado o local onde salvar o dump, pode salvá-lo no seu desktop.

3b ⇒ Restauração: Crie um espaço e uma tabela para o site seguindo os passos do primeiro método acima, mas não precisa fazer download do WordPress nem instalá-lo, e também não precisa criar um usuário SSH para o site pois faremos com o root (e novamente falando, estranhamente este é o método mais usado)

• Para restaurar os arquivos faça upload no servidor novo do arquivo .tar.gz criado acima, e dentro do diretório /var/www/seu_site/web digite o comando para descompactá-lo:

root# tar xzvf backupsite.tar.gz

• Para restaurar o banco de dados, e assumindo que você já criou uma tabela nova seguindo o primeiro método, faça login no phpMyAdmin, selecione o Banco de Dados e clique em “Importar“. Siga as instruções da tela selecionando o arquivo de dump salvo anteriormente.

• E por último altere as permissões dos arquivos para que o site funcione corretamente. Mas antes verifique qual o dono e grupo dos arquivos para o site, o ISPConfig cria um dono e grupo diferentes para cada site. Liste o diretório /var/www/seu_site/web e veja qual o dono e grupo da pasta (se este é o seu primeiro site no ISPConfig deverá estar como web1:client0)

Supondo que seja web1 e client0, dentro do diretório /web digite este comando:

root# chown -R web1:client0 *

Caso tenha feito alguma coisa errada o problema mais comum apresentado, mesmo conseguindo fazer login no wp-admin, é: ao tentar deletar ou adicionar plugins o WordPress solicitar as credenciais de FTP

4 Migração de site via SSH com usuário limitado em Jail (chroot)

Este método é bem simples e pode ser usado quando você tem acesso aos dois servidores via SSH. Faremos login SSH com um usuário limitado, assim o risco de danificar o servidor é baixo.

4a ⇒ Execute os passos do primeiro método acima (1a, 1b e 1c), mas no passo 1d não há necessidade de baixar o WordPress pois iremos copiá-lo da hospedagem antiga.

4b ⇒ Lembre-se de acessar o terminal com usuário em Jail limitado. Dentro do diretório do site (em jail o diretório é /web) digite o comando rsync para copiar todos os arquivos da hospedagem antiga para o novo servidor:

> rsync -avz -e ssh usuario_hospedagem_antiga@IP_DO_SERVIDOR:/web/ .

# Substitua usuario_hospedagem_antiga pelo seu usuário SSH da hospedagem onde o site está, e troque IP_DO_SERVIDOR pelo IP da hospedagem antiga.

# No exemplo acima eu presumi que o seu site está no diretório "/web" da hospedagem antiga, troque pelo diretório correto, ou em alguns casos ele estará diretamente na raiz.

# Quando digitar o comando pela primeira vez será solicitado a adição da chave criptográfica, esponda "yes" e em seguida digite a senha para o usuário shell na hospedagem antiga.

# Note que usando o rsync com um usuário limitado próprio do site as permissões e dono/grupo dos arquivos ficam todas certas.


* Observação: Em algumas empresas de hospedagem como por exemplo a BlueHost o comando rsync talvez não seja encontrado, então use o SCP como alternativa da seguinte maneira:

> scp -r -p usuario_hospedagem_antiga@IP_DO_SERVIDOR:/home/nome_do_usuario/public_html/* .

 4c ⇒ Migrando o Banco de Dados: Execute o dump e o restore do banco de dados do site pelo phpMyAdmin.

Na hospedagem antiga selecione o banco de dados do site e clique na aba “Exportar” salvando o dump SQL no seu desktop.

No phpMyAdmin do servidor novo selecione o banco de dados criado no passo 1C e clique na aba “Importar” selecionando o dump SQL salvo no desktop.

 4d ⇒ Altere o arquivo wp-config.php do site (você copiou o arquivo com o rsync mas no servidor novo o nome do banco de dados e credenciais provavelmente são diferentes).

É só isso. Recentemente migrei o Fator Binário para o servidor Debian 8 usando este método que além de ser muito rápido é o mais seguro.

• O terceiro método com usuário root é o mais “perigoso” para novatos pois um único erro e poderá ter que refazer o servidor todo.

• Existem outros métodos alternativos como é o caso do ManageWP, ferramenta paga mas que permite migrar ou clonar sites inteiros com somente alguns cliques.

Índice do Tutorial:

Gerenciamento em infraestrutura de Servidores Cloud VPS e Dedicados. Planos mensais acessíveis e consultoria diferenciada para agências de marketing. Envie um email para [email protected] e solicite uma análise gratuita!