ڈوکر ویب ایپ کے لیے SSL سرٹیفکیٹ

اس آرٹیکل میں، میں آپ کے ساتھ Docker پر چلنے والی آپ کی ویب ایپلیکیشن کے لیے 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 کریں۔ к نگنکس کنٹینر اور کچھ نہیں.

سب سے پہلے، ہم نے اسے سرور پر انسٹال کیا۔ سرٹیفکیٹ
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}


اور انٹر دبائیں۔

اس کے بعد، سرٹ بوٹ ڈی این ایس میں ان ریکارڈز کی موجودگی کی جانچ کرے گا اور آپ کے لیے سرٹیفکیٹ بنائے گا۔
اگر آپ نے ایک سرٹیفکیٹ شامل کیا ہے لیکن سرٹیفکیٹ یہ نہیں ملا - 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"

منسلک بہت اچھا - آئیے جاری رکھیں:

اب ہمیں تشکیل کو تبدیل کرنے کی ضرورت ہے۔ نگنکس کے ساتھ کام کرنے کے لئے 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;
	}
}

دراصل، ان ہیرا پھیری کے بعد، ہم Docker-compose کے ساتھ ڈائریکٹری میں جاتے ہیں، docker-compose up -d لکھتے ہیں۔ اور ہم SSL کی فعالیت کو چیک کرتے ہیں۔ سب کچھ اتار دینا چاہیے۔

اہم بات یہ نہ بھولیں کہ Let'sEnctypt سرٹیفکیٹ 90 دنوں کے لیے جاری کیا جاتا ہے اور آپ کو کمانڈ کے ذریعے اس کی تجدید کرنی ہوگی۔ sudo certbot renew، اور پھر کمانڈ کے ساتھ پروجیکٹ کو دوبارہ شروع کریں۔ docker-compose restart

دوسرا آپشن یہ ہے کہ اس ترتیب کو کرونٹاب میں شامل کیا جائے۔

میری رائے میں ایس ایس ایل کو ڈوکر ویب ایپ سے جوڑنے کا یہ سب سے آسان طریقہ ہے۔

PS براہ کرم اس بات کو ذہن میں رکھیں کہ متن میں پیش کردہ تمام اسکرپٹ حتمی نہیں ہیں، پروجیکٹ اب ڈیپ ڈیو اسٹیج پر ہے، اس لیے میں آپ سے کہنا چاہوں گا کہ کنفیگرز پر تنقید نہ کریں - ان میں کئی بار ترمیم کی جائے گی۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں