Å ajÄ rakstÄ vÄlos dalÄ«ties ar veidu, kÄ izveidot SSL sertifikÄtu jÅ«su tÄ«mekļa lietojumprogrammai, kas darbojas uz Docker, jo krievvalodÄ«gajÄ daÄ¼Ä interneta lÄ«dzÄ«gu risinÄjumu neatradu.

Lasiet tÄlÄk.
Mums bija docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 un tÄ«rs LetāsEncrypt. NÄ, tas nebija obligÄti jÄveido ražoÅ”ana uz Docker. Bet, ja esi sÄcis veidot Docker, ir grÅ«ti apstÄties.
TÄtad, vispirms sniegÅ”u standartuzstÄdÄ«jumus ā kas mums bija dev posmÄ, t.i., bez 443 porta un SSL kopumÄ:
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 \/ {
# mÄÄ£iniet tieÅ”i nodroÅ”inÄt failu, lÄ«dzsvaro lÄ«dz 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;
}
TÄlÄk mums ir nepiecieÅ”ams Ä«stenot SSL. GodÄ«gi sakot ā es pavadÄ«ju apmÄram 2 stundas, pÄtot com zonu. Visi tur piedÄvÄtie varianti ir interesanti. Bet Å”ajÄ projekta posmÄ mums (biznesam) bija nepiecieÅ”ams Ätri un droÅ”i pievienot SSL LetāsEncrypt uz nginx konteineram un ne vairÄk.
Vispirms mÄs uzinstalÄjÄm serverÄ« certbot
sudo apt-get install certbot
TÄlÄk mÄs Ä£enerÄjÄm wildcard sertifikÄtus mÅ«su domÄns
sudo certbot certonly -d stomup.ru -d *.stomup.ru --manual --preferred-challenges dns
pÄc certbot izpildes jums tiks sniegtas 2 TXT ieraksti, kurus jÄnorÄda DNS iestatÄ«jumos.
_acme-challenge.stomup.ru TXT {atslÄga, kuru jums sniedza CertBot}
Un nospiežam enter.
PÄc tam certbot pÄrbaudÄ«s Å”o ierakstu pieejamÄ«bu DNS un izveidos sertifikÄtus.
ja jÅ«s pievienojÄt sertifikÄtu, bet certbot to neatrada ā mÄÄ£iniet atkÄrtot komandu pÄc 5-10 minÅ«tÄm.
Nu, lÅ«k, mÄs esam lepni LetāsEncrypt sertifikÄta Ä«paÅ”nieki uz 90 dienÄm, bet tagad mums tas jÄievieÅ” Docker.
Tam mÄs vienkÄrÅ”i docker-compose.yml failÄ, nginx sekcijÄ ā saistÄm direktorijas.
PiemÄrs docker-compose.yml ar 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"
Esat pievienojuÅ”i? Super ā turpinÄm:
Tagad mums ir jÄpÄrveido konfigurÄcija nginx darboÅ”anai ar 443 portu un SSL kopumÄ:
IzmÄÄ£inÄjuma config main.conf ar 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;
}
}
PÄc Ŕīm manipulÄcijÄm ā dodamies uz Docker-compose direktoriju, rakstÄm docker-compose up -d. Un pÄrbaudÄm SSL darbÄ«bu. Viss jÄdarbojas.
Galvenais, neaizmirstiet, ka LetāsEncrypt sertifikÄts tiek izsniegts uz 90 dienÄm un jums bÅ«s jÄatjauno to, izmantojot komandu sudo certbot renew, un pÄc tam pÄrstartÄjiet projektu ar komandu docker-compose restart
KÄ variants ā pievienot Å”o secÄ«bu crontab.
ManuprÄt, tas ir visvienkÄrÅ”Äkais veids, kÄ pievienot SSL Docker tÄ«mekļa lietotnei.
P.S. LÅ«dzu, Åemiet vÄrÄ, ka visi rakstÄ norÄdÄ«tie skripti nav galÄ«gi, Å”obrÄ«d projekts atrodas dziÄ¼Ä izstrÄdÄ, tÄpÄc lÅ«dzu, nekrÄ«tiet uz konfigurÄcijÄm ā tÄs vÄl daudzreiz tiks mainÄ«tas.
Avots: habr.com
