SSL sertifikāts Docker tīmekļa lietotnei

Šajā rakstā es vēlos dalīties ar jums metodi, kā izveidot SSL sertifikātu jūsu tīmekļa lietojumprogrammai, kas darbojas Docker, jo... Interneta krievu valodas daļā es neatradu šādu risinājumu.

SSL sertifikāts Docker tīmekļa lietotnei

Sīkāka informācija zem griezuma.

Mums bija docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 un puslitrs tīra Let'sEncrypt. Nav tā, ka ir nepieciešams izvietot ražošanu pakalpojumā Docker. Bet, kad sākat veidot Docker, to apstāties kļūst grūti.

Tātad, sākumā es došu standarta iestatījumus - kas mums bija izstrādes stadijā, t.i. bez porta 443 un SSL kopumā:

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

Tālāk mums faktiski ir jāievieš SSL. Ja godīgi, es pavadīju apmēram 2 stundas, pētot kom zonu. Visas tur piedāvātās iespējas ir interesantas. Taču pašreizējā projekta stadijā mums (biznesam) vajadzēja ātri un droši pieskrūvēt SSL Let'sEnctypet к nginx konteiners un nekas vairāk.

Pirmkārt, mēs to instalējām serverī certbot
sudo apt-get install certbot

Pēc tam mēs ģenerējām aizstājējzīmju sertifikātus mūsu domēnam

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


pēc izpildes, certbot nodrošinās mums 2 TXT ierakstus, kas jānorāda DNS iestatījumos.

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


Un nospiediet enter.

Pēc tam certbot pārbaudīs šo ierakstu esamību DNS un izveidos jums sertifikātus.
ja esat pievienojis sertifikātu, bet certbot neatradu - mēģiniet restartēt komandu pēc 5-10 minūtēm.

Nu, lūk, mēs esam lepni Let'sEncrypt sertifikāta īpašnieki 90 dienas, taču tagad mums tas ir jāaugšupielādē Docker.

Lai to izdarītu, visniecīgākajā veidā docker-compose.yml sadaļā nginx mēs saistām direktorijus.

Piemērs docker-compose.yml ar 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"

Saistīts? Lieliski - turpināsim:

Tagad mums ir jāmaina konfigurācija nginx strādāt ar 443 osta un SSL vispārīgi:

Main.conf konfigurācijas piemērs ar 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;
	}
}

Faktiski pēc šīm manipulācijām mēs pārejam uz direktoriju ar Docker-compose, ierakstām docker-compose up -d. Un mēs pārbaudām SSL funkcionalitāti. Visam vajadzētu pacelties.

Galvenais ir neaizmirst, ka Let'sEnctypt sertifikāts tiek izsniegts uz 90 dienām un jums tas būs jāatjauno, izmantojot komandu sudo certbot renew, un pēc tam restartējiet projektu ar komandu docker-compose restart

Vēl viena iespēja ir pievienot šo secību crontab.

Manuprāt, tas ir vienkāršākais veids, kā savienot SSL ar Docker Web-app.

PS Lūdzu, ņemiet vērā, ka visi tekstā uzrādītie skripti nav galīgi, projekts šobrīd ir dziļā izstrādes stadijā, tāpēc vēlos lūgt nekritizēt konfigurācijas - tās tiks daudzkārt pārveidotas.

Avots: www.habr.com

Pievieno komentāru