[Fast kostenlos] So erhalten Sie mit Freenom und Let's Encrypt eine Domain und ein SSL-Zertifikat für 0 Yen, setzen einen Docker in AWS EC2, starten einen Nginx-Container und starten einen HTTPS-WEB-Dienst, der eine Verbindung mit einer Domain herstellt

Hintergrund

Wenn Sie eine für Unternehmen verwendete Technologie oder eine neue Technologie ausprobieren möchten, richten Sie einen Webserver in AWS ein, bereiten Sie eine API oder Testseite vor, stellen Sie über ein lokales Chrome- oder Android-Terminal eine Verbindung zu http her, und machen Sie es ganz gut. .. Dies ist in Ordnung, um die Kommunikation von RestAPI zu überprüfen. Wenn Sie es jedoch für die WebRTC- oder WebSocket-Überprüfung verwenden möchten, gab es ein Problem, bei dem Sie den Vorgang nicht überprüfen konnten, da ein Fehler auftreten würde, wenn die Site nicht SSL-fähig wäre. Nachdem untersucht worden war, ob es möglich wäre, einen Webserver einzurichten, der billig ist und kein Oleore-Zertifikat, stellte sich heraus, dass es bei Verwendung von Freenom und Let's Encrypt möglich wäre, einen https-Server mit einer eigenen Domain fast kostenlos einzurichten.

Wenn Sie nach der Domain-Erfassungsmethode mit Freenom, der SSL-Zertifikatserfassungsmethode mit Let's Encrypt, der Methode zum Festlegen mit AWS usw. suchen, gibt es Fragmente, aber da es keinen vollständigen Artikel gab, werde ich sie hier als Memorandum belassen. Behalte es.

Dinge die zu tun sind

  1. [Kostenlos] Holen Sie sich eine kostenlose Domain mit Freenom
  2. [Bedingt frei] Erstellen Sie eine AWS EC2-Instanz und installieren Sie das Docker
  3. [Bedingt frei] Geben Sie eine statische IP-Adresse mit AWS Elastic IP aus und ordnen Sie sie einer EC2-Instanz zu
  4. [Fast kostenlos] Stellen Sie DNS auf AWS Route53 so ein, dass Sie eine Verbindung zu einer EC2-Instanz mit einem Domänennamen herstellen können.
  5. [Kostenlos] Starten Sie einen Nginx-Container auf einer EC2-Instanz mit Docker
  6. [Kostenlos] Holen Sie sich ein kostenloses SSL-Zertifikat mit Let's Encrypt und stellen Sie eine Verbindung mit https her

Kostenlose Bedingungen und fast kostenlose Details

--AWS EC2-Instanzen verwenden die kostenlose Schicht

1. [Kostenlos] Holen Sie sich eine kostenlose Domain mit Freenom

Ich werde es sofort tun. Domains werden über einen Dienst namens Freenom abgerufen. Freenom ist ein Überseedienst, mit dem Sie kostenlos eine Domain erwerben können. Sie können XXXX.tk, XXXX.ml, XXXX.ga usw. kostenlos als Domainnamen erhalten. https://www.freenom.com/ja/index.html

Stellen Sie sicher, dass die Domain verfügbar ist, und checken Sie aus

Sie können die Domain erhalten, die Ihnen gefällt. Geben Sie also die Domain ein, die Sie erhalten möchten. Überprüfen Sie, ob es verfügbar ist, und wenn es verfügbar ist, wird der folgende Bildschirm angezeigt. Klicken Sie auf "Jetzt herunterladen!" Und dann auf "Auschecken".

image.png


image.png

Wählen Sie den Nutzungszeitraum

Es scheint, dass Sie es bis zu 12 Monate lang kostenlos nutzen können. Lassen Sie es uns also maximal nutzen. Wählen Sie im Zeitraum "12 Monate @ KOSTENLOS" und klicken Sie auf "Weiter".

image.png

Benutzerregistrierung oder Login

** Stellen Sie sicher, dass der Betrag $ 0.00USD (kostenlos) ist **. Wenn es kein Problem gibt, melden Sie sich zum Kauf an. In meinem Fall habe ich mich bereits registriert, daher melde ich mich normalerweise bei Google an. Wenn Sie sich nicht zum ersten Mal registriert haben, müssen Sie sich möglicherweise auf verschiedene Arten registrieren. image.png

Stimmen Sie den Bedingungen und dem Kauf zu

** Bestätigen Sie erneut, dass der Betrag 0,00 USD (kostenlos) beträgt **, überprüfen Sie die Übereinstimmung mit den Bedingungen und klicken Sie auf "Bestellung abschließen".

image.png


image.png


image.png

Damit ist der Erwerb der Domain abgeschlossen.

2. [Bedingt frei] Erstellen Sie eine AWS EC2-Instanz und installieren Sie das Docker

Sie können einen anderen Artikel verwenden, den ich so geschrieben habe, wie er ist. Bitte lesen Sie hier ↓.

Installieren von Docker und Docker-Compose auf einer AWS EC2-Instanz und Starten eines einfachen WEB-Dienstes

3. Geben Sie eine statische IP-Adresse mit AWS Elastic IP aus und ordnen Sie sie einer EC2-Instanz zu

Erhalten Sie eine statische IP-Adresse (feste IP-Adresse) und weisen Sie diese IP-Adresse der oben gestarteten EC2-Instanz zu. Auf diese Weise ändert sich die IP-Adresse auch dann nicht, wenn EC2 neu gestartet wird.

Holen Sie sich eine statische IP-Adresse

Bedienen Sie zunächst den Bildschirm, um eine statische IP-Adresse zu erhalten. Drücken Sie "Elastic IP" und image.png Klicken Sie im nächsten Bildschirm auf "Elastic IP Address zuweisen". image.png Klicken Sie im nächsten Bildschirm auf "Zuweisen". image.png Ich habe eine statische IP-Adresse. image.png

Ordnen Sie einer EC2-Instanz eine statische IP-Adresse zu

Wählen Sie die zugewiesene IP-Adresse aus und klicken Sie unter "Aktion" auf "Elastische IP-Adresse zuordnen". image.png Geben Sie für die Instanz die zuvor erstellte EC2-Instanz-ID ein. Klicken Sie nach der Eingabe auf "Verknüpfen". image.png

Die Zuordnung zwischen der EC2-Instanz und der statischen IP-Adresse ist abgeschlossen. image.png

4. [Fast kostenlos] Stellen Sie DNS auf AWS Route 53 so ein, dass Sie eine Verbindung zu einer EC2-Instanz mit einem Domänennamen herstellen können.

Stellen Sie den DNS so ein, dass Sie eine Verbindung mit dem Domänennamen herstellen können. Befolgen Sie die Anweisungen zum Erstellen einer Hostzone → Registrieren eines A-Datensatzes → Einstellen des Nameservers bei Freenom.

Erstellen einer gehosteten Zone

Gehen Sie zum Bildschirm Route53 und image.png Klicken Sie auf "Host Zone". image.png Klicken Sie auf "Hostzone erstellen". image.png Geben Sie die von Freenom erhaltene Domain ein und klicken Sie auf "Hostzone erstellen". image.png Die Erstellung der Hostzone ist abgeschlossen. image.png

Erstellen Sie einen Datensatz

Klicken Sie auf "Datensatz erstellen". image.png Stellen Sie sicher, dass standardmäßig einfaches Routing ausgewählt ist, und klicken Sie auf "Weiter". image.png Klicken Sie auf "Einfachen Datensatz definieren". image.png Geben Sie nach Auswahl von "IP-Adresse nach Datensatztyp oder einem anderen Wert" im Ziel "Wert / Verkehrsrouting" die zuvor erhaltene statische IP-Adresse ein und klicken Sie auf "Einfachen Datensatz definieren". image.png Klicken Sie auf Datensatz erstellen. image.png Die Datensatzerstellung ist abgeschlossen. image.png

Nameserver-Einstellungen

Stellen Sie nun den Nameserver in Freenom ein.

Drücken Sie im nächsten Bildschirm auf "Meine Domains" und dann auf "Domain verwalten".

image.png


image.png Klicken Sie unter "Management Tools" auf "Nameserver". image.png Wählen Sie "Benutzerdefinierte Nameserver verwenden (unten eingeben)" und kopieren Sie den Wert des NS-Datensatzes der Route53-Hostzone in das Feld "Nameserver". Drücken Sie nach der Eingabe auf "Name Server ändern". image.png

Nach einigen Minuten an diesem Punkt denke ich, dass DNS eingedrungen ist und die Site mit "http: // Domain Name" angezeigt wird. image.png

5. [Kostenlos] Starten Sie einen Nginx-Container auf einer EC2-Instanz mit Docker

6. [Kostenlos] Holen Sie sich mit Let's Encrypt ein kostenloses SSL-Zertifikat und stellen Sie eine Verbindung mit https her

5 und 6 sind sofort erledigt. Ich denke, es gibt verschiedene Möglichkeiten, dies zu tun, aber ich werde versuchen, Docker mit der folgenden Konfiguration zu verwenden.

--reverse-Veröffentlichen Sie den Ploxy-Container im Internet und akzeptieren Sie die https-Kommunikation. --Reverse-Transfer-Kommunikation von Ploxy-Container zu Web-Container, Web-Container akzeptiert http-Kommunikation von Reverse-Ploxy.

Untitled Diagram.png

Stoppen Sie alle Hafenarbeiter

Um Fehlfunktionen zu vermeiden, sollten Sie alle Docker-Container stoppen und alle Docker-Objekte löschen, bevor Sie mit der Arbeit beginnen.

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

Erstellen und starten Sie einen Webcontainer

Erstellen Sie ein Webverzeichnis unter dem Ausgangsverzeichnis und erstellen Sie die erforderlichen Konfigurationsdateien.

cd
mkdir web

Die Struktur unter dem Verzeichnis und der Inhalt der Dateien sind wie folgt.

Verzeichnisaufbau


web
  - html
      - index.html #Schreiben Sie es als hoge
  - docker-compose.yml

docker-compose.yml


version: '3'

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

Starten Sie nach dem Erstellen den Docker-Container.

docker-compose up -d --build

Bestätigen Sie, dass es gestartet wurde.

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

Erstellen und starten Sie den Reverse-Proxy-Container

Erstellen Sie ein Reverse-Ploxy-Verzeichnis unter dem Home-Verzeichnis und erstellen Sie die erforderlichen Konfigurationsdateien.

cd
mkdir reverse-ploxy

Aufgrund von Problemen wurde der Inhalt der Dateien und des Verzeichnisses wie folgt konfiguriert.

Verzeichnisaufbau


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] ist eine E-Mail-Adresse
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

Starten Sie nach dem Erstellen den Docker-Container.

docker-compose up -d --build

Bestätigen Sie, dass es gestartet wurde.

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

Aktualisieren Sie die Sicherheitsgruppen in AWS, um über https eine Verbindung über das Internet herzustellen

Da es von FW gespielt wird, kann die https-Kommunikation noch nicht aus dem Internet akzeptiert werden. Ändern Sie die eingehenden Regeln für AWS-Sicherheitsgruppen.

Fügen Sie eine Regel hinzu und geben Sie den Typ "HTTPS" und die Quelle "0.0.0.0/0" ein. Klicken Sie nach der Eingabe auf "Regel speichern".

image.png

Funktionsprüfung

Zu diesem Zeitpunkt sollten Sie endlich in der Lage sein, über https zu kommunizieren. Ich werde versuchen, darauf zuzugreifen.

image.png


image.png

Ich konnte darauf zugreifen! !! !!

Ergebnis

Sie können eine SSL-Site mit Ihrer eigenen Domain für 0,5 USD pro Monat betreiben. Die Domain läuft jedoch in 12 Monaten ab und das SSL-Zertifikat läuft in 3 Monaten ab (ich kann mich nicht beschweren, da es kostenlos ist). Daher möchte ich in Zukunft einen automatischen Verlängerungsmechanismus einführen.

Recommended Posts

[Fast kostenlos] So erhalten Sie mit Freenom und Let's Encrypt eine Domain und ein SSL-Zertifikat für 0 Yen, setzen einen Docker in AWS EC2, starten einen Nginx-Container und starten einen HTTPS-WEB-Dienst, der eine Verbindung mit einer Domain herstellt
Warten Sie, bis PostgreSQL mit Docker gestartet ist, und starten Sie dann den WEB-Dienst
So starten Sie einen Docker-Container mit einem in einer Batchdatei bereitgestellten Volume
[Docker] Wie man mit einem Container in Heroku aktualisiert und wie man mit Migrate Error umgeht
[Docker] So sehen Sie den Inhalt von Volumes. Starten Sie einen Container mit Root-Rechten.