เชกเซ‹เช•เชฐ เชตเซ‡เชฌ-เชเชช เชฎเชพเชŸเซ‡ SSL เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ

เช† เชฒเซ‡เช–เชฎเชพเช‚, เชนเซเช‚ เชคเชฎเชพเชฐเซ€ เชธเชพเชฅเซ‡ เชกเซ‹เช•เชฐ เชชเชฐ เชšเชพเชฒเชคเซ€ เชคเชฎเชพเชฐเซ€ เชตเซ‡เชฌ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเชพเชŸเซ‡ SSL เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชชเชฆเซเชงเชคเชฟ เชถเซ‡เชฐ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚, เช•เชพเชฐเชฃ เช•เซ‡... เชฎเชจเซ‡ เช‡เชจเซเชŸเชฐเชจเซ‡เชŸเชจเชพ เชฐเชถเชฟเชฏเชจ-เชญเชพเชทเชพเชจเชพ เชญเชพเช—เชฎเชพเช‚ เช†เชตเซ‹ เช‰เช•เซ‡เชฒ เชฎเชณเซเชฏเซ‹ เชจเชฅเซ€.

เชกเซ‹เช•เชฐ เชตเซ‡เชฌ-เชเชช เชฎเชพเชŸเซ‡ SSL เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ

เช•เชŸ เชนเซ‡เช เชณ เชตเชงเซ เชตเชฟเช—เชคเซ‹.

เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 เช…เชจเซ‡ เชถเซเชฆเซเชง Let'sEncrypt เชจเซ‹ เชชเชฟเชจเซเชŸ เชนเชคเซ‹. เชเชตเซเช‚ เชจเชฅเซ€ เช•เซ‡ เชกเซ‹เช•เชฐ เชชเชฐ เช‰เชคเซเชชเชพเชฆเชจ เชœเชฎเชพเชตเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เชชเชฐเช‚เชคเซ เชเช•เชตเชพเชฐ เชคเชฎเซ‡ เชกเซ‹เช•เชฐ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‹, เชคเซ‡เชจเซ‡ เชฐเซ‹เช•เชตเซเช‚ เชฎเซเชถเซเช•เซ‡เชฒ เชฌเชจเซ€ เชœเชพเชฏ เช›เซ‡.

เชคเซ‡เชฅเซ€, เชถเชฐเซ‚ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชนเซเช‚ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เช†เชชเซ€เชถ - เชœเซ‡ เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชกเซ‡เชต เชธเซเชŸเซ‡เชœ เชชเชฐ เชนเชคเซ€, เชเชŸเชฒเซ‡ เช•เซ‡. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชชเซ‹เชฐเซเชŸ 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 เช•เชฒเชพเช• เช—เชพเชณเซเชฏเชพ. เชคเซเชฏเชพเช‚ เช“เชซเชฐ เช•เชฐเซ‡เชฒเชพ เชฌเชงเชพ เชตเชฟเช•เชฒเซเชชเซ‹ เชฐเชธเชชเซเชฐเชฆ เช›เซ‡. เชชเชฐเช‚เชคเซ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเชพ เชตเชฐเซเชคเชฎเชพเชจ เชคเชฌเช•เซเช•เซ‡, เช…เชฎเชจเซ‡ (เชตเซเชฏเชตเชธเชพเชฏเชจเซ‡) เชเชกเชชเชฅเซ€ เช…เชจเซ‡ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เชฐเซ€เชคเซ‡ เชธเซเช•เซเชฐเซ‚ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเชคเซ€ SSL เชšเชพเชฒเซ‹ Enctypt เช•เชฐเซ€เช ะบ 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}


เช…เชจเซ‡ เชเชจเซเชŸเชฐ เชฆเชฌเชพเชตเซ‹.

เช† เชชเช›เซ€, certbot DNS เชฎเชพเช‚ เช† เชฐเซ‡เช•เซ‹เชฐเซเชกเซเชธเชจเซ€ เชนเชพเชœเชฐเซ€ เชฎเชพเชŸเซ‡ เชคเชชเชพเชธ เช•เชฐเชถเซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐเซ‹ เชฌเชจเชพเชตเชถเซ‡.
เชœเซ‹ เชคเชฎเซ‡ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เช‰เชฎเซ‡เชฐเซเชฏเซเช‚ เชนเซ‹เชฏ เชชเชฐเช‚เชคเซ เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชคเซ‡ เชฎเชณเซเชฏเซเช‚ เชจเชฅเซ€ - 5-10 เชฎเชฟเชจเชฟเชŸ เชชเช›เซ€ เช†เชฆเซ‡เชถเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ‹.

เช เซ€เช• เช›เซ‡, เช…เชนเซ€เช‚ เช…เชฎเซ‡ 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"

เชฒเชฟเช‚เช• เช•เชฐเซ‡เชฒ เช›เซ‡? เชธเชฐเชธ - เชšเชพเชฒเซ‹ เชšเชพเชฒเซ เชฐเชพเช–เซ€เช:

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพ เชฌเชฆเชฒเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ nginx เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ 443 เชฌเช‚เชฆเชฐ เช…เชจเซ‡ SSL เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡:

SSL เชธเชพเชฅเซ‡ main.conf เชฐเซ‚เชชเชฐเซ‡เช–เชพเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ

#
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 เชจเซ‡ เชกเซ‹เช•เชฐ เชตเซ‡เชฌ-เชเชช เชธเชพเชฅเซ‡ เชœเซ‹เชกเชตเชพเชจเซ‹ เช† เชธเซŒเชฅเซ€ เชธเชนเซ‡เชฒเซ‹ เชฐเชธเซเชคเซ‹ เช›เซ‡.

เชชเซ€เชเชธ เชฎเชนเซ‡เชฐเชฌเชพเชจเซ€ เช•เชฐเซ€เชจเซ‡ เชงเซเชฏเชพเชจเชฎเชพเช‚ เชฒเซ‹ เช•เซ‡ เชŸเซ‡เช•เซเชธเซเชŸเชฎเชพเช‚ เชชเซเชฐเชธเซเชคเซเชค เชฌเชงเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ‹ เช…เช‚เชคเชฟเชฎ เชจเชฅเซ€, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชนเชตเซ‡ เชตเชฟเช•เชพเชธเชจเชพ เชŠเช‚เชกเชพ เชคเชฌเช•เซเช•เชพเชฎเชพเช‚ เช›เซ‡, เชคเซ‡เชฅเซ€ เชนเซเช‚ เชคเชฎเชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“เชจเซ€ เชŸเซ€เช•เชพ เชจ เช•เชฐเชตเชพ เช•เชนเซ‡เชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚ - เชคเซ‡เชฎเชพเช‚ เช˜เชฃเซ€ เชตเช–เชค เชซเซ‡เชฐเชซเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹