Certifikata SSL për aplikacionin web Docker

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

Certifikata SSL për aplikacionin web Docker

Më shumë detaje poshtë.

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Ă« zhvillosh prodhimin nĂ« Docker. Por kur fillove tĂ« ndĂ«rtosh Docker, bĂ«het e vĂ«shtirĂ« tĂ« ndalosh.

Pra, me njĂ« fillim do tĂ« jap standardet e konfigurimeve — 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 / {
        # përpiquni të shërbeni skedarin direkt, në rast dështimi kthehuni 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, nĂ« fakt, na nevojitet tĂ« realizojmĂ« SSL. PĂ«r tĂ« qenĂ« i sinqertĂ« — studova zonĂ«n com pĂ«r rreth 2 orĂ«. TĂ« gjitha opsionet e propozuara atje janĂ« interesante. Por nĂ« kĂ«tĂ« fazĂ« tĂ« projektit, na (biznesit) na duhej tĂ« integronim shpejt dhe nĂ« mĂ«nyrĂ« tĂ« sigurt SSL Let’sEncrypt pĂ«r nginx kontratĂ«s sĂ« dhe jo mĂ« shumĂ«.

Në radhë të parë, ne instaluam në server certbot
sudo apt-get install certbot

Pastaj gjeneruam certifikatat wildcard për tonë domenit

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


pas përfundimit certbot do të ofrojë 2 shkronja TXT, të cilat duhet të specifikoni në konfigurimet e DNS.

_acme-challenge.stomup.ru TXT {nĂ«KyÇelĂ«sQĂ«JuDhĂ«roiCertBot}


Dhe shtypni enter.

Pas kësaj certbot do të kontrollojë praninë e këtyre shënimeve në DNS dhe do t'ju krijojë certifikatat.
nĂ«se keni shtuar certifikatĂ«n, por certbot nuk e gjeti — provoni tĂ« rivendosni komandĂ«n pas 5-10 minutes.

Ja, tani jemi pronarĂ« krenarĂ« tĂ« certifikatĂ«s Let’sEncrypt pĂ«r 90 ditĂ«, por tani duhet ta lidhim atĂ« me Docker.

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

Shembulli 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 na nevojitet të ndryshojmë konfigurimin nginx për të punuar me 443 portin dhe SSL në përgjithësi:

Shembulli i konfigurimit 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 manovrave — shkojmĂ« nĂ« drejtorinĂ« me Docker-compose, shkruajmĂ« docker-compose up -d. Dhe kontrollojmĂ« funksionalitetin e SSL. Duhet gjithçka tĂ« funksionojĂ«.

MĂ« e rĂ«ndĂ«sishmja, mos harroni qĂ« certifikata Let’sEncrypt jepet pĂ«r 90 ditĂ« dhe do t'ju duhet ta rinovoni pĂ«rmes komandĂ«s sudo certbot renew, dhe pas kĂ«saj riktheni projektin me komandĂ«n docker-compose restart

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

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

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

Burimi: habr.com

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