ਇਸ ਲੇਖ ਵਿੱਚ, ਮੈਂ ਤੁਹਾਡੇ ਨਾਲ ਡੌਕਰ 'ਤੇ ਚੱਲ ਰਹੀ ਤੁਹਾਡੀ ਵੈਬ ਐਪਲੀਕੇਸ਼ਨ ਲਈ ਇੱਕ SSL ਸਰਟੀਫਿਕੇਟ ਬਣਾਉਣ ਦਾ ਇੱਕ ਤਰੀਕਾ ਸਾਂਝਾ ਕਰਨਾ ਚਾਹੁੰਦਾ ਹਾਂ, ਕਿਉਂਕਿ ... ਮੈਨੂੰ ਇੰਟਰਨੈੱਟ ਦੇ ਰੂਸੀ-ਭਾਸ਼ਾ ਵਾਲੇ ਹਿੱਸੇ ਵਿੱਚ ਅਜਿਹਾ ਕੋਈ ਹੱਲ ਨਹੀਂ ਮਿਲਿਆ।
ਕੱਟ ਦੇ ਅਧੀਨ ਹੋਰ ਵੇਰਵੇ.
ਸਾਡੇ ਕੋਲ docker v.17.05, docker-compose v.1.21, Ubuntu ਸਰਵਰ 18 ਅਤੇ ਸ਼ੁੱਧ Let'sEncrypt ਦਾ ਇੱਕ ਪਿੰਟ ਸੀ। ਅਜਿਹਾ ਨਹੀਂ ਹੈ ਕਿ ਡੌਕਰ 'ਤੇ ਉਤਪਾਦਨ ਨੂੰ ਤੈਨਾਤ ਕਰਨਾ ਜ਼ਰੂਰੀ ਹੈ. ਪਰ ਇੱਕ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਡੌਕਰ ਬਣਾਉਣਾ ਸ਼ੁਰੂ ਕਰ ਦਿੰਦੇ ਹੋ, ਤਾਂ ਇਸਨੂੰ ਰੋਕਣਾ ਮੁਸ਼ਕਲ ਹੋ ਜਾਂਦਾ ਹੈ.
ਇਸ ਲਈ, ਸ਼ੁਰੂ ਕਰਨ ਲਈ, ਮੈਂ ਮਿਆਰੀ ਸੈਟਿੰਗਾਂ ਦੇਵਾਂਗਾ - ਜੋ ਸਾਡੇ ਕੋਲ dev ਪੜਾਅ 'ਤੇ ਸੀ, i.e. ਆਮ ਤੌਰ 'ਤੇ ਪੋਰਟ 443 ਅਤੇ SSL ਤੋਂ ਬਿਨਾਂ:
ਡੌਕਰ-ਕੰਪੋਜ਼.ਆਈ.ਐਮ.ਐਲ.
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 / {
# 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;
}
ਅੱਗੇ, ਸਾਨੂੰ ਅਸਲ ਵਿੱਚ SSL ਨੂੰ ਲਾਗੂ ਕਰਨ ਦੀ ਲੋੜ ਹੈ. ਈਮਾਨਦਾਰ ਹੋਣ ਲਈ, ਮੈਂ com ਜ਼ੋਨ ਦਾ ਅਧਿਐਨ ਕਰਨ ਲਈ ਲਗਭਗ 2 ਘੰਟੇ ਬਿਤਾਏ. ਉੱਥੇ ਪੇਸ਼ ਕੀਤੇ ਗਏ ਸਾਰੇ ਵਿਕਲਪ ਦਿਲਚਸਪ ਹਨ. ਪਰ ਪ੍ਰੋਜੈਕਟ ਦੇ ਮੌਜੂਦਾ ਪੜਾਅ 'ਤੇ, ਸਾਨੂੰ (ਕਾਰੋਬਾਰ) ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ ਅਤੇ ਭਰੋਸੇਯੋਗਤਾ ਨਾਲ ਪੇਚ ਕਰਨ ਦੀ ਲੋੜ ਸੀ SSL ਆਓ Enctypt ਕਰੀਏ к nginx ਕੰਟੇਨਰ ਅਤੇ ਹੋਰ ਕੁਝ ਨਹੀਂ।
ਸਭ ਤੋਂ ਪਹਿਲਾਂ, ਅਸੀਂ ਇਸਨੂੰ ਸਰਵਰ 'ਤੇ ਸਥਾਪਿਤ ਕੀਤਾ ਸਰਟੀਫਿਕੇਟ
sudo apt-get install certbot
ਅੱਗੇ, ਅਸੀਂ ਆਪਣੇ ਡੋਮੇਨ ਲਈ ਵਾਈਲਡਕਾਰਡ ਸਰਟੀਫਿਕੇਟ ਤਿਆਰ ਕੀਤੇ
sudo certbot certonly -d stomup.ru -d *.stomup.ru --manual --preferred-challenges dns
ਐਗਜ਼ੀਕਿਊਸ਼ਨ ਤੋਂ ਬਾਅਦ, certbot ਸਾਨੂੰ 2 TXT ਰਿਕਾਰਡ ਪ੍ਰਦਾਨ ਕਰੇਗਾ ਜੋ DNS ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਦਰਸਾਏ ਜਾਣ ਦੀ ਲੋੜ ਹੈ।
_acme-challenge.stomup.ru TXT {тотКлючКоторыйВамВыдалCertBot}
ਅਤੇ ਐਂਟਰ ਦਬਾਓ।
ਇਸ ਤੋਂ ਬਾਅਦ, certbot DNS ਵਿੱਚ ਇਹਨਾਂ ਰਿਕਾਰਡਾਂ ਦੀ ਮੌਜੂਦਗੀ ਦੀ ਜਾਂਚ ਕਰੇਗਾ ਅਤੇ ਤੁਹਾਡੇ ਲਈ ਸਰਟੀਫਿਕੇਟ ਬਣਾਏਗਾ।
ਜੇਕਰ ਤੁਸੀਂ ਇੱਕ ਸਰਟੀਫਿਕੇਟ ਜੋੜਿਆ ਹੈ ਪਰ ਸਰਟੀਫਿਕੇਟ ਇਹ ਨਹੀਂ ਮਿਲਿਆ - 5-10 ਮਿੰਟਾਂ ਬਾਅਦ ਕਮਾਂਡ ਨੂੰ ਮੁੜ ਚਾਲੂ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ.
ਖੈਰ, ਇੱਥੇ ਅਸੀਂ 90 ਦਿਨਾਂ ਲਈ Let'sEncrypt ਸਰਟੀਫਿਕੇਟ ਦੇ ਮਾਣ ਵਾਲੇ ਮਾਲਕ ਹਾਂ, ਪਰ ਹੁਣ ਸਾਨੂੰ ਇਸਨੂੰ ਡੌਕਰ 'ਤੇ ਅਪਲੋਡ ਕਰਨ ਦੀ ਲੋੜ ਹੈ।
ਅਜਿਹਾ ਕਰਨ ਲਈ, ਸਭ ਤੋਂ ਮਾਮੂਲੀ ਤਰੀਕੇ ਨਾਲ, docker-compose.yml ਵਿੱਚ, nginx ਭਾਗ ਵਿੱਚ, ਅਸੀਂ ਡਾਇਰੈਕਟਰੀਆਂ ਨੂੰ ਜੋੜਦੇ ਹਾਂ।
SSL ਦੇ ਨਾਲ ਉਦਾਹਰਨ docker-compose.yml
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"
ਲਿੰਕ ਕੀਤਾ? ਸ਼ਾਨਦਾਰ - ਚਲੋ ਜਾਰੀ ਰੱਖੀਏ:
ਹੁਣ ਸਾਨੂੰ ਸੰਰਚਨਾ ਬਦਲਣ ਦੀ ਲੋੜ ਹੈ nginx ਨਾਲ ਕੰਮ ਕਰਨ ਲਈ 443 ਪੋਰਟ ਅਤੇ SSL ਨੂੰ ਆਮ ਤੌਰ 'ਤੇ:
SSL ਨਾਲ main.conf ਸੰਰਚਨਾ ਦੀ ਉਦਾਹਰਨ
#
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;
}
}
ਅਸਲ ਵਿੱਚ, ਇਹਨਾਂ ਹੇਰਾਫੇਰੀਆਂ ਤੋਂ ਬਾਅਦ, ਅਸੀਂ ਡੌਕਰ-ਕੰਪੋਜ਼ ਦੇ ਨਾਲ ਡਾਇਰੈਕਟਰੀ ਵਿੱਚ ਜਾਂਦੇ ਹਾਂ, ਡੌਕਰ-ਕੰਪੋਜ਼ ਅਪ -d ਲਿਖਦੇ ਹਾਂ। ਅਤੇ ਅਸੀਂ SSL ਦੀ ਕਾਰਜਕੁਸ਼ਲਤਾ ਦੀ ਜਾਂਚ ਕਰਦੇ ਹਾਂ। ਸਭ ਕੁਝ ਉਤਾਰਨਾ ਚਾਹੀਦਾ ਹੈ.
ਮੁੱਖ ਗੱਲ ਇਹ ਨਾ ਭੁੱਲੋ ਕਿ Let'sEnctypt ਸਰਟੀਫਿਕੇਟ 90 ਦਿਨਾਂ ਲਈ ਜਾਰੀ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਤੁਹਾਨੂੰ ਕਮਾਂਡ ਦੁਆਰਾ ਇਸਨੂੰ ਰੀਨਿਊ ਕਰਨ ਦੀ ਜ਼ਰੂਰਤ ਹੋਏਗੀ sudo certbot renew
, ਅਤੇ ਫਿਰ ਕਮਾਂਡ ਨਾਲ ਪ੍ਰੋਜੈਕਟ ਨੂੰ ਮੁੜ ਚਾਲੂ ਕਰੋ docker-compose restart
ਇੱਕ ਹੋਰ ਵਿਕਲਪ ਇਸ ਕ੍ਰਮ ਨੂੰ ਕ੍ਰੋਨਟੈਬ ਵਿੱਚ ਜੋੜਨਾ ਹੈ।
ਮੇਰੀ ਰਾਏ ਵਿੱਚ ਇਹ SSL ਨੂੰ ਡੌਕਰ ਵੈੱਬ-ਐਪ ਨਾਲ ਜੋੜਨ ਦਾ ਸਭ ਤੋਂ ਆਸਾਨ ਤਰੀਕਾ ਹੈ.
PS ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਵਿੱਚ ਰੱਖੋ ਕਿ ਟੈਕਸਟ ਵਿੱਚ ਪੇਸ਼ ਕੀਤੀਆਂ ਸਾਰੀਆਂ ਸਕ੍ਰਿਪਟਾਂ ਅੰਤਮ ਨਹੀਂ ਹਨ, ਪ੍ਰੋਜੈਕਟ ਹੁਣ ਡੂੰਘੇ ਦੇਵ ਪੜਾਅ 'ਤੇ ਹੈ, ਇਸ ਲਈ ਮੈਂ ਤੁਹਾਨੂੰ ਸੰਰਚਨਾ ਦੀ ਆਲੋਚਨਾ ਨਾ ਕਰਨ ਲਈ ਕਹਿਣਾ ਚਾਹਾਂਗਾ - ਉਹਨਾਂ ਨੂੰ ਕਈ ਵਾਰ ਸੋਧਿਆ ਜਾਵੇਗਾ।
ਸਰੋਤ: www.habr.com