Skip to content

Instantly share code, notes, and snippets.

@nidorx
Last active January 27, 2021 10:37
Show Gist options
  • Save nidorx/888592768f861f4335ba6efe4206dcb8 to your computer and use it in GitHub Desktop.
Save nidorx/888592768f861f4335ba6efe4206dcb8 to your computer and use it in GitHub Desktop.
Ubuntu Windows (WSL) - PHP + NGINX + Postgres (windows)

Passos para configurar um projeto PHP com Nginx no Ubuntu on Windows (WSL), utilizando uma conexão com o PostgreSQL instalado no Windows.

Importante

Não é preciso o nginx para executar um servidor PHP, basta utilizar o servidor interno do PHP (possui algumas limitações)

php -S 0.0.0.0:8000 -t ./src ./src/router.php &

Instalação das dependencias (Ubuntu, bash)

sudo apt-get update
sudo apt-get install php5 php5-gd php5-cli php5-json php5-curl php5-pgsql php-apc php5-fpm zip nginx

Instalação do composer

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer.phar
sudo ln -s /usr/local/bin/composer.phar /usr/local/bin/composer

Adicione o usuario ao www-data

sudo usermod -a -G www-data SEU_USUARIO

Crie link para o disco C: no Ubuntu

Facilita o trabalho no Ubuntu

sudo ln -s /mnt/c /c

Edite o arquivo de configuração e copie para os sites-available do nginx

Ex. Se seu projeto está em C:/dev/meu_projeto no windows, entao execute

sudo cp /c/dev/meu_projeto/meu_projeto_nginx.conf /etc/nginx/sites-available/meu_projeto.conf
sudo ln -s /etc/nginx/sites-available/meu_projeto.conf /etc/nginx/sites-enabled/meu_projeto.conf

Remover o arquivo default da pasta /etc/nginx/sites-available/

Pode-se remover a configuração default do nginx, desnecessário

sudo rm /etc/nginx/sites-available/default

Configurações pool do php-fpm

Edite o arquivo

sudo nano /etc/php5/fpm/pool.d/meu_projeto.conf

Adicione as configs (exemplo)

[mapas]
listen = 127.0.0.1:8000
listen.owner = SEU_USUARIO
listen.group = www-data
user = SEU_USUARIO
group = www-data
catch_workers_output = yes
pm = dynamic
pm.max_children = 10
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
chdir = /c/dev/meu_projeto/
php_admin_value[session.save_path] = /tmp/
php_admin_value[display_errors] = 'stderr'
env[PGHOST] = localhost

Inicialização dos serviços

IMPORTANTE No WSL não existe unix socket, por esse motivo, as conexoes php-fpm, postgres, mysql e etc devem ser via TCP.

  • Para o postgres export PGHOST=localhost (já configurado em /etc/php5/fpm/pool.d/meu_projeto.conf)
  • Para o nginx, editar as configs:
    sudo nano /etc/nginx/nginx.conf
    master_process off;
    daemon off;
    

Finalmente, iniciar os serviços com:

sudo /etc/init.d/nginx start &
sudo service php5-fpm restart

Acessar o servidor em localhost:8080 (Ou configure o nginx para porta 80 e desabilite o IIS no windows)

upstream php {
server 127.0.0.1:8000;
}
server {
listen *:8080;
access_log /var/log/meu_projeto_nginx.access.log;
error_log /var/log/meu_projeto_nginx.error.log;
index index.php;
root /c/dev/meu_projeto/;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ /files/.*\.php$ {
deny all;
return 403;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
expires 1w;
log_not_found off;
}
location ~ \.php$ {
gzip off;
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php;
client_max_body_size 0;
}
charset utf-8;
}
@alexrohleder
Copy link

IMPORTANTE No WSL não existe unix socket, por esse motivo, as conexoes php-fpm, postgres, mysql e etc devem ser via TCP.

me salvou, muito obrigado!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment