Để đố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!