Docker ဝဘ်-အက်ပ်အတွက် SSL လက်မှတ်

ဤဆောင်းပါးတွင်၊ Docker တွင်အသုံးပြုနေသောသင်၏ဝဘ်အက်ပလီကေးရှင်းအတွက် SSL လက်မှတ်ဖန်တီးရန်နည်းလမ်းကိုသင့်အားမျှဝေလိုသောကြောင့် ... အင်တာနက်၏ ရုရှားဘာသာစကား အစိတ်အပိုင်းတွင် ထိုသို့သော အဖြေကို ကျွန်ုပ် ရှာမတွေ့ပါ။

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

မှတ်ချက် Add