Tutoriel Vidéo Nginx Système de messagerie (4/3) : Déploiement

Télécharger la vidéo Télécharger les sources

Dans cette vidéo nous allons voir comment faire fonctionner notre application Laravel / Echo sur un serveur Debian.

Installation des outils

Avant de commencer, nous allons installer les outils dont nous avons besoin pour notre projet. Nous avons surtout besoin de PHP 7.1+ pour Laravel et NodeJS pour l'application laravel-echo-server.

Pour PHP nous allons ajouter un nouveau dépôt pour pouvoir installer la version 7.2.

sudo apt-get install apt-transport-https lsb-release ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list

Et on fait de même pour préparer l'installation de NodeJS 8 LTS :

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -

Maintenant nous pouvons installer nos outils

sudo apt-get update
sudo apt-get install -y nodejs php7.2-fpm php7.2-mysql php7.2-mbstring php7.2-xml php7.2-zip mysql-server redis-server

Pour MySQL vous pouvez sécuriser l'installation via la commande mysql_secure_installation.
Pour ajouter une couche de sécurité, je vous conseille d'installer un pare feu et de bloquer les ports dont vous n'avez pas besoin (histoire d'éviter qu'une base de données mal configurée se retrouve accessible publiquement).

Nous allons ensuite installer notre serveur web nginx et le configurer pour gérer notre nom de domaine.

sudo apt-get install nginx

On va ensuite créer un nouveau fichier pour configurer notre site /etc/nginx/sites-available/domain.

upstream mondomain_echo {
  server 127.0.0.1:6001;
}

server {
  listen 80;
  listen [::]:80;
  server_name mondomaine.ltd;

  root /home/user/mondomaine.ltd;
  index index.php index.html;
  error_page 404 /index.php;

  add_header X-Frame-Options "SAMEORIGIN";
  add_header X-XSS-Protection "1; mode=block";
  add_header X-Content-Type-Options "nosniff";

  location / {
    try_files $uri $uri/ /index.php?query_string;
  }

  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
  }

  location ~ /\.ht {
    deny all;
  }

  location /socket.io {
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;
    proxy_pass http://mondomain_echo;
  }

  location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
    access_log off;
    expires max;
  }

  location ~ /\.(?!well-known).* {
    deny all;
  }
}

Et on fait un lien vers sites-enabled

sudo ln -s /etc/nginx/sites-available/mondomaine /etc/nginx/sites-enabled/mondomaine

Configuration de Laravel

Maintenant que nos outils sont prêt, nous allons pouvoir configurer notre application. Pour faire les choses bien nous allons placer notre application dans le dossier utilisateur /home/user/mondomaine.ltd (vous pouvez utiliser git pour automatiser cette partie là ou utiliser un outil comme capistrano / ansistrano, nous verrons ça dans une prochaine vidéo).

On va ensuite créer une base de données MySQL avec un utilisateur qui aura les droits dessus. Pour simplifier les choses, je vais utiliser le nom de domaine comme nom d'utilisateur / base.

CREATE DATABASE IF NOT EXISTS `mondomaine` ;
CREATE USER 'mondomaine'@'localhost' IDENTIFIED BY 'motdepasse';
GRANT ALL PRIVILEGES ON mondomaine.* TO mondomaine

On modifier le fichier .env, avec ces nouvelles informations :

APP_NAME=Laravel
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_LOG_LEVEL=debug
APP_URL=http://mondomaine.ltd

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mondomaine
DB_USERNAME=mondomaine
DB_PASSWORD=motdepasse

BROADCAST_DRIVER=redis
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Et on génère les différentes clefs (et on migre la base si nécessaire)

php artisan key:generate
php artisan passport:keys
php artisan migrate
php artisan db:seed
# Et on construit les assets si besoin
npm install
npm run build

Laravel Echo Server

Pour le serveur laravel-echo il va falloir maintenir le processus allumé et s'assurer de son démarrage avec le système. Vous pouvez utiliser plusieurs outils pour cela, mais nous allons aller au plus simple avec pm2.

On installe les outils globalement :

npm i -g pm2 laravel-echo-server

On configure le projet via un JSON

{
  "name": "mondomaine_socket",
  "script": "laravel-echo-server",
  "args": "start"
}

Et on démarre notre projet

pm2 start mondomaine_socket.json

Pour que tout démarre avec le système vous pouvez taper la commande

pm2 startup

Et suivre les instructions.

Et voila !

Et voila votre site devrait fonctionner. Nous verrons dans une prochaine vidéo comment automatiser les choses avec Ansible.