Skip to content

Serveur de production AFS

Philippe Virouleau edited this page Mar 2, 2023 · 12 revisions

Premier déploiement (bootstrap)

Ou "comment regénérer un serveur si Philippe se prend un bus ou le datacenter prend feu une nouvelle fois".

Le serveur de production de l'AFS est un VPS chez OVH : il suffit de le (ré)-installer (avec un Debian 11 au moment d'écrire ces lignes), ou d'en créer un nouveau si besoin.

À partir de là, voici la liste des étapes à faire pour obtenir une image "neuve" :

  • ssh sur le serveur
  • récupérer une copie du dépôt (en fait ce qui nous intéresse c'est le dossier ci/chef) : soit via git, soit en téléchargeant un tgz. En détails il suffit de :
cd /tmp
sudo apt install git
git clone https://github.com/speedcubingfrance/speedcubingfrance.org.git
  • Récupérer le fichier "secret" (demander à un des admins ou au bureau) qui sert à déchiffrer le databag de production qui est ici.
  • Le copier là où chef va le trouver : cp secret /etc/chef/encrypted_data_bag_secret.
  • Lancer le script de bootstrap pour la prod :
cd ci/chef
sudo ./bootstrap.sh production

À partir de là cela devrait tout mettre en place pour pouvoir faire tourner l'application et le serveur, mais aussi récupérer un certificat SSL pour le domaine. Le gros du travail est fait par chef, que l'on peut relancer autant de fois que l'on souhaite avec sudo chef-solo -o "role[afs-bootstrap-server]" -c solo.rb -E production.

À partir de là il devrait suffire de se déconnecter et de se reconnecter sur l'utilisateur afs et de :

  • bundle install dans ~/speedcubingfrance.org
  • bin/rails db:reset
  • Restaurer un backup de la prod (demander aux admins/bureau pour avoir le dump) : pg_restore --verbose --clean --no-acl --no-owner -h localhost -U speedcubingfrance -d speedcubingfrance-prod prod.dump
  • Et à partir de là on peut utiliser le script de déploiement régulier : ./scripts/deploy.sh rebuild_rails

Notes concernant nginx

Chef devrait faire ça de manière transparente, mais voici néanmoins quelques détails sur la récupération du certificat. Lors du premier déploiement le certificat SSL n'est pas encore généré, il y a donc deux fichiers de configuration pour www.speedcubingfrance.org :

  • une pour avant la création du certificat (ci/chef/cookbooks/afs/templates/pre_certif.conf.erb)
  • une pour après la création du certificat (ci/chef/cookbooks/afs/templates/post_certif.conf.erb)

Chef doit se charger tout seul de la génération des bons fichiers au bon moment, la procédure effectuée en détails est

Déploiement régulier

Le script deploy.sh contient des commandes utiles pour le déploiement :

  • pull_latest : récupère la dernière master.
  • restart_app : (re)-démarre le serveur puma.
  • rebuild_rails : installe les gems ruby, recompile les assets, et lance restart_app.

Il suffit alors de lancer :

ssh afs@speedcubingfrance.org speedcubingfrance.org/scripts/deploy.sh pull_latest rebuild_rails

Et de se logguer pour effectuer les éventuelles migrations (ne pas oublier de redémarrer de serveur après les migrations !).

Si des changements sont fait sur la configuration du serveur (concrètement si quelque chose dans ci/chef a changé), alors il faut également relancer chef : sudo chef-solo -o "role[afs-bootstrap-server]" -c solo.rb -E production dans le dossier ci/chef.

Backup

Pour récupérer un backup de la base de données de production :

pg_dump -Fc --no-acl --no-owner -h localhost -U speedcubingfrance speedcubingfrance-prod > prod.dump

Restauration d'un backup

En production

Mettre latest.dump sur le serveur, et lancer : pg_restore --verbose --clean --no-acl --no-owner -h localhost -U speedcubingfrance -d speedcubingfrance-prod latest.dump

En local

pg_restore --verbose --clean --no-acl --no-owner -h localhost -U speedcubingfrance -d speedcubingfrance-dev latest.dump