Taratasy SSL ho an'ny Docker web-app

Amin'ity lahatsoratra ity, tiako ny hizara aminao fomba iray hamoronana mari-pankasitrahana SSL ho an'ny rindranasa tranokala mandeha amin'ny Docker, satria ... Tsy nahita vahaolana toy izany aho tamin'ny ampahany amin'ny Internet amin'ny teny Rosiana.

Taratasy SSL ho an'ny Docker web-app

Ny antsipiriany bebe kokoa eo ambanin'ny fanapahana.

Nanana docker v.17.05 izahay, docker-compose v.1.21, Ubuntu Server 18 ary iray pint de Let'sEncrypt madio. Tsy hoe ilaina ny mametraka ny famokarana amin'ny Docker. Saingy rehefa manomboka manangana Docker ianao dia lasa sarotra ny mijanona.

Noho izany, hatomboka, dia homeko ny filaharana mahazatra - izay nananantsika teo amin'ny sehatra dev, i.e. tsy misy port 443 sy SSL amin'ny ankapobeny:

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;
}

Manaraka, tena mila mampihatra SSL isika. Raha ny marina, nandany adiny 2 teo ho eo tamin'ny fianarana ny com zone aho. Mahaliana ny safidy rehetra atolotra ao. Saingy amin'ny dingana amin'ny tetikasa amin'izao fotoana izao, izahay (ny orinasa) dia mila mivadika haingana sy azo antoka SSL Let'sEnctypt ΠΊ nginx container ary tsy misy hafa.

Voalohany indrindra, nametraka izany tamin'ny server izahay certbot
sudo apt-get install certbot

Avy eo dia namorona mari-pankasitrahana wildcard ho an'ny sehatra misy anay izahay

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


aorian'ny famonoana, certbot dia hanome antsika rakitra TXT 2 izay tokony hofaritana ao amin'ny DNS Settings.

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


Ary tsindrio ny enter.

Aorian'izany, ny certbot dia hanamarina ny fisian'ireo firaketana ireo ao amin'ny DNS ary hamorona taratasy fanamarinana ho anao.
raha nampiana certificat nefa certbot tsy nahita izany - andramo atombohy indray ny baiko rehefa afaka 5-10 minitra.

Eny ary, eto isika no tompon'ny mari-pankasitrahana Let'sEncrypt mandritra ny 90 andro, fa izao dia mila mampiditra azy any amin'ny Docker.

Mba hanaovana izany, amin'ny fomba tsy dia misy dikany indrindra, ao amin'ny docker-compose.yml, ao amin'ny fizarana nginx, mampifandray ireo lahatahiry.

Ohatra docker-compose.yml miaraka amin'ny 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"

Mifandray? Tsara - andao hanohy:

Ankehitriny dia mila manova ny config nginx hiara-miasa 443 port ary SSL ankapobeny:

Ohatra main.conf config miaraka amin'ny 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;
	}
}

Raha ny marina, aorian'ireo fanodinkodinana ireo dia mandeha any amin'ny lahatahiry miaraka amin'ny Docker-compose isika, manoratra docker-compose up -d. Ary manamarina ny fiasan'ny SSL izahay. Tokony hiala ny zava-drehetra.

Ny zava-dehibe indrindra dia ny tsy hanadino fa ny taratasy fanamarinana Let'sEnctypt dia navoaka nandritra ny 90 andro ary mila manavao izany amin'ny alΓ lan'ny baiko ianao. sudo certbot renew, ary avereno indray ny tetikasa amin'ny baiko docker-compose restart

Safidy iray hafa dia ny manampy an'io filaharana io amin'ny crontab.

Raha ny hevitro dia ity no fomba mora indrindra hampifandraisana ny SSL amin'ny Docker Web-app.

PS Azafady mba diniho fa ny script rehetra aseho ao amin'ny lahatsoratra dia tsy farany, ny tetikasa izao dia eo amin'ny dingana Dev lalina, ka mba mangataka aminareo aho mba tsy hitsikera ny configs - dia hovana imbetsaka.

Source: www.habr.com

Add a comment