ဤဆောင်းပါးတွင်၊ Docker တွင်အသုံးပြုနေသောသင်၏ဝဘ်အက်ပလီကေးရှင်းအတွက် SSL လက်မှတ်ဖန်တီးရန်နည်းလမ်းကိုသင့်အားမျှဝေလိုသောကြောင့် ... အင်တာနက်၏ ရုရှားဘာသာစကား အစိတ်အပိုင်းတွင် ထိုသို့သော အဖြေကို ကျွန်ုပ် ရှာမတွေ့ပါ။
ဖြတ်တောက်မှုအောက်တွင်အသေးစိတ်။
ကျွန်ုပ်တို့တွင် docker v.17.05၊ docker-compose v.1.21၊ Ubuntu Server 18 နှင့် Let'sEncrypt ၏ တစ်ပိုင့်ရှိသည်။ Docker တွင် ထုတ်လုပ်မှုကို ဖြန့်ကျက်ရန် မလိုအပ်ပါ။ ဒါပေမယ့် Docker ကို စတင်တည်ဆောက်ပြီးတာနဲ့ ရပ်တန့်ဖို့ ခက်ခဲလာပါတယ်။
ထို့ကြောင့်၊ စတင်ရန်အတွက်၊ ကျွန်ုပ်တို့သည် dev အဆင့်တွင်ရှိသော စံဆက်တင်များကို ပေးပါမည်။ ယေဘုယျအားဖြင့် port 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 ကို အမှန်တကယ်အကောင်အထည်ဖော်ရန် လိုအပ်ပါသည်။ ရိုးရိုးသားသားပြောရရင် ကျွန်တော် com zone ကို ၂ နာရီခန့် လေ့လာခဲ့ပါတယ်။ အဲဒီမှာ ကမ်းလှမ်းထားတဲ့ ရွေးချယ်စရာတွေအားလုံးက စိတ်ဝင်စားစရာပါ။ သို့သော် ပရောဂျက်၏ လက်ရှိအဆင့်တွင်၊ ကျွန်ုပ်တို့ (လုပ်ငန်း) သည် လျင်မြန်ပြီး ယုံကြည်စိတ်ချရသော ဝက်အူလမ်းကြောင်းကို လိုအပ်နေပါသည်။ SSL Let'sEnctypt к nginx ကွန်တိန်နာနှင့်ဘာမှမပို။
ပထမဦးစွာ၊ ကျွန်ုပ်တို့ ၎င်းကို ဆာဗာပေါ်တွင် ထည့်သွင်းခဲ့သည်။ ကျားကန်
sudo apt-get install certbot
ထို့နောက်၊ ကျွန်ုပ်တို့သည် ကျွန်ုပ်တို့၏ဒိုမိန်းအတွက် ခရင်မ်ကတ်လက်မှတ်များကို ထုတ်ပေးပါသည်။
sudo certbot certonly -d stomup.ru -d *.stomup.ru --manual --preferred-challenges dns
ကွပ်မျက်ပြီးနောက်၊ certbot သည် DNS ဆက်တင်များတွင် သတ်မှတ်ထားရန်လိုအပ်သော TXT မှတ်တမ်း 2 ခုကို ပေးပါမည်။
_acme-challenge.stomup.ru TXT {тотКлючКоторыйВамВыдалCertBot}
ပြီးလျှင် enter နှိပ်ပါ။
၎င်းပြီးနောက်၊ certbot သည် DNS တွင် ဤမှတ်တမ်းများရှိနေခြင်းကို စစ်ဆေးပြီး သင့်အတွက် လက်မှတ်များကို ဖန်တီးပေးမည်ဖြစ်သည်။
Certificate ထည့်ထားရင် ကျားကန် မတွေ့ပါ - 5-10 မိနစ်အကြာတွင် command ကိုပြန်လည်စတင်ကြည့်ပါ။.
ကောင်းပြီ၊ ဤတွင် ကျွန်ုပ်တို့သည် ရက် 90 ကြာ Let'sEncrypt လက်မှတ်၏ ပိုင်ရှင်များဖြစ်ကြသော်လည်း ယခုအခါ ၎င်းကို Docker သို့ အပ်လုဒ်လုပ်ရန် လိုအပ်ပါသည်။
ဒါကိုလုပ်ဖို့၊ 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"
ချိတ်ဆက်မလား။ ကောင်းတယ် - ဆက်ကြည့်ရအောင်။
ယခုကျွန်ုပ်တို့သည် config ကိုပြောင်းလဲရန်လိုအပ်သည်။ nginx အတူအလုပ်လုပ်ရန် 443 ဆိပ်ကမ်းနှင့် SSL ကို ယေဘုယျအားဖြင့်-
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;
}
}
အမှန်တော့၊ ဤစီမံမှုများပြီးနောက်၊ ကျွန်ုပ်တို့သည် Docker-compose ဖြင့် လမ်းညွှန်သို့သွားကာ docker-compose up -d ကိုရေးပါ။ SSL ၏ လုပ်ဆောင်နိုင်စွမ်းကို ကျွန်ုပ်တို့ စစ်ဆေးပါသည်။ အရာအားလုံး ဆုတ်ခွာသွားသင့်တယ်။
အဓိကအချက်မှာ Let'sEnctypt လက်မှတ်ကို ရက်ပေါင်း 90 ထုတ်ပေးထားပြီး ၎င်းကို အမိန့်ဖြင့် သက်တမ်းတိုးရန် လိုအပ်မည်ကို မမေ့ပါနှင့်။ sudo certbot renew
၊ ထို့နောက် command ဖြင့် ပရောဂျက်ကို ပြန်လည်စတင်ပါ။ docker-compose restart
အခြားရွေးချယ်စရာမှာ crontab တွင် ဤ sequence ကိုထည့်ရန်ဖြစ်သည်။
ကျွန်တော့်အမြင်အရတော့ ဒါက Docker Web-app နဲ့ SSL ကို ချိတ်ဆက်ဖို့ အလွယ်ဆုံးနည်းလမ်းပါပဲ။
ကျေးဇူးပြု၍ စာသားတွင်တင်ပြထားသော script များအားလုံးသည် နောက်ဆုံးမဟုတ်ပါ၊ ပရောဂျက်သည် ယခုအခါ နက်ရှိုင်းသော Dev အဆင့်သို့ရောက်ရှိနေပြီဖြစ်သောကြောင့် configs များကို မဝေဖန်ပါရန် တောင်းဆိုလိုပါသည်- ၎င်းတို့ကို အကြိမ်များစွာ ပြုပြင်သွားမည်ဖြစ်ပါသည်။
source: www.habr.com