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

Më shumë detaje poshtë.
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Ă« zhvillosh prodhimin nĂ« Docker. Por kur fillove tĂ« ndĂ«rtosh Docker, bĂ«het e vĂ«shtirĂ« tĂ« ndalosh.
Pra, me njĂ« fillim do tĂ« jap standardet e konfigurimeve â 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 / {
# përpiquni të shërbeni skedarin direkt, në rast dështimi kthehuni 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, nĂ« fakt, na nevojitet tĂ« realizojmĂ« SSL. PĂ«r tĂ« qenĂ« i sinqertĂ« â studova zonĂ«n com pĂ«r rreth 2 orĂ«. TĂ« gjitha opsionet e propozuara atje janĂ« interesante. Por nĂ« kĂ«tĂ« fazĂ« tĂ« projektit, na (biznesit) na duhej tĂ« integronim shpejt dhe nĂ« mĂ«nyrĂ« tĂ« sigurt SSL LetâsEncrypt pĂ«r nginx kontratĂ«s sĂ« dhe jo mĂ« shumĂ«.
Në radhë të parë, ne instaluam në server certbot
sudo apt-get install certbot
Pastaj gjeneruam certifikatat wildcard për tonë domenit
sudo certbot certonly -d stomup.ru -d *.stomup.ru --manual --preferred-challenges dns
pas përfundimit certbot do të ofrojë 2 shkronja TXT, të cilat duhet të specifikoni në konfigurimet e DNS.
_acme-challenge.stomup.ru TXT {nĂ«KyĂelĂ«sQĂ«JuDhĂ«roiCertBot}
Dhe shtypni enter.
Pas kësaj certbot do të kontrollojë praninë e këtyre shënimeve në DNS dhe do t'ju krijojë certifikatat.
nĂ«se keni shtuar certifikatĂ«n, por certbot nuk e gjeti â provoni tĂ« rivendosni komandĂ«n pas 5-10 minutes.
Ja, tani jemi pronarĂ« krenarĂ« tĂ« certifikatĂ«s LetâsEncrypt pĂ«r 90 ditĂ«, por tani duhet ta lidhim atĂ« me Docker.
PĂ«r ta bĂ«rĂ« kĂ«tĂ«, thjesht nĂ« docker-compose.yml, nĂ« seksionin nginx â lidhim drejtoritĂ«.
Shembulli 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 na nevojitet të ndryshojmë konfigurimin nginx për të punuar me 443 portin dhe SSL në përgjithësi:
Shembulli i konfigurimit 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 manovrave â shkojmĂ« nĂ« drejtorinĂ« me Docker-compose, shkruajmĂ« docker-compose up -d. Dhe kontrollojmĂ« funksionalitetin e SSL. Duhet gjithçka tĂ« funksionojĂ«.
MĂ« e rĂ«ndĂ«sishmja, mos harroni qĂ« certifikata LetâsEncrypt jepet pĂ«r 90 ditĂ« dhe do t'ju duhet ta rinovoni pĂ«rmes komandĂ«s sudo certbot renew, dhe pas kĂ«saj riktheni projektin me komandĂ«n docker-compose restart
Si njĂ« alternativĂ« â shtoni kĂ«tĂ« sekuencĂ« nĂ« crontab.
Në mendimin tim, kjo është mënyra më e thjeshtë për të lidhur SSL me Docker Web-app.
P.S. Ju lutem merrni parasysh se tĂ« gjithĂ« skriptet e paraqitura nĂ« tekst â nuk janĂ« pĂ«rfundimtare, projekti aktualisht Ă«shtĂ« nĂ« fazĂ«n e thellĂ« tĂ« zhvillimit, prandaj dĂ«shiroj tĂ« ju lutem tĂ« mos kritikoni konfigurimet â ato do tĂ« ndryshojnĂ« shumĂ« herĂ«.
Burimi: habr.com
