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à.
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.
Les variables d'environnement sont décrites comme `` $ {SSL_CERTIFICATE_PATH} ''
$ {SSL_CERTIFICATE_PATH} '' et
$ {SSL_CERTIFICATE_KEY_PATH} '' sont décrits.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
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.