Differences

This shows you the differences between two versions of the page.

Link to this comparison view

instalacao_e_configuracao_do_nginx_com_php-fpm_e_mysql_no_openbsd_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Instalação e Configuração do Nginx com PHP-fpm + MySQL + OpenBSD ======
  
 +
 +E ai galera, aqui eu vou abordar a instalação e configuração do Nginx com suporte ao PHP utilizando php-fpm e adicionando o suporte do MySQL ao php no OpenBSD.
 +
 +
 +Vamos setar o endereço do nosso repositório
 +<sxh bash>
 +export PKG_PATH=ftp://​openbsd.locaweb.com.br/​pub/​OpenBSD/​5.1/​packages/​`machine -a`/
 +</​sxh>​
 +
 +
 +Agora vamos mandar instalar as bibliotecas do PHP e o MySQL e o Nginx
 +<sxh bash>
 +pkg_add -v php-fpm php-mysql-5.3.10 mysql-server
 +</​sxh>​
 +
 +Agora vamos acertar o link da bibliotecas do PHP-MySQL
 +<sxh bash>
 +ln -fs /​etc/​php-5.3.sample/​mysql.ini ​        /​etc/​php-5.3/​mysql.ini
 +</​sxh>​
 +
 +Agora vamos mandar instalar os bancos padrões do MySQL
 +<sxh bash>
 +/​usr/​local/​bin/​mysql_install_db
 +</​sxh>​
 +
 +Agora vamos mandar iniciar o MySQL
 +<sxh bash>
 +/​etc/​rc.d/​mysqld start
 +</​sxh>​
 +
 +Agora vamos setar uma senha para o root do MySQL
 +<sxh bash>
 +/​usr/​local/​bin/​mysqladmin -u root password '​senha'​
 +</​sxh>​
 +
 +Agora vamos mandar instalar o Nginx
 +<sxh bash>
 +pkg_add -v nginx-1.0.11
 +</​sxh>​
 +
 +Agora vamos acertar a configuração do php-fpm.conf
 +<sxh dns>
 +vim  /​etc/​php-fpm.conf
 +[...]
 +;A linha abaixo precisamos comentar pois o nginx por padrão não trabalha em chroot
 +;chroot = /var/www
 +;Precisamos alterar o usuário e o grupo que vai executar o php-fpm
 +user = _nginx
 +group = _nginx
 +;as opções abaixo são para melhorar a performace do php com Nginx
 +pm.max_children = 25
 +pm.start_servers = 4
 +pm.min_spare_servers = 2
 +pm.max_spare_servers = 10
 +pm.max_requests = 500
 +request_terminate_timeout = 30s
 +</​sxh>​
 +
 +Agora vamos mandar reiniciar o php-fpm
 +<sxh bash>
 +/​etc/​rc.d/​php_fpm restart
 +</​sxh>​
 +
 +Agora vamos fazer um backup do arquivo de configuração do nginx
 +<sxh bash>
 +cp /​etc/​nginx/​nginx.conf /​etc/​nginx/​nginx.conf.bkp
 +</​sxh>​
 +
 +Agora vamos deixar o arquivo como abaixo
 +<sxh nginx>
 +vim /​etc/​nginx/​nginx.conf
 +#/​etc/​nginx/​nginx.conf
 +user _nginx;
 +
 +worker_processes 4;
 +
 +events {
 +        worker_connections 768;
 +        # multi_accept on;
 +}
 +
 +http {
 +
 +        ##
 +        # Basic Settings
 +        ##
 +
 +        sendfile on;
 +        tcp_nopush on;
 +        tcp_nodelay on;
 +        keepalive_timeout 65;
 +        types_hash_max_size 2048;
 +        client_max_body_size 20M;
 +        client_body_buffer_size 128k;
 +        server_tokens off;
 +
 +        # server_names_hash_bucket_size 64;
 +        # server_name_in_redirect off;
 +
 +        include /​etc/​nginx/​mime.types;​
 +        default_type application/​octet-stream;​
 +
 +        ##
 +        # Logging Settings
 +        ##
 +
 +        access_log /​var/​log/​nginx/​access.log;​
 +        error_log /​var/​log/​nginx/​error.log;​
 +
 +        ##
 +        # Gzip Settings
 +        ##
 +
 +        gzip on;
 +        gzip_disable "​msie6";​
 +
 +        gzip_vary on;
 +        gzip_proxied any;
 +        gzip_comp_level 6;
 +        gzip_buffers 16 8k;
 +        gzip_http_version 1.1;
 +        gzip_types text/plain text/css application/​json application/​x-javascript text/xml application/​xml application/​xml+rss text/​javascript;​
 +
 +
 +        ##
 +        # Virtual Host Configs
 +        ##
 +        include /​etc/​nginx/​sites-enabled/​*;​
 +}
 +</​sxh>​
 +
 +Agora vamos criar dois diretórios para deixarmos mais organizada a configuração do Nginx
 +<sxh bash>
 +mkdir -p /​etc/​nginx/​sites-enabled/​
 +mkdir -p /​etc/​nginx/​sites-available
 +</​sxh>​
 +
 +Agora vamos criar um VirtualHost ​
 +<sxh nginx>
 +vim /​etc/​nginx/​sites-available/​www.douglasqsantos.com.br
 +server {
 +                #Qual porta o Nginx vai escutar ​
 +                listen 80;
 +                #Name Server ​
 +                server_name douglasqsantos.com.br www.douglasqsantos.com.br;​
 +                #Controle dos logs
 +                access_log /​var/​log/​nginx/​www.douglasqsantos.com.br.access_log;​
 +                error_log /​var/​log/​nginx/​www.douglasqsantos.com.br.error_log;​
 +                #Document Root do site
 +                root /​var/​www/​www.douglasqsantos.com.br;​
 +                #Arquivos que vão ser utilizamos como indexes
 +                index index.php index.htm index.html;
 +                #Em caso de encontrar arquivos php como eles devem ser tratados
 +                location ~ .php$ {
 +                  fastcgi_pass ​  ​127.0.0.1:​9000;​
 +                  fastcgi_index ​ index.php;
 +                  fastcgi_param ​ SCRIPT_FILENAME /​var/​www/​www.douglasqsantos.com.br$fastcgi_script_name;​
 +                  include fastcgi_params;​
 +                }
 +       }
 +</​sxh>​
 +
 +
 +Agora precisamos criar a estrutura de diretórios para o nosso site
 +<sxh bash>
 +mkdir -p /​var/​www/​www.douglasqsantos.com.br
 +</​sxh>​
 +
 +Agora precisamos acertar as permissões do diretório
 +<sxh bash>
 +chown -R _nginx:​_nginx /​var/​www/​www.douglasqsantos.com.br
 +</​sxh>​
 +
 +Agora vamos criar um arquivo para testarmos o php
 +<sxh bash>
 +echo "<?​php phpinfo(); ?>" > /​var/​www/​www.douglasqsantos.com.br/​index.php
 +</​sxh>​
 +
 +Agora vamos criar um arquivo para testarmos o php com o MySQL
 +<sxh php>
 +vim /​var/​www/​www.douglasqsantos.com.br/​mysql.php
 +<?php
 +$link = mysql_connect('​localhost',​ '​root',​ '​senha'​);​
 +if (!$link) {
 +    die('​Could not connect: ' . mysql_error());​
 +}
 +echo '​Connected successfully';​
 +mysql_close($link);​
 +?>
 +</​sxh>​
 +
 +Agora vamos ativar o nosso VirtualHost
 +<sxh bash>
 +ln -sf /​etc/​nginx/​sites-available/​www.douglasqsantos.com.br /​etc/​nginx/​sites-enabled/​www.douglasqsantos.com.br
 +</​sxh>​
 +
 +Agora vamos reiniciar o Nginx para testar o php
 +<sxh bash>
 +/​etc/​rc.d/​nginx restart
 +</​sxh>​
 +
 +Agora já podemos testar o PHP http://​www.douglasqsantos.com.br/​ ou http://​ip_servidor/​ caso não tenha configurado o DNS
 +
 +Agora já podemos testar o PHP com MySQL http://​www.douglasqsantos.com.br/​mysql.php ou http://​ip_servidor/​mysql.php caso não tenha configurado o DNS
 +
 +Agora vamos ver como habilitamos o https
 +
 +Vamos criar o diretório para armazenar os nossos certificados
 +<sxh bash>
 +mkdir /​etc/​nginx/​ssl
 +</​sxh>​
 +
 +Agora vamos criar todas as chaves neste diretório
 +<sxh bash>
 +cd /​etc/​nginx/​ssl
 +</​sxh>​
 +
 +Gerando a key
 +<sxh bash>
 +openssl genrsa -des3 -out server.key 1024
 +Generating RSA private key, 1024 bit long modulus
 +....................++++++
 +...........++++++
 +e is 65537 (0x10001)
 +Enter pass phrase for server.key: senha
 +Verifying - Enter pass phrase for server.key: senha
 +</​sxh>​
 +
 +Vamos gerar agora a requisição de assinatura para o certificado
 +<sxh bash>
 +openssl req -new -key server.key -out server.csr
 +Enter pass phrase for server.key: senha
 +You are about to be asked to enter information that will be incorporated
 +into your certificate request.
 +What you are about to enter is what is called a Distinguished Name or a DN.
 +There are quite a few fields but you can leave some blank
 +For some fields there will be a default value,
 +If you enter '​.',​ the field will be left blank.
 +-----
 +Country Name (2 letter code) [AU]:BR
 +State or Province Name (full name) [Some-State]:​Parana
 +Locality Name (eg, city) []:Curitiba
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:​Douglas
 +Organizational Unit Name (eg, section) []:Douglas
 +Common Name (eg, YOUR name) []:​www.douglasqsantos.com.br
 +Email Address []:​douglas.q.santos@gmail.com
 +
 +Please enter the following '​extra'​ attributes
 +to be sent with your certificate request
 +A challenge password []:
 +An optional company name []:Douglas
 +</​sxh>​
 +
 +Agora vamos auto assinar o nosso certificado
 +<sxh bash>
 +openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
 +Signature ok
 +subject=/​C=BR/​ST=Parana/​L=Curitiba/​O=Douglas/​OU=Douglas/​CN=www.douglasqsantos.com.br/​emailAddress=douglas.q.santos@gmail.com
 +Getting Private key
 +Enter pass phrase for server.key: senha
 +</​sxh>​
 +
 +Agora vamos acertar as permissões das chaves
 +<sxh bash>
 +chmod 0400 server.*
 +cp server.key server.key.orig
 +</​sxh>​
 +
 +Agora vamos tirar a senha do certificado assinado para que o apache não fique pedindo senha a cada vez que for inicializar
 +<sxh bash>
 +openssl rsa -in server.key.orig -out server.key
 +Enter pass phrase for server.key.orig:​ senha
 +writing RSA key
 +</​sxh>​
 +
 +Vamos acertar as permissões de todas as chaves ​
 +<sxh bash>
 +chmod 0400 /​etc/​nginx/​ssl/​* ​
 +</​sxh>​
 +
 +Agora vamos ajustar o nosso virtualhost
 +<sxh nginx>
 +vim /​etc/​nginx/​sites-available/​www.douglasqsantos.com.br
 +server {
 +                #Qual porta o Nginx vai escutar ​
 +                listen 80;
 +                #Name Server ​
 +                server_name douglasqsantos.com.br www.douglasqsantos.com.br;​
 +                #Controle dos logs
 +                access_log /​var/​log/​nginx/​www.douglasqsantos.com.br.access_log;​
 +                error_log /​var/​log/​nginx/​www.douglasqsantos.com.br.error_log;​
 +                #Document Root do site
 +                root /​var/​www/​www.douglasqsantos.com.br;​
 +                #Arquivos que vão ser utilizamos como indexes
 +                index index.php index.htm index.html;
 +                #Em caso de encontrar arquivos php como eles devem ser tratados
 +                location ~ .php$ {
 +                  fastcgi_pass ​  ​127.0.0.1:​9000;​
 +                  fastcgi_index ​ index.php;
 +                  fastcgi_param ​ SCRIPT_FILENAME /​var/​www/​www.douglasqsantos.com.br$fastcgi_script_name;​
 +                  include fastcgi_params;​
 +                }
 +       }
 + 
 +server {
 +                #Qual porta o Nginx vai escutar ​
 +                listen 443;
 +                #​Habilitando o ssl
 +                ssl on;
 +                #Definindo a localização dos certificados
 +                ssl_certificate /​etc/​nginx/​ssl/​server.crt;​
 +                ssl_certificate_key /​etc/​nginx/​ssl/​server.key;​
 +                #Name Server ​
 +                server_name douglasqsantos.com.br www.douglasqsantos.com.br;​
 +                #Controle dos logs
 +                access_log /​var/​log/​nginx/​www.douglasqsantos.com.br-ssl.access_log;​
 +                error_log /​var/​log/​nginx/​www.douglasqsantos.com.br-ssl.error_log;​
 +                #Document Root do site
 +                root /​var/​www/​www.douglasqsantos.com.br;​
 +                #Arquivos que vão ser utilizamos como indexes
 +                index index.php index.htm index.html;
 +                #Em caso de encontrar arquivos php como eles devem ser tratados
 +                location ~ .php$ {
 +                  fastcgi_pass ​  ​127.0.0.1:​9000;​
 +                  fastcgi_index ​ index.php;
 +                  fastcgi_param ​ SCRIPT_FILENAME /​var/​www/​www.douglasqsantos.com.br$fastcgi_script_name;​
 +                  include fastcgi_params;​
 +                }
 +       }
 +</​sxh>​
 +
 +Agora precisamos mandar reiniciar o nginx
 +<sxh bash>
 +/​etc/​rc.d/​nginx restart
 +</​sxh>​
 +
 +Agora já podemos testar o PHP https://​www.douglasqsantos.com.br/​ ou https://​ip_servidor/​ caso não tenha configurado o DNS
 +
 +Agora já podemos testar o PHP com MySQL https://​www.douglasqsantos.com.br/​mysql.php ou https://​ip_servidor/​mysql.php caso não tenha configurado o DNS
 +
 +Agora vamos deixar o nginx e o php_fpm na junto da inicialização do sistema
 +<sxh bash>
 +vim /​etc/​rc.conf
 +[...]
 +pkg_scripts="​php_fpm nginx"
 +</​sxh>​
 +
 +Agora se quiser reiniciar o servidor para testar ;)
 +<sxh bash>
 +shutdown -r now
 +</​sxh>​
 +
 +
 +====== Referências ======
 +
 +  - http://​nginx.org/​
 +  - http://​wiki.nginx.org/​Main
 +  - http://​wiki.nginx.org/​Install
 +  - http://​wiki.nginx.org/​Configuration
 +  - http://​kbeezie.com/​view/​nginx-configuration-examples/​
 +  - http://​www.mail-archive.com/​misc@openbsd.org/​msg110431.html