Site icon Cung cấp dịch vụ Cloud VPS, Server, Hosting Việt Nam & Thế giới

Cài Đặt WordPress và phpMyAdmin với Docker Compose trên Ubuntu 14.04

Cài Đặt WordPress và phpMyAdmin với Docker Compose trên Ubuntu 14.04

Docker Compose là công cụ mạnh mẽ giúp việc quản lý và điều phối các container Docker trở nên dễ dàng, bao gồm các tác vụ như khởi động, tắt, cấu hình liên kết giữa các container và volumes. Trong bài viết này, chúng tôi sẽ trình bày một ví dụ thực tế về cách sử dụng Docker Compose để cài đặt một ứng dụng phổ biến – WordPress, kèm theo PHPMyAdmin như một phần bổ sung. Thông thường, WordPress được triển khai trên LAMP stack, bao gồm Linux, Apache, MySQL/MariaDB và PHP.

Để triển khai WordPress hiệu quả với Docker Compose trên Ubuntu 14.04, bạn cần một môi trường máy chủ ổn định. Khám phá ngay các gói VPS giá rẻ tại danh mục dịch vụ của chúng tôi để tối ưu chi phí và đảm bảo hiệu suất cao cho website của bạn.

Yêu Cầu

Để theo dõi bài viết này, bạn sẽ cần:

Bước 1 – Cài đặt WordPress

Chúng ta sẽ sử dụng hình ảnh chính thức của WordPress và MariaDB trên Docker. Nếu bạn tò mò, có rất nhiều thông tin về các hình ảnh này và các tùy chọn cấu hình của chúng trên GitHub và Docker Hub.

Hãy bắt đầu bằng cách tạo một thư mục nơi dữ liệu của chúng ta sẽ được lưu trữ và tạo một file docker-compose.yml tối giản để chạy container WordPress:

mkdir ~/wordpress && cd $_

Sau đó, tạo file ~/wordpress/docker-compose.yml bằng trình soạn thảo văn bản ưa thích của bạn (nano rất dễ sử dụng nếu bạn không có lựa chọn khác):

nano ~/wordpress/docker-compose.yml

Sao chép và dán nội dung sau vào file:

~/wordpress/docker-compose.yml
wordpress:
  image: wordpress

File trên chỉ báo cho Docker Compose khởi chạy một container mới có tên wordpress và tải hình ảnh wordpress từ Docker Hub.

Chúng ta có thể khởi chạy hình ảnh bằng cách:

docker-compose up

Khi chạy lệnh trên, Docker sẽ tải xuống và giải nén hình ảnh WordPress từ Docker Hub. Sau một thời gian, bạn sẽ nhận được một số thông báo lỗi tương tự như sau:

Output
wordpress_1 | error: missing WORDPRESS_DB_HOST and MYSQL_PORT_3306_TCP environment variables
wordpress_1 |   Did you forget to --link some_mysql_container:mysql or set an external db
wordpress_1 |   with -e WORDPRESS_DB_HOST=hostname:port?
dockercompose_wordpress_1 exited with code 1

Đây là WordPress báo lỗi vì không tìm thấy cơ sở dữ liệu. Hãy thêm hình ảnh MariaDB vào để liên kết và khắc phục lỗi.

Bước 2 – Cài đặt MariaDB

Để thêm hình ảnh MariaDB vào nhóm container, mở lại file docker-compose.yml bằng trình soạn thảo:

nano ~/wordpress/docker-compose.yml

Thay đổi nội dung file docker-compose.yml thành như bên dưới (chú ý khoảng trắng, vì file YAML nhạy cảm với thụt lề):

docker-compose.yml
wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
wordpress_db:
  image: mariadb

Ở đây, chúng ta đã định nghĩa một container mới có tên wordpress_db và chỉ định sử dụng hình ảnh mariadb từ Docker Hub. Đồng thời, container wordpress được liên kết với container wordpress_db và đặt tên là mysql (trong container WordPress, hostname mysql sẽ trỏ tới container wordpress_db).

Nếu bạn chạy lại docker-compose up, bạn sẽ thấy Docker tải hình ảnh MariaDB xuống, nhưng vẫn có lỗi:

Output
wordpress_db_1 | error: database is uninitialized and MYSQL_ROOT_PASSWORD not set
wordpress_db_1 |   Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?
wordpress_1    | error: missing required WORDPRESS_DB_PASSWORD environment variable
wordpress_1    |   Did you forget to -e WORDPRESS_DB_PASSWORD=... ?
wordpress_1    | 
wordpress_1    |   (Also of interest might be WORDPRESS_DB_USER and WORDPRESS_DB_NAME.)
wordpress_wordpress_db_1 exited with code 1
wordpress_wordpress_1 exited with code 1
Gracefully stopping... (press Ctrl+C again to force)

WordPress vẫn báo lỗi không tìm thấy cơ sở dữ liệu, và MariaDB cũng phàn nàn rằng chưa có mật khẩu root được đặt.

Chỉ liên kết hai container thôi chưa đủ. Hãy đặt biến môi trường MYSQL_ROOT_PASSWORD để khởi động thành công.

Mở lại file Docker Compose:

nano ~/wordpress/docker-compose.yml

Thêm 2 dòng sau vào cuối phần wordpress_db (đừng quên thay đổi examplepass bằng mật khẩu an toàn của bạn!):

docker-compose.yml
wordpress_db:
...
  environment:
    MYSQL_ROOT_PASSWORD: examplepass
...

Dòng lệnh trên sẽ thiết lập biến môi trường MYSQL_ROOT_PASSWORD bên trong container wordpress_db với mật khẩu bạn chọn. Hình ảnh MariaDB được cấu hình để kiểm tra biến môi trường này khi khởi động và tự động thiết lập tài khoản root với mật khẩu đã định nghĩa.

Trong khi đó, hãy cấu hình chuyển tiếp cổng để có thể truy cập WordPress sau khi khởi động. Trong phần wordpress, thêm 2 dòng sau:

docker-compose.yml
wordpress:
...
  ports:
    - 8080:80
...

Ở đây, số cổng đầu tiên là cổng trên máy chủ host, và số cổng thứ hai là cổng bên trong container. Cấu hình này chuyển tiếp các yêu cầu trên cổng 8080 của host đến cổng 80 mặc định của container.

Lưu ý: Nếu bạn muốn WordPress chạy trên cổng 80 mặc định của host, thay đổi dòng trên thành 80:80 để chuyển tiếp yêu cầu từ cổng 80 của host đến cổng 80 bên trong container.

File docker-compose.yml hoàn chỉnh hiện nay sẽ như sau:

docker-compose.yml
wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
  ports:
    - 8080:80
wordpress_db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: examplepass

Với cấu hình trên, giờ chúng ta có thể khởi chạy WordPress. Lần này, chạy container với tuỳ chọn -d để chạy các container ở chế độ nền, cho phép bạn tiếp tục sử dụng terminal:

docker-compose up -d

Khi chạy lệnh, bạn sẽ thấy nhiều dòng thông báo xuất hiện. Sau khi quá trình khởi động ổn định, hãy mở trình duyệt web và truy cập địa chỉ IP của máy chủ DataOnline của bạn qua cổng 8080 (ví dụ: nếu IP của server là 123.456.789.123 thì truy cập http://123.456.789.123:8080).

Bạn sẽ thấy trang cài đặt WordPress mới và có thể tiến hành cài đặt như thông thường.

Bởi vì đây đều là những hình ảnh chính thức của Docker và tuân thủ các best practices, nên mỗi hình ảnh đều có các volume định sẵn để lưu trữ dữ liệu – nghĩa là nếu bạn khởi động lại container, các bài đăng blog của bạn vẫn được giữ nguyên.

Bước 3 – Thêm Container PhpMyAdmin

Tuyệt, quá trình cài đặt đến đây khá suôn sẻ. Hãy thử nâng cao một chút.

Cho đến nay, chúng ta chỉ sử dụng các hình ảnh chính thức, mà đội ngũ Docker đã rất cẩn trọng đảm bảo tính chính xác. Có thể bạn đã nhận thấy rằng chúng ta không cần thiết đặt các biến môi trường cho container WordPress. Ngay khi liên kết với container MariaDB được cấu hình đúng, mọi thứ đã hoạt động.

Điều này là nhờ có một script bên trong container WordPress, script này lấy biến MYSQL_ROOT_PASSWORD từ container wordpress_db và sử dụng nó để kết nối với WordPress.

Bây giờ, hãy mở rộng ngoài phạm vi hình ảnh chính thức một chút và sử dụng hình ảnh PhpMyAdmin do cộng đồng đóng góp. Mở lại file docker-compose.yml:

nano docker-compose.yml

Thêm nội dung sau vào cuối file:

docker-compose.yml
phpmyadmin:
  image: corbinu/docker-phpmyadmin
  links:
    - wordpress_db:mysql
  ports:
    - 8181:80
  environment:
    MYSQL_USERNAME: root
    MYSQL_ROOT_PASSWORD: examplepass

Chú ý: Hãy thay examplepass bằng đúng mật khẩu root bạn đã thiết lập cho container wordpress_db.

Cấu hình trên tải hình ảnh docker-phpmyadmin của thành viên cộng đồng corbinu, liên kết nó với container wordpress_db với tên là mysql (tức là từ bên trong container phpmyadmin, các tham chiếu đến hostname mysql sẽ trỏ tới container wordpress_db), chuyển tiếp cổng 80 của container ra cổng 8181 của host, và cuối cùng thiết lập một số biến môi trường với tên đăng nhập và mật khẩu của MariaDB.
Lưu ý: Hình ảnh này không tự động lấy biến môi trường MYSQL_ROOT_PASSWORD từ container wordpress_db như hình ảnh WordPress làm, do đó ta cần sao chép dòng MYSQL_ROOT_PASSWORD: examplepass từ container wordpress_db và đặt tên đăng nhập là root.

File docker-compose.yml hoàn chỉnh sau bước này sẽ như sau:

docker-compose.yml
wordpress:
  image: wordpress
  links:
    - wordpress_db:mysql
  ports:
    - 8080:80
wordpress_db:
  image: mariadb
  environment:
    MYSQL_ROOT_PASSWORD: examplepass
phpmyadmin:
  image: corbinu/docker-phpmyadmin
  links:
    - wordpress_db:mysql
  ports:
    - 8181:80
  environment:
    MYSQL_USERNAME: root
    MYSQL_ROOT_PASSWORD: examplepass

Bây giờ, khởi động lại nhóm ứng dụng:

docker-compose up -d

Khi chạy lệnh, bạn sẽ thấy quá trình cài đặt PhpMyAdmin diễn ra. Sau khi quá trình hoàn tất, hãy truy cập địa chỉ IP của server qua cổng 8181 (ví dụ: http://123.456.789.123:8181). Bạn sẽ thấy màn hình đăng nhập PhpMyAdmin.

Đăng nhập với username root và mật khẩu đã được thiết lập trong file YAML, bạn sẽ có thể duyệt cơ sở dữ liệu. Bạn sẽ nhận thấy rằng server chứa một cơ sở dữ liệu wordpress, chứa toàn bộ dữ liệu từ cài đặt WordPress của bạn.

Bạn có thể thêm bao nhiêu container tùy thích theo cách này và liên kết chúng theo ý muốn. Phương pháp này thật mạnh mẽ – thay vì phải cấu hình và thiết lập các thành phần riêng lẻ trên cùng một server, bạn có thể lắp ráp các khối giống như Lego và bổ sung từng phần. Sử dụng các công cụ như Docker Swarm, bạn thậm chí có thể chạy các container này một cách minh bạch trên nhiều server! (Tuy nhiên, điều này nằm ngoài phạm vi của bài viết này.) Nếu bạn quan tâm, Docker có sẵn tài liệu về chủ đề này.

Bước 4 – Tạo Site WordPress

Vì tất cả các file cho site WordPress mới của bạn được lưu trữ bên trong container Docker, vậy điều gì sẽ xảy ra với các file đó khi bạn dừng container và khởi động lại?

Theo mặc định, thư mục gốc (document root) của container WordPress là persistent. Điều này là nhờ cấu hình của hình ảnh WordPress trên Docker Hub. Nếu bạn thay đổi site WordPress, sau đó dừng nhóm ứng dụng và khởi động lại, website của bạn vẫn sẽ giữ nguyên các thay đổi.

Hãy thử nó.

docker-compose stop

Sau khi dừng, truy cập lại trang WordPress, bạn sẽ thấy trang web không hoạt động.
Khởi động lại các container:

docker-compose up -d

Truy cập lại trang WordPress, bạn sẽ thấy site blog và các thay đổi mà bạn đã thực hiện được duy trì.

Điều này chứng tỏ rằng các thay đổi của bạn được lưu giữ ngay cả khi container bị dừng.

Bước 5 -Lưu trữ Document Root trên hệ thống File của Host

Bạn có thể lưu trữ document root của WordPress trên hệ thống file của host bằng cách sử dụng Docker data volume để chia sẻ file giữa host và container.

Hãy cùng thử. Mở lại file docker-compose.yml:

nano ~/wordpress/docker-compose.yml

Trong phần wordpress:, thêm các dòng sau:

~/wordpress/docker-compose.yml
wordpress:
...
  volumes:
    - ~/wordpress/wp_html:/var/www/html
    ...

Tiếp theo, dừng phiên làm việc của docker-compose hiện tại:

docker-compose stop

Sau đó, xóa container hiện tại để có thể ánh xạ volume tới hệ thống file của host:

docker-compose rm wordpress

Khởi động lại WordPress:

docker-compose -d

Khi lệnh chạy xong, WordPress sẽ được khởi động lại – lần này sử dụng hệ thống file của host để lưu trữ document root.

Nếu bạn kiểm tra trong thư mục ~/wordpress, bạn sẽ thấy có một thư mục wp_html chứa toàn bộ các file nguồn của WordPress.

ls ~/wordpress


Mọi thay đổi bạn thực hiện sẽ được container WordPress cập nhật ngay tức thời.

Trải nghiệm này trơn tru hơn so với bình thường – container WordPress được cấu hình kiểm tra xem /var/www/html có trống hay không khi khởi động và tự động sao chép các file vào đó nếu cần. Thông thường, bạn sẽ phải thực hiện bước này một cách thủ công.

Kết luận

Bạn đã hoàn thành việc cài đặt WordPress đầy đủ và thành công. Với phương pháp này, bạn có thể dễ dàng triển khai các hệ thống khác nhau bằng cách sử dụng các hình ảnh có sẵn từ Docker Hub. Đừng quên kiểm tra kỹ lưỡng các volumes, vì một số volume sẽ được lưu trữ vĩnh viễn, trong khi một số khác có thể không. Hãy chắc chắn rằng bạn hiểu rõ cách thức hoạt động của từng volume đối với mỗi container bạn tạo.

Sau khi thiết lập Docker, việc chạy WordPress và phpMyAdmin trở nên dễ dàng hơn. Để có trải nghiệm mượt mà, hãy cân nhắc thuê VPS từ danh mục dịch vụ của chúng tôi, cung cấp tài nguyên mạnh mẽ và hỗ trợ kỹ thuật chuyên nghiệp cho dự án của bạn.

Chúc bạn thành công và tận hưởng quá trình Docker-ing!

Exit mobile version