WordPress là một trong những Hệ thống quản lý nội dung [CMS] phổ biến nhất hiện có. Theo thống kê, nó chiếm hơn 39% tất cả các trang web bạn thấy trên toàn thế giới. Đó là một lựa chọn phổ biến vì khả năng mở rộng thông qua các plugin và hệ thống tạo khuôn mẫu linh hoạt của nó. Nó cho phép bạn thay đổi diện mạo của nó trong vài giây. Hơn nữa, việc quản trị của nó có thể được thực hiện thông qua giao diện web mà không đòi hỏi nhiều bí quyết kỹ thuật
Ngoài ra, WordPress là mã nguồn mở miễn phí và được xây dựng trên cơ sở dữ liệu MySQL với bộ xử lý PHP. Bạn có thể triển khai WordPress trên ngăn xếp LAMP [Linux, Apache, MySQL và PHP] hoặc ngăn xếp LEMP [Linux, Nginx, MySQL và PHP]. Tuy nhiên, nó tỏ ra tốn thời gian để thiết lập ngăn xếp mỗi khi bạn muốn triển khai
May mắn thay, các phương pháp phân phối phần mềm hiện đại như điện toán đám mây, Docker và Docker Compose đã làm mượt mà trải nghiệm tổng thể của nhà phát triển. Các công cụ này đơn giản hóa quy trình thiết lập bất kỳ ngăn xếp nào bằng cách tránh chi phí cài đặt và định cấu hình các thành phần riêng lẻ mỗi khi bạn muốn triển khai một ứng dụng. Thay vào đó, bạn viết các tệp cấu hình sẽ được sử dụng để kéo và tạo hình ảnh và chạy chúng trong bộ chứa Docker, cho phép bạn triển khai ứng dụng của mình chỉ bằng một lệnh
Bộ chứa là môi trường tiêu chuẩn hóa nhẹ, ảo hóa, di động, được phần mềm xác định cho phép phần mềm chạy tách biệt với phần mềm khác chạy trên máy chủ vật lý. Docker Compose cho phép bạn quản lý nhiều container và đảm bảo chúng giao tiếp với nhau. Ví dụ: mã nguồn ứng dụng và cơ sở dữ liệu phải giao tiếp
Trong hướng dẫn này, chúng tôi sẽ xây dựng một ứng dụng WordPress được chứa nhiều vùng chứa. Một ứng dụng WordPress hoàn chỉnh yêu cầu ba vùng chứa. Cơ sở dữ liệu MySQL, máy chủ Nginx và mã nguồn WordPress. Bảo mật là ưu tiên hàng đầu trong các trang web hiện đại, chúng tôi sẽ lấy chứng chỉ SSL từ Let's Encrypt để bảo mật cài đặt của bạn. Sau đó, chúng tôi sẽ thiết lập một công việc định kỳ để kiểm tra và gia hạn chứng chỉ định kỳ để bảo mật trang web của bạn được duy trì liên tục
điều kiện tiên quyết
- Vì đây là hướng dẫn thực hành, bạn nên cài đặt Ubuntu 20. 04 làm môi trường hoạt động ban đầu của bạn. Bạn cũng nên có một người dùng không phải root với đặc quyền sudo. Dưới đây là hướng dẫn từng bước để giúp bạn thiết lập máy chủ Ubuntu của mình
- Bạn cũng cần cài đặt Docker. Bạn có thể tham khảo bài viết hướng dẫn cài đặt và vận hành Docker trên Ubuntu 18. 04
- Bản cài đặt Docker Compose. Bạn có thể làm theo Bước 1 của hướng dẫn Cách cài đặt và định cấu hình Docker Compose trên Ubuntu 20. 04
- Cần có tên miền đã đăng ký để nhận chứng chỉ TLS/SSL từ Let's Encrypt. Vì lợi ích của hướng dẫn này, chúng tôi sẽ sử dụng
example.com
- Thiết lập bản ghi DNS để trỏ lưu lượng đến VPS của bạn. Bạn cần hai bản ghi DNS
- Bản ghi A có
example.com
trỏ đến địa chỉ IP công cộng của máy chủ của bạn - Một bản ghi A với
www.example.com
trỏ đến địa chỉ IP công cộng của máy chủ của bạn
- Bản ghi A có
Bước 1. Xác định cấu hình cho máy chủ web
Máy chủ web giữ các tệp trang web của bạn và cho phép người dùng truy cập ứng dụng web của bạn. Do đó, chỉ thích hợp ở bước đầu tiên chúng ta xác định cấu hình cho máy chủ web. Chúng tôi sẽ xác định tệp cấu hình máy chủ Nginx sẽ bao gồm các khối vị trí dành riêng cho WordPress. Chúng tôi cũng sẽ bao gồm các khối vị trí để chuyển các yêu cầu xác minh Let's Encrypt tới ứng dụng khách Certbot để tự động gia hạn chứng chỉ
Hãy bắt đầu bằng cách tạo một thư mục cho dự án. Bạn có thể chọn một tên thư mục bạn thích. Chúng tôi sẽ sử dụng wordpress_docker
cho hướng dẫn này. Nhập lệnh sau để tạo thư mục và điều hướng vào đó
1
mkdir wordpress_docker && cd wordpress_docker
Tiếp theo tạo thư mục chứa các file cấu hình Nginx bằng lệnh
1
mkdir nginx - conf
Sử dụng nano
để mở tệp bằng lệnh sau
1
nano nginx - conf / nginx.conf
Trong tệp này, chúng tôi sẽ xác định các lệnh cơ bản cho cấu hình khối máy chủ Nginx. Chúng bao gồm các lệnh cho tên máy chủ, gốc tài liệu và khối vị trí để chỉ đạo các yêu cầu plugin Certbot cho chứng chỉ, tệp tĩnh và xử lý PHP. Bạn có thể đọc hướng dẫn của chúng tôi về Cách bảo mật Nginx bằng Let's Encrypt để tìm hiểu thêm. Thêm mã sau vào tệp, thay thế example.com
bằng tên miền đã đăng ký của bạn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
máy chủ {
nghe 80 ;
nghe [. . ]. 80 ;
máy chủ _ tên ví dụ . com www . ví dụ . com ;
chỉ mục chỉ mục . php chỉ mục . html chỉ mục . htm ;
gốc /var/www/html ;
vị trí ~ / . nổi tiếng/acme-thử thách {
cho phép tất cả ;
gốc /var/www/html ;
}
vị trí / {
thử _ tệp $uri $uri/ /index. php $ is _ args $args;
}
vị trí ~ \. php $ {
thử _ tệp $uri =404;
fastcgi _ tách _path_info ^[. + \. php ][ / . + ]$;
fastcgi _ vượt qua ứng dụng : 9000 ;
fastcgi _ chỉ mục chỉ mục . php ;
bao gồm fastcgi _ tham số ;
fastcgi _ param SCRIPT _FILENAME
$ tài liệu _ gốc $fastcgi_script_name;
fastcgi _ param PATH _INFO $fastcgi_path_info;
}
vị trí ~ / \. ht {
từ chối tất cả ;
}
vị trí = /favicon . ico {
nhật ký _ không _found off; access_log off;
}
vị trí = /robot . txt {
nhật ký _ không _found off; access_log off; allow all;
}
vị trí ~ * \.[ css . gif . ico . jpeg . jpg . là . png ]$ {
hết hạn tối đa ;
nhật ký _ không _found off;
}
}
Hãy xác định các phần bạn đã thêm
- chỉ thị
listen
. nó yêu cầu Nginx lắng nghe trên cổng80
. Điều này cho phép sử dụng plugin webroot của Certbot để thực hiện các yêu cầu chứng chỉ. Khi chúng tôi đã nhận được chứng chỉ SSL, chúng tôi sẽ cập nhật cấu hình này để sử dụng cổng443
server_name
. điều này xác định tên miền mà cấu hình này sẽ xử lý. Lưu lượng truy cập vào tên miền được xác định ở đây sẽ được chuyển hướng đến khối máy chủ cụ thể này và do đó đến tài liệuexample.com
0example.com
1. nó xác định thư mục gốc cho các yêu cầu đến tên miền trên. Đó thường là thư mục chứa các tệp trang web thực tế của chúng tôi. Chúng tôi đã đặt thư mục thànhexample.com
2 này. Nó sẽ được tạo dưới dạng điểm gắn kết Docker trong thời gian xây dựng vùng chứa. Chúng tôi sẽ xác định các hướng dẫn cho quy trình này bên trong WordPress Dockerfileexample.com
3. điều này xác định các tệp sẽ được sử dụng làm chỉ mục hoặc điểm vào máy chủ web của bạn khi xử lý yêu cầu. Chúng tôi đã chuyển chỉ mục. php trước chỉ mục. html để Nginx ưu tiên choexample.com
4
- Khối vị trí
example.com
5. xử lý các yêu cầu đến thư mục nổi tiếng nơi Certbot thêm một tệp tạm thời để xác thực rằng DNS cho miền được chỉ định hướng đến máy chủ cụ thể mà chúng tôi đang yêu cầu chứng chỉ SSL từ. Đây là lý do tại sao bạn nên thêm miền hợp lệ để bước này hoạt động thay vì miềnexample.com
mà chúng tôi đang sử dụng trong hướng dẫn nàyexample.com
7. chọn các yêu cầu URI và trao quyền kiểm soát cho WordPressexample.com
4 để yêu cầu đối số xử lýexample.com
9. xử lý xử lý PHP và chuyển yêu cầu tới bộ chứa WordPress [chúng tôi sẽ xác định tệp cấu hình cho việc này trong bước sau]. Chúng tôi đã xác định các cấu hình dành riêng cho giao thức FastCGI tại đây vì hình ảnh WordPress Docker sẽ dựa trên php. hình ảnh fpm. Nginx sử dụng bộ xử lý PHP độc lập cho các yêu cầu dành riêng cho PHP. Chúng tôi sẽ sử dụng bộ xử lýwww.example.com
0 đi kèm với hình ảnh Dockerwww.example.com
1www.example.com
2. xử lý các tệpwww.example.com
3 mà Nginx không sử dụng. Chỉ thịwww.example.com
4 đảm bảo các tệp này không bao giờ được cung cấp cho khách truy cập trang webwww.example.com
5. như đã thấy trong định nghĩa, điều này ngăn việc ghi nhật ký các yêu cầu đối với tệpwww.example.com
6 vàwww.example.com
7www.example.com
8. tắt ghi nhật ký các yêu cầu đối với các tệp tĩnh và đảm bảo chúng được lưu vào bộ đệm để giảm tải cho máy chủ
Bây giờ bạn có thể lưu và đóng tệp bằng cách nhấn www.example.com
9, wordpress_docker
0, sau đó nhấn wordpress_docker
1. Thế là hoàn thành bước đầu tiên
Bước 2. Xác định các biến môi trường
Các biến môi trường là cần thiết để tạo điều kiện giao tiếp giữa ứng dụng WordPress và Cơ sở dữ liệu. Họ cũng đảm bảo dữ liệu ứng dụng được duy trì. Các biến môi trường bao gồm thông tin nhạy cảm như thông tin đăng nhập cơ sở dữ liệu và thông tin không nhạy cảm như tên cơ sở dữ liệu và máy chủ lưu trữ
Vì mục đích bảo mật, bạn không nên thêm thông tin nhạy cảm vào kho dự án. Do đó, thay vì đặt các giá trị nhạy cảm trong tệp Docker Compose, chúng tôi sẽ xác định thông tin đăng nhập MySQL bên trong các tệp wordpress_docker
2 sẽ không được cam kết với kho dự án và có nguy cơ bị lộ trước công chúng. Bên trong dự án wordpress_docker
3 mở tệp wordpress_docker
2
1
nano . vi
Thêm thông tin đăng nhập MySQL sau vào tệp, cập nhật nó bằng mật khẩu mạnh do bạn chọn1
2
3
MYSQL_ROOT_PASSWORD = your_strong_root_password
MYSQL_USER = your_wordpress_database_user
MYSQL_PASSWORD = strong_wordpress_database_password
Trước tiên, chúng tôi đã xác định mật khẩu cho tài khoản quản trị gốc MySQL và thông tin đăng nhập dành riêng cho ứng dụng WordPress của chúng tôi. Sau khi hoàn tất, lưu và đóng tệpĐiều tiếp theo bạn phải làm là thêm tệp wordpress_docker
2 vào tệp wordpress_docker
6 và wordpress_docker
7 để đảm bảo rằng nó không được thêm vào kho lưu trữ hoặc hình ảnh Docker tương ứng của bạn
Điều này không cần thiết cho hướng dẫn này, nhưng nếu bạn muốn làm việc với Git để kiểm soát phiên bản, hãy nhập lệnh sau để khởi tạo thư mục hiện tại dưới dạng kho lưu trữ git
1
git init
Mở wordpress_docker
6 bằng nano
1
nano . gitignore
Thêm dòng sau
1
.vi
lưu và đóng tập tin. Tiếp theo, mở wordpress_docker
7 bằng nano
1
nano . dockerignore
Thêm dòng sau
1
.vi
Trong khi ở đó, bạn có thể tùy chọn thêm các tệp và thư mục khác được liên kết với quá trình phát triển ứng dụng của mình
1
2
3
.vi
.git
docker - soạn. yml
Lưu và đóng tệp khi hoàn tất. Đó là tất cả cho bước này. Hãy chuyển sang định nghĩa Docker Compose
Bước 3. Cấu hình dịch vụ với Docker Compose
Docker Compose sử dụng tệp nano
0 để tạo hình ảnh. Tệp này chứa các định nghĩa dịch vụ để thiết lập hoàn chỉnh ứng dụng. Các định nghĩa dịch vụ về cơ bản là các hướng dẫn về cách một vùng chứa sẽ chạy. Một dịch vụ là một thùng chứa đang chạy thực tế
Docker Compose cho phép xác định các dịch vụ khác nhau cho các ứng dụng nhiều vùng chứa bằng cách liên kết các dịch vụ khác nhau với các mạng và khối lượng được chia sẻ. Bạn sẽ thấy điều này đang hoạt động vì chúng tôi sẽ xác định ba vùng chứa cho ứng dụng của chúng tôi. máy chủ web, cài đặt WordPress và cơ sở dữ liệu. Chúng tôi sẽ thêm vùng chứa thứ tư để chạy ứng dụng khách Certbot để gia hạn chứng chỉ
Nhập lệnh sau để tạo tệp nano
0
1
nano docker - compose. yml
Dòng đầu tiên trong tệp nano
0 là dòng định nghĩa phiên bản. Chúng tôi đã đặt 3 cho chúng tôi. Sau đó, bạn có thể bắt đầu xác định dịch vụ của mình. Thêm đoạn mã sau vào tệp để xác định dịch vụ nano
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
phiên bản. '3'
dịch vụ.
#Dịch vụ MySQL
db.
hình ảnh. mysql. 8. 0
container_name. db
khởi động lại. trừ khi - dừng
env_file. . vi
môi trường.
- MYSQL_DATABASE = wordpress
khối lượng.
- dbdata. / var / lib / mysql
lệnh. '--default-authentication-plugin=mysql_native_password'
mạng.
- ứng dụng - mạng
Hãy thảo luận về những gì chúng ta có trong định nghĩa dịch vụ nano
3 bên dưới
nano
5. xác định hình ảnh mà vùng chứa sẽ dựa trên. Chỉ định một phiên bản cụ thể [nano
6] luôn tốt hơn là sử dụng thẻ mới nhất [nano
7] vì các phiên bản tương lai của hình ảnh MySQL có thể xung đột với ứng dụng của chúng tôi nếu chúng tôi tình cờ xây dựng lại hình ảnh này. Bạn có thể tìm thêm thông tin về Dockerfiles Các phương pháp hay nhất trên Tài liệu Dockerfile chính thứcnano
8. chúng tôi chỉ định tên container ở đâynano
9. lệnh này xác định hành vi khởi động lại của vùng chứa. Mặc định làexample.com
0 nhưng chúng tôi đã đặt nó luôn lànano
9 trừ khi nó bị dừng theo cách thủ côngexample.com
2. lệnh này được sử dụng để chỉ định vị trí của tệp có các biến môi trường [wordpress_docker
2] được ứng dụng của chúng tôi sử dụngexample.com
4. được sử dụng để chỉ định các biến môi trường bổ sung. Trong hướng dẫn này, chúng tôi đã chỉ định biếnexample.com
5 để giữ tên cơ sở dữ liệu cho ứng dụng của chúng tôi. Tên cơ sở dữ liệu có thể được bao gồm trongnano
0example.com
7. được sử dụng để chỉ định vị trí gắn kết. Trong ví dụ của chúng tôi, chúng tôi đã gắn một ổ đĩa có tên là dbdata vào thư mụcexample.com
8 trên vùng chứa, thư mục này thường là thư mục dữ liệu tiêu chuẩn cho MySQLexample.com
9. lệnh này chỉ định một lệnh sẽ ghi đè lệnh CMD mặc định cho hình ảnh. Chúng tôi đã thêm một tùy chọn cho lệnhlisten
0 tiêu chuẩn của hình ảnh Docker để khởi động máy chủ MySQL bên trong vùng chứa. Tùy chọn chúng tôi đã thêm làlisten
1, cập nhật plugin xác thực mặc định cho MySQL để sử dụng xác thực mật khẩu [listen
2]. Điều này là cần thiết để PHP của bạn [ứng dụng WordPress hoạt động] vì chúng sử dụng tên người dùng và mật khẩu để truy cập cơ sở dữ liệu. Trong các phiên bản MySQL mới hơn, plugin xác thực mặc định đã thay đổi. Tuy nhiên, hầu hết các ứng dụng sử dụng xác thực mật khẩu. Vì vậy, bạn phải thay đổi cài đặt này để ứng dụng hoạt độnglisten
3. chỉ thị này được sử dụng để xác định rằng dịch vụnano
3 sẽ tham gia vàolisten
5, mà chúng tôi sẽ xác định khi chúng tôi thực hiện cùng với hướng dẫn
Tiếp theo, hãy xác định cấu hình dịch vụ cho ứng dụng WordPress của chúng tôi. Chúng tôi sẽ gọi dịch vụ và container_name listen
6. Thêm đoạn mã sau vào bên dưới định nghĩa dịch vụ nano
3, lưu ý thụt lề thích hợp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dịch vụ mã ứng dụng #WordPress
ứng dụng.
phụ thuộc.
- db
hình ảnh. wordpress. 5. 1. 1 - fpm - alpine
container_name. ứng dụng
khởi động lại. trừ khi - dừng
env_file. . vi
môi trường.
- WORDPRESS_DB_HOST = db:3306
- WORDPRESS_DB_USER = $MYSQL_USER
- WORDPRESS_DB_PASSWORD = $MYSQL_PASSWORD
- WORDPRESS_DB_NAME = wordpress
khối lượng.
- ứng dụng. / var / www / html
mạng.
- ứng dụng - mạng
Giống như chúng tôi đã làm với dịch vụ nano
3, chúng tôi đã đặt tên cho bộ chứa của mình và xác định chính sách khởi động lại. Một số tùy chọn khác mà chúng tôi đã thêm được xác định bên dưới
listen
9. lệnh này đảm bảo rằng các thùng chứa được bắt đầu theo thứ tự phụ thuộc. Trong trường hợp của chúng tôi, vùng chứalisten
6 phụ thuộc vào vùng chứanano
3. Do đó, nó sẽ bắt đầu sau khi bộ chứanano
3 bắt đầu. Điều này cần phải xảy ra theo thứ tự này vì ứng dụng WordPress phụ thuộc vào tính khả dụng của cơ sở dữ liệu MySQL để nó hoạt động80
3. như đã thấy trong đoạn mã, chúng tôi sẽ sử dụng phiên bản WordPress 5. 1. Hình ảnh núi cao 1 fpm. Chúng tôi đã giải thích về bộ xử lýwww.example.com
0 mà Nginx yêu cầu để xử lý PHP. Hình ảnh này giải quyết vấn đề đó. Hình ảnh núi cao dựa trên dự án Alpine Linux giúp giữ cho kích thước hình ảnh nhỏ hơn. Nếu bạn cần thêm thông tin về các biến thể hình ảnh, bạn có thể theo liên kết này để biết hình ảnh Docker Hub Wordpressexample.com
2. chỉ định vị trí của tệpwordpress_docker
2 chứa thông tin đăng nhập cơ sở dữ liệuexample.com
4. lệnh này xác định các biến môi trường bổ sung. Đối với trường hợp của chúng tôi, chúng tôi đang xác định các biến mà WordPress mong đợi và gán cho chúng các giá trị của các biến từ tệpwordpress_docker
2 của chúng tôi. Đây là80
9,443
0 và443
1 dùng để chỉ máy chủ MySQL chạy trên bộ chứanano
3, có thể truy cập từ cổng mặc định của MySQL là443
3. Cuối cùng, bạn thấy443
4 mà chúng tôi đã đặt thành WordPress. Giá trị tương tự được chỉ định trong định nghĩa dịch vụ MySQL trong vùng chứa db.443
5example.com
7. lệnh này gắn một ổ đĩa có tên ứng dụng vào điểm gắn kếtexample.com
2, được tạo bởi hình ảnh WordPress. Việc đặt tên cho các ổ đĩa cho phép chia sẻ mã ứng dụng với các vùng chứa kháclisten
3. cuối cùng, chúng tôi thêm bộ chứa ứng dụng vàolisten
5 để đảm bảo nó giao tiếp với các bộ chứa khác trên mạng
Đó sẽ là tất cả đối với bộ chứa dịch vụ listen
6 cho hình ảnh WordPress. Bây giờ hãy xác định dịch vụ server_name
1 cho hình ảnh Nginx. Trước tiên, hãy thêm đoạn mã sau vào bên dưới định nghĩa dịch vụ ứng dụng trong tệp nano
0 của bạn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#Dịch vụ máy chủ web Nginx
máy chủ web.
phụ thuộc.
- ứng dụng
hình ảnh. nginx. 1. 15. 12 - núi cao
container_name. máy chủ web
khởi động lại. trừ khi - dừng
cổng.
- "80. 80"
khối lượng.
- ứng dụng. / var / www / html
- . / nginx - conf. / vv / nginx / . conf.d
- certbot - vv: / vv / letsencrypt
mạng.
- ứng dụng - mạng
Chúng tôi đã giải thích tùy chọn listen
9. Trong trường hợp của dịch vụ server_name
1 này, công-ten-nơ sẽ bắt đầu sau khi công-ten-nơ listen
6 đã bắt đầu. Bộ chứa máy chủ web dựa trên hình ảnh Nginx núi cao. Nó có chính sách khởi động lại tương tự như các định nghĩa dịch vụ trước đó. The other options in the webserver service definition include
server_name
6. liên kết các cổng giữa máy chủ và vùng chứa. Ở Bước 1, chúng tôi đã xác định cổng80
trong tệpserver_name
8. Cổng này được ánh xạ tới cổng80
trên vùng chứaexample.com
00. we have a combination of bind mounts and named volumes under this optionlisten
6.example.com
2. định nghĩa ổ đĩa này gắn kết ứng dụng WordPress vào thư mụcexample.com
2 mà trước đó, chúng tôi đã đặt quyền root trong khối máy chủ Nginxexample.com
04. /etc/nginx/conf. d. this definition bind mounts the Nginx configuration directory on the host machine to the Nginx configuration directory we defined for the container. Hence, any changes on the host machine are automatically reflected in the containerexample.com
05.example.com
06. this definition mounts the Let’s Encrypt certificates and keys for the domain to the appropriate directory on the container
listen
3. like in the previous service definitions, thelisten
3 directive adds the webserver service to theexample.com
09
Since we are done with the webserver definition, let’s add instructions for the Certbot service. This will handle getting your TLS/SSL certificates from Let’s Encrypt. If you would like to know more about securing an Nginx server, this tutorial on how to secure Nginx with Let’s Encrypt is a good source
Next, add the following code snippet below the webserver service. Remember to set your correct domain name and email address
1
2
3
4
5
6
7
8
9
10
#certbot service
certbot.
phụ thuộc.
- webserver
image. certbot / certbot
container_name. certbot
khối lượng.
- certbot - vv: / vv / letsencrypt
- ứng dụng. / var / www / html
command. certonly -- webroot -- webroot - path =/ var / www / html -- email hackins@cloudsigma. com -- agree - tos -- no - eff - email -- staging - d example. com - d www. example. com
The example.com
10 image will only start after the server_name
1 has started, because of the listen
9 directive. Docker Compose will pull the Certbot image from Docker Hub as defined
Under the volumes definition, the Certbot container will share the domain certificates and key in example.com
05 with the Nginx server_name
1 container and the application code with the listen
6 container
Under the example.com
9 definition, we have specified a subcommand to run the container’s default Certbot certonly command with additional options as listed below
example.com
17. chỉ định việc sử dụng plugin webroot để đặt các tệp trong thư mục webroot để xác thựcexample.com
18. chỉ định đường dẫn của thư mục webrootexample.com
19. xác định rằng bạn đồng ý với Điều khoản dịch vụ của ACMEexample.com
20. chỉ định rằng bạn không muốn chia sẻ email của mình với EFF. Bạn có thể bỏ qua phần này nếu bạn muốn chia sẻexample.com
21. nói với Certbot rằng trước tiên bạn muốn lấy chứng chỉ kiểm tra từ môi trường tổ chức Let's Encrypt để kiểm tra cấu hình của bạn trước khi lấy chứng chỉ thực tế. Let's Encrypt có giới hạn tỷ lệ yêu cầu tên miền. Do đó, việc kiểm tra cấu hình của bạn trước tiên sẽ giúp bạn tránh bị giới hạn tên miền của mìnhexample.com
22. tùy chọn này lấy tên miền cho yêu cầu chứng chỉ. Trong hướng dẫn này, chúng tôi đã bao gồmexample.com
vàwww.example.com
. Vui lòng chỉ định tên miền đã đăng ký thực tế của bạn
Tệp nano
0 của chúng tôi sắp hoàn tất. Tuy nhiên, bạn cũng phải thêm định nghĩa mạng và khối lượng bên dưới dịch vụ Certbot
1
2
3
4
5
6
7
8
9
10
#tập
khối lượng.
certbot - etc.
ứng dụng.
dbdata.
#Mạng
mạng.
ứng dụng - mạng.
trình điều khiển. cầu
Khóa example.com
7 xác định khối lượng sẽ được chia sẻ với tất cả các dịch vụ [vùng chứa] được xác định trong tệp soạn thảo này. example.com
05, listen
6 và example.com
29. Nội dung của các volume do Docker tạo ra được lưu trữ trong một thư mục do Docker quản lý trên hệ thống file host. example.com
30. Nội dung của mỗi tập sau đó được gắn vào bất kỳ vùng chứa nào sử dụng tập. Điều này cho phép chia sẻ dữ liệu và mã giữa các vùng chứa
Khóa listen
3 xác định mạng cầu nối cho phép giao tiếp giữa các container. Các container trên cùng một mạng cầu như server_name
1 và nano
3 có thể giao tiếp an toàn qua các cổng mà không làm lộ lưu lượng ra mạng bên ngoài. Chúng tôi chỉ hiển thị cổng 80
để cho phép truy cập vào các trang của trang web giao diện người dùng
Tệp nano
0 hoàn chỉnh sẽ trông như thế này
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
phiên bản. '3'
dịch vụ.
Dịch vụ #MySQL
db.
hình ảnh. mysql. 8. 0
container_name. db
khởi động lại. trừ khi - dừng
env_file. . vi
môi trường.
- MYSQL_DATABASE = wordpress
khối lượng.
- dbdata. / var / lib / mysql
lệnh. '--default-authentication-plugin=mysql_native_password'
mạng.
- ứng dụng - mạng
Dịch vụ mã ứng dụng #WordPress
ứng dụng.
phụ thuộc.
- db
hình ảnh. wordpress. 5. 1. 1 - fpm - alpine
container_name. app
khởi động lại. trừ khi - dừng
env_file. . vi
environment.
- WORDPRESS_DB_HOST = db. 3306
- WORDPRESS_DB_USER = $MYSQL_USER
- WORDPRESS_DB_PASSWORD = $MYSQL_PASSWORD
- WORDPRESS_DB_NAME = wordpress
volumes.
- app. / var / www / html
networks.
- app - network
#Dịch vụ máy chủ web Nginx
máy chủ web.
phụ thuộc.
- app
image. nginx. 1. 15. 12 - alpine
container_name. webserver
khởi động lại. trừ khi - dừng
ports.
- "80. 80"
volumes.
- app. / var / www / html
- . / nginx - conf. / etc / nginx / conf. d
- certbot - etc. / etc / letsencrypt
networks.
- app - network
#certbot service
certbot.
phụ thuộc.
- webserver
image. certbot / certbot
container_name. certbot
volumes.
- certbot - etc. / etc / letsencrypt
- app. / var / www / html
command. certonly -- webroot -- webroot - path =/ var / www / html -- email hackins@cloudsigma. com -- agree - tos -- no - eff - email -- staging - d example. com - d www. example. com
#tập
khối lượng.
certbot - etc.
app.
dbdata.
#Mạng
mạng.
app - network.
driver. bridge
You can save and close the file. In the next step, we will be starting and testing the container and certificate requests
Step 4. Running the Containers and Obtaining SSL Certificates
The greatest advantage of Docker Compose is that, once you have defined all your services in the nano
0 file, you can start all the containers with just one command. example.com
37. The command runs every instruction specified. If the domain requests are successful, you should be able to see the correct exit status in your terminal. Enter the following command to create the containers. The example.com
38 flag is for running the containers in the background
1
docker - soạn lên - d
Nếu bạn thấy đầu ra như trong ảnh chụp màn hình bên dưới, thì dịch vụ đã được tạo thành công
Để xác nhận trạng thái của các dịch vụ, hãy chạy lệnh example.com
39
1
docker - compose ps
The output of the command is as shown below if everything was successful. The listen
6, nano
3, and server_name
1 containers’ state should be up, and the example.com
10 container should have example.com
44example.com
45 status
Nếu bạn thấy bất kỳ điều gì khác ngoài example.com
46 trong cột trạng thái cho example.com
47 nano
3 hoặc example.com
49 hoặc trạng thái example.com
44 không phải là example.com
45 cho vùng chứa example.com
10 thì có nghĩa là đã xảy ra sự cố. Bạn có thể kiểm tra nhật ký của từng vùng chứa bằng lệnh example.com
53 và chỉ định example.com
54
1
docker - compose logs service_name
For example, you can check the logs of the example.com
10 container by entering the following command
1
docker - compose logs certbot
To check if the certificates were mounted to the server_name
1 container, use the example.com
57 command
1
docker - compose exec webserver ls - la / etc / letsencrypt / live
Nếu bạn đã sử dụng một tên miền đã đăng ký thực tế khác với example.com
và các yêu cầu chứng chỉ đã thành công, bạn sẽ thấy kết quả tương tự như sau
Khi bạn đã xác nhận rằng yêu cầu chứng chỉ đã thành công, bạn có thể chỉnh sửa tệp nano
0 và xóa cờ example.com
60. Mở tệp bằng nano
1
nano docker - compose. yml
Cuộn xuống phần định nghĩa dịch vụ Certbot, trong tùy chọn lệnh và thay cờ example.com
60 bằng cờ example.com
63. Điều này cho Certbot biết rằng bạn đang yêu cầu gia hạn chứng chỉ cho chứng chỉ của cùng một miền. Định nghĩa dịch vụ Certbot của bạn bây giờ sẽ trông như thế này
1
2
3
4
5
6
7
8
9
10
#certbot service
certbot.
phụ thuộc.
- webserver
image. certbot / certbot
container_name. certbot
khối lượng.
- certbot - vv: / vv / letsencrypt
- ứng dụng. / var / www / html
lệnh. chắc chỉ -- webroot -- webroot-path=/var/www/html --email hackins@cloudsigma.com -- đồng ý - . --no-eff-email --force-renewal -d example.com - d www. ví dụ. com
Lưu tệp khi bạn chỉnh sửa xong
Nhập lệnh sau để tạo lại vùng chứa example.com
10. Cờ example.com
65 đi kèm yêu cầu Compose bỏ qua việc khởi động lại dịch vụ máy chủ web vì nó đang chạy
1
docker - soạn lên -- force-recreate --no-deps Certbot
Lệnh xuất ra ảnh chụp màn hình sau, cho thấy rằng yêu cầu chứng chỉ đã thành công
Đó là tất cả cho bước này. Trong bước tiếp theo, bạn sẽ sửa đổi tệp cấu hình Nginx để bao gồm chứng chỉ SSL
Bước 5. Kích hoạt SSL trong Định nghĩa dịch vụ và cấu hình Nginx
Để làm cho Nginx phục vụ lưu lượng truy cập qua SSL an toàn, trước tiên bạn sẽ sửa đổi tệp cấu hình Nginx để thêm chuyển hướng example.com
66 thành example.com
67. Sau đó, bạn cần chỉ định chứng chỉ và các vị trí khóa, cuối cùng thêm các tiêu đề và tham số bảo mật
Trước khi sửa đổi tệp cấu hình, bạn nên lấy các tham số bảo mật Nginx được đề xuất từ kho lưu trữ GitHub của Certbot bằng cách sử dụng example.com
68 bằng lệnh sau
1
curl - sSLo nginx - conf/options-ssl-nginx.conf
https. // thô. githubusercontent. com/certbot/certbot/master/certbot-nginx/certbot_nginx/_internal/tls_configs/options-ssl-nginx. conf
Lệnh chạy và lưu các tham số mà nó kéo vào một tệp có tên là example.com
69, bên trong thư mục example.com
70. Xóa tệp cấu hình Nginx để chúng tôi có thể tạo một tệp mới bằng các lệnh sau
1
2
rm nginx - conf / nginx.conf
nano nginx - conf / nginx.conf
Trong tệp server_name
8 hiện đang trống, hãy thêm mã sau bao gồm chuyển hướng từ giao thức xác thực example.com
66 sang example.com
73 và tiêu đề bảo mật. Như bạn đã làm trước đó, hãy thay miền example.com
bằng miền đã đăng ký của riêng bạn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
máy chủ {
nghe 80;
nghe [. . ]. 80;
server_name ví dụ. com www. ví dụ. com;
vị trí ~ / . à - biết / acme-challenge {
cho phép tất cả;
gốc / var / www/html;
}
vị trí / {
viết lại ^ https. //$host$request_uri?
}
}
máy chủ {
nghe 443 ssl http2;
nghe [. . ]. 443 ssl http2;
server_name ví dụ. com www. ví dụ. com;
chỉ mục chỉ mục. php chỉ mục. html chỉ mục. htm;
root / var / www/html;
server_tokens tắt;
ssl_certificate / vv / letsencrypt/live/example.com / fullchain. pem;
ssl_certificate_key / v.v / letsencrypt/live/example.com / khóa riêng tư. pem;
bao gồm / v.v / nginx/conf.d / tùy chọn - ssl . -nginx.conf;
add_header X - Khung-Options "SAMEORIGIN" always;
add_header X - XSS-Protection "1; mode=block" always;
add_header X - Nội dung-Type-Options "nosniff" always;
add_header Người giới thiệu - Chính sách "no-referrer-when-downgrade" always;
add_header Nội dung - Bảo mật-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" luôn luôn;
# add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" luôn;
# chỉ bật bảo mật vận chuyển nghiêm ngặt nếu bạn hiểu ý nghĩa
vị trí / {
try_files $uri $uri/ /index.php$is_args$args;
}
vị trí ~ \. php$ {
try_files $uri = 404;
fastcgi_split_path_info ^ [. + \. php][ / . + ]$;
fastcgi_pass ứng dụng. 9000;
fastcgi_index index. php;
bao gồm fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
vị trí ~ / \.ht {
từ chối tất cả;
}
vị trí = / favicon.ico {
log_not_found tắt; access_log off;
}
vị trí = / rô-bốt.txt {
log_not_found tắt; access_log off; allow all;
}
vị trí ~ * \.[css. gif. ico. jpeg. jpg. là. png]$ {
hết hạn tối đa;
log_not_found tắt;
}
}
Trong khối máy chủ đầu tiên xử lý các yêu cầu không an toàn bằng cổng 80
, chúng tôi chỉ định webroot cho các yêu cầu gia hạn Certbot. Chúng tôi cũng bao gồm một lệnh chuyển hướng để chuyển hướng các yêu cầu của example.com
66 sang example.com
67
Khối máy chủ thứ hai xử lý lưu lượng truy cập example.com
67 an toàn đến trên cổng 443
. Như bạn có thể thấy, chúng tôi cũng kích hoạt SSL và example.com
80 cải thiện hiệu suất máy chủ của bạn. Bạn có thể đọc thêm về nó từ các tài liệu Nginx chính thức trên HTTP/2
Trong khối này, chúng tôi cũng đã chỉ định rằng Nginx bao gồm chứng chỉ SSL và các vị trí quan trọng, cũng như các tham số bảo mật Certbot được đề xuất mà example.com
68 đã lưu vào thư mục example.com
82
Các tiêu đề bảo mật bổ sung phục vụ để cải thiện xếp hạng trang web của bạn trên các trang web kiểm tra bảo mật như Tiêu đề bảo mật và Phòng thí nghiệm SSL. Bạn có thể theo các liên kết trên các tiêu đề này để tìm hiểu thêm. X-Frame-Options, Referrer Policy, X-Content-Type-Options, X-XSS-Protection, Content-Security-Policy. Chúng tôi đã nhận xét tiêu đề HTTP Strict Transport Security [HSTS]. Bạn có thể tự do đọc về chức năng tải trước của nó và quyết định xem bạn có muốn kích hoạt nó không
Phần còn lại của các chỉ thị, chẳng hạn như khối vị trí dành riêng cho WordPress example.com
83 vẫn như đã thảo luận trong Bước 1. Bây giờ bạn có thể lưu và đóng tệp khi chỉnh sửa xong
Bây giờ chúng tôi đã kích hoạt lưu lượng truy cập example.com
67 sử dụng cổng example.com
85, chúng tôi cũng phải kích hoạt cổng trên định nghĩa dịch vụ của máy chủ web. Nhập lệnh sau để mở tệp nano
0 bằng example.com
87
1
nano docker - compose. yml
Trong phần máy chủ web bên dưới tùy chọn cổng, hãy thêm ánh xạ cho cổng 443
như được đánh dấu bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
máy chủ web.
phụ thuộc.
- ứng dụng
hình ảnh. nginx. 1. 15. 12 - núi cao
container_name. máy chủ web
khởi động lại. trừ khi - dừng
cổng.
- "80. 80"
- "443. 443"
khối lượng.
- ứng dụng. / var / www / html
- . / nginx - conf. / vv / nginx / . conf.d
- certbot - vv: / vv / letsencrypt
mạng.
- ứng dụng - mạng
Tệp nano
0 hoàn chỉnh bây giờ trông như thế này
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
phiên bản. '3'
dịch vụ.
Dịch vụ #MySQL
db.
hình ảnh. mysql. 8. 0
container_name. db
khởi động lại. trừ khi - dừng
env_file. . vi
environment.
- MYSQL_DATABASE = wordpress
volumes.
- dbdata. / var / lib / mysql
lệnh. '--default-authentication-plugin=mysql_native_password'
networks.
- app - network
Dịch vụ mã ứng dụng #WordPress
ứng dụng.
phụ thuộc.
- db
hình ảnh. wordpress. 5. 1. 1 - fpm - alpine
container_name. app
khởi động lại. trừ khi - dừng
env_file. . vi
environment.
- WORDPRESS_DB_HOST = db. 3306
- WORDPRESS_DB_USER = $MYSQL_USER
- WORDPRESS_DB_PASSWORD = $MYSQL_PASSWORD
- WORDPRESS_DB_NAME = wordpress
volumes.
- app. / var / www / html
networks.
- app - network
#Dịch vụ máy chủ web Nginx
máy chủ web.
phụ thuộc.
- app
image. nginx. 1. 15. 12 - alpine
container_name. webserver
khởi động lại. trừ khi - dừng
ports.
- "80. 80"
- "443. 443"
volumes.
- app. / var / www / html
- . / nginx - conf. / etc / nginx / conf. d
- certbot - etc. / etc / letsencrypt
networks.
- app - network
#certbot service
certbot.
phụ thuộc.
- webserver
image. certbot / certbot
container_name. certbot
volumes.
- certbot - etc. / etc / letsencrypt
- app. / var / www / html
lệnh. chắc chỉ -- webroot -- webroot-path=/var/www/html --email hackins@cloudsigma.com -- đồng ý - . --no-eff-email --force-renewal -d example.com - d www. ví dụ. com
#tập
khối lượng.
certbot - etc.
app.
dbdata.
#Mạng
mạng.
app - network.
driver. bridge
Khi bạn đã xác nhận rằng mọi thứ đều chính xác, hãy lưu và đóng tệp. Sau đó, chạy lệnh sau để tạo lại dịch vụ server_name
1
1
docker - soạn lên - d --force-recreate --no-deps webserver
Xác nhận rằng các dịch vụ của bạn đang chạy bằng lệnh sau1
docker - compose ps
Bạn sẽ thấy một cái gì đó giống như ảnh chụp màn hình bên dưới xác nhận rằng dịch vụ của bạn đang chạy tốtBây giờ tất cả các vùng chứa của bạn đang chạy, bạn có thể tiến hành cấu hình WordPress từ giao diện web
Bước 6. Hoàn thành cấu hình WordPress của bạn từ giao diện web
Điều hướng đến tên miền của máy chủ của bạn để tiếp tục cài đặt. Bạn sẽ thấy trang chủ thiết lập WordPress. Nó hoan nghênh bạn chọn ngôn ngữ của bạn trước khi tiếp tục
Chọn ngôn ngữ của bạn và nhấp vào Tiếp tục để chuyển sang trang tiếp theo
Trên trang này, hãy điền tiêu đề trang web của bạn, chọn tên người dùng dễ nhớ và mật khẩu mạnh. Bạn không nên sử dụng Quản trị viên làm tên người dùng vì lý do bảo mật. Nhập email của bạn và nhấp vào nút Cài đặt WordPress để bắt đầu cài đặt WordPress
Sau khi cài đặt hoàn tất, bạn sẽ được đưa đến màn hình đăng nhập nơi bạn sẽ cung cấp tên người dùng và mật khẩu bạn đã đặt. Khi bạn nhập thông tin đăng nhập hợp lệ, bạn sẽ có thể thấy bảng điều khiển WordPress của mình
Bây giờ bạn đã cài đặt thành công WordPress. Tiếp theo, bạn cần thực hiện các bước để đảm bảo rằng chứng chỉ SSL sẽ tự động gia hạn
Bước 7. Định cấu hình gia hạn chứng chỉ SSL tự động
Chứng chỉ Let's Encrypt TLS/SSL chỉ có hiệu lực trong 90 ngày. Tùy thuộc vào bạn để tạo cấu hình tự động gia hạn để đảm bảo chúng không hết hạn. Bạn có thể đạt được điều này bằng cách tạo một tập lệnh và lên lịch cho nó bằng tiện ích công việc định kỳ. Trong bước này, chúng tôi sẽ chỉ cho bạn cách tạo tập lệnh sẽ gia hạn chứng chỉ. Sau đó, chúng tôi sẽ lên lịch với tiện ích công việc định kỳ để chạy nó định kỳ và gia hạn chứng chỉ nếu chúng sắp hết hạn
Bên trong thư mục dự án wordpress_docker
, hãy mở tập lệnh có tên là example.com
92 với nano
1
nano ssl_renewer. sh
Thêm mã sau vào tập lệnh để xử lý tự động gia hạn và tải lại cấu hình Nginx. Hãy nhớ thay thế tên người dùng được đánh dấu bằng tên người dùng không phải root của bạn
1
2
3
4
5
6
7
8
#. /bin/bash
COMPOSE = "/usr/local/bin/docker-compose –ansi never"
DOCKER = "/usr/bin/docker"
cd / nhà / hack/wordpress_docker/
$SOẠN chạy certbot gia hạn --dry-run && $COMPOSE kill -s SIGHUP webserver
$DOCKER hệ thống cắt tỉa - af
Trong tập lệnh này, chúng tôi gán nhị phân example.com
94 cho một biến có tên là example.com
95. Chúng tôi cũng bao gồm tùy chọn example.com
96 cho biết tập lệnh chạy các lệnh example.com
94 mà không cần các ký tự điều khiển ANSI. Chúng tôi tiếp tục gán nhị phân Docker cho một biến có tên là example.com
98
Sau đó, tập lệnh sẽ chuyển vào thư mục dự án của chúng tôi wordpress_docker
và thực hiện các lệnh sau
www.example.com
00. nó khởi động bộ chứa certbot và ghi đè lệnh mà chúng tôi đã cung cấp trong định nghĩa dịch vụ certbot. Thay vì chỉ chạy tiểu ban chứng chỉ, nó chạy tiểu ban gia hạn sẽ gia hạn chứng chỉ SSL/TLS từ Let's Encrypt nếu chúng sắp hết hạnwww.example.com
01. gửi tín hiệu SIGUP đến bộ chứaserver_name
1 để tải lại cấu hình Nginx. Bạn có thể muốn xem hướng dẫn này từ Docker về cách sử dụng hình ảnh Nginx Docker chính thứcwww.example.com
03. lệnh này loại bỏ tất cả các vùng chứa và hình ảnh không sử dụng
Lưu và đóng tệp khi bạn chỉnh sửa xong. Sau đó, chạy lệnh sau để làm cho nó có thể thực thi được
1
chmod + x ssl_renewer. sh
Khi bạn đã làm cho nó có thể thực thi được, hãy mở tệp gốc www.example.com
04 của bạn để chạy tập lệnh định kỳ theo các khoảng thời gian mà chúng tôi sẽ chỉ định
1
sudo crontab - e
www.example.com
04 yêu cầu bạn chọn trình chỉnh sửa ưa thích nếu đây là lần đầu tiên bạn sử dụng nó
Chọn trình soạn thảo ưa thích của bạn và nhấn Enter để mở tệp. Ở cuối tệp, thêm dòng sau
1
*/ 5 * * * * /home/hackins/wordpress_docker/ssl_renewer.sh >> / var . /log/cron_docker.log 2>&1
Điều này đặt khoảng thời gian trong năm phút để cho phép chúng tôi kiểm tra xem tập lệnh gia hạn của chúng tôi có hoạt động hay không. Chúng tôi cũng đã chỉ định một tệp nhật ký sẽ chứa đầu ra từ công việc. www.example.com
06
Đợi năm phút và kiểm tra www.example.com
07 để xem tập lệnh có thành công với yêu cầu gia hạn không
1
đuôi - f / var/log/cron_docker.nhật ký
Bạn sẽ thấy một cái gì đó tương tự như ảnh chụp màn hình bên dưới nếu yêu cầu thành công
Bây giờ chúng tôi đã kiểm tra và xác nhận nó đang hoạt động, bạn có thể sửa đổi tệp www.example.com
04 để chỉ định gia hạn hàng ngày. Ví dụ: bạn có thể muốn chỉ định rằng tập lệnh chạy hàng ngày lúc 6 giờ. BUỔI CHIỀU. Để làm điều đó, hãy sửa đổi dòng cuối cùng của www.example.com
04 thành như thế này
1
0 18 * * * /home/hackins/wordpress_docker/ssl_renewer.sh >> / var . /log/cron_docker.log 2>&1
Ngoài ra, bạn cần xóa cờ www.example.com
10 khỏi tập lệnh example.com
92 để đảm bảo quá trình gia hạn thực sự diễn ra khi tập lệnh chạy. Nó sẽ giống như thế này
1
2
3
4
5
6
7
8
#. /bin/bash
COMPOSE = "/usr/local/bin/docker-compose --ansi never"
DOCKER = "/usr/bin/docker"
cd / nhà / hack/wordpress_docker/
$SOẠN chạy certbot gia hạn && $COMPOSE kill -s SIGHUP webserver
$DOCKER hệ thống cắt tỉa - af
Tiếp theo, lưu và đóng tệp. Sau khi hoàn thành việc đó, công việc định kỳ sẽ giữ cho các tập lệnh của bạn hợp lệ, bằng cách gia hạn chúng trước khi kết thúc 90 ngày
Phần kết luận
Nếu bạn đã đạt đến mức này trong hướng dẫn, bạn có thể coi mình đã tiến một bước gần hơn đến việc trở thành Kỹ sư DevOps. Bạn đã có thể tạo tập lệnh cấu hình Nginx, tạo tệp nano
0 và xác định một số dịch vụ cần thiết để chạy ứng dụng WordPress với Docker và Docker Compose. Bạn đã nhận được chứng chỉ SSL/TLS từ Let's Encrypt để đảm bảo rằng máy chủ web của bạn được an toàn. Cuối cùng, bạn đã tạo một công việc định kỳ để đảm bảo rằng các chứng chỉ không hết hạn. Làm tốt lắm
Nếu bạn đang cố tìm hiểu sâu hơn về DevOps, hãy xem thêm tài nguyên về vùng chứa từ blog của chúng tôi