Në këtë artikull, do të doja të ndaja me ju një mënyrë për të krijuar një certifikatë SSL për aplikacionin tuaj web që punon në Docker, pasi nuk kam gjetur një zgjidhje të tillë në pjesën rusishtfolëse të internetit.

Lexoni më shumë më poshtë.
Ne kishim docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 dhe njĂ« pintĂ« tĂ« pastĂ«r LetâsEncrypt. Nuk Ă«shtĂ« se ishte domosdoshmĂ«ri tĂ« vendosni njĂ« prodhim nĂ« Docker, por kur filloni tĂ« ndĂ«rtoni Docker, bĂ«het e vĂ«shtirĂ« tĂ« ndaloni.
Kështu që, për fillim, do të sjell standardet e zakonshme - që kishim në fazën dev, dmth pa portin 443 dhe SSL në përgjithësi:
docker-compose.yml
version: '2'
services:
php:
build: .\/php-fpm
volumes:
- .\/StomUp:\/var\/www\/StomUp
- .\/php-fpm\/php.ini:\/usr\/local\/etc\/php\/php.ini
depends_on:
- mysql
container_name: "StomPHP"
web:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- .\/StomUp:\/var\/www\/StomUp
- .\/nginx\/main.conf:\/etc\/nginx\/conf.d\/default.conf
depends_on:
- php
mysql:
image: mysql:5.7
command: mysqld --sql_mode=""
environment:
MYSQL_ROOT_PASSWORD: xxx
ports:
- "3333:3306"
nginx\/main.conf
server {
listen 80;
server_name *.stomup.ru stomup.ru;
root \/var\/www\/StomUp\/public;
client_max_body_size 5M;
location \/ {
# provoni të shërbeni skedarin direkt, klikoni në index.php
try_files $uri \/index.php$is_args$args;
}
location ~ ^\/index.php(\/|$) {
#fastcgi_pass unix:\/var\/run\/php7.2-fpm.sock;
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+.php)(\/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
internal;
}
location ~ .php$ {
return 404;
}
error_log \/var\/log\/nginx\/project_error.log;
access_log \/var\/log\/nginx\/project_access.log;
}
MĂ« pas, ne duhet tĂ« realizojmĂ« SSL. TĂ« them tĂ« vĂ«rtetĂ«n â kam studiuar zonĂ«n com pĂ«r rreth 2 orĂ«. TĂ« gjitha opsionet e propozuara atje janĂ« interesante. Por nĂ« kĂ«tĂ« fazĂ« tĂ« projektit, na duhej (biznesit) tĂ« lidhim shpejt dhe nĂ« mĂ«nyrĂ« tĂ« sigurt SSL LetâsEncrypt nĂ« nginx me kontejnerin dhe asgjĂ« mĂ« shumĂ«.
Fillimisht, ne instalomë në server certbot
sudo apt-get install certbot
Pastaj, ne gjeneruam certifikata wildcard për e domenit
sudo certbot certonly -d stomup.ru -d *.stomup.ru --manual --preferred-challenges dns
pas pĂ«rfundimit certbot do t'ju ofrojĂ« 2 regjistrime TXT, tĂ« cilat duhet tâi vendosni nĂ« cilĂ«simet DNS.
_acme-challenge.stomup.ru TXT {çelësiqëJuDhaCertBot}
Dhe shtypni enter.
Pas kësaj, certbot do të verifikojë ekzistencën e këtyre regjistrimeve në DNS dhe do t'ju krijojë certifikatat.
nĂ«se keni shtuar certifikatĂ«n, por certbot nuk e ka gjendur â provoni tĂ« rinisni komandĂ«n pas 5-10 minutash.
Ja, tani ne jemi pronar tĂ« krenarĂ« tĂ« njĂ« certifikate LetâsEncrypt pĂ«r 90 ditĂ«, por tani na nevojitet ta lidhim nĂ« Docker.
PĂ«r kĂ«tĂ« thjesht nĂ« docker-compose.yml, nĂ« seksionin nginx â lidhim direktoritĂ«.
Shembuj docker-compose.yml me SSL
version: '2'
services:
php:
build: .\/php-fpm
volumes:
- .\/StomUp:\/var\/www\/StomUp
- \/etc\/letsencrypt\/live\/stomup.ru\/:\/etc\/letsencrypt\/live\/stomup.ru\/
- .\/php-fpm\/php.ini:\/usr\/local\/etc\/php\/php.ini
depends_on:
- mysql
container_name: "StomPHP"
web:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- .\/StomUp:\/var\/www\/StomUp
- \/etc\/letsencrypt\/:\/etc\/letsencrypt\/
- .\/nginx\/main.conf:\/etc\/nginx\/conf.d\/default.conf
depends_on:
- php
mysql:
image: mysql:5.7
command: mysqld --sql_mode=""
environment:
MYSQL_ROOT_PASSWORD: xxx
ports:
- "3333:3306"
E lidhĂ«m? Super â vazhdojmĂ«:
Tani duhet të ndryshojmë konfigurimin nginx për të punuar me 443 portin dhe SSL në përgjithësi:
Shembuj konfigu rash main.conf me SSL
#
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name *.stomup.ru stomup.ru;
set $base /var/www/StomUp;
root $base/public;
# SSL
ssl_certificate /etc/letsencrypt/live/stomup.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/stomup.ru/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/stomup.ru/chain.pem;
client_max_body_size 5M;
location / {
# try to serve file directly, fallback to index.php
try_files $uri /index.php$is_args$args;
}
location ~ ^/index.php(/|$) {
#fastcgi_pass unix:/var/run/php7.2-fpm.sock;
fastcgi_pass php:9000;
fastcgi_split_path_info ^(.+.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
internal;
}
location ~ .php$ {
return 404;
}
error_log /var/log/nginx/project_error.log;
access_log /var/log/nginx/project_access.log;
}
# HTTP redirect
server {
listen 80;
listen [::]:80;
server_name *.stomup.ru stomup.ru;
location / {
return 301 https://stomup.ru$request_uri;
}
}
Pas kĂ«tyre manipulimeve â shkojmĂ« nĂ« direktorinĂ« me Docker-compose, shkruajmĂ« docker-compose up -d. Dhe kontrollojmĂ« funksionalitetin e SSL. Duhet tĂ« funksionojĂ« gjithçka.
Mos harroni se certifikata LetâsEncrypt jepet pĂ«r 90 ditĂ« dhe do t'ju duhet ta rinovoni pĂ«rmes komandĂ«s sudo certbot renew, dhe pastaj tĂ« rinoprogramoni projektin me komandĂ«n docker-compose restart
Si njĂ« opsion â shtoni kĂ«tĂ« sekuencĂ« nĂ« crontab.
Në mendimin tim, ky është mënyra më e thjeshtë për të lidhur SSL me Docker Web-app.
P.S. Ju lutem merrni parasysh se tĂ« gjitha skriptet e paraqitura nĂ« tekst â nuk janĂ« pĂ«rfundimtare, projekti aktualisht Ă«shtĂ« nĂ« fazĂ«n e zhvillimit tĂ« thellĂ«, prandaj dĂ«shiroj t'ju kĂ«rkoj tĂ« mos kritikoni konfigurimet â ato do tĂ« ndryshojnĂ« shumĂ« herĂ«.
Burimi: habr.com
