[Presque gratuit] Comment obtenir un domaine et un certificat SSL pour 0 yen à l'aide de Freenom et Let's Encrypt, mettre un docker dans AWS EC2, démarrer un conteneur nginx et lancer un service WEB HTTPS qui se connecte à un domaine

Contexte

Lorsque vous souhaitez essayer une technologie utilisée pour les entreprises ou une nouvelle technologie, configurez un serveur Web sur AWS, préparez une API ou une page de test, connectez-vous avec http à partir d'un terminal Chrome ou Android local, et faites-le très bien. .. C'est bien pour vérifier la communication de RestAPI, mais si vous souhaitez l'utiliser pour la vérification WebRTC ou WebSocket, il y avait un problème que vous ne pouviez pas vérifier l'opération car une erreur se produirait à moins que le site n'ait activé SSL. Après avoir vérifié s'il serait possible de configurer un serveur Web bon marché et non un certificat oléore d'une manière ou d'une autre, il s'est avéré que si vous utilisez Freenom et Let's Encrypt, vous pouvez configurer un serveur https avec votre propre domaine presque gratuitement.

Si vous recherchez la méthode d'acquisition de domaine avec Freenom, la méthode d'acquisition de certificat SSL avec Let's Encrypt, la méthode de configuration avec AWS, etc., il y a des fragments, mais comme il n'y avait pas d'article complet, je le laisserai ici comme un mémorandum. Garde le.

Choses à faire

  1. [Gratuit] Obtenez un domaine gratuit avec Freenom
  2. [Gratuit conditionnel] Créez une instance AWS EC2 et installez docker
  3. [Conditionnel gratuit] Émettez une adresse IP statique avec AWS Elastic IP et associez-la à une instance EC2
  4. [Presque gratuit] Définissez DNS sur AWS Route53 afin de pouvoir vous connecter à une instance EC2 avec un nom de domaine.
  5. [Gratuit] Lancez un conteneur nginx sur une instance EC2 avec docker
  6. [Gratuit] Obtenez un certificat SSL gratuit avec Let's Encrypt et connectez-vous avec https

Conditions gratuites et détails presque gratuits

1. [Gratuit] Obtenez un domaine gratuit avec Freenom

Je vais le faire immédiatement. Les domaines sont obtenus à l'aide d'un service appelé Freenom. Freenom est un service à l'étranger qui vous permet d'acquérir un domaine gratuitement. Vous pouvez obtenir gratuitement XXXX.tk, XXXX.ml, XXXX.ga, etc. en tant que nom de domaine. https://www.freenom.com/ja/index.html

Assurez-vous que le domaine est disponible et vérifiez

Vous pouvez obtenir le domaine que vous aimez, alors entrez le domaine que vous souhaitez obtenir. Vérifiez si elle est disponible, et si elle est disponible, l'écran ci-dessous s'affichera. Cliquez sur "Obtenir maintenant!" Et ensuite sur "Vérifier".

image.png


image.png

Sélectionnez la période d'utilisation

Il semble que vous puissiez l'utiliser gratuitement jusqu'à 12 mois, alors utilisons-le au maximum. Sélectionnez "12 mois @ GRATUIT" dans Période et appuyez sur "Continuer".

image.png

Enregistrement ou connexion de l'utilisateur

** Assurez-vous que le montant est de 0,00 USD (gratuit) **. S'il n'y a pas de problème, connectez-vous pour acheter. Dans mon cas, je suis déjà inscrit, donc je me connecte généralement avec Google. Si vous ne vous êtes pas inscrit pour la première fois, vous devrez peut-être vous inscrire de différentes manières. image.png

Acceptez les conditions et achetez

Encore une fois, ** confirmez que le montant est de 0,00 USD (gratuit) **, vérifiez l'accord sur les termes et appuyez sur «Terminer la commande».

image.png


image.png


image.png

Ceci complète l'acquisition du domaine.

2. [Gratuit conditionnel] Créez une instance AWS EC2 et installez docker

Vous pouvez utiliser un autre article que j'ai écrit tel quel, veuillez donc vous référer ici ↓.

Comment installer docker et docker-compose sur une instance AWS EC2 et lancer un service WEB simple

3. Émettez une adresse IP statique avec AWS Elastic IP et associez-la à une instance EC2

Obtenez une adresse IP statique (adresse IP fixe) et attribuez cette adresse IP à l'instance EC2 lancée ci-dessus. En faisant cela, l'adresse IP ne changera pas même si EC2 est redémarré.

Obtenez une adresse IP statique

Tout d'abord, utilisez l'écran pour obtenir une adresse IP statique. Appuyez sur "Elastic IP" et image.png Cliquez sur "Attribuer une adresse IP élastique" sur l'écran suivant. image.png Cliquez sur "Attribuer" sur l'écran suivant. image.png J'ai une adresse IP statique. image.png

Associer une adresse IP statique à une instance EC2

Sélectionnez l'adresse IP attribuée et appuyez sur «Associer une adresse IP élastique» dans «Action». image.png Pour l'instance, saisissez l'ID d'instance EC2 que vous avez créé précédemment. Après avoir entré, cliquez sur «Associer». image.png

L'association entre l'instance EC2 et l'adresse IP statique est terminée. image.png

4. [Presque gratuit] Définissez DNS sur AWS Route 53 afin de pouvoir vous connecter à une instance EC2 avec un nom de domaine.

Définissez le DNS pour pouvoir vous connecter avec le nom de domaine. Suivez la procédure de création d'une zone hôte → enregistrement d'un enregistrement A → configuration du serveur de noms avec Freenom.

Créer une zone hébergée

Accédez à l'écran Route53 et image.png Cliquez sur "Zone hôte". image.png Cliquez sur "Créer une zone hôte". image.png Entrez le domaine obtenu par Freenom et cliquez sur "Créer une zone hôte". image.png La création de la zone hôte est terminée. image.png

Créer un enregistrement

Cliquez sur "Créer un enregistrement". image.png Confirmez que le routage simple est sélectionné par défaut et cliquez sur "Suivant". image.png Cliquez sur "Définir un enregistrement simple". image.png Après avoir sélectionné "Adresse IP selon le type d'enregistrement ou une autre valeur" dans la destination de routage valeur / trafic, entrez l'adresse IP statique obtenue précédemment et appuyez sur "Définir un enregistrement simple". image.png Cliquez sur Créer un enregistrement. image.png La création de l'enregistrement est terminée. image.png

Paramètres du serveur de noms

Maintenant, définissez le serveur de noms dans Freenom.

Appuyez sur "Mes domaines" puis "Gérer le domaine" sur l'écran suivant.

image.png


image.png Cliquez sur "Serveurs de noms" dans "Outils de gestion". image.png Sélectionnez «Utiliser des serveurs de noms personnalisés (entrez ci-dessous)» et copiez la valeur de l'enregistrement NS de la zone hôte Route53 dans le champ Serveur de noms. Après avoir entré, appuyez sur "Modifier les serveurs de noms". image.png

Après quelques minutes à ce stade, je pense que DNS a pénétré et le site s'affiche avec "http: // nom de domaine". image.png

5. [gratuit] Lancez un conteneur nginx sur une instance EC2 avec docker

6. [Gratuit] Obtenez un certificat SSL gratuit avec Let's Encrypt et connectez-vous avec https

5 et 6 se font en même temps. Je pense qu'il existe différentes façons de le faire, mais je vais essayer d'utiliser docker avec la configuration suivante.

--reverse: publie le conteneur ploxy sur Internet et accepte la communication https.

Untitled Diagram.png

Arrêtez tous les dockers

Pour éviter les dysfonctionnements, il est judicieux d'arrêter tous les conteneurs Docker et de supprimer tous les objets Docker avant de commencer le travail.

docker stop $(docker ps -q)
docker system prune -a

Créer et lancer un conteneur Web

Créez un répertoire Web sous le répertoire de base et créez les fichiers de configuration nécessaires.

cd
mkdir web

La structure sous le répertoire et le contenu des fichiers sont les suivants.

Structure du répertoire


web
  - html
      - index.html #Écrivez-le comme hoge
  - docker-compose.yml

docker-compose.yml


version: '3'

services:
  web:
    image: nginx:latest
    container_name: web
    volumes:
      - ./html:/usr/share/nginx/html

Après l'avoir créé, démarrez le conteneur Docker.

docker-compose up -d --build

Confirmez qu'il a démarré.

docker-compose ps
Name              Command               State   Ports
------------------------------------------------------
web    /docker-entrypoint.sh ngin ...   Up      80/tcp

Créer et démarrer un conteneur de proxy inverse

Créez un répertoire reverse-ploxy sous le répertoire de base et créez les fichiers de configuration requis.

cd
mkdir reverse-ploxy

En raison de difficultés, le contenu des fichiers et sous le répertoire a été configuré comme suit.

Structure du répertoire


reverse-proxy
  - reverse-proxy
    - default.conf
    - Dockerfile
    - entrypoint.sh
  - docker-compose.yml

default.conf


server{

    server_name y-do.tk;

    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location / {
      proxy_pass     http://web/;
    }

}

Dockerfile


FROM nginx

COPY default.conf /etc/nginx/conf.d/default.conf

RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

RUN apt-get update && apt-get install -y \
  wget cron && \
  apt-get clean && \
  rm -rf /var/lib/apt/lists/*

ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /usr/local/bin/wait-for-it.sh
RUN chmod +x /usr/local/bin/wait-for-it.sh

ADD https://dl.eff.org/certbot-auto /usr/local/bin/certbot-auto
RUN chmod a+x /usr/local/bin/certbot-auto
RUN certbot-auto --os-packages-only -n

COPY ./entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh

ENTRYPOINT ["entrypoint.sh"]

entrypoint.sh


#!/bin/bash

# [email protected] est une adresse e-mail
certbot-auto --nginx -d y-do.tk -m [email protected] --agree-tos -n
certbot-auto renew

# cron job settings
# Let's Encrypt automatic Renew
echo '0 8 * * * certbot-auto renew --post-hook "nginx -s reload"' >> /cron-tmpfile
crontab /cron-tmpfile
rm /cron-tmpfile

# cron start
/etc/init.d/cron start

/bin/bash

docker-compose.yml


version: '3'

services:
  reverse-proxy:
    build: ./reverse-proxy
    tty: true
    container_name: reverse-proxy
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - '/srv/letsencrypt:/etc/letsencrypt'
    command: ["wait-for-it.sh", "web:80"]
    networks:
      - default
      - web_default

networks:
  web_default:
    external: true

Après l'avoir créé, démarrez le conteneur Docker.

docker-compose up -d --build

Confirmez qu'il a démarré.

docker-compose ps
    Name                   Command               State                    Ports
-------------------------------------------------------------------------------------------------
reverse-proxy   entrypoint.sh wait-for-it. ...   Up      0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp

Mettez à jour les groupes de sécurité sur AWS pour vous connecter à partir d'Internet via https

Comme il est lu par FW, la communication https ne peut pas encore être acceptée à partir d'Internet. Modifiez les règles entrantes du groupe de sécurité AWS.

Ajoutez une règle et entrez le type "HTTPS" et la source "0.0.0.0/0". Après avoir entré, cliquez sur "Enregistrer la règle".

image.png

Contrôle de fonctionnement

À ce stade, vous devriez enfin pouvoir communiquer via https. J'essaierai d'y accéder.

image.png


image.png

J'ai pu y accéder! !! !!

résultat

Vous pouvez exploiter un site SSL avec votre propre domaine pour 0,5 USD par mois. Cependant, le domaine expire dans 12 mois et le certificat SSL expire dans 3 mois (je ne peux pas me plaindre car il est gratuit), donc j'aimerais introduire un mécanisme de renouvellement automatique à l'avenir.

Recommended Posts

[Presque gratuit] Comment obtenir un domaine et un certificat SSL pour 0 yen à l'aide de Freenom et Let's Encrypt, mettre un docker dans AWS EC2, démarrer un conteneur nginx et lancer un service WEB HTTPS qui se connecte à un domaine
Attendez que PostgreSQL démarre avec Docker, puis démarrez le service WEB
Comment démarrer un conteneur Docker avec un volume monté dans un fichier de commandes
[Docker] Comment mettre à jour à l'aide d'un conteneur dans Heroku et comment gérer l'erreur de migration
[Docker] Comment voir le contenu des volumes. Démarrez un conteneur avec les privilèges root.