SSL sertifikāts Docker tīmekļa lietotnei

Šajā rakstā vēlos dalīties ar veidu, kā izveidot SSL sertifikātu jūsu tīmekļa lietojumprogrammai, kas darbojas uz Docker, jo krievvalodīgajā daļā interneta līdzīgu risinājumu neatradu.

SSL sertifikāts Docker tīmekļa lietotnei

Lasiet tālāk.

Mums bija docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 un tÄ«rs Let’sEncrypt. Nē, tas nebija obligāti jāveido ražoÅ”ana uz Docker. Bet, ja esi sācis veidot Docker, ir grÅ«ti apstāties.

Tātad, vispirms sniegÅ”u standartuzstādÄ«jumus — kas mums bija dev posmā, t.i., bez 443 porta un SSL kopumā:

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 \/ {
        # mēģiniet tieÅ”i nodroÅ”ināt failu, lÄ«dzsvaro lÄ«dz 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;
}

Tālāk mums ir nepiecieÅ”ams Ä«stenot SSL. GodÄ«gi sakot — es pavadÄ«ju apmēram 2 stundas, pētot com zonu. Visi tur piedāvātie varianti ir interesanti. Bet Å”ajā projekta posmā mums (biznesam) bija nepiecieÅ”ams ātri un droÅ”i pievienot SSL Let’sEncrypt uz nginx konteineram un ne vairāk.

Vispirms mēs uzinstalējām serverī certbot
sudo apt-get install certbot

Tālāk mēs ģenerējām wildcard sertifikātus mūsu domēns

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


pēc certbot izpildes jums tiks sniegtas 2 TXT ieraksti, kurus jānorāda DNS iestatījumos.

_acme-challenge.stomup.ru TXT {atslēga, kuru jums sniedza CertBot}


Un nospiežam enter.

Pēc tam certbot pārbaudÄ«s Å”o ierakstu pieejamÄ«bu DNS un izveidos sertifikātus.
ja jÅ«s pievienojāt sertifikātu, bet certbot to neatrada — mēģiniet atkārtot komandu pēc 5-10 minÅ«tēm.

Nu, lÅ«k, mēs esam lepni Let’sEncrypt sertifikāta Ä«paÅ”nieki uz 90 dienām, bet tagad mums tas jāievieÅ” Docker.

Tam mēs vienkārÅ”i docker-compose.yml failā, nginx sekcijā — saistām direktorijas.

Piemērs docker-compose.yml ar 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"

Esat pievienojuÅ”i? Super — turpinām:

Tagad mums ir jāpārveido konfigurācija nginx darboŔanai ar 443 portu un SSL kopumā:

Izmēģinājuma config main.conf ar 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;
	}
}

Pēc Ŕīm manipulācijām — dodamies uz Docker-compose direktoriju, rakstām docker-compose up -d. Un pārbaudām SSL darbÄ«bu. Viss jādarbojas.

Galvenais, neaizmirstiet, ka Let’sEncrypt sertifikāts tiek izsniegts uz 90 dienām un jums bÅ«s jāatjauno to, izmantojot komandu sudo certbot renew, un pēc tam pārstartējiet projektu ar komandu docker-compose restart

Kā variants — pievienot Å”o secÄ«bu crontab.

Manuprāt, tas ir visvienkārŔākais veids, kā pievienot SSL Docker tīmekļa lietotnei.

P.S. LÅ«dzu, ņemiet vērā, ka visi rakstā norādÄ«tie skripti nav galÄ«gi, Å”obrÄ«d projekts atrodas dziļā izstrādē, tāpēc lÅ«dzu, nekrÄ«tiet uz konfigurācijām — tās vēl daudzreiz tiks mainÄ«tas.

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster