Cách đây vài ngày, trong bài viết hướng dẫn cài đặt Docker & Docker Compose, có một bạn đã hỏi cách đóng gói 1 website WordPress có sẵn kèm theo PhpMyAdmin để chạy trong Docker:
Bạn có thể làm riêng 1 bài hướng dẫn đóng gói 1 site wordpress có sẵn (đủ hết file source + db) kèm PHPmyadmin để chạy trong 1 docker được không. Mình đang mắc ở chỗ này.
Cảm ơn bạn nhiều.
Nhân tiện vừa mới mò xong cách cài đặt WordPress + OpenLiteSpeed + MariaDB + PhpMyAdmin trên nền Docker, mình sẽ hướng dẫn luôn cách chuyển 1 website WordPress đang chạy trực tiếp trên hệ điều hành Linux sang chạy trên nền Docker.
Website mình thực hiện demo là https://supersilk.vn – đang được thiết lập trên Cyberpanel sử dụng OpenLiteSpeed webserver.
Để cho dễ hiểu, mình sẽ thống nhất tên gọi như sau
- VPS A: là VPS đang cài đặt Cyberpanel, đang host website Supersilk.vn hiện tại.
- VPS B: là VPS mình cài đặt WordPress + OpenLiteSpeed + PhpMyAdmin trên nền Docker.
Mục tiêu của bài hướng dẫn này là chuyển website supersilk.vn từ VPS A sang VPS B.
I. VPS A: Sao lưu database
Đầu tiên, truy cập vào VPS A, chuyển đến thư mục wp-content của website supersilk.vn và sử dụng wp-cli
để sao lưu database hiện tại.
cd /home/supersilk.vn/public_html/wp-content
wp db export --allow-root
Chờ vài giây, hệ thống sẽ thông báo database đã được sao lưu thàn công.
Success: Exported to 'uVXDBmGR0IfXkq-2022-03-16-c7c8742.sql'.
Kiểm tra lại nội dung thư mục wp-content sẽ thấy xuất hiện file .sql này
ls -a
. index.php plugins themes uVXDBmGR0IfXkq-2022-03-16-c7c8742.sql
.. languages tablepress-combined.min.css updraft w3tc-config
advanced-cache.php litespeed tablepress-custom.css upgrade wflogs
ewww mu-plugins tablepress-custom.min.css uploads wp-cloudflare-super-page-cache
Mình sẽ copy toàn bộ thư mục wp-content này qua VPS B ở bước sau
II. VPS B: Tạo tên miền và cài đặt WordPress
VPS B cần phải thiết lập thành công OpenLiteSpeed chạy trên nền Docker. Xem lại bài viết dưới đây để biết cách cài đặt
1. Tạo tên miền mới
Tạo tên miền supersilk.vn
bash bin/domain.sh --add supersilk.vn
2. Cài đặt WordPress
Tạo database cho tên miền supersilk.vn
bash bin/database.sh --domain supersilk.vn
Cài đặt WordPress
./bin/appinstall.sh --app wordpress --domain supersilk.vn
III. Copy dữ liệu từ VPS A qua VPS B
Ở bước này, mình sẽ copy thư mục wp-content
từ VPS A qua VPS B, sử dụng lệnh rsync. Thao tác được thực hiện trên VPS B
Truy cập vào thư mục wp-content trên VPS B
cd /home/ols-docker-env/sites/supersilk.vn/html/wp-content
Dùng lệnh rsync để sao chép dữ liệu từ VPS A qua VPS B
rsync -avz root@:/home/supersilk.vn/public_html/wp-content/* .
Nếu gặp lỗi rsync not found, bạn cần cài đặt rsync vào hệ thống
sudo apt install rsync -y
Tuỳ thuộc vào kích thước của thư mục wp-content
gốc mà thời gian copy sẽ kéo dài từ 1-2 phút đến vài chục phút là sẽ hoàn thành.
Thiết lập lại phân quyền cho các file trong thư mục wp-content
chown -R 1000:1000 *
IV. Phục hồi database trên VPS B
Có hai cách để phục hồi database gốc của website supersilk.vn trên VPS B:
- Sử dụng PhpMyAdmin
- Sử dụng WP-CLI
Mình sẽ sử dụng WP-CLI vì có thể thao tác trực tiếp ngay trên Terminal, khỏi phải mở trình duyệt web.
Để có thể sử dụng WP-CLI, mình cần phải truy cập vào bên trong container đang chạy OpenLiteSpeed.
Kiểm tra tên của Container đang chạy OpenLiteSpeed
docker ps
Kết quả
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
698edc2ca5db bitnami/phpmyadmin:5.0.2-debian-10-r72 "/app-entrypoint.sh …" 21 hours ago Up 15 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp, 0.0.0.0:8443->443/tcp, :::8443->443/tcp ols-docker-env_phpmyadmin_1
ec0b4867a898 mariadb:10.5.9 "docker-entrypoint.s…" 21 hours ago Up 15 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp ols-docker-env_mysql_1
aa764cbd0a1b litespeedtech/openlitespeed:1.7.15-lsphp74 "/entrypoint.sh" 21 hours ago Up 14 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:7080->7080/tcp, :::7080->7080/tcp, 0.0.0.0:443->443/udp, :::443->443/udp openlitespeed
Theo kết quả trả về, container đang chạy OpenLiteSpeed có tên openlitespeed
Truy cập vào terminal của container openlitespeed
docker exec -it openlitespeed /bin/bash
Terminal sẽ được chuyển về địa chỉ như sau
/var/www/vhosts#
Truy cập vào thư mục chứa file sql
cd supersilk.vn/html/wp-content
Kiểm tra nội dung thư mục này
ls
Tìm tên file .sql trong kết quả trả về: uVXDBmGR0IfXkq-2022-03-16-c7c8742.sql
advanced-cache.php plugins updraft
ewww tablepress-combined.min.css upgrade
index.php tablepress-custom.css uploads
languages tablepress-custom.min.css w3tc-config
litespeed themes wflogs
mu-plugins uVXDBmGR0IfXkq-2022-03-16-c7c8742.sql wp-cloudflare-super-page-cache
Nhập file sql này vào cơ sở dữ liệu của supersilk.vn sử dụng lệnh wp db
wp db import uVXDBmGR0IfXkq-2022-03-16-c7c8742.sql --allow-root
Chờ vài phút là xong.
V. Cập nhật wp-config.php
Kiểm tra nội dung file wp-config.php
bên VPS A để xem các thông số đặc biệt, thường nằm ở đầu file và cần copy các thông số này qua file wp-config.php
bên VPS B.
Có 1 thông số cần chú ý là $table_prefix =
'12780_'
;
Nếu bên VPS A sử dụng $table_prefix khác thông số mặc định wp_
, bạn cần phải chỉnh sửa tương ứng bên VPS B thì website mới hiển thị ra đúng.
Để chỉnh sửa wp-config.php
, mình cần phải thoát ra khỏi bash của container openlitespeed và thao tác trên bash của hệ điều hành
exit
cd /home/ols-docker-env/sites/supersilk.vn/html
nano wp-config.php
VI. Chỉnh sửa hosts
Chỉnh sửa file hosts trên máy tính để truy cập vào supersilk.vn mà chưa cần phải đổi A Record trên DNS.
Mình sử dụng Mac OS, sử dụng Terminal để edit file /etc/hosts
sudo nano /etc/hosts
Thêm dòng này vào cuối file hosts, sau đó lưu lại
supersilk.vn
Ví dụ: 123.123.321.321 supersilk.vn
Mở trình duyệt ở chế độ Private Mode và truy cập vào http://supersilk.vn
để kiểm tra website đã hiển thị đúng như bản gốc chưa
Nếu chưa ra giống, bạn đã làm sai hoặc thiếu bước nào đó ở trên.
VII. Cập nhật A Record và tạo SSL
Sau khi chắc chắn website supersilk bên VPS B đã hoạt động ngon lành, mình sẽ thực hiện thao tác cuối cùng: cập nhật A Record trên DNS và tạo chứng chỉ SSL cho website.
1. Cập nhật A Record
Mình truy cập vào dịch vụ quản lý DNS của tên miền supersilk.vn
, thay đổi A Record @
và www
trỏ về địa chỉ IP của VPS B.
2. Tạo chứng chỉ SSL
Sử dụng acme.sh
để tạo chứng chỉ SSL miễn phí cho tên miền supersilk.vn
cd /home/ols-docker-env
./bin/acme.sh --domain supersilk.vn
3. Chỉnh sửa .htaccess
Để mọi truy cập http
tự động chuyển hướng sang https
, mình sẽ chỉnh sửa lại file .htaccess
trong thư mục html của supersilk.vn
cd /home/ols-docker-env/sites/supersilk.vn/html
nano .htaccess
Thêm vào đoạn này vào trên cùng và lưu lại
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
4. Khởi động lại OpenLiteSpeed
Để những thay đổi trong file .htaccess
có hiệu lực, mình cần phải khởi động lại OpenLiteSpeed
cd /home/ols-docker-env/
docker-compose restart litespeed
VIII. Hoàn thành
Website https://supersilk.vn
của mình giờ đã được chuyển nhà thành công qua chạy trên nền Docker + OpenLiteSpeed.
Với cách thiết lập trên Docker này, mỗi khi cần chuyển qua sử dụng trên VPS mới, mình chỉ cần rsync
toàn bộ thư mục ols-docker-env
qua nhà mới, sau đó kích hoạt lại Docker Compose là xong. Nhờ vậy, tiết kiệm được rất nhiều thời gian so với cách cài đặt WordPress truyền thống: cài trực tiếp trên hệ điều hành.
Nếu theo dõi thấy hoạt động ổn định, sắp tới mình sẽ chuyển toàn bộ tất cả website sang chạy trên nền Docker kiểu này luôn cho dễ quản lý.
Chúc bạn thực hiện thành công!
Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!