Docker web-aplikaziorako SSL ziurtagiria

Artikulu honetan, Docker-en exekutatzen den zure web aplikaziorako SSL ziurtagiri bat sortzeko metodo bat partekatu nahi dut zurekin, zeren... Ez nuen halako irtenbiderik aurkitu errusiar hizkuntzako Interneten.

Docker web-aplikaziorako SSL ziurtagiria

Xehetasun gehiago ebakiaren azpian.

Docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 eta Let'sEncrypt hutsezko pinta bat genituen. Ez da beharrezkoa ekoizpena Docker-en hedatzea. Baina Docker eraikitzen hasten zarenean, zaila egiten da gelditzea.

Beraz, hasteko, ezarpen estandarrak emango ditut, garapen fasean genituenak, hau da. 443 atakarik gabe eta SSL orokorrean:

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

Ondoren, benetan SSL inplementatu behar dugu. Egiari zor, 2 ordu inguru eman nituen com zone aztertzen. Bertan eskaintzen diren aukera guztiak interesgarriak dira. Baina proiektuaren egungo fasean, guk (enpresak) azkar eta fidagarritasunez izorratu behar genuen SSL Let's Enctypt ΠΊ nginx edukiontzia eta ezer gehiago.

Lehenik eta behin, zerbitzarian instalatu dugu certbot
sudo apt-get install certbot

Ondoren, komodin ziurtagiriak sortu ditugu gure domeinurako

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


exekutatu ondoren, certbot-ek DNS ezarpenetan zehaztu behar diren 2 TXT erregistro emango dizkigu.

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


Eta sakatu enter.

Horren ondoren, certbot-ek DNSn erregistro hauek dauden egiaztatuko du eta ziurtagiriak sortuko ditu zuretzat.
ziurtagiria gehitu baduzu baina certbot ez du aurkitu - saiatu komandoa berrabiarazten 5-10 minuturen buruan.

Beno, hemen gaude Let'sEncrypt ziurtagiri baten jabe harroak 90 egunez, baina orain Docker-era igo behar dugu.

Horretarako, modurik hutsunean, docker-compose.yml-en, nginx atalean, direktorioak lotzen ditugu.

Adibidea docker-compose.yml SSLrekin

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"

Loturik? Bikaina - jarrai dezagun:

Orain konfigurazioa aldatu behar dugu nginx lan egiteko 443 portua eta SSL orokorrean:

Adibidea main.conf konfigurazioa SSLrekin

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

Egia esan, manipulazio horien ondoren, Docker-compose-rekin direktoriora joaten gara, idatzi docker-compose up -d. Eta SSLren funtzionaltasuna egiaztatzen dugu. Dena atera behar da.

Gauza nagusia ez da ahaztu behar Let'sEnctypt ziurtagiria 90 egunetarako jaulkitzen dela eta komandoaren bidez berritu beharko duzula sudo certbot renew, eta gero berrabiarazi proiektua komandoarekin docker-compose restart

Beste aukera bat sekuentzia hau crontab-era gehitzea da.

Nire ustez, hau da SSL Docker Web-aplikaziora konektatzeko modurik errazena.

PS Mesedez, kontuan hartu testuan aurkezten diren script guztiak ez direla behin betikoak, proiektua garatzeko fase sakonean dago orain, beraz, konfigurazioak ez kritikatzeko eskatu nahi dizut - askotan aldatuko dira.

Iturria: www.habr.com

Gehitu iruzkin berria