Sertîfîkaya SSL-ê ji bo sepana web-a Docker

Di vê gotarê de, ez dixwazim bi we re rêbazek ji bo afirandina sertîfîkayek SSL-ê ji bo serîlêdana weya webê ya ku li ser Docker-ê tê xebitandin bi we re parve bikim, ji ber ... Min di beşa Înternetê ya bi zimanê rûsî de çareseriyek wusa nedît.

Sertîfîkaya SSL-ê ji bo sepana web-a Docker

Zêdetir hûrgulî di bin qutbûnê de.

Me docker v.17.05, docker-compose v.1.21, Servera Ubuntu 18 û pincek Let'sEncrypt paqij bû. Ne ew e ku pêdivî ye ku hilberîna li ser Docker were bicîh kirin. Lê gava ku hûn dest bi avakirina Docker-ê dikin, rawestandina wê dijwar dibe.

Ji ber vê yekê, ji bo destpêkê, ez ê mîhengên standard bidim - yên ku me di qonaxa dev de hebûn, ango. bêyî porta 443 û SSL bi gelemperî:

docker-berhevkirin.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;
}

Dûv re, em bi rastî hewce ne ku SSL bicîh bikin. Bi rastî, min nêzîkî 2 saetan li ser com zone xwendin. Hemî vebijarkên ku li wir têne pêşkêş kirin balkêş in. Lê di qonaxa heyî ya projeyê de, me (karsaz) hewce bû ku zû û pêbawer bişewitînin SSL Let'sEnctypt к nginx konteynir û ne tiştek din.

Berî her tiştî, me ew li ser serverê saz kir certbot
sudo apt-get install certbot

Dûv re, me ji bo domaina xwe sertîfîkayên wildcard çêkirin

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


piştî darvekirinê, certbot dê 2 tomarên TXT yên ku divê di mîhengên DNS de bêne diyar kirin peyda bike.

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


Û Enter bikirtînin.

Piştî vê yekê, certbot dê hebûna van tomaran di DNS-ê de kontrol bike û ji we re sertîfîkayan biafirîne.
heke we belgeyek lê zêde kiribe certbot ew nedît - biceribînin ku piştî 5-10 hûrdeman fermanê ji nû ve bidin destpêkirin.

Welê, li vir em xwediyên serbilind ên sertîfîkayek Let'sEncrypt 90 rojan in, lê naha pêdivî ye ku em wê li Docker bar bikin.

Ji bo vê yekê, bi awayê herî piçûk, di docker-compose.yml de, di beşa nginx de, em peldankan girêdidin.

Mînak docker-compose.yml bi 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"

Girêdayî? Baş e - em berdewam bikin:

Naha divê em konfigurasyonê biguherînin nginx bi kar bikin 443 bender û SSL giştîve:

Mînak main.conf veavakirina bi 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;
	}
}

Bi rastî, piştî van manipulasyonan, em bi Docker-compose diçin pelrêça, docker-compose up -d dinivîsin. Û em fonksiyona SSL-ê kontrol dikin. Divê her tişt jê derkeve.

Ya sereke ev e ku hûn ji bîr nekin ku sertîfîkaya Let'sEnctypt 90 rojan tê derxistin û hûn ê hewce bikin ku wê bi fermanê nû bikin. sudo certbot renew, û paşê bi fermanê projeyê ji nû ve bidin destpêkirin docker-compose restart

Vebijêrkek din ev e ku hûn vê rêzikê li crontab zêde bikin.

Bi dîtina min ev awayê herî hêsan e ku hûn SSL bi Docker Web-app ve girêdin.

PS Ji kerema xwe bihesibînin ku hemî nivîsarên ku di nivîsê de têne pêşkêş kirin ne dawîn in, proje naha di qonaxa Dev ya kûr de ye, ji ber vê yekê ez dixwazim ji we bipirsim ku hûn konfigurasyonan rexne nekin - ew ê gelek caran werin guheztin.

Source: www.habr.com

Add a comment