[Docker] Utiliser des variables d'environnement dans Nginx conf

Avec Rails & puma, vous souhaiterez peut-être utiliser SSL dans les environnements de développement et de production. Dans mon cas, je pensais utiliser un auto-certificat pour le local et un certificat formel enregistré auprès de l'autorité de certification pour la production afin de le rendre SSL. Pour cela, le chemin de chaque certificat décrit dans le fichier de configuration Nginx est différent pour le développement et la production, nous avons donc décidé de n'utiliser que cette partie avec les variables d'environnement. Notez la procédure de montage que vous avez effectuée à ce moment-là.

supposition

La méthode consiste à utiliser une commande appelée envsubst qui génère un fichier converti à partir du fichier contenant le nom de la variable d'environnement en la valeur affectée à la variable d'environnement.

Procédure de montage

Les variables d'environnement sont décrites comme `` $ {SSL_CERTIFICATE_PATH} ''

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}; #Variable d'environnement
  ssl_certificate_key ${SSL_CERTIFICATE_KEY_PATH}; #Variable d'environnement
  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;
}

Placez default.conf.template dans le Dockerfile.

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
#Fichier de configuration initiale
ADD ./docker/nginx/nginx.conf /etc/nginx/nginx.conf
ADD ./docker/nginx/default.conf.template /etc/nginx/conf.d/default.conf.template

Spécifiez la variable d'environnement à convertir comme la touche de commande du service nginx et faites fonctionner envsubst. La valeur à affecter à la variable d'environnement est définie avec la clé d'environnement.

docker-compose.yml



version: '2'
services:
	app:
#···réduction
	db:
#···réduction
  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

#···réduction

Lorsque le conteneur est démarré avec la commande suivante, la commande envsubst est exécutée et un fichier (default.conf) converti en la valeur affectée à la variable d'environnement est généré à partir du fichier (default.conf.template) qui décrit le nom de la variable d'environnement. c'était fait.

$ docker-compose up -d

référence

Un modèle à usage général pour incorporer des variables d'environnement dans un fichier de configuration avec Docker à l'aide d'envsubst-Qiita

enfin

Si vous ne faites pas d'erreur dans le chemin et le nom du fichier, vous ne serez pas trébuché. Je vais l'essayer pour qu'il fonctionne même dans un environnement de production.

Recommended Posts

[Docker] Utiliser des variables d'environnement dans Nginx conf
Utiliser docker dans un environnement proxy sur ubuntu 20.04.1
Comment utiliser les variables d'environnement dans RubyOnRails
Points bloqués lors de l'exécution de vite + Nginx dans l'environnement Docker
Utilisez des variables ruby en javascript.
Définition des variables d'environnement de projet avec intelliJ
Utilisez MailHog pour vérifier le courrier dans l'environnement de développement (à l'aide de Docker)
[Docker] Création d'un environnement pour utiliser Hugo
Modifier Mysql avec des commandes dans l'environnement Docker
Gérer les variables d'environnement système dans Spring application.properties
Comment utiliser Docker dans VSCode DevContainer
Comprendre en 5 minutes !! Comment utiliser Docker
[Construction de l'environnement] Rails + MySQL + Docker (les débutants peuvent également l'utiliser en 30 minutes!)
Remarque: paramètres nginx.conf pour CORS dans Exment sur l'environnement Lightsail + Docker (nginx)
Installez simplement Laravel 8 sur le docker dans l'environnement PHP8
Lorsqu'il y a des variables d'environnement dans les tests Java
Lorsque nginx conf n'est pas bien reflété dans l'environnement AWS Elastic Beanstalk + Rails
Docker rapide / nginx
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
Remplacement des variables d'environnement système par réflexion en Java
Erreur de migration après avoir associé Activerecord dans l'environnement Rails5 + Docker (2)
Utilisez simplement la démo de reconnaissance de visage nommée d'OpenVINO dans Docker
Créez un environnement de développement Docker + Laravel PHP + Vue.js en 5 minutes
Erreur de migration après l'association Activerecord dans l'environnement Rails5 + Docker
[Note] Créez un environnement Python3 avec Docker dans EC2
Accélérez considérablement l'installation lente du bundle dans l'environnement Docker
Mémo de commande pour installer xeyes dans l'environnement docker ubuntu
Utiliser des variables pour les noms de classe et les noms d'identifiant dans haml
SSL dans l'environnement local de Docker / Rails / puma
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Les débutants utilisent ubuntu dans la fenêtre pour préparer l'environnement des rails
Construction de l'environnement Rails Docker
Utilisez java.time avec Jackson
Utiliser Puphpeteer avec Docker
Utilisez Interceptor au printemps
Utiliser OpenCV avec Java
Utiliser MouseListener avec le traitement
Utiliser des images avec des rails
Utiliser PostgreSQL dans Scala
Utiliser PreparedStatement en Java
Installez / exécutez un simulateur de robot autonome dans l'environnement wsl2 / docker!