SSL-sertifikaat foar Docker web-app

Yn dit artikel wol ik in metoade mei jo diele foar it meitsjen fan in SSL-sertifikaat foar jo webapplikaasje dy't rint op Docker, om't ... Ik fûn sa'n oplossing net yn it Russysktalige diel fan it ynternet.

SSL-sertifikaat foar Docker web-app

Mear details ûnder de besuniging.

Wy hiene docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 en in pint fan suver Let'sEncrypt. It is net dat it nedich is om produksje op Docker yn te setten. Mar as jo ienris begjinne mei it bouwen fan Docker, wurdt it lestich om te stopjen.

Dat, om te begjinnen, sil ik de standertynstellingen jaan - dy't wy hiene op it dev-stadium, d.w.s. sûnder poarte 443 en SSL yn it algemien:

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

Folgjende moatte wy eins SSL ymplementearje. Om earlik te wêzen, haw ik sawat 2 oeren bestege oan it bestudearjen fan de com-sône. Alle opsjes oanbean dêr binne ynteressant. Mar yn it hjoeddeiske stadium fan it projekt, wy (it bedriuw) nedich om fluch en betrouber screw SSL Let'sEnctypt к nginx kontener en neat mear.

Earst hawwe wy it ynstalleare op 'e tsjinner certbot
sudo apt-get install certbot

Dêrnei genereare wy jokertekensertifikaten foar ús domein

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


nei útfiering sil certbot ús 2 TXT-records leverje dy't moatte wurde oantsjutte yn 'e DNS-ynstellingen.

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


En druk op enter.

Hjirnei sil certbot kontrolearje op de oanwêzigens fan dizze records yn DNS en sertifikaten foar jo oanmeitsje.
as jo hawwe tafoege in sertifikaat mar certbot fûn it net - besykje it kommando nei 5-10 minuten opnij te begjinnen.

No, hjir binne wy ​​de grutske eigners fan in Let'sEncrypt-sertifikaat foar 90 dagen, mar no moatte wy it uploade nei Docker.

Om dit te dwaan, op 'e meast triviale manier, yn docker-compose.yml, yn' e nginx-seksje, keppelje wy de mappen.

Foarbyld docker-compose.yml mei 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"

Keppele? Geweldich - litte wy trochgean:

No moatte wy de konfiguraasje feroarje nginx om mei te wurkjen 443 haven en SSL meastal:

Foarbyld main.conf config mei 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;
	}
}

Eigentlik geane wy ​​nei dizze manipulaasjes nei de map mei Docker-compose, skriuwe docker-compose up -d. En wy kontrolearje de funksjonaliteit fan SSL. Alles moat fuort.

It wichtichste is net te ferjitten dat it Let'sEnctypt-sertifikaat wurdt útjûn foar 90 dagen en jo moatte it fernije fia it kommando sudo certbot renew, en dan it projekt opnij starte mei it kommando docker-compose restart

In oare opsje is om dizze folchoarder ta te foegjen oan crontab.

Yn myn miening is dit de maklikste manier om SSL te ferbinen mei Docker Web-app.

PS Tink asjebleaft dat alle skripts dy't yn 'e tekst presintearre binne net definityf binne, it projekt is no yn it djippe Dev-stadium, dus ik soe jo freegje om de konfiguraasjes net te kritisearjen - se sille in protte kearen wizige wurde.

Boarne: www.habr.com

Add a comment