Thay đổi máy chủ cho website WordPress dùng SSL Let’s Encrypt không bị downtime

Để đối phó với tình trạng đứt cáp triền miên, mình thường xuyên phải di chuyển website qua lại giữa các máy chủ khác nhau để đảm bảo kết nối tốt nhất từ trong nước. Các máy chủ ảo (VPS) của mình đều được cài đặt Centminmod để quản lý trong khi đó tất cả website đều được cài đặt chứng chỉ SSL của Let’s Encrypt (miễn phí).

Dưới đây là các bước chuyển máy chủ cho website mà vẫn bảo đảm kết nối ổn định, không lo bị downtime. Lưu ý các bước chỉ áp dụng với các máy chủ cài đặt Centminmod, không dùng được cho EasyEngine hay HocVPS script.

Để trực quan dễ hiểu, mình sẽ gọi tên website là https://purna.vn (blog Yoga của vợ mình). Máy chủ hiện tại đang chứa website là VPS A, máy chủ mới bạn muốn chuyển website đến là VPS B.

1. Cài đặt Acmetool trên VPS B

Đầu tiên, cần phải chắc chắc VPS B đã được cài đặt acmetool, app dùng để xác thực chứng chỉ SSL Let’s Encrypt. Thực thi các lệnh dưới đây để cài đặt acmetool

touch /etc/centminmod/custom_config.inc
echo "LETSENCRYPT_DETECT='y'" >> /etc/centminmod/custom_config.inc
/usr/local/src/centminmod/addons/acmetool.sh acmeupdate

2. Tạo Vhost trên VPS B

Trên VPS B, tạo Vhost mới purna.vn

cd /usr/local/src/centminmod
 ./centmin.sh
--------------------------------------------------------
 Centmin Mod Menu 123.09beta01 centminmod.com
--------------------------------------------------------
1). Centmin Install
2). Add Nginx vhost domain
3). NSD setup domain name DNS
4). Nginx Upgrade / Downgrade
5). PHP Upgrade / Downgrade
6). XCache Re-install
7). APC Cache Re-install
8). XCache Install
9). APC Cache Install
10). Memcached Server Re-install
11). MariaDB MySQL Upgrade & Management
12). Zend OpCache Install/Re-install
13). Install/Reinstall Redis PHP Extension
14). SELinux disable
15). Install/Reinstall ImagicK PHP Extension
16). Change SSHD Port Number
17). Multi-thread compression: pigz,pbzip2,lbzip2...
18). Suhosin PHP Extension install
19). Install FFMPEG and FFMPEG PHP Extension
20). NSD Install/Re-Install
21). Update - Nginx + PHP-FPM + Siege
22). Add WordPress Nginx vhost + Cache Plugin
23). Update Centmin Mod Code Base
24). Exit
--------------------------------------------------------
Enter option [ 1 - 24 ] 22

Nhớ trả lời y (Yes) ở câu hỏi Get Letsencrypt SSL certificate Nginx vhost?

Do you want to continue with Nginx vhost site creation ? [y/n] y

Enter vhost domain name you want to add (without www. prefix): purna.vn

Create a self-signed SSL certificate Nginx vhost? [y/n]: n
Get Letsencrypt SSL certificate Nginx vhost? [y/n]: y

You have 4 options:
1. issue staging test cert with HTTP + HTTPS (untrusted)
2. issue staging test cert with HTTPS default (untrusted)
3. issue live cert with HTTP + HTTPS (trusted)
4. issue live cert with HTTPS default (trusted)
Enter option number 1-4: 4

Tiếp tục trả lời các câu hỏi tiếp theo để hoàn tất việc tạo Vhost trên VPS B.

Sau khi hoàn tất, bạn có thể xác nhận Vhost purna.vn đã được tạo thành công bằng cách kiểm tra với lệnh sau

 cd /home/nginx/domains/purna.vn

Nếu báo thư mục không tồn tại, nghĩa là quá trình tạo Vhost đã bị lỗi. Cần phải thao tác lại.

3. Chuyển dữ liệu từ VPS A sang VPS B

Sau khi VPS B tạo vhost purna.vn thành công. Chúng ta sẽ copy toàn bộ dữ liệu và database của website purna.vn từ VPS A sang VPS B.

Truy cập SSH vào VPS A để sao lưu database thành file database.sql để chuẩn bị dời qua VPS B

cd /home/nginx/domains/purna.vn/public/wp-content/
mysqldump -u DATABASE_USER -pDATABASE_PASS DATABASE_NAME > database.sql

Bạn cần thay thế các biến DATABASE_USER, DATABASE_PASS và DATABASE_NAME bằng tên tương ứng với cấu hình MySQL đang sử dụng. Xem các thông tin này trong file wp-config.php

Chuyển qua VPS B, sử dụng lệnh rsync để đồng bộ tất cả dữ liệu từ VPS A qua. Chúng ta chỉ cần copy thư mục wp-content vì các thư mục còn lại là như nhau giữa các trang WordPress.

cd /home/nginx/domains/purna.vn/public/wp-content/
rm -rf *
rsync -avz root@purna.vn:/home/nginx/domains/purna.vn/public/wp-content/* .

Tiếp theo, chép database.sql vào database trên VPS B bằng lệnh mysql

mysql -u DATABASE_USER -pDATABASE_PASS DATABASE_NAME < database.sql

Tương tự như bước trên, bạn cần thay thế các biến DATABASE_USER, DATABASE_PASS và DATABASE_NAME bằng tên tương ứng với cấu hình MySQL đang sử dụng. Xem các thông tin này trong file wp-config.php ở /home/nginx/domains/purna.vn/public/

Mỗi website WordPress do Centmindmod tạo ra đều sử dụng một table_prefix khác nhau để tăng độ bảo mật. Do đó bạn phải thay đổi thông số table_prefix trong file wp-config.php trên VPS B cho giống với table_prefix trên VPS A để đảm bảo website sử dụng đúng MySQL table.

cd /home/nginx/domains/purna.vn/public/wp-content/
nano wp-config.php

Thay đổi giá trị $table_prefix

 *
 * You can have multiple installations in one database if you give each
 * a unique prefix. Only numbers, letters, and underscores please!
 */
$table_prefix = '5862_';

4. Xác nhận website hoạt động trên VPS B

Sau khi đã hoàn tất bước 3, chúng ta cần xác định website mới chuyển đã hoạt động ổn định trên VPS B. Bạn có thể thay đổi file hosts trên máy tính để kiểm tra kết nối.

Mở Notepad với quyền Administrator, sau đó mở file hosts ở đường dẫn C:WindowsSystem32Driversetchosts

Thêm vào dưới cùng:

VPS-B-IP purna.vn

VPS-B-IP là địa chỉ IP của VPS B của bạn. Sau đó mở trình duyệt và truy cập Purna.vn, nếu website hiện ra nghĩa là bạn đã làm đúng từ đầu đến cuối.

Nếu sử dụng Chrome, bạn sẽ gặp cảnh báo Your connection is not private , hãy bấm Advanced và chọn Proceed to purna.vn (unsafe). Đó là do chúng ta chưa thiết lập cấu hình SSL cho website trên VPS B. Bước tiếp theo sẽ giải quyết vấn đề này.

Sau khi xác nhận xong, các bạn hãy mở lại file hosts và tắt cấu hình vừa mới tạo ở trên bằng cách thêm dấu # ở phía trước

5. Copy chứng chỉ SSL và file cấu hình conf

Đầu tiên, cần copy chứng chỉ SSL từ VPS A qua VPS B. Truy cập vào VPS B và gõ lệnh sau

cd /usr/local/nginx/conf/ssl/purna.vn
rm -rf
rsync -avz root@purna.vn:/usr/local/nginx/conf/ssl/purna.vn/* .

Sau đó copy file cấu hình Vhost purna.vn.ssl.conf từ VPS A qua VPS B. Chúng ta vẫn thao tác trên VPS B:

cd /usr/local/nginx/conf/conf.d/
rm purna.vn.ssl.conf
rsync -avz root@purna.vn://usr/local/nginx/conf/conf.d/purna.vn.ssl.conf .

Tiếp tục copy thư mục /root/.acme.sh/purna.vn từ VPS A sang VPS B. Đây là thư mục chứa các cronjob để tự động renew SSL Cert của Let’s Encrypt

cd /root/.acme.sh/purna.vn
rm -rf
rsync -avz root@purna.vn:/root/.acme.sh/purna.vn/* .

Cuối cùng, khởi động lại PHP và MySQL bằng lệnh

nprestart

6. Thay đổi DNS của purna.vn qua IP của VPS B

Nếu bạn làm đúng như các bước từ 1 đến 5, website ở VPS B đã sẵn sàng hoạt động. Hãy truy cập vào trang quản lý tên miền của bạn để thay đổi IP cho tên miền purna.vn sang IP của VPS B.

Vậy là xong, website của bạn đã được chuyển nhà thành công mà không bị downtime bất cứ giây nào.

Nguồn: Cenminmod

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!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *