SSL sertifikaat Docker web-app jaoks

Selles artiklis jagan teiega, kuidas luua SSL-sertifikaati teie Dockeris töötava veebirakenduse jaoks, kuna ma ei leidnud sarnast lahendust venekeelses osas internetis.

SSL sertifikaat Docker web-app jaoks

Lisateave allpool.

Meil oli docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 ja puhas Let’sEncrypt. See ei tähenda, et tootmisest peab tingimata Dockeris alustama, kuid kui oled juba Dockerit seadistama hakanud, on raske peatuda.

Nii et alustuseks toon välja standardse konfiguratsiooni, mis meil oli arenduse etapis, st ilma 443 pordita ja SSL üldiselt:

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

Seejärel peame me rakendama SSL-i. Ausalt öeldes uurisin com ala umbes 2 tundi. Kõik seal pakutud variandid on huvitavad. Kuid praegusel projekti etapil oli meil (äri) vaja kiiresti ja usaldusväärselt lisada. SSL Let’sEncrypt kellele nginx konteinerisse ja mitte rohkem.

Esiteks installisime serverisse certbot
sudo apt-get install certbot

Seejärel genereerisime wildcard sertifikaadid meie jaoks domeeni

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


certbot annab meile pärast täitmist 2 TXT-kirjet, mille peame DNS-seadetes märkima.

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


Ja vajutame enter.

Seejärel kontrollib certbot nende kirjeid DNS-is ja loob teile sertifikaadid.
kui olete sertifikaadi lisanud, kuid certbot seda ei leitud — proovige uuesti käivitada käsku 5-10 minuti pärast.

Noh, nüüd oleme uhked Let’s Encrypti sertifikaadi omanikud 90 päevaks, kuid nüüd peame selle Dockerisse viima.

Selleks seome lihtsal moel docker-compose.yml failis Nginxi sektsiooni.

Näide docker-compose.yml failist SSL-i jaoks

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"

Oleme sidunud? Suurepärane — jätkame:

Nüüd peame konfigureerima nginx töötama 443 porti ja SSL üldiselt:

Näide main.conf konfiguratsioonist SSL-iga

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

Pärast neid manipuleerimisi suundume Docker-compose katalooge, kirjutame docker-compose up -d. Ja kontrollime SSL-i toimivust. Kõik peaks tööle hakkama.

Peamine on meeles pidada, et Let’sEncrypt sertifikaat kehtib 90 päeva ja peate selle uuendama käsuga sudo certbot renew, seejärel peab projekti taaskäivitama käsuga docker-compose restart

Alternatiivina — lisada see järjestus crontab'i.

Minu arvates on see lihtsaim viis SSL-i ühendamiseks Docker Web-app'iga.

P.S. Palun arvestage, et kõik tekstis esitatud skriptid ei ole lõplikud, praegu on projekt sügavas arenduses, seetõttu palun ärge kriitiseerige konfiguratsioone - need muutuvad veel palju kordi.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster