Last active
April 19, 2017 04:44
-
-
Save jeffersonsouza/8068518 to your computer and use it in GitHub Desktop.
Instalação do NGINX + PHP FPM + Percona MySQL + Varnish no Ubuntu 12.04Tutorial retirado do site:http://www.ubuntubrsc.com/instalando-nginx-php-fpm-apc-varnish-mysql-ubuntu-server-12-04.html
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
A versão do Nginx disponível nos repositórios oficiais do Ubuntu 12.04 é a 1.1.19, mas queremos a usar a versão estável atual, então vamos adicionar o repositório PPA oficial do Nginx ao nosso VPS. Para isso, digite o seguinte comando no terminal: | |
nano /etc/apt/sources.list | |
Com o arquivo de repositórios aberto, navegue até o final do arquivo com as setas de direção do seu teclado e adicione a linha abaixo: | |
deb http://ppa.launchpad.net/nginx/stable/ubuntu precise main | |
Adicione o repositório PPA do Nginx no final do arquivo sources.list | |
Feito isso, aperte <Ctrl + O> para salvar e <Ctrl + X> para fechar o arquivo e voltar ao terminal. Agora ainda com o terminal aberto, vamos adicionar a chave de autentificação do PPA, atualizar a lista de repositórios e atualizar o sistema todo. Copie e cole os comandos abaixo, lembrando de dar enter ao final de cada linha: | |
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C | |
sudo apt-get update && sudo apt-get upgrade | |
Agora que nosso sistema está atualizado e o repositório oficial do Nginx está adicionado a ele, está na hora de instalarmos este maravilhoso servidor web. Para isso, digite o seguinte comando no terminal: | |
sudo apt-get install nginx | |
Pronto, nosso servidor web está instalado! Vamos deixar para iniciá-lo depois, quando tivermos tudo pronto. Vamos a instalação do PHP-FPM e do APC agora? (: | |
-------------------------------------------------------------------------------------------------------------------------------- | |
Instalando PHP-FPM e APC no Ubuntu Server 12.04 | |
Neste passo vamos instalar o PHP-FPM para cuidar do PHP do WordPress, phpBB ou qualquer que seja o script que você esteja usando. | |
O PHP-FPM é uma alternativa ao PHP FastCGI com algumas funcionalidades adicionais voltadas a sites com grandes números de acessos, o que é exatamente o que estamos querendo aqui. | |
Combine o Nginx com o PHP-FPM e o PHP-APC e tenha um site ao estilo The Flash (: | |
Também vamos instalar uma extensão do PHP que irá nos ajudar muito, o PHP-APC. Resumindo mal e porcamente, o APC é um cache de op-code que aumenta significativamente o desempenho do seu site ou fórum. Vamos lá? | |
Assumindo que você não fechou o terminal ainda, copie e cole os comandos abaixo: | |
sudo apt-get install php5-fpm php5-suhosin php-apc php5-gd php5-imagick php5-curl php5-cli php5-tidy php5-xsl php5-intl php5-mcrypt php5-memcached php5-xdebug | |
Aguarde a instalação terminar e voilà! Temos o PHP-FPM e o APC instalados no sistema. Hora de instalar o MySQL Server (: | |
-------------------------------------------------------------------------------------------------------------------------------- | |
Instalando o MySQL Server no Ubuntu Server 12.04 | |
Como o foco deste tutorial é, principalmente, o WordPress, vamos fazer a instalação do MySQL como banco de dados padrão. Mas ao invés de usarmos o servidor MySQL da Oracle, usaremos um fork criado pela Percona, que mantém compatibilidade total com o da Oracle mas oferece melhor performance e uso de recursos. | |
O Percona’s MySQL Server não está disponível nos repositórios padrões do Ubuntu Server 12.04, portanto vamos adicionar os repositórios da própria Percona. Para isso, ainda com o terminal aberto, copie e cole o seguinte comando: | |
gpg --keyserver hkp://keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A | |
gpg -a --export CD2EFD2A | sudo apt-key add - | |
nano /etc/apt/sources.list | |
Com as chaves instalados e o arquivo de repositórios aberto, navegue até o final do arquivo com as setas de direção do seu teclado e adicione a linha abaixo logo após a linha do Nginx: | |
deb http://repo.percona.com/apt precise main | |
Salve o arquivo e volte ao terminal. Ainda com o terminal aberto, vamos adicionar atualizar a lista de repositórios, atualizar o sistema todo e fazer a instalação do servidor MySQL. Copie e cole os comandos abaixo, lembrando de dar enter no: | |
sudo apt-get update && sudo apt-get install percona-server-server-5.5 php5-mysql | |
Preste atenção na instalação pois será pedido para você digitar uma senha para o usuário root do banco de dados. Use uma senha grande e segura, e anote-a em algum lugar onde você pode lembrar-se. Recomendo usar o KeePassX, um gerenciador de senhas muito eficiente e simples de usar. | |
-------------------------------------------------------------------------------------------------------------------------------- | |
Instalando o Varnish no Ubuntu Server 12.04 | |
O Varnish é um acelerador de requisições HTTP que deixa seu site insanamente mais rápido, ainda mais quando em conjunto com o Nginx, PHP-FPM e APC. Ele é basicamente um proxy HTTP reverso que fica entre o usuário e o servidor web, fazendo uma análise dos conteúdos mais acessados e armazenando-os em cache na memória RAM. | |
Red Bull pode até te dar asas, mas é o Varnish Cache que fará seu blog voar | |
Costumo dizer que o Varnish é como os famosos tanks dos MMORPGs: fica na linha de frente levando porrada e deixando as coisas mais fáceis para quem está atrás poder fazer seu serviço. Além de acelerar seu website, o Varnish também pode ser uma bela linha de segurança contra ataques DDoS, então o considero essencial em qualquer setup. | |
A instalação no Ubuntu Server 12.04 é bem simples, visto que ele está disponível nos repositórios oficiais. Ainda com o terminal aberto, copie e cole os comandos abaixo: | |
sudo apt-get install varnish | |
E agora… bem, é só isso mesmo. O Varnish está instalado e pronto para ser configurado (: | |
-------------------------------------------------------------------------------------------------------------------------------- | |
Configurando e fazendo os serviços se comunicarem | |
Agora que temos todos os serviços necessários instalados, está na hora de configura-los de forma que eles se comuniquem e funcionem da forma mais otimizada possível. Vamos começar pelo PHP-FPM, já que é a configuração mais rápida. | |
Com o terminal aberto, copie e cole o comando abaixo: | |
nano /etc/php5/fpm/pool.d/www.conf | |
Usando as setas direcionais do seu teclado, procure pela linha listen = 127.0.0.1:9000 e coloque um # na frente dela. Abaixo dessa linha cole o seguinte: | |
listen = /var/run/php5-fpm.sock | |
Configure o PHP-FPM de forma que o PHP seja executado via socket unix | |
Dessa forma estamos dizendo ao PHP-FPM que ele deve executar o PHP como um socket unix. Pode não fazer sentido para você, mas como estamos falando de um único servidor, essa é a forma mais otimizada de se trabalhar. | |
Procure também a linha #listen.owner = www-data e tire o # da frente dela. Faça a mesma coisa com as duas linhas abaixo dessa, ficando assim: | |
listen.owner = www-data | |
listen.group = www-data | |
listen.mode = 0666 | |
Se você criou outro usuário, pode usa-lo no lugar do www-data também, mas para este tutorial vamos ficar com o usuário padrão do PHP-FPM mesmo. | |
Feito isso, o PHP-FPM está configurado e pronto para a ação. Vamos ao Nginx? Copie e cole os comandos abaixo no terminal para editar o arquivo padrão de configurações de sites do servidor web: | |
nano /etc/nginx/sites-available/default | |
Edite o arquivo usando as setas direcionais e deixo-o como mostrado abaixo: | |
server { | |
listen 8080; | |
server_name www.seusite.com seusite.com; | |
root /var/www/; | |
index index.php index.html index.htm; | |
error_log /var/log/nginx/logsdosite.com-error_log; | |
location / { | |
try_files $uri $uri/ /index.php; | |
} | |
location = /favicon.ico { | |
log_not_found off; | |
access_log off; | |
} | |
location = /robots.txt { | |
allow all; | |
log_not_found off; | |
access_log off; | |
} | |
location ~ /. { | |
deny all; | |
access_log off; | |
log_not_found off; | |
} | |
location ~* ^/wp-content/uploads/.*.php$ { | |
deny all; | |
access_log off; | |
log_not_found off; | |
} | |
location ~ .php$ { | |
try_files $uri =404; | |
include /etc/nginx/fastcgi_params; | |
fastcgi_index index.php; | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
if (-f $request_filename) { | |
fastcgi_pass unix:/var/run/php5-fpm.sock; | |
} | |
} | |
} | |
Mude “www.seusite.com” e “seusite.com” para os links do seu site e tudo deverá funcionar corretamente agora. Agora que temos o Nginx configurado e rodando, hora de configurar o PHP-APC :) | |
Copie e cole os comandos abaixo: | |
nano /etc/php5/fpm/php.ini | |
Agora com o arquivo aberto, adicione as linhas abaixo no local que achar melhor: | |
[APC] | |
extension=apc.so | |
apc.enabled = 1 | |
apc.cache_by_default = 1 | |
apc.stat = 1 | |
apc.shm_segments = 1 | |
apc.shm_size = 64 | |
apc.write_lock = 1 | |
apc.slam_defense = 0 | |
apc.ttl = 7200 | |
apc.user_ttl = 7200 | |
Com o APC configurado temos quase tudo pronto, faltando apenas o Varnish. A configuração do Varnish é um pouco mais chata, então neste tutorial vou focar apenas em uma configuração para o WordPress, deixando outros scripts em aberto. | |
Primeiramente temos que editar o arquivo principal de configuração do Varnish, então digite o comando abaixo no terminal: | |
nano /etc/default/varnish | |
Primeiramente mude a linha “START” de “no” para “yes”, sem as aspas. Agora procure pela linha “Alternative 2, Configuration with VCL” e deixa-a como mostrado abaixo: | |
DAEMON_OPTS="-a :80 | |
-T localhost:6082 | |
-f /etc/varnish/default.vcl | |
-S /etc/varnish/secret | |
-p thread_pool_add_delay=2 | |
-p thread_pools=4 | |
-p thread_pool_min=200 | |
-p thread_pool_max=4000 | |
-p cli_timeout=25 | |
-p session_linger=100 | |
-s malloc,512M" | |
Com essas configurações feitas, vamos as configurações específicas para o WordPress. Digite o comando abaixo no terminal: | |
nano /etc/varnish/default.vlc | |
Agora deixe-o como mostrado no código abaixo, que foi retirado deste GitHub e editado minimamente: | |
backend default { | |
.host = "127.0.0.1"; | |
.port = "8080"; | |
.first_byte_timeout = 300s; | |
} | |
acl purge { | |
# Only localhost can purge my cache | |
"127.0.0.1"; | |
"localhost"; | |
} | |
sub vcl_recv { | |
if ((req.http.host ~ "(ubuntubrsc.com)")) { | |
set req.backend = default; | |
} else { | |
return (pass); | |
} | |
if (req.request == "PURGE") { | |
if (!client.ip ~ purge) { | |
error 405 "This IP is not allowed to send PURGE requests."; | |
} | |
return (lookup); | |
} | |
if (req.request == "POST") { | |
return (pass); | |
} | |
if (req.url ~ "/feed") { | |
return (pass); | |
} | |
if (req.url ~ "/wp-(login|admin)") { | |
return (pass); | |
} | |
set req.http.Cookie = regsuball(req.http.Cookie, "has_js=[^;]+(; )?", ""); | |
set req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", ""); | |
set req.http.Cookie = regsuball(req.http.Cookie, "__qc.=[^;]+(; )?", ""); | |
set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-1=[^;]+(; )?", ""); | |
set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-time-1=[^;]+(; )?", ""); | |
set req.http.Cookie = regsuball(req.http.Cookie, "wordpress_test_cookie=[^;]+(; )?", ""); | |
if (req.http.cookie ~ "^ *$") { | |
unset req.http.cookie; | |
} | |
if (req.url ~ ".(css|js|png|gif|jp(e)?g|swf|ico|ttf|otf)") { | |
unset req.http.cookie; | |
} | |
if (req.http.Accept-Encoding) { | |
if (req.url ~ ".(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") { | |
remove req.http.Accept-Encoding; | |
} elsif (req.http.Accept-Encoding ~ "gzip") { | |
set req.http.Accept-Encoding = "gzip"; | |
} elsif (req.http.Accept-Encoding ~ "deflate") { | |
set req.http.Accept-Encoding = "deflate"; | |
} else { | |
remove req.http.Accept-Encoding; | |
} | |
} | |
if (req.http.Cookie ~ "wordpress_" || req.http.Cookie ~ "comment_") { | |
return (pass); | |
} | |
if (!req.http.cookie) { | |
unset req.http.cookie; | |
} | |
if (req.http.Authorization || req.http.Cookie) { | |
return (pass); | |
} | |
return (lookup); | |
} | |
sub vcl_pipe { | |
return (pipe); | |
} | |
sub vcl_pass { | |
return (pass); | |
} | |
sub vcl_hash { | |
hash_data(req.url); | |
if (req.http.host) { | |
hash_data(req.http.host); | |
} else { | |
hash_data(server.ip); | |
} | |
if (req.http.Accept-Encoding) { | |
hash_data(req.http.Accept-Encoding); | |
} | |
return (hash); | |
} | |
sub vcl_hit { | |
if (req.request == "PURGE") { | |
purge; | |
error 200 "Purged."; | |
} | |
return (deliver); | |
} | |
sub vcl_miss { | |
if (req.request == "PURGE") { | |
purge; | |
error 200 "Purged."; | |
} | |
return (fetch); | |
} | |
sub vcl_fetch { | |
if (req.url ~ ".(css|js|png|gif|jp(e)?g|swf|ico|ttf|otf)") { | |
unset beresp.http.cookie; | |
} | |
set beresp.ttl = 1800s; | |
return (deliver); | |
} | |
sub vcl_deliver { | |
if (obj.hits > 0) { | |
set resp.http.X-Cache = "cached"; | |
} else { | |
set resp.http.x-Cache = "uncached"; | |
} | |
unset resp.http.X-Powered-By; | |
unset resp.http.Server; | |
return (deliver); | |
} | |
sub vcl_init { | |
return (ok); | |
} | |
sub vcl_fini { | |
return (ok); | |
} | |
Com o Varnish devidamente configurado, nosso servidor está pronto para ser testado! Vamos iniciar todos os serviços com o comando abaixo e testar para ver se tudo está funcionando corretamente: | |
sudo /etc/init.d/php5-fpm start | |
sudo /etc/init.d/nginx start | |
sudo /etc/init.d/mysql start | |
sudo /etc/init.d/varnish start | |
Agora basta acessar o IP do seu VPS e tudo deve estar funcionando corretamente (: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment