Dockeri veebirakenduse SSL-sertifikaat

Selles artiklis tahan teiega jagada meetodit, kuidas luua Dockeris töötava veebirakenduse jaoks SSL-sertifikaat, kuna... Interneti venekeelsest osast ma sellist lahendust ei leidnud.

Dockeri veebirakenduse SSL-sertifikaat

Täpsemalt lõike all.

Meil oli docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 ja pint puhast Let'sEncrypti. Asi pole selles, et tootmist oleks vaja Dockeris juurutada. Kuid kui hakkate Dockerit ehitama, on seda raske peatada.

Nii et alustuseks annan standardseadistused - mis meil olid arendaja etapis, st. ilma pordita 443 ja SSL-i ü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 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;
}

Järgmiseks peame tegelikult juurutama SSL-i. Ausalt öeldes veetsin umbes 2 tundi kom-tsooni uurides. Kõik seal pakutavad variandid on huvitavad. Kuid projekti praeguses etapis oli meil (ettevõttel) vaja kiiresti ja usaldusväärselt kruvida SSL Let'sEnctypt к nginx konteiner ja ei midagi muud.

Kõigepealt installisime selle serverisse certbot
sudo apt-get install certbot

Järgmisena genereerisime oma domeeni jaoks metamärgisertifikaadid

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


pärast täitmist annab certbot meile 2 TXT-kirjet, mis tuleb DNS-i sätetes täpsustada.

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


Ja vajutage sisestusklahvi.

Pärast seda kontrollib certbot nende kirjete olemasolu DNS-is ja loob teile sertifikaadid.
kui olete lisanud sertifikaadi, kuid certbot Ma ei leidnud seda - proovige käsk 5–10 minuti pärast taaskäivitada.

Noh, siin oleme Let'sEncrypti sertifikaadi uhked omanikud 90 päeva jooksul, kuid nüüd peame selle Dockeri üles laadima.

Selleks lingime kõige triviaalsemal viisil docker-compose.yml jaotises nginx kataloogid.

Näide docker-compose.yml SSL-iga

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"

Lingitud? Suurepärane – jätkame:

Nüüd peame muutma konfiguratsiooni nginx koos töötada 443 sadama ja SSL üldiselt:

Main.conf konfiguratsiooni näide 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;
	}
}

Tegelikult läheme pärast neid manipuleerimisi Docker-compose'iga kataloogi, kirjutame docker-compose up -d. Ja me kontrollime SSL-i funktsionaalsust. Kõik peaks õhku tõusma.

Peaasi, et ärge unustage, et Let'sEnctypt sertifikaat väljastatakse 90 päevaks ja peate selle käsu kaudu uuendama sudo certbot renewja seejärel taaskäivitage projekt käsuga docker-compose restart

Teine võimalus on lisada see jada crontabile.

Minu arvates on see lihtsaim viis SSL-i ühendamiseks Dockeri veebirakendusega.

PS Palun võtke arvesse, et kõik tekstis esitatud skriptid ei ole lõplikud, projekt on praegu sügaval arendusfaasis, seega paluksin teil konfiguratsioone mitte kritiseerida - neid muudetakse korduvalt.

Allikas: www.habr.com

Lisa kommentaar