deployer nginx puma

Comment déployé une application Rails avec Mina, Puma et Nginx

Partagez sur:

Comment déployé une application Rails avec Mina, Puma et Nginx

Mina est un outil de déploiement d’application, similaire à Capistrano (plus populaire) le plus grand avantage de Mina est la rapidité, Mina travail exceptionnellement rapide par ce que c’est un c’est un générateur de script bash.

Il génère entièrement le procédure de déploiement comme un script bash, et l’exécute à distance sur le serveur de déploiement, il supporte aussi des commandes d’exécution intelligent, donc si vous ne changez pas d’assets (CSS, JS, images), il n’exécutera pas les assets pré-compilés. La même chose vaut pour les migrations.

Installation de Mina

Jetons un coup d’œil à la mise en place de Mina avec Puma. Tout d’abord, vous devez ajouter Mina et mina-puma dans le fichier Gemfile de votre projet, qui se trouve dans la section développement. Mina a récemment changé son mainteneur; un nouveau dépôt est ici, et il est préférable de l’installer à partir de Git.

gem 'mina', require: false
gem 'mina-puma', require: false, github: 'untitledkingdom/mina-puma'

Ajoutez le gem Puma à la section globale si vous utilisez une version Rails inférieure à 5.

Ensuite, installez gems et exécutez la commande Mina initiale pour générer un fichier config/ deploy.rb.

Ensuite, installez gems et exécutez la commande Mina initiale pour générer une section config/deploy.rb . Mina a récemment changé son mainteneur; un nouveau dépôt est ici, et il est préférable de l’installer à partir de Git.

bundle
mina init

Vous pouvez trouver un exemple de configuration par défaut de Mina 1.0.0 ici. Cliquez ici pour la configuration complète dans cette configuration.

Explications détaillées du fichier de déploiement Mina

#Set the domain or ip address of the remote server.
set :domain, 'yourdomain.ru'

#Set the folder of the remote server where Mina will deploy your application.
set :deploy_to, 'path/to/directory'

#Set a link to the repository. Example: git@bitbucket.pixelpoint/myapp.git
set :repository, 'git@…'

#Set the name of a branch you plan to deploy as default master.
set :branch, 'master'

#Fill in the names of the files and directories that will be symlinks to the shared directory. 
#All folders will be created automatically on Mina setup.
#Don’t forget to add a path to the uploads folder if you are using Dragonfly or CarrierWave.
#Otherwise, you will lose your uploads on each deploy.
set :shared_dirs, fetch(:shared_dirs, []).push('log', 'tmp/pids', 'tmp/sockets', 'public/uploads')
set :shared_files, fetch(:shared_files, []).push('config/database.yml', 'config/secrets.yml', 'config/puma.rb')

#Username of ssh user for access to the remote server.
set :user, 'username'

#This is not a required field. You can use it to set an application name for easy recognition.
set :application_name, 'MyApplication'

#Set ruby version. If you have RVM installed globally, you’ll also need to set an RVM path, 
#like: set :rvm_use_path, '/usr/local/rvm/scripts/rvm'.
#You can find the RVM location with the rvm info command.
task :environment do
   invoke :'rvm:use', 'ruby-2.4.0@default'
End

deploy.rb

Par défaut, Mina créera tous les dossiers mentionnés dans shared_dirs et shared_files. Dans la configuration, cependant, vous pouvez ajouter une section de création automatique de fichiers vides et les remplir plus tard.

task :setup do
  command %[touch "#{fetch(:shared_path)}/config/database.yml"]
  command %[touch "#{fetch(:shared_path)}/config/secrets.yml"]
  command %[touch "#{fetch(:shared_path)}/config/puma.rb"]
  comment "Be sure to edit '#{fetch(:shared_path)}/config/database.yml', 'secrets.yml' and puma.rb."
End

deploy.rb

Après ces actions, vous êtes prêt à exécuter Mina setup pour préparer toutes les structures de fichiers nécessaires sur le serveur distant.

Votre section de déploiement dans deploy.rb devrait ressembler à ceci:

task :deploy do
  deploy do
    comment "Deploying #{fetch(:application_name)} to #{fetch(:domain)}:#{fetch(:deploy_to)}"
    invoke :'git:clone'
    invoke :'deploy:link_shared_paths'
    invoke :'rvm:load_env_vars'
    invoke :'bundle:install'
    invoke :'rails:db_migrate'
    command %{#{fetch(:rails)} db:seed}
    invoke :'rails:assets_precompile'
    invoke :'deploy:cleanup'

     on :launch do
       invoke :'puma:phased_restart'
     end
  end
End

Configuration de Puma

Créez ou remplissez un fichier puma.rb dans un dossier de configuration.

environment "production"

bind "unix:///{path_to_your_app}/shared/tmp/sockets/puma.sock"
pidfile "/{path_to_your_app}/shared/tmp/pids/puma.pid"
state_path "/{path_to_your_app}/shared/tmp/sockets/puma.state"
directory "/{path_to_your_app}/current"

workers 2
threads 1,2

daemonize true

activate_control_app 'unix:///{path_to_your_app}/shared/tmp/sockets/pumactl.sock'

prune_bundler

Vous devez pointer un chemin vers pumactl.sock à activate_control_app. Sinon, Mina Puma: arrêter et redémarrer ne fonctionnera pas.

Remplissez database.yml et secrets.yml

Allez dans le dossier partagé et assurez-vous de remplir ces deux fichiers.

Configurer nginx

Créez le fichier myapp.conf dans un dossier /nginx/etc/conf.d avec un contenu similaire.

upstream mysite {
  server unix:///home/admin/mysite/shared/tmp/sockets/puma.sock fail_timeout=0;
}

server {
  listen 80;
  listen [::]:80;

  server_name mysite.com;
  root /home/admin/mysite/current/public;

  location ~ ^/assets/ {
    expires max;
    gzip_static on;
    gzip_vary on;
    add_header Cache-Control public;
   break;
}


location / {
   proxy_pass http://mysite;
   proxy_set_header Host $host;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location ~ ^/(500|404|422).html {
   root /home/admin/mysite/current/public;
}

error_page 500 502 503 504 /500.html;
error_page 404 /404.html;
error_page 422 /422.html;

client_max_body_size 4G;
keepalive_timeout 10;
}

Générer des clés ssh

Générez de nouvelles clés ssh sur votre serveur en utilisant cette commande ssh-keygen.

Ensuite, exportez-le vers les clés de déploiement de votre projet github/bitbucket.

Mission accomplie

C’est tout. Vous êtes maintenant prêt à déployer votre application. Exécutez mina deploy si vous avez déjà exécuté mina setup et attendez.

LIRE AUSSI: Intégration des boutons de partage sociaux dans Rails

Auteur: Amos KERNEL

 


Partagez sur: