ඩොකර් වෙබ් යෙදුම සඳහා SSL සහතිකය

මෙම ලිපියෙන්, Docker මත ධාවනය වන ඔබගේ වෙබ් යෙදුම සඳහා SSL සහතිකයක් සෑදීමේ ක්‍රමයක් ඔබ සමඟ බෙදා ගැනීමට මට අවශ්‍යය, මන්ද... අන්තර්ජාලයේ රුසියානු භාෂාවෙන් මම එවැනි විසඳුමක් සොයා ගත්තේ නැත.

ඩොකර් වෙබ් යෙදුම සඳහා SSL සහතිකය

කප්පාදුව යටතේ වැඩි විස්තර.

අපට ඩොකර් v.17.05, ඩොකර්-කොම්පෝස් v.1.21, උබුන්ටු සර්වර් 18 සහ පිරිසිදු Let'sEncrypt පයින්ට් එකක් තිබුණා. එය Docker මත නිෂ්පාදනය යෙදවීමට අවශ්ය බව නොවේ. හැබැයි Docker හදන්න පටන් ගත්තට පස්සේ ඒක නවත්තන්න අමාරු වෙනවා.

එබැවින්, ආරම්භ කිරීමට, මම සම්මත සැකසුම් ලබා දෙමි - අපට dev අදියරේදී තිබූ, i.e. වරාය 443 සහ පොදුවේ SSL නොමැතිව:

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 / {
        # 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;
}

ඊළඟට, අපි ඇත්තටම SSL ක්‍රියාත්මක කළ යුතුයි. ඇත්තම කිව්වොත් මම පැය 2ක් විතර com zone එක පාඩම් කළා. එහි ඉදිරිපත් කර ඇති සියලුම විකල්ප සිත්ගන්නා සුළුය. නමුත් ව්‍යාපෘතියේ වත්මන් අවධියේදී, අපට (ව්‍යාපාරයට) ඉක්මනින් හා විශ්වාසනීය ලෙස ඉස්කුරුප්පු කිරීමට අවශ්‍ය විය SSL Let'sEnctypt к nginx කන්ටේනරය සහ තවත් කිසිවක් නැත.

පළමුවෙන්ම, අපි එය සේවාදායකයේ ස්ථාපනය කළෙමු සහතිකබට්
sudo apt-get install certbot

ඊළඟට, අපි අපේ වසම සඳහා Wildcard සහතික උත්පාදනය කළා

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


ක්‍රියාත්මක කිරීමෙන් පසු, DNS සැකසුම් තුළ සඳහන් කළ යුතු TXT වාර්තා 2ක් certbot විසින් අපට ලබා දෙනු ඇත.

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


සහ enter ඔබන්න.

මෙයින් පසු, certbot DNS හි මෙම වාර්තා තිබේදැයි පරීක්ෂා කර ඔබ වෙනුවෙන් සහතික සාදනු ඇත.
ඔබ සහතිකයක් එකතු කර ඇත්නම් නමුත් සහතිකබට් එය සොයාගත නොහැකි විය - මිනිත්තු 5-10 කට පසු විධානය නැවත ආරම්භ කිරීමට උත්සාහ කරන්න.

හොඳයි, මෙන්න අපි දින 90ක් සඳහා Let'sEncrypt සහතිකයක සාඩම්බර හිමිකරුවන්, නමුත් දැන් අපි එය Docker වෙත උඩුගත කළ යුතුයි.

මෙය සිදු කිරීම සඳහා, ඉතා සුළු ආකාරයෙන්, docker-compose.yml හි, nginx කොටසෙහි, අපි නාමාවලි සම්බන්ධ කරමු.

SSL සමඟ උදාහරණ docker-compose.yml

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"

සබැඳිද? නියමයි - අපි දිගටම කරගෙන යමු:

දැන් අපි config එක වෙනස් කරන්න ඕනේ nginx සමඟ වැඩ කිරීමට 443 වරාය සහ SSL පොදුවේ:

SSL සමඟ main.conf config උදාහරණය

#
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;
	}
}

ඇත්ත වශයෙන්ම, මෙම උපාමාරු වලින් පසුව, අපි Docker-compose සමඟ ඩිරෙක්ටරිය වෙත යන්නෙමු, docker-compose up -d ලියන්න. තවද අපි SSL හි ක්‍රියාකාරීත්වය පරීක්ෂා කරමු. සෑම දෙයක්ම ඉවත් කළ යුතුය.

ප්රධාන දෙය නම් Let'sEnctypt සහතිකය දින 90 ක් සඳහා නිකුත් කර ඇති බවත්, ඔබට එය විධානය හරහා අලුත් කිරීමට අවශ්ය බවත් අමතක නොකිරීමයි. sudo certbot renew, ඉන්පසු විධානය සමඟ ව්යාපෘතිය නැවත ආරම්භ කරන්න docker-compose restart

තවත් විකල්පයක් වන්නේ මෙම අනුපිළිවෙල crontab වෙත එකතු කිරීමයි.

මගේ මතය අනුව SSL Docker Web-app වෙත සම්බන්ධ කිරීමට ඇති පහසුම ක්‍රමය මෙයයි.

PS පාඨයේ ඉදිරිපත් කර ඇති සියලුම ස්ක්‍රිප්ට් අවසාන නොවන බව කරුණාවෙන් සලකන්න, ව්‍යාපෘතිය දැන් ගැඹුරු Dev අදියරේ ඇත, එබැවින් වින්‍යාසයන් විවේචනය නොකරන ලෙස මම ඔබෙන් ඉල්ලා සිටිමි - ඒවා බොහෝ වාරයක් වෙනස් කරනු ඇත.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න