Certifikatë SSL për Docker web-app

Në këtë artikull, do të doja të ndaja me ju një mënyrë për të krijuar një certifikatë SSL për aplikacionin tuaj web që punon në Docker, pasi nuk kam gjetur një zgjidhje të tillë në pjesën rusishtfolëse të internetit.

Certifikatë SSL për Docker web-app

Lexoni më shumë më poshtë.

Ne kishim docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 dhe njĂ« pintĂ« tĂ« pastĂ«r Let’sEncrypt. Nuk Ă«shtĂ« se ishte domosdoshmĂ«ri tĂ« vendosni njĂ« prodhim nĂ« Docker, por kur filloni tĂ« ndĂ«rtoni Docker, bĂ«het e vĂ«shtirĂ« tĂ« ndaloni.

Kështu që, për fillim, do të sjell standardet e zakonshme - që kishim në fazën dev, dmth pa portin 443 dhe SSL në përgjithësi:

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 \/ {
        # provoni të shërbeni skedarin direkt, klikoni në 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;
}

MĂ« pas, ne duhet tĂ« realizojmĂ« SSL. TĂ« them tĂ« vĂ«rtetĂ«n — kam studiuar zonĂ«n com pĂ«r rreth 2 orĂ«. TĂ« gjitha opsionet e propozuara atje janĂ« interesante. Por nĂ« kĂ«tĂ« fazĂ« tĂ« projektit, na duhej (biznesit) tĂ« lidhim shpejt dhe nĂ« mĂ«nyrĂ« tĂ« sigurt SSL Let’sEncrypt nĂ« nginx me kontejnerin dhe asgjĂ« mĂ« shumĂ«.

Fillimisht, ne instalomë në server certbot
sudo apt-get install certbot

Pastaj, ne gjeneruam certifikata wildcard për e domenit

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


pas pĂ«rfundimit certbot do t'ju ofrojĂ« 2 regjistrime TXT, tĂ« cilat duhet t’i vendosni nĂ« cilĂ«simet DNS.

_acme-challenge.stomup.ru TXT {çelësiqëJuDhaCertBot}


Dhe shtypni enter.

Pas kësaj, certbot do të verifikojë ekzistencën e këtyre regjistrimeve në DNS dhe do t'ju krijojë certifikatat.
nĂ«se keni shtuar certifikatĂ«n, por certbot nuk e ka gjendur — provoni tĂ« rinisni komandĂ«n pas 5-10 minutash.

Ja, tani ne jemi pronar tĂ« krenarĂ« tĂ« njĂ« certifikate Let’sEncrypt pĂ«r 90 ditĂ«, por tani na nevojitet ta lidhim nĂ« Docker.

PĂ«r kĂ«tĂ« thjesht nĂ« docker-compose.yml, nĂ« seksionin nginx — lidhim direktoritĂ«.

Shembuj docker-compose.yml me 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"

E lidhĂ«m? Super — vazhdojmĂ«:

Tani duhet të ndryshojmë konfigurimin nginx për të punuar me 443 portin dhe SSL në përgjithësi:

Shembuj konfigu rash main.conf me 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;
	}
}

Pas kĂ«tyre manipulimeve — shkojmĂ« nĂ« direktorinĂ« me Docker-compose, shkruajmĂ« docker-compose up -d. Dhe kontrollojmĂ« funksionalitetin e SSL. Duhet tĂ« funksionojĂ« gjithçka.

Mos harroni se certifikata Let’sEncrypt jepet pĂ«r 90 ditĂ« dhe do t'ju duhet ta rinovoni pĂ«rmes komandĂ«s sudo certbot renew, dhe pastaj tĂ« rinoprogramoni projektin me komandĂ«n docker-compose restart

Si njĂ« opsion — shtoni kĂ«tĂ« sekuencĂ« nĂ« crontab.

Në mendimin tim, ky është mënyra më e thjeshtë për të lidhur SSL me Docker Web-app.

P.S. Ju lutem merrni parasysh se tĂ« gjitha skriptet e paraqitura nĂ« tekst — nuk janĂ« pĂ«rfundimtare, projekti aktualisht Ă«shtĂ« nĂ« fazĂ«n e zhvillimit tĂ« thellĂ«, prandaj dĂ«shiroj t'ju kĂ«rkoj tĂ« mos kritikoni konfigurimet — ato do tĂ« ndryshojnĂ« shumĂ« herĂ«.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster