[Docker] Verwenden Sie Umgebungsvariablen in Nginx conf

Mit Rails & Puma möchten Sie möglicherweise SSL sowohl in Entwicklungs- als auch in Produktionsumgebungen verwenden. In meinem Fall habe ich darüber nachgedacht, ein Selbstzertifikat für das lokale und ein bei der Zertifizierungsstelle registriertes formelles Zertifikat für die Produktion zu verwenden, um es zu SSL zu machen. Zu diesem Zweck ist der Pfad jedes in der Nginx-Conf-Datei beschriebenen Zertifikats für Entwicklung und Produktion unterschiedlich. Daher haben wir beschlossen, nur diesen Teil mit Umgebungsvariablen zu verwenden. Notieren Sie sich den Montagevorgang, den Sie zu diesem Zeitpunkt durchgeführt haben.

Annahme

Die Methode besteht darin, einen Befehl namens envsubst zu verwenden, der eine Datei generiert, die aus der Datei mit dem Umgebungsvariablennamen in den der Umgebungsvariablen zugewiesenen Wert konvertiert wird.

Montagevorgang

Umgebungsvariablen werden als `$ {SSL_CERTIFICATE_PATH}` beschrieben.

conf:docker/nginx/default.conf.template



upstream app {
  server unix:///app/tmp/sockets/puma.sock;
}

server {
  listen 80;
  server_name  _;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  server_name localhost;

  ssl_certificate ${SSL_CERTIFICATE_PATH}; #Umgebungsvariable
  ssl_certificate_key ${SSL_CERTIFICATE_KEY_PATH}; #Umgebungsvariable
  ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers         HIGH:!aNULL:!MD5;

  access_log /var/log/nginx/access.log;
  error_log  /var/log/nginx/error.log;

  root /app/public;

  location / {
    proxy_pass http://app;
    proxy_set_header X-Real-IP $remote_addr;
    index index.html index.htm;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
  }

  client_max_body_size 100m;
  error_page 404             /404.html;
  error_page 505 502 503 504 /500.html;
  try_files  $uri/index.html $uri @app;
  keepalive_timeout 5;
}

Platzieren Sie default.conf.template in der Docker-Datei.

Dockerfile



FROM nginx:1.16
RUN apt-get update && \
  apt-get install -y apt-utils \
  locales && \
  echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \
  locale-gen ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
#Grundeinstellungsdatei
ADD ./docker/nginx/nginx.conf /etc/nginx/nginx.conf
ADD ./docker/nginx/default.conf.template /etc/nginx/conf.d/default.conf.template

Geben Sie die zu konvertierende Umgebungsvariable wie den Befehlsschlüssel des Nginx-Dienstes an und sorgen Sie dafür, dass envsubst funktioniert. Der Wert, der der Umgebungsvariablen zugewiesen werden soll, wird mit dem Umgebungsschlüssel festgelegt.

docker-compose.yml



version: '2'
services:
	app:
#···Kürzung
	db:
#···Kürzung
  nginx:
    build:
      context: .
      dockerfile: ./docker/nginx/Dockerfile
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - sockets:/app/tmp/sockets
      - ./docker/nginx/ssl:/etc/nginx/ssl
    depends_on:
      - app
    command: /bin/sh -c "envsubst '$$SSL_CERTIFICATE_PATH $$SSL_CERTIFICATE_KEY_PATH'< /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
    environment:
      SSL_CERTIFICATE_PATH: /etc/nginx/ssl/server.crt
      SSL_CERTIFICATE_KEY_PATH: /etc/nginx/ssl/server.key

#···Kürzung

Wenn der Container mit dem folgenden Befehl gestartet wird, wird der Befehl envsubst ausgeführt und aus der Datei (default.conf.template), die den Namen der Umgebungsvariablen beschreibt, wird eine Datei (default.conf) generiert, die in den der Umgebungsvariablen zugewiesenen Wert konvertiert wurde. es war erledigt.

$ docker-compose up -d

Referenz

Ein Allzweckmuster zum Einbetten von Umgebungsvariablen in eine Konfigurationsdatei mit Docker unter Verwendung von envsubst-Qiita

schließlich

Wenn Sie im Pfad und im Dateinamen keinen Fehler machen, werden Sie nicht gestolpert. Ich werde es versuchen, damit es auch in einer Produktionsumgebung funktioniert.

Recommended Posts

[Docker] Verwenden Sie Umgebungsvariablen in Nginx conf
Verwenden Sie Docker in einer Proxy-Umgebung unter Ubuntu 20.04.1
Verwendung von Umgebungsvariablen in RubyOnRails
Punkte, die beim Ausführen von vite + Nginx in der Docker-Umgebung hängen bleiben
Verwenden Sie Ruby-Variablen in Javascript.
Festlegen von Projektumgebungsvariablen mit IntelliJ
Verwenden Sie MailHog zum Überprüfen von E-Mails in der Entwicklungsumgebung (mit Docker).
[Docker] Erstellen einer Umgebung für Hugo
Bearbeiten Sie MySQL mit Befehlen in der Docker-Umgebung
Behandeln Sie Systemumgebungsvariablen in Spring application.properties
Verwendung von Docker in VSCode DevContainer
Verstehe in 5 Minuten !! Wie man Docker benutzt
[Umgebungskonstruktion] Rails + MySQL + Docker (Anfänger können es auch in 30 Minuten verwenden!)
Hinweis: Die Einstellungen für nginx.conf für CORS in der Umgebung von Exment on Lightsail + Docker (nginx)
Installieren Sie einfach Laravel 8 auf dem Docker in der PHP8-Umgebung
Wenn Java-Tests Umgebungsvariablen enthalten
Wenn nginx conf in der AWS Elastic Beanstalk + Rails-Umgebung nicht gut wiedergegeben wird
Schneller Docker / Nginx
[Rails] Verwendung von PostgreSQL in einer Vagrant-Umgebung
Ersetzen von Systemumgebungsvariablen durch Reflektion in Java
Migrationsfehler nach dem Zuordnen von Activerecord in der Rails5 + Docker-Umgebung (2)
Verwenden Sie einfach die benannte Gesichtserkennungsdemo von OpenVINO in Docker
Erstellen Sie die Entwicklungsumgebung von Docker + Laravel PHP + Vue.j in 5 Minuten
Migrationsfehler nach Activerecord-Zuordnung in der Rails5 + Docker-Umgebung
[Hinweis] Erstellen Sie eine Python3-Umgebung mit Docker in EC2
Beschleunigen Sie die langsame Bundle-Installation in der Docker-Umgebung erheblich
Befehlsnotiz zum Installieren von xeyes in der Ubuntu-Docker-Umgebung
Verwenden Sie Variablen für Klassennamen und ID-Namen in haml
SSL in der lokalen Umgebung von Docker / Rails / Puma
Erstellen einer Datenbankumgebung mit Docker in Spring Boot (IntellJ)
Anfänger verwenden Ubuntu im Fenster, um die Schienenumgebung vorzubereiten
Aufbau der Rails Docker-Umgebung
Verwenden Sie java.time mit Jackson
Verwenden Sie Puphpeteer mit Docker
Verwenden Sie Interceptor im Frühjahr
Verwenden Sie OpenCV mit Java
Verwenden Sie MouseListener für die Verarbeitung
Verwenden Sie Bilder mit Schienen
Verwenden Sie PostgreSQL in Scala
Verwenden Sie PreparedStatement in Java
Installieren / Ausführen eines eigenständigen Robotersimulators in der wsl2 / docker-Umgebung!