ಡಾಕರ್ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಾಗಿ SSL ಪ್ರಮಾಣಪತ್ರ

ಈ ಲೇಖನದಲ್ಲಿ, ಡಾಕರ್‌ನಲ್ಲಿ ಚಾಲನೆಯಲ್ಲಿರುವ ನಿಮ್ಮ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಾಗಿ SSL ಪ್ರಮಾಣಪತ್ರವನ್ನು ರಚಿಸುವ ವಿಧಾನವನ್ನು ನಾನು ನಿಮ್ಮೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲು ಬಯಸುತ್ತೇನೆ, ಏಕೆಂದರೆ... ಇಂಟರ್ನೆಟ್ನ ರಷ್ಯನ್ ಭಾಷೆಯ ಭಾಗದಲ್ಲಿ ನಾನು ಅಂತಹ ಪರಿಹಾರವನ್ನು ಕಂಡುಹಿಡಿಯಲಿಲ್ಲ.

ಡಾಕರ್ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಾಗಿ SSL ಪ್ರಮಾಣಪತ್ರ

ಕಟ್ ಅಡಿಯಲ್ಲಿ ಹೆಚ್ಚಿನ ವಿವರಗಳು.

ನಾವು ಡಾಕರ್ v.17.05, ಡಾಕರ್-ಕಂಪೋಸ್ v.1.21, ಉಬುಂಟು ಸರ್ವರ್ 18 ಮತ್ತು ಶುದ್ಧ ಲೆಟ್ಸ್ ಎನ್‌ಕ್ರಿಪ್ಟ್‌ನ ಪಿಂಟ್ ಅನ್ನು ಹೊಂದಿದ್ದೇವೆ. ಡಾಕರ್‌ನಲ್ಲಿ ಉತ್ಪಾದನೆಯನ್ನು ನಿಯೋಜಿಸಲು ಇದು ಅವಶ್ಯಕವಲ್ಲ. ಆದರೆ ಒಮ್ಮೆ ನೀವು ಡಾಕರ್ ಅನ್ನು ನಿರ್ಮಿಸಲು ಪ್ರಾರಂಭಿಸಿದರೆ, ಅದನ್ನು ನಿಲ್ಲಿಸಲು ಕಷ್ಟವಾಗುತ್ತದೆ.

ಆದ್ದರಿಂದ, ಪ್ರಾರಂಭಿಸಲು, ನಾನು ಪ್ರಮಾಣಿತ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನೀಡುತ್ತೇನೆ - ನಾವು ದೇವ್ ಹಂತದಲ್ಲಿ ಹೊಂದಿದ್ದೇವೆ, ಅಂದರೆ. ಪೋರ್ಟ್ 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 ಗಂಟೆಗಳ ಕಾಲ ಕಳೆದಿದ್ದೇನೆ. ಅಲ್ಲಿ ನೀಡಲಾದ ಎಲ್ಲಾ ಆಯ್ಕೆಗಳು ಆಸಕ್ತಿದಾಯಕವಾಗಿವೆ. ಆದರೆ ಯೋಜನೆಯ ಪ್ರಸ್ತುತ ಹಂತದಲ್ಲಿ, ನಾವು (ವ್ಯಾಪಾರ) ತ್ವರಿತವಾಗಿ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹವಾಗಿ ಸ್ಕ್ರೂ ಮಾಡಬೇಕಾಗಿದೆ SSL ಲೆಟ್ಸ್ ಎನ್ಕ್ಟಿಪ್ಟ್ к nginx ಕಂಟೇನರ್ ಮತ್ತು ಇನ್ನೇನೂ ಇಲ್ಲ.

ಮೊದಲನೆಯದಾಗಿ, ನಾವು ಅದನ್ನು ಸರ್ವರ್‌ನಲ್ಲಿ ಸ್ಥಾಪಿಸಿದ್ದೇವೆ ಸರ್ಟ್ ಬಾಟ್
sudo apt-get install certbot

ಮುಂದೆ, ನಾವು ನಮ್ಮ ಡೊಮೇನ್‌ಗಾಗಿ ವೈಲ್ಡ್‌ಕಾರ್ಡ್ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ರಚಿಸಿದ್ದೇವೆ

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


ಕಾರ್ಯಗತಗೊಳಿಸಿದ ನಂತರ, DNS ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕಾದ 2 TXT ದಾಖಲೆಗಳನ್ನು certbot ನಮಗೆ ಒದಗಿಸುತ್ತದೆ.

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


ಮತ್ತು ಎಂಟರ್ ಒತ್ತಿರಿ.

ಇದರ ನಂತರ, certbot DNS ನಲ್ಲಿ ಈ ದಾಖಲೆಗಳ ಉಪಸ್ಥಿತಿಯನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ ಮತ್ತು ನಿಮಗಾಗಿ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ರಚಿಸುತ್ತದೆ.
ನೀವು ಪ್ರಮಾಣಪತ್ರವನ್ನು ಸೇರಿಸಿದ್ದರೆ ಆದರೆ ಸರ್ಟ್ ಬಾಟ್ ಅದು ಕಂಡುಬಂದಿಲ್ಲ - 5-10 ನಿಮಿಷಗಳ ನಂತರ ಆಜ್ಞೆಯನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಪ್ರಯತ್ನಿಸಿ.

ಸರಿ, ಇಲ್ಲಿ ನಾವು 90 ದಿನಗಳವರೆಗೆ ಲೆಟ್ಸ್ ಎನ್‌ಕ್ರಿಪ್ಟ್ ಪ್ರಮಾಣಪತ್ರದ ಹೆಮ್ಮೆಯ ಮಾಲೀಕರಾಗಿದ್ದೇವೆ, ಆದರೆ ಈಗ ನಾವು ಅದನ್ನು ಡಾಕರ್‌ಗೆ ಅಪ್‌ಲೋಡ್ ಮಾಡಬೇಕಾಗಿದೆ.

ಇದನ್ನು ಮಾಡಲು, ಅತ್ಯಂತ ಕ್ಷುಲ್ಲಕ ರೀತಿಯಲ್ಲಿ, docker-compose.yml ನಲ್ಲಿ, nginx ವಿಭಾಗದಲ್ಲಿ, ನಾವು ಡೈರೆಕ್ಟರಿಗಳನ್ನು ಲಿಂಕ್ ಮಾಡುತ್ತೇವೆ.

SSL ನೊಂದಿಗೆ ಡಾಕರ್-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"

ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆಯೇ? ಅದ್ಭುತವಾಗಿದೆ - ಮುಂದುವರಿಸೋಣ:

ಈಗ ನಾವು ಸಂರಚನೆಯನ್ನು ಬದಲಾಯಿಸಬೇಕಾಗಿದೆ nginx ಕೆಲಸ ಮಾಡಲು 443 ಬಂದರು ಮತ್ತು ಎಸ್ಎಸ್ಎಲ್ ಸಾಮಾನ್ಯವಾಗಿ:

SSL ನೊಂದಿಗೆ main.conf ಸಂರಚನೆಯ ಉದಾಹರಣೆ

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

ವಾಸ್ತವವಾಗಿ, ಈ ಮ್ಯಾನಿಪ್ಯುಲೇಷನ್‌ಗಳ ನಂತರ, ನಾವು ಡಾಕರ್-ಕಂಪೋಸ್‌ನೊಂದಿಗೆ ಡೈರೆಕ್ಟರಿಗೆ ಹೋಗುತ್ತೇವೆ, ಡಾಕರ್-ಕಂಪೋಸ್ ಅಪ್ -ಡಿ ಬರೆಯಿರಿ. ಮತ್ತು ನಾವು SSL ನ ಕಾರ್ಯವನ್ನು ಪರಿಶೀಲಿಸುತ್ತೇವೆ. ಎಲ್ಲವೂ ಹೊರಡಬೇಕು.

ಮುಖ್ಯ ವಿಷಯವೆಂದರೆ Let’sEnctypt ಪ್ರಮಾಣಪತ್ರವನ್ನು 90 ದಿನಗಳವರೆಗೆ ನೀಡಲಾಗುತ್ತದೆ ಮತ್ತು ನೀವು ಅದನ್ನು ಆಜ್ಞೆಯ ಮೂಲಕ ನವೀಕರಿಸಬೇಕಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ಮರೆಯಬಾರದು sudo certbot renew, ತದನಂತರ ಆಜ್ಞೆಯೊಂದಿಗೆ ಯೋಜನೆಯನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿ docker-compose restart

ಈ ಅನುಕ್ರಮವನ್ನು crontab ಗೆ ಸೇರಿಸುವುದು ಇನ್ನೊಂದು ಆಯ್ಕೆಯಾಗಿದೆ.

ನನ್ನ ಅಭಿಪ್ರಾಯದಲ್ಲಿ SSL ಅನ್ನು ಡಾಕರ್ ವೆಬ್-ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು ಇದು ಸುಲಭವಾದ ಮಾರ್ಗವಾಗಿದೆ.

ಪಿ.ಎಸ್. ಪಠ್ಯದಲ್ಲಿ ಪ್ರಸ್ತುತಪಡಿಸಲಾದ ಎಲ್ಲಾ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳು ಅಂತಿಮವಾಗಿಲ್ಲ ಎಂಬುದನ್ನು ದಯವಿಟ್ಟು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳಿ, ಯೋಜನೆಯು ಈಗ ಆಳವಾದ ದೇವ್ ಹಂತದಲ್ಲಿದೆ, ಆದ್ದರಿಂದ ಸಂರಚನೆಗಳನ್ನು ಟೀಕಿಸದಂತೆ ನಾನು ನಿಮ್ಮನ್ನು ಕೇಳಲು ಬಯಸುತ್ತೇನೆ - ಅವುಗಳನ್ನು ಹಲವು ಬಾರಿ ಮಾರ್ಪಡಿಸಲಾಗುತ್ತದೆ.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ