Configurer l’environnement de développement Ruby on Rails avec Docker et Docker Compose sur Ubuntu
Docker est un projet open-source qui fournit une plateforme ouverte aux développeurs et aux sysadmins pour construire, empaqueter et exécuter des applications n’importe où sous forme de conteneur léger. Docker automatise le déploiement d’applications à l’intérieur de conteneurs logiciels.
Ruby on Rails (RoR) est un cadre d’application Web open source, publié sous la licence MIT. C’est un cadre d’application Web côté serveur qui suit le concept MVC (Model-View-Controller).
Dans ce tutoriel, je vais te montrer comment configurer un environnement de développement pour les applications Ruby on Rails à l’aide de Docker et de Docker compose. Nous utiliserons Ubuntu 18.04 comme système d’exploitation hôte et utiliserons la base de données PostgreSQL pour notre projet Rails.
Ce que nous allons faire :
- Installer Docker et Docker Compose
- Générer le projet Rails
- Configurer le projet Rails
- Créer le script Docker Compose
- Construis le projet
- Teste la création de CRUD de base sur Rails
Étape 1 – Installer Docker et Docker Compose
La première étape que nous devons faire est d’installer le docker et le docker compose lui-même. Nous allons installer le docker à partir du dépôt officiel de docker, et installer le docker-compose à partir du projet officiel de docker sur GitHub.
Avant d’installer les paquets Docker, exécute la commande apt ci-dessous pour installer les dépendances des paquets.
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
Ajoute maintenant la clé docker et le dépôt docker.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
La commande mettra automatiquement à jour tous les référentiels sur le système. Quand elle est terminée, installe les paquets docker-ce.
sudo apt install -y docker-ce
Attends l’installation de docker-ce, puis démarre le service docker et ajoute-le au temps de démarrage.
sudo systemctl start docker
sudo systemctl enable docker
Le Docker est en place et fonctionne sur le système.
Ensuite, installe le docker-compose en téléchargeant le fichier binaire directement depuis le dépôt GitHub de docker.
Télécharge le fichier binaire docker-compose dans le répertoire ‘/usr/local/bin/’ et fais-en un exécutable.
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Le docker et le docker-compose ont été installés sur le système, vérifie la version à l’aide des commandes ci-dessous.
docker version
docker-compose version
Voici le résultat.
Étape 2 – Générer le projet Ruby on Rails
Après avoir installé les paquets de base docker et docker-compose sur le système, nous voulons créer un nouvel utilisateur, puis générer le projet Rails à l’aide des images docker.
Ajoute un utilisateur nommé ‘hakase’ et donne-lui un mot de passe.
useradd -m -s /bin/bash hakase
passwd hakase
Ajoute l’utilisateur au groupe ‘sudo’ et ‘docker’ et connecte-toi au shell de l’utilisateur ‘hakase’.
usermod -a -G sudo hakase
usermod -a -G docker hakase
su - hakase
Maintenant, l’utilisateur ‘hakase’ peut exécuter et lancer la commande docker.
Ensuite, nous allons créer un nouveau répertoire ‘rails’ pour notre projet Ruby on Rails.
Crée le répertoire ‘rails’ et ouvre-le.
mkdir -p ~/rails
cd ~/rails/
Exécute maintenant la commande ‘docker run’ ci-dessous.
docker run --rm -v ${PWD}:/usr/src -w /usr/src -ti ruby:alpine sh ; cd app
La commande exécutera le conteneur temporaire basé sur l’image ruby:alpine, montera le répertoire local dans le répertoire ‘/usr/src’ à l’intérieur du conteneur, puis exécutera la commande shell ‘sh’ et ira dans le répertoire ‘app’.
Dans le conteneur, installe les paquets ‘build-base’.
apk add build-base
Installe maintenant Ruby on Rails dans le conteneur temporaire.
gem install -N rails
Et génère le nouveau projet Rails nommé ‘app’ avec PostgreSQL comme base de données, puis quitte/se déconnecte du conteneur.
rails new app --database=postgresql --skip-bundle
exit
Tu te trouveras dans le répertoire du projet Rails ‘app’.
Change maintenant le propriétaire du répertoire de projet ‘app’ pour l’utilisateur ‘hakase’.
sudo chown -R hakase:hakase ~/rails/app/
ls -lah
Et le projet Ruby on Rails a été généré par le conteneur docker temporaire.
Étape 3 – Configurer le projet Rails
Dans cette étape, nous allons créer un nouveau Dockerfile pour nos applications Rails.
Dans le répertoire ‘rails’, crée un nouveau Dockerfile à l’aide de vim.
vim Dockerfile
Colle la configuration ci-dessous.
FROM ruby:alpine RUN apk update RUN apk add build-base nodejs postgresql-dev tzdata RUN gem install -N rails RUN mkdir -p /app WORKDIR /app COPY ./app/Gemfile /app COPY ./app/Gemfile.lock /app RUN bundle install --binstubs
Sauvegarde et quitte.
Nous créons une nouvelle image Docker basée sur le linux Ruby Alpine. Nous installons de nouveaux paquets pour l’installation de rails, crée un nouveau répertoire /app, copie le Gemfile et Gemfile.lock du répertoire local app, et installe tous les paquets basés sur le Gemfile.
Ensuite, va dans le répertoire ‘app’ et crée un nouveau fichier Gemfile.lock.
cd app/
touch Gemfile.lock
Modifie le fichier ‘database.yml’.
vim config/database.yml
Change la configuration de la base de données par défaut et modifie les détails comme ci-dessous.
default: &default adapter: postgresql encoding: unicode host: db username: postgres pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000
Sauvegarde et quitte.
La configuration du projet Rails est terminée.
Étape 4 – Créer le fichier Docker Compose
Dans cette étape, nous allons créer un nouveau fichier docker-compose pour notre application Rails. Nous ne créerons que deux services : db database PostgreSQL et web est l’application Rails elle-même.
Crée un nouveau fichier ‘docker-compose.yml’ dans le répertoire ‘rails’.
vim docker-compose.yml
Et colle la configuration ci-dessous.
version: '3.6' services: db: image: postgres:alpine volumes: - ./postgresql:/var/lib/postgresql/data web: build: . volumes: - ./app:/app working_dir: /app command: bundle exec rails s -p 3000 -b '0.0.0.0' ports: - 80:3000 depends_on: - db
Sauvegarde et quitte.
Crée maintenant le répertoire ‘postgresql’ dans le projet ‘rails’.
mkdir -p ~/rails/postgresql
Et nous sommes prêts à construire notre projet Rails.
Étape 5 – Construis le projet
Construis l’image docker Rails à l’aide de la commande docker-compose ci-dessous.
docker-compose build
La commande téléchargera l’image Ruby Alpine Linux et construira l’image personnalisée dont nous avons besoin en fonction de notre Dockerfile.
Génère la base de données PostgreSQL pour le projet.
docker-compose run web rake db:create
Mets maintenant en place les services ‘db’ et ‘web’.
docker-compose up -d
Les services rails sont en place et fonctionnent, vérifie-les à l’aide de la commande docker-compose ci-dessous.
docker-compose ps
Tu peux voir que le service ‘web’ fonctionne sur le port ’80’ sur l’hôte.
Vérifie maintenant les images docker sur notre système.
docker-compose images
Et tu obtiendras le résultat ci-dessous.
Ouvre maintenant ton navigateur Web et tape l’adresse IP ou le nom de domaine du serveur. Le mien est :
http://rails.hakase-labs.io/
Et tu obtiendras l’application de page Rails par défaut sur ce serveur.
Maintenant, nous sommes prêts à développer notre projet Rails.
Étape 6 – Teste la création de CRUD de base sur Rails
Crée un CRUD simple sur Rails en exécutant la commande Rails dans le service du conteneur ‘web’.
docker-compose exec web rails g scaffold Post title:string body:text
Génère maintenant la base de données.
docker-compose exec web rake db:migrate
Ouvre maintenant ton navigateur Web et tape l’adresse IP du serveur dans la barre d’adresse avec le chemin ‘/posts’. La mienne est :
http://rails.hakase-labs.io/posts
Et tu obtiendras la page CRUD simple comme ci-dessous.
Tape le message et clique sur le bouton ‘Create Post’.
Et tu obtiendras le résultat ci-dessous.
La configuration de l’environnement de développement pour Ruby on Rails avec Docker et Docker Compose a été effectuée avec succès.