Thiết lập tự động nhận chứng chỉ letsencrypt bằng docker trên linux

Gần đây tôi đã thay đổi máy chủ ảo và phải cấu hình lại mọi thứ. Tôi muốn trang web có thể truy cập được thông qua https và cho phép nhận và gia hạn chứng chỉ mã hóa tự động. Điều này có thể đạt được bằng cách sử dụng hai hình ảnh docker nginx-proxy và nginx-proxy-companion.

Đây là hướng dẫn cách thiết lập trang web trên Docker, với proxy tự động nhận chứng chỉ SSL. Máy chủ ảo CentOS 7 được sử dụng.

Tôi cho rằng máy chủ đã được mua, định cấu hình, đăng nhập bằng khóa, cài đặt Fail2ban, v.v.

Đầu tiên bạn cần cài đặt docker.

  1. Đầu tiên bạn cần cài đặt phụ thuộc
    $ sudo yum install -y yum-utils  device-mapper-persistent-data lvm2
  2. Kết nối kho lưu trữ
    $ sudo yum-config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
  3. Sau đó cài đặt phiên bản cộng đồng docker
    $ sudo yum install docker-ce docker-ce-cli containerd.io
  4. Thêm docker để khởi động và chạy
    $ sudo systemctl enable docker
    $ sudo systemctl start docker
  5. Thêm người dùng vào nhóm docker để có thể chạy docker mà không cần sudo
    $ usermod -aG docker user

Bước tiếp theo là cài đặt docker-compose. Tiện ích này có thể được cài đặt theo nhiều cách, nhưng tôi thích cài đặt thông qua trình quản lý pip và virtualenv để không làm lộn xộn hệ thống với các gói không cần thiết.

  1. Cài đặt pip
    $ sudo yum install python-pip
  2. Cài đặt virtualenv
    $ pip install virtualenv
  3. Tiếp theo bạn cần tạo một thư mục chứa dự án và khởi tạo nó. Thư mục chứa mọi thứ bạn cần để quản lý các gói sẽ được gọi là ve.
    $ mkdir docker
    $ cd docker
    $ virtualenv ve
  4. Để bắt đầu sử dụng môi trường ảo, bạn cần chạy lệnh sau trong thư mục dự án.
    $ source ve/bin/activate
  5. Bạn có thể cài đặt docker-compose.
    pip install docker-compose

    Để các container nhìn thấy nhau, chúng ta sẽ tạo một mạng lưới. Theo mặc định, trình điều khiển cầu được sử dụng.

    $ docker network create network

    Tiếp theo bạn cần cấu hình docker-compose, proxy sẽ nằm trong thư mục proxy, trang web kiểm tra sẽ nằm trong thư mục kiểm tra. Ví dụ: tôi đang sử dụng tên miền example.com

    $ mkdir proxy
    $ mkdir test
    $ touch proxy/docker-compose.yml
    $ touch test/docker-compose.yml

    Nội dung proxy/docker-compose.yml

    version: '3'
    
    networks:
      default:
        external:
          name: network
    
    services:
      nginx-proxy:
        container_name: nginx-proxy
        image: jwilder/nginx-proxy
        ports:
          - 80:80
          - 443:443
        volumes:
          - certs:/etc/nginx/certs
          - vhost.d:/etc/nginx/vhost.d
          - html:/usr/share/nginx/html
          - /var/run/docker.sock:/tmp/docker.sock:ro
    
      nginx-proxy-letsencrypt:
        container_name: nginx-proxy-letsencrypt
        image: jrcs/letsencrypt-nginx-proxy-companion
        volumes: 
          - certs:/etc/nginx/certs
          - vhost.d:/etc/nginx/vhost.d
          - html:/usr/share/nginx/html
          - /var/run/docker.sock:/var/run/docker.sock:ro
        environment:
          - NGINX_PROXY_CONTAINER=nginx-proxy
    
    volumes:
      certs:
      vhost.d:
      html:

    Biến môi trường NGINX_PROXY_CONTAINER bộ chứa allowencrypt cần phải xem được bộ chứa proxy. Các thư mục /etc/nginx/certs /etc/nginx/vhost.d và /usr/share/nginx/html phải được chia sẻ bởi cả hai vùng chứa. Để bộ chứa letencrypt hoạt động chính xác, ứng dụng phải truy cập được trên cả cổng 80 và 443.

    Nội dung kiểm tra/docker-compose.yml

    version: '3'
    
    networks:
      default:
        external:
          name: network
    
    services:
    
      nginx:
        container_name: nginx
        image: nginx:latest
        environment:
          - VIRTUAL_HOST=example.com
          - LETSENCRYPT_HOST=example.com
          - [email protected]

    Ở đây, các biến môi trường là cần thiết để proxy xử lý chính xác yêu cầu đến máy chủ và yêu cầu chứng chỉ cho tên miền chính xác.

    Tất cả những gì còn lại là chạy docker-compose

    $ cd proxy
    $ docker-compose up -d
    $ cd ../test
    $ docker-compose up -d

Nguồn: www.habr.com

Thêm một lời nhận xét