Skip to content

Instantly share code, notes, and snippets.

@jeffersonsouza
Last active April 19, 2017 04:44
Show Gist options
  • Save jeffersonsouza/8068518 to your computer and use it in GitHub Desktop.
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
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