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.
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.
Umgebungsvariablen werden als `$ {SSL_CERTIFICATE_PATH}`
beschrieben.
`$ {SSL_CERTIFICATE_PATH}`
und
$ {SSL_CERTIFICATE_KEY_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
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