டோக்கர் இணைய பயன்பாட்டிற்கான SSL சான்றிதழ்

இந்தக் கட்டுரையில், டோக்கரில் இயங்கும் உங்கள் வலைப் பயன்பாட்டிற்கான SSL சான்றிதழை உருவாக்கும் முறையை உங்களுடன் பகிர்ந்து கொள்ள விரும்புகிறேன், ஏனெனில்... இணையத்தின் ரஷ்ய மொழிப் பகுதியில் நான் அத்தகைய தீர்வைக் காணவில்லை.

டோக்கர் இணைய பயன்பாட்டிற்கான SSL சான்றிதழ்

வெட்டு கீழ் மேலும் விவரங்கள்.

எங்களிடம் docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 மற்றும் ஒரு பைண்ட் தூய Let'sEncrypt ஆகியவை இருந்தன. டோக்கரில் உற்பத்தியை வரிசைப்படுத்துவது அவசியம் என்பதல்ல. ஆனால் நீங்கள் டோக்கரை உருவாக்கத் தொடங்கினால், அதை நிறுத்துவது கடினம்.

எனவே, தொடங்குவதற்கு, நான் நிலையான அமைப்புகளை தருகிறேன் - இது தேவ் கட்டத்தில் எங்களிடம் இருந்தது, அதாவது. போர்ட் 443 மற்றும் பொதுவாக SSL இல்லாமல்:

கூலியாள்-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 Let'sEnctypt к Nginx கொள்கலன் மற்றும் அதற்கு மேல் எதுவும் இல்லை.

முதலில், நாங்கள் அதை சேவையகத்தில் நிறுவினோம் certbot
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}


மற்றும் Enter ஐ அழுத்தவும்.

இதற்குப் பிறகு, certbot DNS இல் இந்தப் பதிவுகள் இருப்பதைச் சரிபார்த்து உங்களுக்கான சான்றிதழ்களை உருவாக்கும்.
நீங்கள் ஒரு சான்றிதழைச் சேர்த்திருந்தால் ஆனால் certbot கண்டுபிடிக்க முடியவில்லை - 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"

இணைக்கப்பட்டுள்ளதா? அருமை - தொடர்வோம்:

இப்போது நாம் கட்டமைப்பை மாற்ற வேண்டும் 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

இந்த வரிசையை க்ரான்டாப்பில் சேர்ப்பது மற்றொரு விருப்பம்.

என் கருத்துப்படி, SSL ஐ Docker Web-app உடன் இணைக்க இது எளிதான வழியாகும்.

PS உரையில் வழங்கப்பட்ட அனைத்து ஸ்கிரிப்ட்களும் இறுதியானவை அல்ல என்பதை கவனத்தில் கொள்ளவும், திட்டம் இப்போது ஆழமான டெவ் கட்டத்தில் உள்ளது, எனவே கட்டமைப்புகளை விமர்சிக்க வேண்டாம் என்று நான் உங்களிடம் கேட்க விரும்புகிறேன் - அவை பல முறை மாற்றியமைக்கப்படும்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்