SSL сСртификат Π·Π° ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Docker

Π’ Ρ‚Π°Π·ΠΈ статия искам Π΄Π° сподСля с вас ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° създаванС Π½Π° SSL сСртификат Π·Π° Π²Π°ΡˆΠ΅Ρ‚ΠΎ ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΎ Π½Π° Docker, Π·Π°Ρ‰ΠΎΡ‚ΠΎ... НС Π½Π°ΠΌΠ΅Ρ€ΠΈΡ… Ρ‚Π°ΠΊΠΎΠ²Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² рускоСзичната част Π½Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚.

SSL сСртификат Π·Π° ΡƒΠ΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Docker

ΠŸΠΎΠ²Π΅Ρ‡Π΅ подробности ΠΏΠΎΠ΄ ΠΊΡ€ΠΎΠΉΠΊΠ°Ρ‚Π°.

Π˜ΠΌΠ°Ρ…ΠΌΠ΅ docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 ΠΈ ΠΏΠΈΠ½Ρ‚Π° чист Let'sEncrypt. НС Ρ‡Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅ продукция Π½Π° Docker. Но слСд ΠΊΠ°Ρ‚ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ Docker, става Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° спрСтС.

И Ρ‚Π°ΠΊΠ°, ΠΊΠ°Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ Ρ‰Π΅ Π΄Π°ΠΌ стандартнитС настройки - ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ…ΠΌΠ΅ Π½Π° Π΅Ρ‚Π°ΠΏ dev, Ρ‚.Π΅. Π±Π΅Π· ΠΏΠΎΡ€Ρ‚ 443 ΠΈ SSL ΠΊΠ°Ρ‚ΠΎ цяло:

Π΄ΠΎΠΊΠ΅Ρ€-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


слСд изпълнСниС, certbot Ρ‰Π΅ Π½ΠΈ прСдостави 2 TXT записа, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ посочСни Π² DNS настройкитС.

_acme-challenge.stomup.ru TXT {Ρ‚ΠΎΡ‚ΠšΠ»ΡŽΡ‡ΠšΠΎΡ‚ΠΎΡ€Ρ‹ΠΉΠ’Π°ΠΌΠ’Ρ‹Π΄Π°Π»CertBot}


И натиснСтС enter.

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° certbot Ρ‰Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚Π΅Π·ΠΈ записи Π² DNS ΠΈ Ρ‰Π΅ създадС сСртификати Π·Π° вас.
Π°ΠΊΠΎ стС Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ сСртификат, Π½ΠΎ certbot Π½Π΅ Π³ΠΎ Π½Π°ΠΌΠ΅Ρ€ΠΈ - ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π° рСстартиратС ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° слСд 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.

PS Моля, ΠΈΠΌΠ°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ всички скриптовС, прСдставСни Π² тСкста, Π½Π΅ са ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»Π½ΠΈ, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ сСга Π΅ Π½Π° Π΅Ρ‚Π°ΠΏ Deep Dev, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π±ΠΈΡ… искал Π΄Π° Π²ΠΈ помоля Π΄Π° Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΡƒΠ²Π°Ρ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ - Ρ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ промСняни ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€