SSL վկայագիր Docker վեբ հավելվածի համար

Այս հոդվածում ես ուզում եմ ձեզ հետ կիսվել Docker-ով աշխատող ձեր վեբ հավելվածի համար SSL վկայագիր ստեղծելու մեթոդով, քանի որ... Համացանցի ռուսալեզու մասում նման լուծում չգտա։

SSL վկայագիր Docker վեբ հավելվածի համար

Ավելի մանրամասն կտրվածքի տակ։

Մենք ունեինք docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 և մի պինտ մաքուր Let'sEncrypt: Դա այն չէ, որ անհրաժեշտ է արտադրություն տեղակայել Docker-ում: Բայց երբ սկսում եք Docker-ը կառուցել, դժվար է դառնում կանգնեցնելը:

Այսպիսով, սկզբից ես կտամ ստանդարտ կարգավորումները, որոնք մենք ունեինք մշակման փուլում, այսինքն. առանց 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: Անկեղծ ասած, ես մոտ 2 ժամ ծախսեցի 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-ը մեզ կտրամադրի 2 TXT գրառում, որոնք պետք է նշվեն DNS-ի կարգավորումներում:

_acme-challenge.stomup.ru TXT {тотКлючКоторыйВамВыдалCertBot}


Եվ սեղմեք enter:

Դրանից հետո certbot-ը կստուգի այս գրառումների առկայությունը DNS-ում և կստեղծի վկայականներ ձեզ համար:
եթե ավելացրել եք վկայական, բայց վկայագիր չգտա. փորձեք վերագործարկել հրամանը 5-10 րոպե հետո.

Դե, այստեղ մենք Let'sEncrypt վկայագրի հպարտ սեփականատերն ենք 90 օրով, բայց այժմ մենք պետք է այն վերբեռնենք 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"

Կապված? Հիանալի - եկեք շարունակենք.

Այժմ մենք պետք է փոխենք կազմաձևը nginx հետ աշխատելու համար 443 նավահանգիստ և SSL ընդհանուր առմամբ:

Օրինակ 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;
	}
}

Փաստորեն, այս մանիպուլյացիաներից հետո Docker-compose-ով գնում ենք գրացուցակ, գրում ենք docker-compose up -d: Եվ մենք ստուգում ենք SSL-ի ֆունկցիոնալությունը: Ամեն ինչ պետք է հանվի:

Հիմնական բանը չպետք է մոռանալ, որ Let'sEnctypt վկայագիրը տրվում է 90 օրով, և դուք պետք է այն թարմացնեք հրամանի միջոցով: sudo certbot renew, և այնուհետև վերագործարկեք նախագիծը հրամանով docker-compose restart

Մեկ այլ տարբերակ այս հաջորդականությունը crontab-ին ավելացնելն է:

Իմ կարծիքով, սա SSL-ը Docker Web-հավելվածին միացնելու ամենադյուրին ճանապարհն է:

Հ.Գ. Խնդրում եմ հաշվի առեք, որ տեքստում ներկայացված բոլոր սցենարները վերջնական չեն, նախագիծն այժմ գտնվում է Dev-ի խորքային փուլում, ուստի կխնդրեի չքննադատել կոնֆիգուրները. դրանք բազմիցս փոփոխվելու են:

Source: www.habr.com

Добавить комментарий