Docker [Lab] Triển khai Wordpress bằng Docker

Khắc Huy

Internship/Fresher
Mục lục
A. MỤC TIÊU
B. KIẾN TRÚC VÀ LUỒNG HOẠT ĐỘNG
1. Kiến trúc
a. Người dùng
b. Nginx
c. Docker
d. Host Disk
2. Luồng hoạt động
C. THỰC HIỆN TRIỂN KHAI
1. Triển khai trên VM
2. Triển khai trên Docker
3. Cấu hình Nginx

A. MỤC TIÊU



- Triển khai Wordpress bằng docker

- Sử dụng Nginx điều hướng domain vào host có HTTPs(SSL).

- Sử dụng PHPMyAdmin quản lý tài nguyên của Wordpress.

B. KIẾN TRÚC VÀ LUỒNG HOẠT ĐỘNG



1. Kiến trúc


1728910402862.png

a. Người dùng



- Người dùng từ máy tính cá nhân truy cập vào địa chỉ URL: https://domain.com.vn.

- Thông qua internet và gateway, yêu cầu được gửi đến máy chủ tại địa chỉ IP được cung cấp (ví dụ: 210.x.x.x) .//trong bài viết này sẽ thay bằng DNS trên máy tính

b. Nginx



- Nginx đóng vai trò là một reverse proxy để điều hướng lưu lượng từ tên miền (domain.com.vn) đến môi trường Docker phía sau.

- Nginx nhận các yêu cầu HTTP từ người dùng và chuyển chúng đến container WordPress qua port 8080.

- Nginx xử lý giao tiếp giữa người dùng và các container Docker, đóng vai trò quan trọng trong việc điều hướng traffic.

c. Docker



Bên trong Docker, có 3 thành phần chính:

- WordPress (Port 8080:80):

+ WordPress chạy trong một container với giao diện người dùng (UI) để người quản trị có thể cấu hình và quản lý nội dung trang web.​
+ Giao diện web của WordPress được truy cập qua port 80 (thông qua Nginx).​
+ WordPress sử dụng dữ liệu từ container MariaDB để lưu trữ nội dung và cấu hình.​

- phpMyAdmin (Port 8081:80):

+ phpMyAdmin cũng được triển khai dưới dạng container để quản trị cơ sở dữ liệu MariaDB một cách trực quan.​
+ Người dùng hoặc quản trị viên có thể truy cập vào phpMyAdmin qua port 8081 để thực hiện các thao tác trên cơ sở dữ liệu.​

- MariaDB (Port 3306:3306):

+ MariaDB là cơ sở dữ liệu, chứa toàn bộ dữ liệu và thông tin cấu hình của WordPress.​
+ MariaDB lắng nghe trên port 3306 và được WordPress truy cập để lưu trữ và truy xuất dữ liệu.​

d. Host Disk



- Các container Docker sử dụng các volume để lưu trữ dữ liệu trên VM (persistent storage).

2. Luồng hoạt động



- Người dùng truy cập vào domain.com.vn, yêu cầu này được gửi đến Nginx.

- Nginx nhận yêu cầu và chuyển hướng đến container WordPress qua port 8080.

- WordPress xử lý yêu cầu, lấy dữ liệu từ MariaDB, và trả kết quả về cho người dùng thông qua Nginx.

- Nếu người quản trị muốn cấu hình cơ sở dữ liệu, họ có thể sử dụng phpMyAdmin qua port 8081.

- Toàn bộ dữ liệu trang web và cơ sở dữ liệu được lưu trữ trên máy chủ thông qua các volume gắn kết với các container.

C. THỰC HIỆN TRIỂN KHAI



1. Prerequisite


1728910434975.png

- Do mình chưa có domain và IP public nên tạm thời sử dụng VM làm gateway và DNS nhà làm.
- VM Service:

+ IP: 172.168.2.150/24​
+ Port Wordpress: “8080:80”​
+ Port DB: “3306:3306”​
+ Port PHPadmin: “8081:80”​

- VM nginx:

+ IP: 172.168.2.149/24​

2. Triển khai trên Docker



- Cài đặt docker

+ Tải shell về máy “curl -fsSL https://get.docker.com -o get-docker.sh”​

1728910448114.png


+ Cấp quyền thực thi cho shell và chạy shell script​

1728910472344.png


1728910485848.png


1728910499333.png


- Tạo thư mục để lưu trữ app(optional)

1728910529390.png


- Tạo file .env để lưu các thông tin của DB

1728910589910.png


- Từ mô hình triển khai các container bằng file yaml

1728910612610.png


1728910627928.png


1728910646759.png


- Các thông số cần lưu ý:

+ image: Chỉ định image Docker để sử dụng.​
+ ports: Ánh xạ port từ host đến port của container. Ví dụ: port 3306 trên host được ánh xạ đến port 3306 trên container.​
+ env_file: Chỉ định tệp “.env” chứa các biến môi trường.​
+ “environment” Thiết lập các biến môi trường cho container:​
§ MYSQL_ROOT_PASSWORD: Mật khẩu root cho MariaDB.​
§ MYSQL_DATABASE: Tên cơ sở dữ liệu sẽ được tạo.​
§ MYSQL_USER: Tên người dùng cho cơ sở dữ liệu.​
§ MYSQL_PASSWORD: Mật khẩu cho người dùng cơ sở dữ liệu.​
+ volumes: Mount một volume để lưu trữ dữ liệu. Ví dụ: db-data:/var/lib/mysql đảm bảo dữ liệu cơ sở dữ liệu được lưu trữ bên ngoài container, và nếu không chỉ định thư mục sẽ tự động lưu vào trong thư mục “”. Khi down container sẽ không mất dữ liệu.​
+ networks: khai báo tên network được sử dụng.​

- Chạy “docker compose up -d” để triển khai mô hình

1728910701510.png


1728910714913.png


Lưu ý: Nếu không có phần volumes ở cấp cao nhất, Docker Compose sẽ tự động tạo volume với tên theo định dạng <project_name>_<volume_name>
- Kiểm tra volumes qua đường dẫn

1728910738356.png


- Kiểm tra container đã hoạt động hay chưa
1728910769259.png


3. Nginx


- Setup domain để test trên máy C:\Windows\System32\drivers\etc\hosts để trỏ domain vào IP của nginx server ở đây là 172.168.2.149

1728910850285.png


- Kiểm tra domain bằng lệnh ping

1728910869437.png


- Cài đặt Nginx tham khảo tại đây: How To Install Nginx on Ubuntu 22.04 | DigitalOcean

- Cấu hình trên nginx server

1728910902315.png


1728910941377.png


- Kiểm tra và reload lại nginx

1728910963034.png


1728910982074.png


Trong trường hợp có bạn đã mua Domain có thể dùng domain để trỏ về gateway và cấu hình trỏ vào nginx server.

Các kiến thức trên được mình góp nhặt và nghiên cứu từ nhiều nguồn nếu như có sai sót hoặc thông tin gì sai với kiến thức chung, mọi người xin vui lòng góp ý bên dưới comment.
 

About us

  • Securityzone.vn là một trang web chuyên về an ninh mạng và công nghệ thông tin. Trang web này cung cấp các bài viết, tin tức, video, diễn đàn và các dịch vụ liên quan đến lĩnh vực này. Securityzone.vn là một trong những cộng đồng IT lớn và uy tín tại Việt Nam, thu hút nhiều người quan tâm và tham gia. Securityzone.vn cũng là nơi để các chuyên gia, nhà nghiên cứu, sinh viên và người yêu thích an ninh mạng có thể trao đổi, học hỏi và chia sẻ kiến thức, kinh nghiệm và giải pháp về các vấn đề bảo mật trong thời đại số.

Quick Navigation

User Menu