Dockerizing Wordpress với Nginx và PHP-FPM trên Ubuntu 16.04

theanh

Administrator
Nhân viên
Docker-Compose là một công cụ dòng lệnh để định nghĩa và quản lý các container docker đa container như thể chúng là một dịch vụ duy nhất. Compose được viết bằng python và có thể được cài đặt bằng lệnh pip của Python. Với compose, chúng ta có thể chạy nhiều container docker chỉ bằng một lệnh duy nhất. Nó cho phép bạn tạo một container dưới dạng dịch vụ, rất phù hợp cho môi trường phát triển, thử nghiệm và dàn dựng của bạn.

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn từng bước để sử dụng docker-compose. Chúng ta sẽ triển khai 'Wordpress' với Nginx, MySQL và PHP-FPM. Mỗi dịch vụ có container riêng và chúng ta sẽ sử dụng hình ảnh từ sổ đăng ký docker hub. Tôi sẽ chỉ cho bạn cách tạo container từ hình ảnh docker và quản lý tất cả các container bằng docker-compose.

Điều kiện tiên quyết
  • Ubuntu 16.04
  • Quyền root

Bước 1 - Cài đặt Docker​

Chúng ta sẽ bắt đầu từ đầu, bằng cách cài đặt docker và docker compose theo cách thủ công bằng lệnh apt.

Trước khi bắt đầu, hãy cập nhật kho lưu trữ Ubuntu và cài đặt các bản cập nhật mới nhất:
Mã:
sudo apt-get update
sudo apt-get nâng cấp
Theo mặc định, docker có sẵn trong kho lưu trữ Ubuntu, vì vậy chúng ta có thể tiếp tục cài đặt ngay:
Mã:
sudo apt-get install -y docker.io
Khi quá trình cài đặt hoàn tất, hãy khởi động docker và thêm nó để tự động khởi động khi khởi động:
Mã:
systemctl start docker
systemctl enable docker
Bây giờ hãy kiểm tra cài đặt docker của bạn bằng lệnh bên dưới:
Mã:
docker run hello-world
Bạn sẽ thấy hello-world từ docker.

Bước 2 - Cài đặt Docker-Compose​

Docker-compose là một tập lệnh được viết bằng python, có sẵn trong kho lưu trữ python PyPI và có thể được cài đặt bằng python pip. Vì vậy, trước tiên chúng ta cần cài đặt python và python pip trên hệ thống của mình.

Cài đặt python và python-pip:
Mã:
sudo apt-get install -y python python-pip
Tiếp theo, cài đặt docker-compose bằng lệnh pip:
Mã:
pip install docker-compose
chờ quá trình cài đặt hoàn tất. Sau đó, kiểm tra cài đặt bằng lệnh docker-compose:
Mã:
docker-compose -v
Bạn sẽ nhận được phiên bản docker-compose.

Bước 3 - Thiết lập Wordpress​

Bây giờ, docker và docker-compose đã được cài đặt trên hệ thống. Trong bước này, chúng tôi sẽ hướng dẫn bạn cách tạo và thiết lập môi trường docker-compose cho dự án WordPress của chúng tôi.

Chúng tôi sẽ triển khai ứng dụng PHP 'Wordpress' với Nginx làm máy chủ web và MariaDB cho cơ sở dữ liệu MySQL dưới dạng các container docker được quản lý bởi docker-compose. Mỗi ứng dụng (Wordpress, Nginx và MySQL) sẽ chạy trong container riêng của nó, bạn có thể xem danh sách bên dưới:

- Nginx: Chúng tôi sử dụng hình ảnh docker chính thức, phiên bản mới nhất 'nginx: latest'.

- Wordpress: Wordpress cung cấp một số hình ảnh docker trên docker-hub và chúng tôi sẽ sử dụng WordPress 4.7 với PHP-FPM 7.0 trên đó.

- MySQL: Chúng tôi sẽ sử dụng container chính thức MariaDB, phiên bản mới nhất.

Vì vậy, chúng tôi cần 3 hình ảnh docker từ sổ đăng ký docker hub.

Chúng tôi sẽ không chạy docker dưới dạng root, chúng tôi sẽ sử dụng người dùng Linux bình thường. Vì vậy, chỉ cần tạo một người dùng mới bằng lệnh bên dưới (bạn có thể sử dụng tên người dùng khác ở đây, chỉ cần đảm bảo rằng người dùng chưa tồn tại. Nếu bạn chọn một tên khác, hãy đảm bảo thay đổi tên đó trong tất cả các lệnh tiếp theo trong hướng dẫn này):
Mã:
useradd -m -s /bin/bash hakase
passwd hakase
Bây giờ hãy thêm người dùng vào nhóm 'docker' để người dùng có thể sử dụng lệnh docker và khởi động lại dịch vụ docker:
Mã:
usermod -a -G docker hakase
systemctl restart docker
Đăng nhập vào người dùng 'hakase' và tạo một thư mục mới cho dự án WordPress:
Mã:
su - hakase
mkdir -p wordpress-compose
cd wordpress-compose/
Tiếp theo, tạo một tệp mới có tên là 'docker-compose.yml' và tạo một thư mục mới cho dự án. Chỉ cần nhập các lệnh bên dưới:
Mã:
touch docker-compose.yml
mkdir -p nginx/
mkdir -p db-data/
mkdir -p logs/nginx/
mkdir -p wordpress/
Danh sách tệp và thư mục của dự án:

- docker-compose.yml: Đây là tệp cấu hình docker-compose, bạn phải tạo tệp này khi bắt đầu dự án docker-compose mới.

- nginx/: Thư mục này được sử dụng cho cấu hình nginx bổ sung của chúng tôi như máy chủ ảo, v.v.

- db-data/: Thư mục/ổ đĩa cho dữ liệu mysql. Dữ liệu sqlfrom '/var/lib/mysql' được gắn vào thư mục db-data.

- logs/: Thư mục cho nhật ký ứng dụng, nginx, mariadb và php-fpm.

- wordpress/: Tất cả các tệp wordpress sẽ có trong thư mục đó.

Trong thư mục 'nginx', hãy tạo tệp cấu hình mới cho máy chủ ảo wordpress của chúng ta.

Tạo tệp mới wordpress.conf:
Mã:
vim nginx/wordpress.conf
Dán cấu hình bên dưới:
Mã:
server {
 listen 80;
 server_name wp-hakase.co;
 
 root /var/www/html;
 index index.php;
 
 access_log /var/log/nginx/hakase-access.log;
 error_log /var/log/nginx/hakase-error.log;
 
 location / {
 try_files $uri $uri/ /index.php?$args;
 }
 
 location ~ \.php$ {
 try_files $uri =404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_pass wordpress:9000;
 fastcgi_index index.php;
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 }
}
Lưu tệp và thoát khỏi vim.

Bước 4 - Cấu hình Docker-Compose​

Ở bước này, chúng ta sẽ bắt đầu chỉnh sửa tệp docker-compose.yml. Khi bạn muốn bắt đầu dự án docker-compose, hãy đảm bảo rằng bạn tạo tệp docker-compose.yml trước như chúng tôi thực hiện bên dưới.

Chỉnh sửa docker-compose.yml bằng vim:
Mã:
vim docker-compose.yml
Xác định các dịch vụ của bạn, ở dòng đầu tiên, chúng tôi sẽ xác định Nginx. Chúng tôi đang sử dụng hình ảnh docker chính thức của Nginx, phiên bản mới nhất và cấu hình ánh xạ cổng cho cổng 80 trên container thành cổng 80 trên máy chủ. Tiếp theo, cấu hình các khối lượng docker, khối lượng cho cấu hình máy chủ ảo Nginx của chúng tôi, khối lượng cho các tệp nhật ký Nginx và khối lượng thư mục gốc web '/var/www/html'. Container Nginx được liên kết với container WordPress.

Dán cấu hình bên dưới:
Mã:
nginx:
 image: nginx:latest
 ports:
 - '80:80'
 volumes:
 - ./nginx:/etc/nginx/conf.d
 - ./logs/nginx:/var/log/nginx
 - ./wordpress:/var/www/html
 links:
 - wordpress
 restart: always
Tiếp theo, hãy định nghĩa máy chủ MySQL. Chúng tôi đang sử dụng image MariaDB, phiên bản mới nhất. Cấu hình ánh xạ cổng cho container trên cổng 3306 và cấu hình mật khẩu gốc MySQL với biến môi trường 'MYSQL_ROOT_PASSWORD'. Cuối cùng, cấu hình ổ đĩa chứa cho thư mục dữ liệu MySQL.

Dán cấu hình bên dưới:
Mã:
mysql:
 image: mariadb
 ports:
 - '3306:3306'
 volumes:
 - ./db-data:/var/lib/mysql
 environment:
 - MYSQL_ROOT_PASSWORD=aqwe123
 restart: always
Sau đó, chúng ta sẽ cấu hình dịch vụ WordPress bằng cách sử dụng ảnh docker WordPress 4.7 với PHP-FPM 7.0 đã cài đặt. Cấu hình cổng cho PHP-fpm trên cổng 9000, bật khối lượng docker cho thư mục web '/var/www/html' tới thư mục lưu trữ 'wordpress', thiết lập cơ sở dữ liệu bằng cách định nghĩa biến môi trường WordPress và liên kết dịch vụ WordPress với mysql.

Dán cấu hình bên dưới:
Mã:
wordpress:
 image: wordpress:4.7.1-php7.0-fpm
 ports:
 - '9000:9000'
 volumes:
 - ./wordpress:/var/www/html
 environment:
 - WORDPRESS_DB_NAME=wpdb
 - WORDPRESS_TABLE_PREFIX=wp_
 - WORDPRESS_DB_HOST=mysql
 - WORDPRESS_DB_PASSWORD=aqwe123
 links:
 - mysql
 restart: always
Sau khi thêm ba phần vào docker-compose.yml, lưu tệp và thoát khỏi trình soạn thảo vim.

Cấu hình docker-compose của chúng ta đã sẵn sàng.

Bước 5 - Chạy Docker-compose​

Bắt đầu tạo các container mới bằng docker compose. Đi đến thư mục wordpress-compose và khởi động các container mới dựa trên tệp compose của chúng ta.
Mã:
cd ~/wordpress-compose/
docker-compose up -d
Bạn có thể thấy kết quả của lệnh. Ba container đã được tạo. Hãy kiểm tra trạng thái container bằng tùy chọn ps:
Mã:
docker-compose ps
Dưới đây là kết quả:



Nếu bạn muốn xem đầu ra nhật ký từ container, bạn có thể sử dụng các lệnh bên dưới:
Mã:
docker-compose logs nginx
docker-compose logs mysql
docker-compose logs wordpress
Nhật ký container:



Lưu ý:
Nếu bạn thấy trong nhật ký container WordPress có lỗi về kết nối MySQL bị từ chối, hãy bỏ qua lỗi đó.

Bước 6 - Cài đặt Wordpress​

Trước khi thực hiện bước này, hãy kiểm tra các cổng khả dụng/cổng mở trên hệ thống. Hãy đảm bảo bạn đã mở 3 cổng, cổng 80, 3306 và cổng 9000.
Mã:
netstat -plntu
Kết quả như sau:



Bây giờ hãy mở trình duyệt web của bạn và nhập URL máy chủ hoặc địa chỉ IP.


Bạn có thể thấy trang cài đặt WordPress. Chọn ngôn ngữ của bạn và nhấp vào 'Tiếp tục'.



Điền thông tin chi tiết về trang web của bạn như tiêu đề trang web, người dùng và mật khẩu quản trị, địa chỉ email của bạn, sau đó nhấp vào 'Cài đặt Wordpress'.



Bạn sẽ được chuyển hướng đến 'Bảng điều khiển quản trị WordPress'.



Và đây là bài đăng mẫu WordPress của tôi xin chào thế giới.



Wordpress đã được cài đặt bằng docker-compose.

Bước 7 - Truy cập Docker Container​

Đây là một bước bổ sung về cách truy cập container bằng docker-compose. Kiểm tra xem tất cả các container đều khả dụng và hiển thị trạng thái của chúng:
Mã:
docker-compose ps
Chúng ta đã có 3 container, bây giờ chúng ta có thể thử đăng nhập vào từng container. Đăng nhập vào container Nginx đầu tiên bằng lệnh docker-compose.
Mã:
docker-compose exec nginx bash
nginx: tên dịch vụ trên tệp docker-compose docker-compose.yml

bash: thực thi lệnh bash shell

Bây giờ hãy kiểm tra cấu hình máy chủ ảo WordPress của chúng tôi.
Mã:
cat /etc/nginx/conf.d/wordpress.conf


Các tệp có sẵn trong container.

Tiếp theo, hãy thử đăng nhập vào container mysql, sau đó đăng nhập vào mysql shell bằng mật khẩu của chúng tôi trên tệp compose.
Mã:
docker-compose exec mysql bash
mysql -u root -p
TYPE MYSQL ROOT PASSWORD
Xem danh sách cơ sở dữ liệu:
Mã:
show databases;
Bạn sẽ thấy cơ sở dữ liệu WordPress của chúng tôi.



Trong vùng chứa 'wordpress', bạn sẽ thấy tất cả các tệp WordPress.
Mã:
docker-compose exec wordpress bash
ls -lah


Tất cả các vùng chứa đều có thể truy cập được.

Tham khảo​

 
Back
Bên trên