แžœแžทแž‰แŸ’แž‰แžถแž”แž“แž”แžแŸ’แžš SSL แžŸแž˜แŸ’แžšแžถแž”แŸ‹ Docker web-app

แž“แŸ…แž€แŸ’แž“แžปแž„แžขแžแŸ’แžแž”แž‘แž“แŸแŸ‡ แžแŸ’แž‰แžปแŸ†แž…แž„แŸ‹แž…แŸ‚แž€แžšแŸ†แž›แŸ‚แž€แž‡แžถแž˜แžฝแž™แžขแŸ’แž“แž€แž“แžผแžœแžœแžทแž’แžธแžŸแžถแžŸแŸ’แžšแŸ’แžแž”แž„แŸ’แž€แžพแžแžœแžทแž‰แŸ’แž‰แžถแž”แž“แž”แžแŸ’แžš SSL แžŸแž˜แŸ’แžšแžถแž”แŸ‹แž€แž˜แŸ’แž˜แžœแžทแž’แžธแž‚แŸแž แž‘แŸ†แž–แŸแžšแžšแž”แžŸแŸ‹แžขแŸ’แž“แž€แžŠแŸ‚แž›แžŠแŸ†แžŽแžพแžšแž€แžถแžšแž›แžพ Docker แž–แŸ’แžšแŸ„แŸ‡... แžแŸ’แž‰แžปแŸ†แž˜แžทแž“แž”แžถแž“แžšแž€แžƒแžพแž‰แžŠแŸ†แžŽแŸ„แŸ‡แžŸแŸ’แžšแžถแž™แž”แŸ‚แž”แž“แŸแŸ‡แž“แŸ…แž€แŸ’แž“แžปแž„แž•แŸ’แž“แŸ‚แž€แž‡แžถแž—แžถแžŸแžถแžšแžปแžŸแŸ’แžŸแžธแž“แŸƒแžขแŸŠแžธแž“แž’แžบแžŽแžทแžแž‘แŸแŸ”

แžœแžทแž‰แŸ’แž‰แžถแž”แž“แž”แžแŸ’แžš SSL แžŸแž˜แŸ’แžšแžถแž”แŸ‹ Docker web-app

แž–แŸแžแŸŒแž˜แžถแž“แž›แž˜แŸ’แžขแžทแžแž”แž“แŸ’แžแŸ‚แž˜แž“แŸ…แž€แŸ’แžšแŸ„แž˜แž€แžถแžšแž€แžถแžแŸ‹แŸ”

แž™แžพแž„แž˜แžถแž“ docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 แž“แžทแž„แž˜แžฝแž™แž…แŸ†แž“แžฝแž“แž“แŸƒ Let'sEncrypt แžŸแžปแž‘แŸ’แž’แŸ” แžœแžถแž˜แžทแž“แž˜แŸ‚แž“แžแžถแžœแžถแž…แžถแŸ†แž”แžถแž…แŸ‹แžŠแžพแž˜แŸ’แž”แžธแžŠแžถแž€แŸ‹แž–แž„แŸ’แžšแžถแž™แž•แž›แžทแžแž€แž˜แŸ’แž˜แž“แŸ…แž›แžพ Docker แž“แŸ„แŸ‡แž‘แŸแŸ” แž”แŸ‰แžปแž“แŸ’แžแŸ‚แž“แŸ…แž–แŸแž›แžŠแŸ‚แž›แžขแŸ’แž“แž€แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž”แž„แŸ’แž€แžพแž Docker แžœแžถแž€แŸ’แž›แžถแž™แž‡แžถแž€แžถแžšแž›แŸ†แž”แžถแž€แž€แŸ’แž“แžปแž„แž€แžถแžšแž”แž‰แŸ’แžˆแž”แŸ‹แŸ”

แžŠแžผแž…แŸ’แž“แŸแŸ‡ แžŠแžพแž˜แŸ’แž”แžธแž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž‡แžถแž˜แžฝแž™ แžแŸ’แž‰แžปแŸ†แž“แžนแž„แž•แŸ’แžแž›แŸ‹แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžŸแŸ’แžแž„แŸ‹แžŠแžถแžš - แžŠแŸ‚แž›แž™แžพแž„แž˜แžถแž“แž“แŸ…แžŠแŸ†แžŽแžถแž€แŸ‹แž€แžถแž› dev แž–แŸ„แž›แž‚แžบแžงแŸ” แžŠแŸ„แž™แž‚แŸ’แž˜แžถแž“แž…แŸ’แžšแž€ 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 Let'sEnctypt ะบ nginx แž’แžปแž„แž“แžทแž„แž‚แŸ’แž˜แžถแž“แžขแŸ’แžœแžธแž‘แŸ€แžแž‘แŸแŸ”

แžŠแŸ†แž”แžผแž„โ€‹แž™แžพแž„โ€‹แž”แžถแž“โ€‹แžŠแŸ†แžกแžพแž„โ€‹แžœแžถโ€‹แž“แŸ…โ€‹แž›แžพ server แžœแžทแž‰แŸ’แž‰แžถแž”แž“แž”แŸแžแŸ’แžš
sudo apt-get install certbot

แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€ แž™แžพแž„แž”แžถแž“แž”แž„แŸ’แž€แžพแžแžœแžทแž‰แŸ’แž‰แžถแž”แž“แž”แžแŸ’แžšแž‡แŸ†แž“แžฝแžŸแžŸแž˜แŸ’แžšแžถแž”แŸ‹แžŠแŸ‚แž“แžšแž”แžŸแŸ‹แž™แžพแž„แŸ”

sudo certbot certonly -d stomup.ru -d *.stomup.ru --manual --preferred-challenges dns


แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž€แžถแžšแž”แŸ’แžšแžแžทแž”แžแŸ’แžแžท certbot แž“แžนแž„แž•แŸ’แžแž›แŸ‹แžฑแŸ’แž™แž™แžพแž„แž“แžผแžœแž€แŸ†แžŽแžแŸ‹แžแŸ’แžšแžถ TXT แž…แŸ†แž“แžฝแž“ 2 แžŠแŸ‚แž›แžแŸ’แžšแžผแžœแž€แžถแžšแž”แž‰แŸ’แž‡แžถแž€แŸ‹แž“แŸ…แž€แŸ’แž“แžปแž„แž€แžถแžšแž€แŸ†แžŽแžแŸ‹ DNS แŸ”

_acme-challenge.stomup.ru TXT {ั‚ะพั‚ะšะปัŽั‡ะšะพั‚ะพั€ั‹ะนะ’ะฐะผะ’ั‹ะดะฐะปCertBot}


แž แžพแž™แž…แžปแž…แž”แž‰แŸ’แž…แžผแž›แŸ”

แž”แž“แŸ’แž‘แžถแž”แŸ‹แž–แžธแž“แŸแŸ‡ 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 config แž‡แžถแž˜แžฝแž™ 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 แžกแžพแž„ -d แŸ” แž แžพแž™แž™แžพแž„แž–แžทแž“แžทแžแŸ’แž™แž˜แžพแž›แž˜แžปแžแž„แžถแžšแžšแž”แžŸแŸ‹ SSL แŸ” แžขแŸ’แžœแžธแž‚แŸ’แžšแž”แŸ‹แž™แŸ‰แžถแž„แž‚แžฝแžšแžแŸ‚แžŠแž€แž…แŸแž‰แŸ”

แžšแžฟแž„แž…แŸ†แž”แž„แž‚แžบแž€แžปแŸ†แž—แŸ’แž›แŸแž…แžแžถแžœแžทแž‰แŸ’แž‰แžถแž”แž“แž”แžแŸ’แžš Let'sEnctypt แžแŸ’แžšแžผแžœแž”แžถแž“แž…แŸแž‰แžŸแž˜แŸ’แžšแžถแž”แŸ‹แžšแž™แŸˆแž–แŸแž› 90 แžแŸ’แž„แŸƒแž แžพแž™แžขแŸ’แž“แž€แž“แžนแž„แžแŸ’แžšแžผแžœแž”แž“แŸ’แžแžœแžถแžแžถแž˜แžšแž™แŸˆแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถแŸ” sudo certbot renewแž แžพแž™แž”แž“แŸ’แž‘แžถแž”แŸ‹แž˜แž€แž…แžถแž”แŸ‹แž•แŸ’แžแžพแž˜แž‚แž˜แŸ’แžšแŸ„แž„แžกแžพแž„แžœแžทแž‰แžŠแŸ„แž™แž”แŸ’แžšแžพแž–แžถแž€แŸ’แž™แž”แž‰แŸ’แž‡แžถ docker-compose restart

แž‡แž˜แŸ’แžšแžพแžŸแž˜แžฝแž™แž‘แŸ€แžแž‚แžบแžแŸ’แžšแžผแžœแž”แž“แŸ’แžแŸ‚แž˜แž›แŸ†แžŠแžถแž”แŸ‹แž“แŸแŸ‡แž‘แŸ… crontab แŸ”

แžแžถแž˜แž‚แŸ†แž“แžทแžแžšแž”แžŸแŸ‹แžแŸ’แž‰แžปแŸ† แž“แŸแŸ‡แž‚แžบแž‡แžถแžœแžทแž’แžธแž„แžถแž™แžŸแŸ’แžšแžฝแž›แž”แŸ†แž•แžปแžแžŠแžพแž˜แŸ’แž”แžธแž—แŸ’แž‡แžถแž”แŸ‹ SSL แž‘แŸ… Docker Web-app แŸ”

PS แžŸแžผแž˜แž–แžทแž…แžถแžšแžŽแžถแžแžถ แžšแžถแž›แŸ‹แžŸแŸ’แž‚แŸ’แžšแžธแž”แžŠแŸ‚แž›แž”แž„แŸ’แž แžถแž‰แž€แŸ’แž“แžปแž„แžขแžแŸ’แžแž”แž‘แž˜แžทแž“แž˜แŸ‚แž“แž‡แžถแž…แžปแž„แž€แŸ’แžšแŸ„แž™แž‘แŸ แž‚แž˜แŸ’แžšแŸ„แž„แž“แŸแŸ‡แž‚แžบแž“แŸ…แžŠแŸ†แžŽแžถแž€แŸ‹แž€แžถแž› Dev แž‡แŸ’แžšแŸ… แžŠแžผแž…แŸ’แž“แŸแŸ‡แžแŸ’แž‰แžปแŸ†แžŸแžผแž˜แžŸแŸ†แžŽแžผแž˜แž–แžšแžขแŸ’แž“แž€แž€แžปแŸ†แžšแžทแŸ‡แž‚แž“แŸ‹แž€แžถแžšแž€แŸ†แžŽแžแŸ‹แžšแž…แž“แžถแžŸแž˜แŸ’แž–แŸแž“แŸ’แž’ - แž–แžฝแž€แž‚แŸแž“แžนแž„แžแŸ’แžšแžผแžœแž”แžถแž“แž€แŸ‚แž”แŸ’แžšแŸ‚แž‡แžถแž…แŸ’แžšแžพแž“แžŠแž„แŸ”

แž”แŸ’แžšแž—แž–: www.habr.com

แž”แž“แŸ’แžแŸ‚แž˜แž˜แžแžทแž™แŸ„แž”แž›แŸ‹