डॉकर वेब अॅपसाठी SSL प्रमाणपत्र

या लेखात, मी तुमच्यासोबत डॉकरवर चालणाऱ्या तुमच्या वेब ऍप्लिकेशनसाठी SSL प्रमाणपत्र तयार करण्याची पद्धत शेअर करू इच्छितो, कारण... मला इंटरनेटच्या रशियन भाषेच्या भागात असे समाधान सापडले नाही.

डॉकर वेब अॅपसाठी SSL प्रमाणपत्र

कट अंतर्गत अधिक तपशील.

आमच्याकडे docker v.17.05, docker-compose v.1.21, Ubuntu Server 18 आणि शुद्ध Let'sEncrypt चा एक पिंट होता. डॉकरवर उत्पादन तैनात करणे आवश्यक आहे असे नाही. पण एकदा तुम्ही डॉकर बनवायला सुरुवात केली की ते थांबवणे कठीण होते.

तर, सुरुवातीला, मी मानक सेटिंग्ज देईन - ज्या आमच्याकडे डेव्ह स्टेजवर होत्या, म्हणजे. पोर्ट 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 चला Enctypt करू к nginx कंटेनर आणि आणखी काही नाही.

सर्व प्रथम, आम्ही ते सर्व्हरवर स्थापित केले सर्टबॉट
sudo apt-get install certbot

पुढे, आम्ही आमच्या डोमेनसाठी वाइल्डकार्ड प्रमाणपत्रे व्युत्पन्न केली

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


अंमलबजावणीनंतर, certbot आम्हाला 2 TXT रेकॉर्ड प्रदान करेल जे DNS सेटिंग्जमध्ये निर्दिष्ट करणे आवश्यक आहे.

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


आणि एंटर दाबा.

यानंतर, certbot DNS मध्ये या रेकॉर्डची उपस्थिती तपासेल आणि तुमच्यासाठी प्रमाणपत्रे तयार करेल.
जर तुम्ही प्रमाणपत्र जोडले असेल पण सर्टबॉट ते सापडले नाही - 5-10 मिनिटांनंतर कमांड रीस्टार्ट करण्याचा प्रयत्न करा.

बरं, येथे आम्ही 90 दिवसांसाठी Let'sEncrypt प्रमाणपत्राचे अभिमानी मालक आहोत, परंतु आता आम्हाला ते डॉकरवर अपलोड करणे आवश्यक आहे.

हे करण्यासाठी, सर्वात क्षुल्लक मार्गाने, 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 कॉन्फिगचे उदाहरण

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

वास्तविक, या हाताळणीनंतर, आपण डॉकर-कंपोजसह डिरेक्टरीमध्ये जातो, डॉकर-कंपोज अप -d लिहू. आणि आम्ही SSL ची कार्यक्षमता तपासतो. सर्व काही उतरले पाहिजे.

मुख्य गोष्ट हे विसरू नका की Let'sEnctypt प्रमाणपत्र 90 दिवसांसाठी जारी केले जाते आणि तुम्हाला कमांडद्वारे त्याचे नूतनीकरण करावे लागेल. sudo certbot renew, आणि नंतर कमांडसह प्रोजेक्ट रीस्टार्ट करा docker-compose restart

क्रॉन्टॅबमध्ये हा क्रम जोडणे हा दुसरा पर्याय आहे.

माझ्या मते एसएसएलला डॉकर वेब-अॅपशी जोडण्याचा हा सर्वात सोपा मार्ग आहे.

PS कृपया लक्षात घ्या की मजकूरात सादर केलेल्या सर्व स्क्रिप्ट्स अंतिम नाहीत, प्रकल्प आता सखोल डेव्ह स्टेजवर आहे, म्हणून मी तुम्हाला कॉन्फिगवर टीका करू नका असे सांगू इच्छितो - ते बर्याच वेळा सुधारले जातील.

स्त्रोत: www.habr.com

एक टिप्पणी जोडा