Có nhiều cách để cài đặt WordPress lên VPS. Dưới đây là những cách cài đặt WordPress mình đã sử dụng trong những năm qua:
- Cài đặt LAMP Stack (Linux, Apache, MySQL, PHP) lên VPS. WordPress sẽ chạy trên nền Apache web server. Xem hướng dẫn trên DigitalOcean.
- Cài đặt script quản lý Centminmod (CentOS), EasyEngine (Ubuntu / Debian), Webinoly (Ubuntu / Debian), Valet+ (MacOS). WordPress sẽ chạy trên nền Nginx web server.
- Cài đặt Cyberpanel. WordPress sẽ chạy trên nền OpenLiteSpeed web server. Đây là lựa chọn số một của mình ở thời điểm hiện tại để cài đặt WordPress.
Ưu điểm của các cách này là sự ổn định (nếu cài đặt và cấu hình đúng), và tận dụng được tối đa sức mạnh của VPS. Tuy nhiên, có ba nhược điểm khi cài đặt web server trực tiếp lên hệ điều hành kiểu này:
- Cài đặt và cấu hình tốn thời gian, nhiều script quản lý cần phải compile từ mã nguồn có thể mất hơn 30 phút mới cài xong.
- Không thể chuyển đổi linh hoạt qua lại giữa Apache / Nginx / OpenLiteSpeed. Bắt buộc phải cài đặt lại hệ điều hành và cài lại từ đầu.
- Việc sao chép thông số cấu hình qua lại giữa 2 server rắc rối, mất thời gian.
Những nhược điểm này thực sự phiền toái mỗi lần mình cần phải chuyển website qua server mới ngay lập tức vì những lý do bất khả kháng: nhà cung cấp bảo trì hệ thống, VPS bị sập, cá mập cắn cáp,…
Để giải quyết vấn đề này, mình đang nghiên cứu chuyển qua cài đặt WordPress sử dụng Docker Compose, tận dụng ưu thế về sự linh hoạt và độc lập của Docker.
- Việc cài đặt chỉ mất 2-3 phút, do mọi thứ đã được thiết lập sẵn trong Docker image, tải về và tạo container là xong
- Chuyển đổi linh hoạt giữa nhiều loại web server khác nhau, không cần phải cài đặt lại hệ điều hành.
- Sao chép cấu hình giữa 2 server cực kỳ đơn giản: dùng lệnh
rsync
copy thư mục chứa file cấu hình qua là xong.
Đó là lý do của bài viết hôm nay: hướng dẫn cách cài đặt WordPress + MariaDB + PhpMyadmin chạy trên nền OpenLiteSpeed sử dụng Docker Compose.
Mục Lục
I. Yêu cầu chuẩn bị
Để thực hiện theo thao tác trong bài, bạn cần chuẩn bị hệ thống như sau:
- VPS cài đặt hệ điều hành Linux: CentOS / Debian / Ubuntu mới tinh, chưa cài thêm bất kỳ web server nào. Bạn cũng có thể cài đặt trên Windows / MacOS / Raspberry Pi, miễn là hệ điều hành hỗ trợ Docker.
- VPS đã được cài đặt Docker và Docker Compose. Xem hướng dẫn ở đây.
II. Cài đặt OpenLiteSpeed
Mình chọn sử dụng OpenLiteSpeed làm web server vì nó sẽ tương thích tốt nhất với plugin LiteSpeed Cache. Đây là combo mình tin dùng trong 2 năm nay, mang đến hiệu năng tốt hơn so với Nginx.
1. Tải ols-docker-env
Mình sẽ cài đặt sử dụng package ols-docker-env
từ litespeedtech – công ty tạo ra LiteSpeed, OpenLiteSpeed và LiteSpeed Cache.
cd /home
git clone https://github.com/litespeedtech/ols-docker-env.git
Code language: Bash (bash)
Sau đó truy cập vào thư mục ols-docker-env
cd ols-docker-env
Code language: Bash (bash)
2. Cấu trúc thư mục
Cấu trúc thư mục sẽ có dạng như sau
├── acme
├── bin
│ └── container
├── data
│ └── db
├── logs
│ ├── access.log
│ ├── error.log
│ ├── lsrestart.log
│ └── stderr.log
├── lsws
│ ├── admin-conf
│ └── conf
├── sites
│ └── localhost
├── LICENSE
├── README.md
└── docker-compose.yml
Code language: CSS (css)
- acme: chứa các chứng chỉ SSL được tạo ra bởi Let’s Encrypt
- bin: chứa các mã CLI giúp tạo virtual hosts, cài đặt ứng dụng,…
- data: chứa MySQL database
- logs: chứa các file logs của web server và virtual hosts
- lsws: chứa các file cấu hình web server
- sites: chứa nội dung của website.
3. Kích hoạt Container
Trước tiên, mình sẽ sửa lại thông số của file .env
nano .env
Code language: CSS (css)
Nội dung mặc định sẽ như sau
TimeZone=America/New_York
OLS_VERSION=1.7.15
PHP_VERSION=lsphp80
MYSQL_DATABASE=wordpress
MYSQL_ROOT_PASSWORD=password
MYSQL_USER=wordpress
MYSQL_PASSWORD=password
DOMAIN=localhost
Mình sẽ sửa lại TimeZone, sửa lại PHP_VERSION thành lsphp74
vì có nhiều plugin chưa tương thích với PHP 8.0. Đồng thời sửa lại luôn các thông số của MYSQL để tăng bảo mật.
Nội dung sau khi thay đổi sẽ tương tự như sau
TimeZone=Asia/Ho_Chi_Minh
OLS_VERSION=1.7.15
PHP_VERSION=lsphp74
MYSQL_DATABASE=thuanbui
MYSQL_ROOT_PASSWORD=depchaivodich
MYSQL_USER=thuanbui
MYSQL_PASSWORD=depchaivodich
DOMAIN=localhost
Kích hoạt container:
docker-compose up
Hoặc bạn có thể thêm hậu tố -d
để nó chạy độc lập dưới dạng deamon
docker-compose up -d
Mở trình duyệt web, truy cập vào địa chỉ IP của VPS, nếu thấy hiện ra như dưới đây nghĩa là OpenLiteSpeed đã được kích hoạt thành công.
Trình duyệt báo lỗi 404 do thư mục mặc định chứa nội dung web đang còn trống trơn, chưa có file html nào. Cứ để yên như thế, không sao cả!
III. Cấu hình OpenLiteSpeed
Để thay đổi cấu hình của OpenLiteSpeed, bạn truy cập Weddmin theo địa chỉ sau
https://<IP-Address>:7080
Code language: JavaScript (javascript)
Username: admin. Còn để có mật khẩu truy cập, bạn quay lại Terminal, gõ lệnh sau. Chú ý thay đổi matkhaumoi
thành mật khẩu bạn muốn dùng.
bash bin/webadmin.sh matkhaumoi
Code language: Nginx (nginx)
Sau đó sử dụng mật khẩu matkhaumoi
để đăng nhập vào trang quản lý cấu hình của OpenLiteSpeed.
Cài đặt OWASP ModSecurity để tăng bảo mật cho OpenLiteSpeed
bash bin/webadmin.sh --mod-secure enable
Code language: Bash (bash)
Việc cài đặt mất khoảng 1 phút là xong. Trên màn hình sẽ hiện ra các ghi chú như sau trong khi cài đặt.
Install git
Download OWASP rules
Config OWASP rules.
Enable modsecurity
Code language: Nginx (nginx)
IV. Thêm tên miền và virtual hosts
Quay lại Terminal, sử dụng lệnh sau để thêm tên miền ols.thuanbui.me
bash bin/domain.sh -add ols.thuanbui.me
Code language: Dockerfile (dockerfile)
Sau khi tạo xong, bạn có thể truy cập vào thư mục sites, sẽ thấy có thêm thư mục ols.thuanbui.me
do hệ thống tạo ra.
Nếu lỡ tay tạo nhầm, bạn có thể xoá bằng lệnh
bash bin/domain.sh -del ols.thuanbui.me
Code language: Python (python)
V. Cài đặt chứng chỉ SSL miễn phí
Trước khi cài đặt chứng chỉ SSL, bạn cần chỉnh sửa A Record cho tên miền trỏ về địa chỉ IP của VPS.
Cài đặt ACME – công cụ tạo chứng chỉ SSL miễn phí từ Let’s Encrypt
./bin/acme.sh --install --email thuanbuidepchaivodich@thuanbui.me
Chờ khoảng 1 phút cho hệ thống xử lý, khi nào thấy xuất hiện dòng Please run acme.sh --domain [DOMAIN_NAME] to apply certificatePlease run acme.sh --domain [DOMAIN_NAME] to apply certificate
nghĩa là đã cài đặt xong.
[Start] Checking ACME
[Start] Install ACME
[O] The E-mail thuanbuidepchaivodich@thuanbui.me is valid.
--2022-03-14 19:56:30-- <https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh>
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.108.133, 185.199.111.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 210287 (205K) [text/plain]
Saving to: 'acme.sh'
acme.sh 100%[========================================>] 205.36K --.-KB/s in 0.08s
2022-03-14 19:56:30 (2.41 MB/s) - 'acme.sh' saved [210287/210287]
[Mon Mar 14 19:56:30 +07 2022] It is recommended to install socat first.
[Mon Mar 14 19:56:30 +07 2022] We use socat for standalone server if you use standalone mode.
[Mon Mar 14 19:56:30 +07 2022] If you don't use standalone mode, just ignore this warning.
[Mon Mar 14 19:56:30 +07 2022] Installing to /root/.acme.sh
[Mon Mar 14 19:56:30 +07 2022] Installed to /root/.acme.sh/acme.sh
[Mon Mar 14 19:56:30 +07 2022] Installing alias to '/root/.bashrc'
[Mon Mar 14 19:56:30 +07 2022] OK, Close and reopen your terminal to start using acme.sh
[Mon Mar 14 19:56:30 +07 2022] Installing cron job
56 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
[Mon Mar 14 19:56:30 +07 2022] Good, bash is found, so change the shebang to use bash as preferred.
[Mon Mar 14 19:56:30 +07 2022] OK
[End] Install ACME
[Start] Adding ACME hook
[End] Adding ACME hook
Please run acme.sh --domain [DOMAIN_NAME] to apply certificate
Code language: YAML (yaml)
Tạo chứng chỉ SSL cho tên miền ols.thuanbui.me
./bin/acme.sh --domain ols.thuanbui.me
Mặc định, ACME sẽ dùng hệ thống cấp chứng chỉ của ZeroSSL thay cho Let’s Encrypt. Nhưng lâu lâu bên ZeroSSL gặp vấn đề, chờ hoài chờ hoài mà không cấp xong chứng chỉ SSL, bị lỗi như dưới đây
Using CA: <https://acme.zerossl.com/v2/DV90>
...
...
...
Polling order status: <https://acme.zerossl.com/v2/DV90/order/38sA_g_Z7k5OKS3Ugqs34g>
Order status is processing, lets sleep and retry.
Polling order status: <https://acme.zerossl.com/v2/DV90/order/38sA_g_Z7k5OKS3Ugqs34g>
Order status is processing, lets sleep and retry.
Polling order status: <https://acme.zerossl.com/v2/DV90/order/38sA_g_Z7k5OKS3Ugqs34g>
Code language: JavaScript (javascript)
Nếu gặp tình trạng tương tự, bạn cần sửa lại lại file acme.sh
cho nó sử dụng hệ thống cấp chứng chỉ của Let’s Encrypt
nano acme/acme.sh
Code language: Nginx (nginx)
Tìm đến dòng DEFAULT_CA=$CA_ZEROSSL
và sửa lại thành DEFAULT_CA=$CA_LETSENCRYPT_V2
. Sau đó lưu lại và chạy lại lệnh cấp SSL
./bin/acme.sh --domain ols.thuanbui.me
Chờ vài phút là xong.
./bin/acme.sh --domain ols.thuanbui.me
[Start] Checking ACME
[End] Checking ACME
[O] The domain name ols.thuanbui.me is accessible.
[O] The domain name www.ols.thuanbui.me is accessible.
[O] The document root folder /var/www/vhosts/ols.thuanbui.me/html does exist.
[Start] Apply Lets Encrypt Certificate
[Mon Mar 14 20:37:16 +07 2022] Using CA: <https://acme-v02.api.letsencrypt.org/directory>
[Mon Mar 14 20:37:16 +07 2022] Create account key ok.
[Mon Mar 14 20:37:16 +07 2022] Registering account: <https://acme-v02.api.letsencrypt.org/directory>
[Mon Mar 14 20:37:18 +07 2022] Registered
[Mon Mar 14 20:37:18 +07 2022] ACCOUNT_THUMBPRINT='d6F_C_eqG9RgEnjmLhD5JdYSid9be-KYejBc6ID0E7o'
[Mon Mar 14 20:37:18 +07 2022] Multi domain='DNS:ols.thuanbui.me,DNS:www.ols.thuanbui.me'
[Mon Mar 14 20:37:18 +07 2022] Getting domain auth token for each domain
[Mon Mar 14 20:37:20 +07 2022] Getting webroot for domain='ols.thuanbui.me'
[Mon Mar 14 20:37:20 +07 2022] Getting webroot for domain='www.ols.thuanbui.me'
[Mon Mar 14 20:37:20 +07 2022] Verifying: ols.thuanbui.me
[Mon Mar 14 20:37:21 +07 2022] Pending, The CA is processing your order, please just wait. (1/30)
[Mon Mar 14 20:37:24 +07 2022] Success
[Mon Mar 14 20:37:24 +07 2022] Verifying: www.ols.thuanbui.me
[Mon Mar 14 20:37:24 +07 2022] Pending, The CA is processing your order, please just wait. (1/30)
[Mon Mar 14 20:37:27 +07 2022] Pending, The CA is processing your order, please just wait. (2/30)
[Mon Mar 14 20:37:30 +07 2022] Success
[Mon Mar 14 20:37:30 +07 2022] Verify finished, start to sign.
[Mon Mar 14 20:37:30 +07 2022] Lets finalize the order.
[Mon Mar 14 20:37:30 +07 2022] Le_OrderFinalize='<https://acme-v02.api.letsencrypt.org/acme/finalize/450446400/71411164300>'
[Mon Mar 14 20:37:31 +07 2022] Downloading cert.
[Mon Mar 14 20:37:31 +07 2022] Le_LinkCert='<https://acme-v02.api.letsencrypt.org/acme/cert/033a4a30f450ffb48ca4895d0c1110ef2b3b>'
[Mon Mar 14 20:37:32 +07 2022] Cert success.
-----BEGIN CERTIFICATE-----
MIIFOTCCBCGgAwIBAgISAzpKMPRQ/7SMpIldDBEQ7ys7MA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yMjAzMTQxMjM3MzBaFw0yMjA2MTIxMjM3MjlaMBoxGDAWBgNVBAMT
D29scy50aHVhbmJ1aS5tZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ALxNMTETFpz2odyghl+VYfRntuVQ3ETD4V/3MOQtwrn3gQOFsSXevVzvWmdqv3mn
hcI+RXHCpVhmwYdP1UqQr6oKSA6hJqWdKDF6bFDRJiMFmzrWwehdcTATI83Pl2tr
b7zMb/Kc9GDAYnv9IYnvi9RW/TGuoIiw3fxH7zIlv/U54vDXl0+K2rxYQDeqdchb
l27xB4RrKnOhrVzlYNW/itOKHuHXtWvQiMJSuZFbAlx5h9OGjuPzuwXUT6lbv5Rr
ODMLN3F3tkoK/qYADsFqAlxCr0zCwl2bTq2N05LrVFcQz2UrpHlNaVBEr7gMfSwW
s76U+3AWUsdasdaxfcadsdsadasdasdasdxixsD6+tLx2jwkGKWBvYAAAF/
iKXxfgAABAMARzBFAiAgLsUYH/0KnbMNC5phTqHW6YSwXYzBfyP17P1In4yepQIh
AJE0hx0xscn1fgqc3dyDPNXqJd/X/nRgkGq59PxYXOz/AHYAKXm+8J45OSHwVnOf
Y6V35b5XfZxgCvj5TV0mXCVdx4QAAAF/iKXxawAABAMARzBFAiATyFBQPj4sDDGI
07mwJla3uTXo35Bh7su+MSriwJDi5gIhAOwjLoMuzK77hcmG89a5yQFW5DX8uHn0
FvpdJQZtaWmBMA0GCSqGSIb3DQEBCwUAA4IBAQCOS1TdRLpREpA54O+RdjmvtkzH
Ytue5X9L/QOnHhmVeQ2fsDJhdkLzblkSs517xLc50tSF4lKYDe8VE3xbsm52zp2l
mhc8Cy7hy7uSbRzDJrmNZQLoQO42sG8w/m/yho8+11rGr4JtVCOpJdGzVcvpVV28
rGC/vyfuRYuMv3m0ZKTK+TwmKVLlxytEU90q55NO8vsTkkFByhaXC7GWru0PLbXb
GIrhdMOE753GhqMq/QydJJR9nhsBZftThW4v30xlMsbkWRW4Z7qiZdKDZYW4RVG7
tdq3p5V+idzhc1fcFel0OifITFSQXyWcNy+QBJtaoeHDaCND9FDE7rhqXCAE
-----END CERTIFICATE-----
[Mon Mar 14 20:37:32 +07 2022] Your cert is in: /root/.acme.sh/certs/ols.thuanbui.me/ols.thuanbui.me.cer
[Mon Mar 14 20:37:32 +07 2022] Your cert key is in: /root/.acme.sh/certs/ols.thuanbui.me/ols.thuanbui.me.key
[Mon Mar 14 20:37:32 +07 2022] The intermediate CA cert is in: /root/.acme.sh/certs/ols.thuanbui.me/ca.cer
[Mon Mar 14 20:37:32 +07 2022] And the full chain certs is there: /root/.acme.sh/certs/ols.thuanbui.me/fullchain.cer
[End] Apply Lets Encrypt Certificate
Code language: YAML (yaml)
VI. Cài đặt WordPress
Trước khi cài đặt WordPress, chúng ta cần tạo database cho tên miền
bash bin/database.sh --domain ols.thuanbui.me
Code language: Nginx (nginx)
Kết quả nhận được sẽ là thông tin Database, Username và Password được tự động tạo ra như dưới đây
Database: olsthuanbuime
Username: olsthuanbuime
Password: 6d234324adfe9rp
Code language: HTTP (http)
Nếu muốn chủ động thiết lập tên Database, Username và Password, bạn cần gõ lệnh dài hơn
bash bin/database.sh --domain ols.thuanbui.me --user USERNAME --password PASSWORD --database DATABASE_NAME
Code language: Nginx (nginx)
Cài đặt WordPress
./bin/appinstall.sh --app wordpress --domain ols.thuanbui.me
Trên màn hình sẽ hiển thị vài dòng như sau, khoảng 1-2 phút là cài xong
Set owner to 1000
Install unzip package..
Install ed package..
Code language: JavaScript (javascript)
Mở trình duyệt truy cập vào website để hoàn thành bước cài đặt WordPres cuối cùng https://ols.thuanbui.me
VII. Truy cập PhpMyAdmin
Bạn có thể truy cập PhpMyAdmin bằng 1 trong 2 cách
http://<IP-Address>:8080
Code language: JavaScript (javascript)
https://<IP-Address>:8043
Code language: JavaScript (javascript)
Sử dụng tài khoản và mật khẩu sau để đăng nhập
- Username: root
- Password: sử dụng mật khẩu bạn thiết lập ở mục
MYSQL_ROOT_PASSWORD
trong file .env
VIII. Lời kết
Toàn bộ thao tác mình liệt kê ở trên nhìn có vẻ dài dòng như thật ra chỉ mất khoảng 5′ là xong. Việc thiết lập 1 trang WordPress mới chưa bao giờ đơn giản hơn thế.
Ưu điểm lớn nhất của cách cài đặt WordPress bằng Docker là mình có thể chuyển toàn bộ thiết lập server và website qua một VPS mới cực kỳ nhanh chóng. Thao tác đơn giản chỉ trong 3 bước:
- Tạm ngưng Container bằng lệnh
docker-compose down
- Copy bộ thư mục hiện hành qua VPS mới bằng lệnh
rsync
- Đổi A Record của tên miền qua địa chỉ IP của VPS mới.
- Kích hoạt lại Container bên VPS mới bằng lệnh
docker-compose up -d
Mọi thứ hoạt động ngon lành lại ngay chỉ trong vòng 5 phút, không phải mất thời gian cài đặt đủ thứ như cách thông thường đã nêu ở đầu bài nữa.
Trong bài viết sau, mình sẽ demo hướng dẫn cách đóng gói website WordPress đang chạy trực tiếp trên hệ điều hành để chuyển qua chạy trên nền Docker.
Chúc bạn thực hiện thành công!
[convertkit form=7087807]
Chào anh Thuận,
Em đã deploy website dựa trên hướng dẫn này và đã thành công. Tuy nhiên đến phần thay đổi các thông số như upload size thuộc php.ini thì hệ thống không hoạt động. Chỉ giữ đúng thông số cũ. là upload 2M
Mong anh Thuận hỗ trợ chỉ ra phần edit được php
Qua tuần sau anh có bài hướng dẫn nhé. Tuần vừa rồi bận quá không có thời gian đụng vô blog.
Em xem bài này nhé: https://thuanbui.me/toi-uu-docker-openlitespeed-tat-phpmyadmin-cai-them-php-extension-chinh-sua-php-ini/
Em cám ơn anh rất nhiều ạ
Cảm ơn bạn vì bài viết rất hay. Mình muốn hỏi thêm 1 chút là vps mình ko muốn chỉ chạy wordpress mà chạy nhiều webapp khác nên dùng nginx proxy manager để quản lý. Bạn có thể hướng dẫn Cài đặt “WordPress + MariaDB + OpenLiteSpeed + PhpMyAdmin” trên 1 vps đã cài sẵn Nginx Proxy manager được không ? Cảm ơn bạn.
Hướng dẫn đây bạn nhé: https://thuanbui.me/nginx-proxy-manager-reverse-proxy-openlitespeed-docker/
Chào bạn,
Bạn cho mình hỏi sau này muốn cập nhật docker và phiên bản php thì làm thế nào nhỉ
Muốn nâng cấp PHP thì bạn edit lại file .env, thay đổi dòng PHP. Sau đó khởi động lại:
docker-compose up -d
là xong.Phiền bạn chỉ mình thêm cách update open litespeed và docker khi có phiên bản mới luôn được không, vì mình không chuyên nên bạn thông cảm nhé. Cám ơn bạn!
Bạn xem lại trong bài ở phần này: https://thuanbui.me/wordpress-mariadb-openlitespeed-phpmyadmin-docker-compose/#3-kich-hoat-container
Chỉnh sửa thông số OLS_VERSION và PHP_VERSION để nâng cấp lên bản mới. Nếu hệ thống đang ổn định thì không cần phải nâng cấp chi hết, nâng cấp chỉ gây phiền phức vì dễ bị xung đột.
Cảm ơn tác giả đã viết bài hướng dẫn. Trước đây mình có đã từng tìm hiểu docker để chạy site tĩnh (jekyll, wp tĩnh). Nay có bài này giúp ích cho mình rất nhiều.
Thuận có thể viết thêm bài hướng dẫn bảo mật cho wp và docker chạy wp?
Ngoài ra, mình hay thấy các web lớn họ hay xuất nội dung (public_html) để lưu trữ vào các host khác rùi mới cho web hiển thị. Mình hiểu là họ muốn dự phòng hoặc backup dữ liệu hoặc để tiếp cận khách truy xuất web dễ hơn. Thuận nghĩ sao về vấn đề này?
Gần đây trên các nhóm fb về wp mình thấy có thuật ngữ reproxy/preproxy liên quan đến vps nhằm đối phó với dmca report. Thuận có tìm hiểu về vấn đề này?
1. Bảo mật cho WP và Docker WP: mình không dùng gì đặc biệt cả, chỉ cài thêm WordFence trên WordPress và thêm vài plugin chặn Spam
2. Xuất nội dung (public_html) để lưu trữ vào các host khác rùi mới cho web hiển thị: Mình không hiểu bạn đang nói về vấn đề gì cả. Backup web thì có vô số cách, mình thì dùng UpdraftPlus, backup lên Storage Server.
3. DMCA Report: Mình không quan tâm cái này vì không đụng đến các thứ sao chép nội dung của người khác. Nhưng cách làm thì có thể đoán như sau: Dùng VPS A của 1 nhà cung cấp không quan tâm đến DMCA Report, cài đặt Proxy trên đó để chuyển hướng về VPS B khác đang host website. Nếu bị DMCA thì report gửi về nhà cung cấp VPS A, nó không quan tâm nên không sao. Web đặt ở VPS B vẫn dùng bình thường vì không bị lộ IP / nhà cung cấp.
Chào anh,
Việc cài đặt proxy trên vps A chuyển hướng về vps B có giống với cách tạo Reverse Proxy của nginx?
Đúng rồi đó bạn. Có nhiều cách để tạo reverse proxy: nginx, haproxy, caddy,…
Hi Thuận,
Mình không rành về docker, bạn cho mình hỏi về hiệu năng khi dùng Docker.
Mình thấy nếu chỉ build 1 site thì tài nguyên cho docker chấp nhận được (server với 1GB RAM chẳng hạn), nhưng nhiều web trên 1 server thì tài nguyên tốn khá nhiều cho các container vì số container tăng lên? Chưa kể data bị x2 vì mount ra ổ cứng đúng không.
Mình có thử dùng http://loader.io/ test thì thấy hiệu năng không chênh quá khi khi cài trực tiếp trên server.
Mình cảm ơn.
Mình chưa có thời gian để so sánh hiệu năng giữa Docker và Bare Metal, nhưng đọc trên mạng thì thấy hiệu năng gần như không suy giảm khi dùng Docker: https://k6.io/blog/wordpress-bare-metal-vs-wordpress-docker-performance-comparison/
Nếu cài đặt nhiều website bằng Docker bạn cũng chỉ cần duy nhất bộ ols-docker-env gồm 2 container: mariadb và openlitespeed-phpfpm, nên không tốn tài nguyên gì nữa. Còn nếu để cài nhiều dịch vụ web thì sẽ tốn tài nguyên cho container, nhưng sẽ đỡ bị đụng chạm so với khi cài trực tiếp lên server.
Còn data mount của Docker cũng không bị x2, vì nó chỉ là dạng link liên kết.
Cám ơn Thuận đã chia sẻ!!! Với Thuận cho mình hỏi mình muốn cài nhiều web wordpress như trên thì làm như nào ạ?
Muốn cài nhiều web thì bạn lập lại từ bước IV. là được
hi anh Thuận,
em cài nhưng bỏ qua bước số V.SSL tới cuối em truy cập bằng ip thì nó ko hiện setup wordpress mà ra 404 not found như lúc đầu. mong được a giải đáp. cám ơn a.
Nhiều khả năng em làm sai bước nào rồi. Thử xóa hết và làm lại nhé.
mình làm đến bước cuối đăng nhập phpmyadmin ở cổng 8080 bị báo lỗi mysqli::real_connect(): (HY000/1045): Access denied for user ‘root’
thì fix thế nào bạn nhỉ?
Bạn cần xem logs bằng lệnh `docker-compose logs` để xem nó có báo lỗi gì không? Rồi Google xem có giải pháp gì không.
Theo lỗi của bạn gửi mình nghĩ đang bị lỗi về password khiến phpmyadmin không truy cập được database.
phpmyadmin lỗi pass. nó không dùng pass đã cấu hình trong .env mà dùng pass mặc định. bác biết cách fix không ạ?
Giờ em mới biết thêm cái Cyberpanel, ít hôm test thử. Trước giờ, em hay dùng LarVPS không :D. Cảm ơn anh.
Anh làm thêm bài viết chi tiết về cách chạy website trên VPS đi anh, cách nào tối ưu nhất. Với trang này đang chạy LAMP Stack, Cyberpanel hay Script vậy a?
Trang này đang chạy trên OpenLiteSpeed Docker y hệt như hướng dẫn ở trên luôn nhé.
“Copy bộ thư mục hiện hành qua VPS mới bằng lệnh rsync”, anh có bài nào hướng dẫn chuyển VPS 1 sang VPS 2 với lệnh này không? Em vẫn chưa hình dung ra.
Cảm ơn anh.
Đã có bài ở đây nhé: https://thuanbui.me/dong-goi-website-wordpress-chuyen-sang-chay-tren-nen-docker-openlitespeed/
Chạy trang web với bộ này thì nên cài plugin cache nào anh? Em có mua WP Roket bản quyền không biết chạy có tương thích không?
OpenLiteSpeed thì chạy với LiteSpeed Cache là tối ưu nhất nhé.
cám ơn anh rất nhiều. bài viết rất hay.
em có một chỗ vướn là dù thử 2 3 tên miền, từ tên miền mua sau đó trỏ về cloudflare, tới lấy tên miên free ở no ip. tất cả để trỏ về public ip của server, nhưng vẫn không thể lấy được địa chứng chỉ ssl ạ
Anh còn dùng cách “Cài đặt Cyberpanel” với cái này a dùng có phí hay free vậy a?
Mình vẫn dùng Cyberpanel nhé, dùng bản free là ổn rồi.
mình đang dùng cách này tạo wordpress, khá hay và dễ backup.
tạo mới 1 trang wordpress chỉ dùng 3 lệnh:
bash bin/domain.sh -add
bash bin/database.sh –domain –user –password –database
./bin/appinstall.sh –app wordpress –domain
Bạn cho mình hỏi lệnh nào để xóa sạch 1 site để tạo lại mới hoàn toàn? mình có thử dùng
bash bin/domain.sh -del
xong xóa thư mục wordpress trong sites, vào phpmyadmin để drop database nhưng khi tạo lại (bằng 3 dòng trên) thì wordpress bị báo lỗi không thể kết nối được database
edit:sao enter xuống dòng nhưng bình luận lại nằm hết ở 1 dòng nhỉ @@
Mình cài xong lên web wordpress rồi, nhưng tìm không ra file php.ini theo bài hướng dẫn trên bạn có thể giúp mình không? Mình muốn sửa lại upload_max_filesize
Bạn xem bài này: https://thuanbui.me/toi-uu-docker-openlitespeed-tat-phpmyadmin-cai-them-php-extension-chinh-sua-php-ini/
Làm sao để bật OPcache để chạy với docker vậy anh?
Mình có theo phương pháp của b và đang chạy 1 site trong hệ thống mạng nội bộ rồi. Mình muốn hỏi là có cách nào thêm ssl vào hệ thống không, hiện mình đang chạy https rồi, nhưng client truy cập báo https bị gạch và khi truy cập mới đều báo “Your connection is not private”.
Nhiều khả năng là chứng chỉ SSL đã hết hạn và hệ thống nó không tự gia hạn. Bạn cần truy cập SSH vào server, chuyển đến thư mục chứa file docker-compose.yml, sau đó gõ lệnh
./bin/acme.sh -R
để gia hạn lại chứng chỉ SSL.Vì là site chạy nội bộ, nên tên miền cũng là tên miền nội bộ. Có cách nào thao tác được không ạ. Lúc trước mình chưa kích hoạt ssl khi cài, vì tên miền nội bộ mà.
Mình chưa bao giờ dùng tên miền nội bộ nên không rõ. Bạn có thể dùng tên miền thiệt, nhưng chỉ cho kết nối trong nội bộ và cấu hình theo cái này: https://thuanbui.me/ssl-lets-encrypt-homelab/
Vậy khó nhỉ, DNS nội bộ mình dùng còn winserver tạo. Vì trong nội bộ nên tên miền hơi đặc thù.
dùng cách này thì khi muốn đổi domain (data vẫn nằm ở vps cũ) thì làm thế nào vậy bạn?
Bạn cần tạo domain mới, sau đó thực hiện các bước migration qua tên miền mới, tương tự như hướng dẫn này: https://www.wpbeginner.com/wp-tutorials/how-to-properly-move-wordpress-to-a-new-domain-without-losing-seo/