# Guia de Deploy com Nginx #### Requisitos * Composer * Laravel * Node 10+ * PHP 7.3+ * MySQL 5.7+ * Git * PM2 * Nginx #### Introdução Nesse guia utilizaremos o Nginx + Pm2 para subir o Back-end(Laravel) + Front-end(Vue.js) e no final será feito um proxy reverso para apontar o Nginx para o Pm2. ### 1. Instalação do Projeto Assim como é feito localmente, será necessário fazer o setup do projeto, isso inclui criar o banco de dados e setar o back+front, para isso, o procedimento é o padrão, mas para agilidade os comandos estarão abaixo: OBS: faça tudo no /var/www #### Criação do Banco de Dados ``` $ sudo mysql (se já não estiver em sudo) CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'senha'; CREATE DATABASE BancodeDados; GRANT ALL PRIVILEGES ON * . * TO 'usuario'@'localhost FLUSH PRIVILEGES; exit ``` #### Setup do back-end ``` $ git clone <url-do-projeto> $ cd <projeto> $ git checkout <branch-de-release> $ cd back-end $ cp .env.example .env $ nano .env (para configurar o .env) $ composer install $ php artisan migrate:fresh --seed $ php artisan passport:install $ php artisan key:generate ``` #### Setup do front-end ``` $ cd front-end $ npm install ``` ### 2. Setando o Pm2(Servidor) para o front O Pm2 servirá como o servidor para o front, ele servirá como um watcher permanente para os nossos arquivos do Javascript #### 2.1 Script em json para o Pm2 Crie um arquivo em json na pasta do front-end para servir como script para o Pm2 e cole o conteúdo a seguir: ``` { "apps": [ { "name": "projeto", "script": "npm", "args" : "start" } ] } ``` #### 2.2 Ligando Pm2 Agora é preciso rodar o servidor, e para isso, apenas rode o seguinte comando na pasta que contem o arquivo.json ``` $ pm2 start <script.json> ``` ### 3. Setando o Nginx para o Back-end #### 3.1 Ativando sites-enabled Vá para a pasta do Nginx(Normalmente fica em /etc/nginx/) e no bloco http cole o seguinte: include /etc/nginx/sites-enabled/*; #### 3.2 Configurando o arquivo do Nginx para o back-end Entre na pasta sites-available e crie arquivo de texto padrão e utilize a seguinte configuração para projetos em Laravel: ``` server { listen 80; listen [::]:80; server_name back-domínio.com; # Log files for Debugging access_log /var/log/nginx/laravel-access.log; error_log /var/log/nginx/laravel-error.log; # Webroot Directory for Laravel project root /var/www/projeto/back-end/public; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } # PHP-FPM Configuration Nginx location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ``` Uma boa forma de checar se tudo está funcionando é sempre usar o: ``` $ nginx -t $ systemctl restart nginx ``` #### 3.3 Linkando sites-available -> sites-enabled Para expor o site para a web nós precisaremos linkar o arquivo da pasta sites-available na sites-enabled, para isso utilize o seguinte comando: ``` ln -s /etc/nginx/sites-available/projeto.conf-back /etc/nginx/sites-enable/ ``` ### 4. Setando o proxy-reverso no Nginx Proxy reverso nada mais é do que ter um servidor a frente dos outros para guiar as requisições, a configuração que usaremos também será uma padrão, e segue o mesmo caminho do passo passado. #### 4.1 Arquivo de conf do proxy-reverso Entre novamente na pasta do sites-available e cole a seguinte configuração: ``` server{ listen 80 default_server; listen [::]:80 default_server; server_name domínio.com www.domínio.com; index index.php index.html index.htm; location / { proxy_pass http://localhost:3000/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } ? ``` Novamente teste pra ver se tudo está OK ``` $ nginx -t $ systemctl restart nginx ``` #### 4.2 Linkando novamente Assim como feito no passo passado precisaremos linkar o arquivo de configuração na pasta sites-enabled para expor o site, para isso siga os comandos novamente: ``` $ ln -s /etc/nginx/sites-available/<projeto.conf-front> /etc/nginx/sites-enable/ ``` ### 5. Checando se tudo está funcionado A melhor maneira de checar é na verdade com o site no ar, porém, para garantir que esteja tudo ok nós podemos utilizar alguns comandos que nos auxiliam: ``` $ netstat -ntlp | grep LISTEN (para checar as portas que estão sendo usadas) $ wget localhost:<porta-escolhida> (para checar se o site está realmente no ar) ``` #### Observações A parte do SSL não está inclusa nesse guia ### 6. Explicando o funcionamento Esse espaço está destinado para futuramente explicar o funcionamento das devidas partes e remover um pouco da abstração no conteúdo geral.