SSL-sertifikat for Docker web-applikasjon

I denne artikkelen vil jeg dele med deg hvordan du oppretter et SSL-sertifikat for ditt web-applikasjon som kjÞrer pÄ Docker, fordi jeg ikke fant en lignende lÞsning i den russisktalende delen av internett.

SSL-sertifikat for Docker web-applikasjon

Les mer under kat.

Vi hadde docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 og en ren installasjon av Let’sEncrypt. Det er ikke nĂždvendigvis nĂždvendig Ă„ sette opp produksjon pĂ„ Docker. Men hvis du har begynt Ă„ bygge med Docker, blir det vanskelig Ă„ stoppe.

SĂ„ fĂžrst vil jeg gi standardinnstillingene – som vi hadde i utviklingsfasen, altsĂ„ uten port 443 og SSL generelt:

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 \/ {
        # prĂžv Ă„ levere fil direkte, fall tilbake til 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;
}

Deretter mĂ„ vi implementere SSL. Ærlig talt – jeg studerte com-sonen i omtrent 2 timer. Alle foreslĂ„tte alternativer der er interessante. Men pĂ„ det nĂ„vĂŠrende stadiet av prosjektet, trenger vi (virksomheten) Ă„ raskt og pĂ„litelig fĂ„ pĂ„ plass SSL Let’sEncrypt til nginx til containeren og ikke mer.

FÞrst installerte vi pÄ serveren certbot
sudo apt-get install certbot

Deretter genererte vi wildcard-sertifikatene for vÄr domenet

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


etter Ä ha utfÞrt certbot, vil det gi oss 2 TXT-poster som mÄ angis i DNS-innstillingene.

_acme-challenge.stomup.ru TXT {denNĂžkkelenSomCertBotGavDeg}


Og trykker enter.

Etter dette vil certbot sjekke for disse postene i DNS og opprette sertifikatene for deg.
hvis du la til sertifikatet, men certbot det ikke ble funnet – prĂžv Ă„ kjĂžre kommandoen pĂ„ nytt etter 5-10 minutter..

NĂ„ er vi stolte eiere av et Let’sEncrypt-sertifikat i 90 dager, men nĂ„ mĂ„ vi sette det opp i Docker.

For Ä gjÞre dette, mÄ vi enkelt koble sammen direktiver i docker-compose.yml i nginx-seksjonen.

Eksempel pÄ docker-compose.yml med 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"

Koblet sammen? Supert — vi fortsetter:

NÄ mÄ vi endre konfigurasjonen nginx for Ä jobbe med 443 porten og SSL generelt:

Eksempel pÄ konfigurasjon main.conf med 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;
	}
}

Etter disse manipuleringene gÄr vi til katalogen med Docker-compose, skriver docker-compose up -d, og sjekker om SSL fungerer. Alt bÞr komme opp.

Husk at Let’sEncrypt-sertifikatet utstedes i 90 dager, sĂ„ du mĂ„ oppdatere det med kommandoen sudo certbot renew, og deretter starte prosjektet pĂ„ nytt med kommandoen docker-compose restart

Som et alternativ kan du legge til denne sekvensen i crontab.

Etter min mening er dette den enkleste mÄten Ä koble SSL til Docker Web-app.

P.S. VĂŠr oppmerksom pĂ„ at alle skriptene som er presentert i teksten ikke er endelige, prosjektet er for Ăžyeblikket i dyp utvikling, sĂ„ jeg ber dere om ikke Ă„ kritisere konfigurasjonene – de vil bli endret mange ganger.

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster