SSL-atestilo por Docker-retprogramo

En ĉi tiu artikolo, mi volas dividi kun vi metodon por krei SSL-atestilon por via TTT-aplikaĵo funkcianta sur Docker, ĉar... Tian solvon mi ne trovis en la ruslingva parto de la Interreto.

SSL-atestilo por Docker-retprogramo

Pli da detaloj sub la tranĉo.

Ni havis docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 kaj pintan da pura Let'sEncrypt. Ne estas ke necesas deploji produktadon sur Docker. Sed kiam vi komencas konstrui Docker, fariĝas malfacile ĉesi.

Do, por komenci, mi donos la normajn agordojn - kiujn ni havis en la evolustadio, t.e. sen haveno 443 kaj SSL ĝenerale:

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

Poste, ni efektive devas efektivigi SSL. Verdire, mi pasigis ĉirkaŭ 2 horojn por studi la kom-zonon. Ĉiuj ebloj ofertitaj tie estas interesaj. Sed en la nuna etapo de la projekto, ni (la komerco) bezonis rapide kaj fidinde ŝraŭbi SSL Let's Enctypt к nginx ujo kaj nenio pli.

Antaŭ ĉio, ni instalis ĝin sur la servilo certbot
sudo apt-get install certbot

Poste, ni generis ĵokerajn atestilojn por nia domajno

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


post ekzekuto, certbot provizos al ni 2 TXT-rekordojn, kiuj devas esti specifitaj en la DNS-agordoj.

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


Kaj premu enen.

Post ĉi tio, certbot kontrolos la ĉeeston de ĉi tiuj rekordoj en DNS kaj kreos atestilojn por vi.
se vi aldonis atestilon sed certbot ne trovis ĝin - provu rekomenci la komandon post 5-10 minutoj.

Nu, jen ni estas la fieraj posedantoj de Let'sEncrypt atestilo dum 90 tagoj, sed nun ni devas alŝuti ĝin al Docker.

Por fari tion, en la plej bagatela maniero, en docker-compose.yml, en la sekcio nginx, ni ligas la dosierujojn.

Ekzemplo docker-compose.yml kun 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"

Ligita? Bonege - ni daŭrigu:

Nun ni devas ŝanĝi la agordon nginx labori kun 443 haveno kaj SSL ĝenerale:

Ekzemplo main.conf agordo kun 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;
	}
}

Efektive, post ĉi tiuj manipuladoj, ni iras al la dosierujo kun Docker-compose, skribu docker-compose supren -d. Kaj ni kontrolas la funkciojn de SSL. Ĉio devus ekflugi.

La ĉefa afero estas ne forgesi, ke la atestilo Let'sEnctypt estas eldonita dum 90 tagoj kaj vi devos renovigi ĝin per la komando. sudo certbot renew, kaj poste rekomencu la projekton per la komando docker-compose restart

Alia opcio estas aldoni ĉi tiun sekvencon al crontab.

Laŭ mi ĉi tio estas la plej facila maniero konekti SSL al Docker Web-app.

PS Bonvolu konsideri, ke ĉiuj skriptoj prezentitaj en la teksto ne estas finaj, la projekto nun estas en la profunda Dev-stadio, do mi ŝatus peti vin ne kritiki la agordojn - ili estos multfoje modifitaj.

fonto: www.habr.com

Aldoni komenton