Docker ويب ايپ لاءِ SSL سرٽيفڪيٽ

هن آرٽيڪل ۾، مان توهان سان حصيداري ڪرڻ چاهيان ٿو هڪ ايس ايس ايل سرٽيفڪيٽ ٺاهڻ لاءِ هڪ طريقو توهان جي ويب ايپليڪيشن لاءِ Docker تي هلندڙ، ڇاڪاڻ ته ... مون کي انٽرنيٽ جي روسي-ٻولي حصي ۾ اهڙو حل نه مليو.

Docker ويب ايپ لاءِ SSL سرٽيفڪيٽ

ڪٽ جي هيٺان وڌيڪ تفصيل.

اسان وٽ docker v.17.05، docker-compose v.1.21، Ubuntu Server 18 ۽ خالص Let'sEncrypt جو هڪ پن هو. اهو نه آهي ته اهو ضروري آهي ته Docker تي پيداوار کي ترتيب ڏيو. پر هڪ دفعو توهان Docker تعمير ڪرڻ شروع ڪيو، ان کي روڪڻ ڏکيو ٿيندو.

تنهن ڪري، شروع ڪرڻ سان، آئون معياري سيٽنگون ڏيندس - جيڪي اسان وٽ ديو اسٽيج تي هئا، يعني. بغير پورٽ 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 ڪلاڪ گذاريا com زون جي مطالعي ۾. اتي پيش ڪيل سڀ اختيار دلچسپ آھن. پر منصوبي جي موجوده مرحلي تي، اسان (ڪاروبار) کي جلدي ۽ معتبر طور تي ڇڪڻ جي ضرورت آهي SSL اچو Enctypt к نگنڪس ڪنٽينر ۽ وڌيڪ ڪجھ به نه.

سڀ کان پهريان، اسان ان کي سرور تي نصب ڪيو سرٽيبٽ
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}


۽ پريس ڪريو enter.

ان کان پوء، سرٽيبوٽ DNS ۾ انهن رڪارڊ جي موجودگي جي جانچ ڪندو ۽ توهان لاء سرٽيفڪيٽ ٺاهيندو.
جيڪڏهن توهان هڪ سرٽيفڪيٽ شامل ڪيو آهي پر سرٽيبٽ اهو نه مليو - 5-10 منٽن کان پوء حڪم ٻيهر شروع ڪرڻ جي ڪوشش ڪريو.

خير، هتي اسان 90 ڏينهن لاءِ Let'sEncrypt سرٽيفڪيٽ جا فخر ڪندڙ مالڪ آهيون، پر هاڻي اسان کي ان کي Docker تي اپلوڊ ڪرڻو پوندو.

هن کي ڪرڻ لاء، تمام معمولي طريقي سان، docker-compose.yml ۾، nginx سيڪشن ۾، اسان ڊائريڪٽرن کي ڳنڍيندا آهيون.

مثال docker-compose.yml 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"

ڳنڍيل؟ عظيم - اچو ته جاري رکون:

هاڻي اسان کي ترتيب تبديل ڪرڻ جي ضرورت آهي نگنڪس سان ڪم ڪرڻ 443 بندرگاهه ۽ ايس ايس ايل عام طور تي:

مثال main.conf ترتيب 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;
	}
}

دراصل، انهن ڦيرڦار کان پوء، اسان ڊاڪر-ڪمپوز سان ڊاريڪٽري ۾ وڃون ٿا، ڊڪر-ڪمپوز اپ -d. ۽ اسان SSL جي ڪارڪردگي جي جانچ ڪريون ٿا. هر شي کي ختم ڪرڻ گهرجي.

بنيادي شيء اهو نه وسارڻ گهرجي ته Let'sEnctypt سرٽيفڪيٽ 90 ڏينهن لاء جاري ڪيو ويو آهي ۽ توهان کي حڪم ذريعي تجديد ڪرڻ جي ضرورت پوندي. sudo certbot renew، ۽ پوءِ ڪمانڊ سان منصوبي کي ٻيهر شروع ڪريو docker-compose restart

ٻيو اختيار اهو آهي ته هن ترتيب کي ڪرنٽاب ۾ شامل ڪيو وڃي.

منهنجي خيال ۾ SSL کي Docker Web-app سان ڳنڍڻ جو اهو آسان طريقو آهي.

PS مھرباني ڪري ھن ڳالھ کي ڌيان ۾ رکو ته متن ۾ پيش ڪيل سڀئي اسڪرپٽ حتمي نه آھن، پروجيڪٽ ھاڻي ڊيپ ڊيو اسٽيج تي آھي، تنھنڪري مان توھان کي عرض ڪرڻ چاھيان ٿو ته ٺاھ جوڙ تي تنقيد نه ڪريو- اھي ڪيترائي ڀيرا تبديل ڪيا ويندا.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو