Comment automatiser le déploiement de votre projet Elixir dans AWS

Ceci est le premier article d’une série en deux parties, dans laquelle nous expliquons de manière complète comment automatiser le déploiement de votre projet Elixir. Les technologies utilisées sont AWS, pour héberger votre projet, et CircleCI, pour automatiser les tests et le déploiement de l'application.

Partie II - Comment automatiser le déploiement de votre projet Elixir avec CircleCI

Configuration AWS

Une configuration AWS de base pour votre application doit comprendre plusieurs services interconnectés, parmi lesquels EC2 est le plus important, car il hébergera votre projet et vous interagirez beaucoup avec celui-ci.

De plus, nous utilisons RDS pour la base de données et Route 53 pour la gestion de domaine, avec quelques autres outils utiles mineurs. Ce didacticiel est divisé en différentes étapes séquentielles qui expliquent comment configurer complètement ces services, de sorte que vous puissiez disposer d’une infrastructure entièrement opérationnelle sur laquelle vous pouvez déployer votre code.

Configuration AWS - Vue générale

Si vous avez des difficultés à trouver les services que nous allons configurer, vous pouvez les rechercher et y accéder dans l’onglet Services:

A) EC2

Nous allons configurer 2 instances, une pour le stockage intermédiaire et une autre pour l’environnement de production.

1. Créer une instance de staging

Configuration EC2

N'oubliez pas que certains services peuvent ne pas être disponibles dans certaines régions. Pour notre exemple, nous allons utiliser la Virginie du Nord.

Dans cet exemple, nous allons utiliser une image de niveau libre d'ubuntu 16.0.4 (AMI) avec une instance t2.micro composée de 1 Go de RAM et de 20 Go de disque (volume EBS). Pour votre propre projet, n'hésitez pas à ajuster ces valeurs pour répondre aux besoins du projet. Les régions et les zones de disponibilité sont un autre élément important. Chaque service AWS peut ou non être disponible pour cette zone.

Étape 1 - Choisissez l'AMIÉtape 2 - Choisissez le type d'instanceÉtape 3 - Configurer l'instance

N'oubliez pas de cocher la case «Protéger contre les résiliations accidentelles».

Étape 4 - Ajouter du stockage

La dernière étape consiste à ajouter des balises à notre instance EC2. Cette étape n'est pas cruciale pour la configuration et le seul but des balises est d'identifier notre instance dans les services AWS, alors n'hésitez pas à ajouter vos propres balises.

2. Configurez le groupe de sécurité

Le groupe de sécurité est l’une des configurations les plus cruciales, car il définit exactement qui peut accéder à la machine. Dans notre cas, nous définissons les protocoles SSH, HTTP et HTTPS.
SSH, car nous souhaitons pouvoir accéder à la machine et interagir avec elle via un terminal afin de pouvoir la configurer.
HTTP et HTTPS afin que notre projet puisse être consulté lors du déploiement.

Étape 6 - Configurer le groupe de sécurité

Avertissement: Les règles dont la source est 0.0.0.0/0 autorisent toutes les adresses IP à accéder à votre instance. Nous vous recommandons de définir les règles du groupe de sécurité pour autoriser l'accès à partir d'adresses IP connues uniquement.

3. Créez une nouvelle paire de clés (pour un accès externe à une instance)

À la fin du processus de création d'instance EC2, il est nécessaire de créer une paire de clés (enregistrez la paire de clés sur votre ordinateur afin de pouvoir configurer votre accès SSH localement).

B) IP élastique

Créez une adresse IP Elastic associée à l'instance EC2 créée. Elastic IP est nécessaire car si, par exemple, nous arrêtons cette instance et en créons une autre avec d’autres caractéristiques, nous réassocions simplement l’adresse IP Elastic créée à la nouvelle instance et tout fonctionne correctement.

Étape 1 - IP élastiqueÉtape 2 - Associer Elastic IP à une instance

C) Configurer la machine EC2

1. Configurez l'accès SSH

### recommandé de mettre key-pair.pem dans le dossier ~ / .ssh
chmod 400 key-pair.pem
### remplace 111.11.111 par l’adresse IP élastique générée
ssh -i clé-paire.pem ubuntu@111.11.111

2. Installez les outils nécessaires dans l'instance EC2

Accédez à la machine et installez le logiciel nécessaire.

  • Elixir / Erlang
  • Git
  • Nœud
  • Nginx
  • Postgres (pas l'installation complète, seulement sa version client dans la même version que celle de RDS)

3. Installez Certbot

Vous devez installer Certbot, puis générer un certificat SSL pour le domaine auquel votre ordinateur correspondra. Important: Parfois, vous devez d'abord exécuter l'étape “E) Route 53”.

# S'il vous plaît remplacer exemple.com par votre domaine
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run

Suivez ensuite les étapes 3 et 4 de ce didacticiel.

Avertissement: Certboot est une limite de débit.

4. Configurez Nginx

Ensuite, vous devez configurer Nginx pour utiliser le certificat que vous venez de créer pour ce domaine. Accédez au dossier / etc / nginx / sites-available, où vous pouvez trouver le fichier Nginx par défaut, qui ressemble à celui qui suit:

Attention: veuillez remplacer par le nom_serveur généré précédemment.

5. Derniers réglages sur l'instance

Enfin, vous devez créer le dossier dans / opt. Après cela, nous devons passer le contrôle à l'utilisateur Ubuntu.

sudo mkdir 
sudo chown -R ubuntu: ubuntu  /

6. Créer une image basée sur l'instance créée et créer une instance de production

Vous pouvez ignorer cette étape si vous devez simplement configurer un seul environnement. Dans nos projets, nous commençons généralement par un environnement de transfert et de production. L'environnement intermédiaire contient tout le code créé jusqu'à présent et permet de tester les dernières fonctionnalités avant leur mise en production. L’environnement de production est celui utilisé par les vrais utilisateurs.

Étape 1 - Créer une image basée sur l'instance crééeÉtape 2 - Créer une image

Créez une image (EC2 - AMI) basée sur l'instance créée précédemment (instance intermédiaire). Créez ensuite l'instance de production à partir de l'image (les deux instances sont donc créées et configurées - production et intermédiaire). N’oubliez pas: enregistrez la paire de clés sur votre ordinateur pour configurer votre accès SSH localement.

Pour l'instance de production, il est nécessaire de répéter les étapes suivantes:

  • B) IP élastique (instance de production)
  • C) 1. Configurez l'accès SSH (instance de production)
  • C) 1. Configurez l'accès SSH (instance de production)
  • C) 3. Installez Certbot (instance de production)

D) RDS

L'exemple que nous vous montrons ici utilise une base de données relationnelle. Dans ce cas, nous utilisons Postgres.

Configurations EC2 et RDS

1. Créez 2 instances de base de données (production et transfert)

  • Faites attention aux options choisies telles que: version du moteur, magasin alloué et activation de la protection contre la suppression.
Étape 1 - Sélectionnez le moteurÉtape 2 - Spécifications d'instanceÉtape 3 - ParamètresÉtape 4 - Réseau et sécuritéÉtape 5 - Options de la base de donnéesÉtape 6 - SauvegardeÉtape 7 - MaintenanceÉtape 8 - Protection contre la suppression

2. Configurez le groupe de sécurité pour permettre à EC2 de se connecter au RDS.

En gros, vous devez ajouter le groupe de sécurité d'instance au groupe de sécurité RDS afin de permettre à EC2 de se connecter à l'instance RDS.

Autoriser EC2 à se connecter à l'instance RDS

E) Route 53

Pour router les domaines et sous-domaines vers les machines créées précédemment, nous avons utilisé Route 53.

Route 53 - exemple

1. Créer une zone hébergée avec un nom de domaine

Étape 1 - Créer une zone hébergée

2. Créer des alias

  • Créer un jeu d’alias pour aliaser l’adresse IP élastique de la machine EC2
  • Créer un jeu d’alias pour l’adresse IP élastique de la machine EC2 de production
Étape 2 - Créer un jeu d'enregistrements

Vous disposez maintenant d'une configuration AWS entièrement fonctionnelle (routage, base de données, instance de serveur) prête à recevoir et à héberger un serveur basé sur elixir. Dans la prochaine partie du didacticiel, nous allons configurer CircleCI pour déployer automatiquement votre projet dans la configuration AWS que nous venons de créer.

Merci pour la lecture!

Merci beaucoup pour votre lecture et si vous avez apprécié cet article, assurez-vous d'appuyer sur le bouton. Cela signifie beaucoup pour nous! N'oubliez pas non plus de suivre Coletiv sur Medium, Twitter et LinkedIn, car nous continuons à publier des articles de plus en plus intéressants sur plusieurs technologies.

Au cas où vous ne le sauriez pas, Coletiv est un studio de développement de logiciels basé à Porto spécialisé dans le développement d’applications Elixir, iOS et Android. Mais nous faisons toutes sortes de choses. Nous nous occupons de la conception UX / UI, du développement Web et même de la sécurité pour vous.

Alors, construisons quelque chose ensemble?