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.
- Đầu tiên bạn cần cài đặt phụ thuộc
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- Kết nối kho lưu trữ
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Sau đó cài đặt phiên bản cộng đồng docker
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Thêm docker để khởi động và chạy
$ sudo systemctl enable docker $ sudo systemctl start docker
- 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.
- Cài đặt pip
$ sudo yum install python-pip
- Cài đặt virtualenv
$ pip install virtualenv
- 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
- Để 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
- 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