ഈ ലേഖനത്തിൽ, ഡോക്കറിൽ പ്രവർത്തിക്കുന്ന നിങ്ങളുടെ വെബ് ആപ്ലിക്കേഷനായി ഒരു SSL സർട്ടിഫിക്കറ്റ് സൃഷ്ടിക്കുന്നതിനുള്ള ഒരു രീതി നിങ്ങളുമായി പങ്കിടാൻ ഞാൻ ആഗ്രഹിക്കുന്നു, കാരണം... ഇന്റർനെറ്റിന്റെ റഷ്യൻ ഭാഷാ ഭാഗത്ത് ഞാൻ അത്തരമൊരു പരിഹാരം കണ്ടെത്തിയില്ല.
കട്ടിന് താഴെയുള്ള കൂടുതൽ വിശദാംശങ്ങൾ.
ഞങ്ങൾക്ക് ഡോക്കർ v.17.05, ഡോക്കർ-കംപോസ് v.1.21, ഉബുണ്ടു സെർവർ 18, കൂടാതെ ഒരു പൈന്റ് ശുദ്ധമായ Let'sEncrypt എന്നിവ ഉണ്ടായിരുന്നു. ഡോക്കറിൽ ഉൽപ്പാദനം വിന്യസിക്കേണ്ടത് അത്യാവശ്യമാണെന്നല്ല. എന്നാൽ നിങ്ങൾ ഡോക്കർ നിർമ്മിക്കാൻ തുടങ്ങിയാൽ, അത് നിർത്താൻ പ്രയാസമാണ്.
അതിനാൽ, ആരംഭിക്കുന്നതിന്, ഞാൻ സ്റ്റാൻഡേർഡ് ക്രമീകരണങ്ങൾ നൽകും - ഞങ്ങൾക്ക് dev ഘട്ടത്തിൽ ഉണ്ടായിരുന്നു, അതായത്. പോർട്ട് 443 കൂടാതെ പൊതുവിൽ SSL:
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 / {
# 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 നടപ്പിലാക്കേണ്ടതുണ്ട്. സത്യം പറഞ്ഞാൽ, ഞാൻ ഏകദേശം 2 മണിക്കൂർ കോം സോൺ പഠിക്കാൻ ചെലവഴിച്ചു. അവിടെ വാഗ്ദാനം ചെയ്യുന്ന എല്ലാ ഓപ്ഷനുകളും രസകരമാണ്. എന്നാൽ പ്രോജക്റ്റിന്റെ നിലവിലെ ഘട്ടത്തിൽ, ഞങ്ങൾ (ബിസിനസ്) വേഗത്തിലും വിശ്വസനീയമായും സ്ക്രൂ ചെയ്യേണ്ടതുണ്ട് SSL Let'sEnctypt к nginx കണ്ടെയ്നർ കൂടാതെ മറ്റൊന്നും.
ഒന്നാമതായി, ഞങ്ങൾ ഇത് സെർവറിൽ ഇൻസ്റ്റാൾ ചെയ്തു certbot
sudo apt-get install certbot
അടുത്തതായി, ഞങ്ങളുടെ ഡൊമെയ്നിനായി ഞങ്ങൾ വൈൽഡ്കാർഡ് സർട്ടിഫിക്കറ്റുകൾ സൃഷ്ടിച്ചു
sudo certbot certonly -d stomup.ru -d *.stomup.ru --manual --preferred-challenges dns
നിർവ്വഹിച്ചതിന് ശേഷം, DNS ക്രമീകരണങ്ങളിൽ വ്യക്തമാക്കേണ്ട 2 TXT റെക്കോർഡുകൾ certbot ഞങ്ങൾക്ക് നൽകും.
_acme-challenge.stomup.ru TXT {тотКлючКоторыйВамВыдалCertBot}
ഒപ്പം എന്റർ അമർത്തുക.
ഇതിനുശേഷം, DNS-ൽ ഈ റെക്കോർഡുകളുടെ സാന്നിധ്യം certbot പരിശോധിക്കുകയും നിങ്ങൾക്കായി സർട്ടിഫിക്കറ്റുകൾ സൃഷ്ടിക്കുകയും ചെയ്യും.
നിങ്ങൾ ഒരു സർട്ടിഫിക്കറ്റ് ചേർത്തിട്ടുണ്ടെങ്കിൽ പക്ഷേ certbot അത് കണ്ടെത്തിയില്ല - 5-10 മിനിറ്റിന് ശേഷം കമാൻഡ് പുനരാരംഭിക്കാൻ ശ്രമിക്കുക.
ശരി, ഇവിടെ ഞങ്ങൾ 90 ദിവസത്തേക്ക് Let'sEncrypt സർട്ടിഫിക്കറ്റിന്റെ അഭിമാന ഉടമകളാണ്, എന്നാൽ ഇപ്പോൾ ഞങ്ങൾ അത് ഡോക്കറിലേക്ക് അപ്ലോഡ് ചെയ്യേണ്ടതുണ്ട്.
ഇത് ചെയ്യുന്നതിന്, ഏറ്റവും നിസ്സാരമായ രീതിയിൽ, docker-compose.yml-ൽ, nginx വിഭാഗത്തിൽ, ഞങ്ങൾ ഡയറക്ടറികൾ ലിങ്ക് ചെയ്യുന്നു.
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"
ലിങ്ക്ഡ്? കൊള്ളാം - നമുക്ക് തുടരാം:
ഇപ്പോൾ നമുക്ക് കോൺഫിഗറേഷൻ മാറ്റേണ്ടതുണ്ട് nginx കൂടെ പ്രവർത്തിക്കാൻ 443 തുറമുഖവും എസ്എസ്എൽ പൊതുവെ:
SSL ഉള്ള main.conf config ഉദാഹരണം
#
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;
}
}
യഥാർത്ഥത്തിൽ, ഈ കൃത്രിമത്വങ്ങൾക്ക് ശേഷം, ഞങ്ങൾ ഡോക്കർ-കംപോസ് ഉപയോഗിച്ച് ഡയറക്ടറിയിലേക്ക് പോകുന്നു, ഡോക്കർ-കമ്പോസ് അപ്പ് -ഡി എഴുതുക. ഞങ്ങൾ SSL-ന്റെ പ്രവർത്തനക്ഷമത പരിശോധിക്കുന്നു. എല്ലാം പറന്നുയരണം.
പ്രധാന കാര്യം, Let'sEnctypt സർട്ടിഫിക്കറ്റ് 90 ദിവസത്തേക്ക് നൽകിയിട്ടുണ്ടെന്നും നിങ്ങൾ അത് കമാൻഡ് വഴി പുതുക്കേണ്ടതുണ്ടെന്നും മറക്കരുത്. sudo certbot renew
, തുടർന്ന് കമാൻഡ് ഉപയോഗിച്ച് പ്രോജക്റ്റ് പുനരാരംഭിക്കുക docker-compose restart
ഈ ക്രമം ക്രോണ്ടാബിലേക്ക് ചേർക്കുന്നതാണ് മറ്റൊരു ഓപ്ഷൻ.
എന്റെ അഭിപ്രായത്തിൽ SSL-നെ ഡോക്കർ വെബ്-ആപ്പിലേക്ക് ബന്ധിപ്പിക്കുന്നതിനുള്ള ഏറ്റവും എളുപ്പമുള്ള മാർഗ്ഗമാണിത്.
PS വാചകത്തിൽ അവതരിപ്പിച്ചിരിക്കുന്ന എല്ലാ സ്ക്രിപ്റ്റുകളും അന്തിമമല്ലെന്ന് ദയവായി കണക്കിലെടുക്കുക, പ്രോജക്റ്റ് ഇപ്പോൾ ആഴത്തിലുള്ള ദേവ് ഘട്ടത്തിലാണ്, അതിനാൽ കോൺഫിഗറുകളെ വിമർശിക്കരുതെന്ന് ഞാൻ നിങ്ങളോട് ആവശ്യപ്പെടാൻ ആഗ്രഹിക്കുന്നു - അവ പലതവണ പരിഷ്കരിക്കപ്പെടും.
അവലംബം: www.habr.com