Cách Thiết lập cơ sở dữ liệu từ xa để tối ưu hóa hiệu suất trang web với MySQL trên Ubuntu 16.04

4 năm trước

Cách Thiết lập cơ sở dữ liệu từ xa để tối ưu hóa hiệu suất trang web với MySQL trên Ubuntu 16.04

Giới Thiệu 

Khi ứng dụng hoặc trang web của bạn phát triển, bạn có thể đến một điểm mà bạn đã vượt quá thiết lập máy chủ hiện tại của mình. Nếu bạn đang lưu trữ máy chủ web và cơ sở dữ liệu phụ trợ trên cùng một máy, tốt nhất bạn nên tách hai chức năng này để mỗi phần có thể hoạt động trên phần cứng riêng và chia sẻ sự đáp ứng yêu cầu của khách truy cập.

Trong hướng dẫn này, chúng ta sẽ thảo luận cách để cấu hình một máy chủ cơ sở dữ liệu MySQL từ xa mà ứng dụng web của bạn có thể kết nối. Chúng ta sẽ sử dụng WordPress làm mẫu để làm việc, nhưng kỹ thuật này được áp dụng rộng rãi cho bất kỳ ứng dụng nào được hỗ trợ bởi MySQL.

 

Yêu Cầu 

Trước khi bắt đầu với hướng dẫn này , bạn cần:

  • Hai máy chủ Ubuntu 16.04, với user non-root sudo, và firewall UFW được kích hoạt, như mô tả trong Thiết lập ban đầu cho server dùng Ubuntu 16.04.
  • Trên một trong các máy chủ bạn sẽ cần cài đặt LEMP (Linux, Nginx, MySQL, PHP). Hướng dẫn trong Cách cài đặt Linux, Nginx, MySQL, PHP( LEMP Stack) trên Ubuntu 16.04 sẽ hướng dẫn bạn qua quy trình. Bạn nên bỏ qua Bước 2, đó là về cài đặt MySQL. Chúng ta sẽ cài đặt MySQL trong hướng dẫn này.
  • Tùy chọn (nhưng được khuyến khích),bạn có thể bảo vệ máy chủ web LEMP bằng chứng chỉ SSL. Bạn sẽ cần một tên miền, nhưng các chứng chỉ là miễn phí.
 

Bước 1 - Cài đặt MySQL trên máy chủ cơ sở dữ liệu

Việc lưu trữ dữ liệu của chúng ta trên một máy chủ riêng biệt là một cách tốt để mở rộng khi đạt đến đỉnh hiệu suất của một cấu hình máy. Nó cũng cung cấp cấu trúc cơ bản cần thiết để cân bằng và mở rộng cơ sở hạ tầng của chúng ta nhiều hơn nữa vào một thời gian sau.

Để bắt đầu, chúng ta sẽ cài đặt MySQL trên máy chủ mà chúng ta đã không cài đặt LEMP stack trên. Đăng nhập vào máy chủ này, sau đó cập nhật gói bộ nhớ cache và cài đặt phần mềm máy chủ MySQL:

sudo apt-get update
sudo apt-get install mysql-server

Bạn sẽ được yêu cầu thiết lập và xác nhận mật khẩu root cho MySQL trong suốt quá trình cài đặt. Chọn một mật khẩu mạnh và lưu ý điều đó, vì chúng ta sẽ cần nó sau.

MySQL nên được cài đặt và chạy ngay bây giờ. Hãy kiểm tra bằng cách sử dụng systemctl:

systemctl status mysql
Output
● mysql.service - MySQL Community Server
  Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)  Active: active (running) since Tue 2017-05-23 14:54:04 UTC; 12s ago 
Main PID: 27179 (mysqld) 
CGroup: /system.slice/mysql.service 
  └─27179 /usr/sbin/mysqld
 

Dòng Active: active (running) có nghĩa là MySQL được cài đặt và chạy. Bây giờ chúng ta sẽ làm cho việc cài đặt an toàn hơn một chút. MySQL đi kèm với một tập lệnh qua khóa hệ thống:

mysql_secure_installation

Điều này sẽ hỏi bạn về mật khẩu root của MySQL vừa đặt. Gõ nó vào và nhấn ENTER.  Bây giờ chúng ta sẽ trả lời một loạt các nhắc nhở có hoặc không. Hãy bỏ qua chúng:

Đầu tiên , chúng ta được hỏi về validate password plugin, một plugin có thể tự động thi hành các quy tắc mật khẩu mạnh nhất định cho người dùng MySQL của bạn. Có thể đây là quyết định bạn sẽ cần phải làm dựa trên nhu cầu bảo mật cá nhân của bạn. Gõ y và nhấn ENTER , hoặc chỉ ấn ENTER để bỏ qua. Nếu được kích hoạt, bạn cũng sẽ được nhắc chọn một mức từ 0-2 cho mức độ nghiêm ngặt xác nhận mật khẩu sẽ được. Chọn một số và nhấn ENTER để tiếp tục.

Tiếp theo, bạn sẽ được hỏi có muốn thay đổi mật khẩu root hay không. Vì chúng ta vừa tạo ra mật khẩu khi chúng ta cài đặt MySQL, chúng ta có thể bỏ qua. Nhấn ENTER để tiếp tục mà  không cần cập nhật mật khẩu.

Phần còn lại của lời nhắc có thể trả lời yes. bạn sẽ được hỏi về việc gỡ bỏ người dùng MySQL ẩn danh, không cho đăng nhập root từ xa, gỡ bỏ cơ sở dữ liệu test, và nạp lại các bảng đặc quyền để đảm bảo các thay đổi trước đó có hiệu lực. Đây là một ý tưởng tốt. Gõ y và nhấn ENTER với mỗi bước.

Tập lệnh sẽ thoát sau khi tất cả các nhắc nhở được trả lời. Bây giờ cài đặt MySQL là được bảo đảm một cách hợp lý. Trong bước tiếp theo, chúng ta sẽ cấu hình MySQL để cho phép truy cập các kết nối từ xa.

Bước 2 - Cấu hình MySQL để Nghe các kết nối từ xa

Bây giờ bạn đã có cơ sở dữ liệu được cập nhật và chạy, chúng ta cần phải thay đổi một số giá trị cấu hình để cho phép kết nối từ các máy tính khác.

Mở file cấu hình mysqld với quyền root trong trình biên tập của bạn:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Tệp này được chia thành các phần được biểu thị bởi các từ trong ngoặc ([and]). Tìm phần được gắn nhãn mysqld:

mysqld.cnf
. . .
[mysqld]

Trong phần này bạn sẽ cần phải tìm một tham số được gọi là bind-address. Điều này cho biết phần mềm cơ sở dữ liệu mà địa chỉ mạng nghe các kết nối trên.

Hiện tại, MySQL được cấu hình để chỉ tìm các kết nối cục bộ. Chúng ta cần phải thay đổi nó để tham khảo một địa chỉ IP bên ngoài mà máy chủ của bạn có thể truy cập.

Nếu cả hai máy chủ của bạn đang ở trong một trung tâm dữ liệu có khả năng kết nối mạng riêng, hãy sử dụng IP mạng riêng của máy chủ . Nếu không, bạn có thể sử dụng địa chỉ IP công cộng:

/etc/mysql/my.cnf
[mysqld]
. . .
bind-address = db_server_ip

Vì chúng ta sẽ kết nối với cơ sở dữ liệu qua Internet, chúng ta sẽ yêu cầu các kết nối mật mã để giữ an toàn dữ liệu . Nếu bạn không mã hóa kết nối MySQL của mình, bất kỳ ai trên mạng có thể biết thông tin nhạy cảm giữa web và máy chủ cơ sở dữ liệu của bạn. Thêm dòng sau sau dòng bind-address  chúng ta vừa cập nhật :

/etc/mysql/my.cnf
. . .
require_secure_transport = on

Lư và đóng file khi hoàn thành .

Đối với các kết nối SSL để làm việc, chúng ta cần tạo một số khóa và chứng chỉ. MySQL đi kèm với một lệnh mà tự động thiết lập mọi thứ chúng ta cần:

sudo mysql_ssl_rsa_setup --uid=mysql

Điều này sẽ tạo ra các file cần thiết và làm cho chúng có thể đọc được bởi máy chủ MySQL (--uid=mysql).

Để buộc MySQL cập nhật cấu hình và đọc thông tin SSL mới, khởi động lại cơ sở dữ liệu:

sudo systemctl restart mysql

Để xác nhận rằng máy chủ đang nghe trên giao diện bên ngoài, kiểm tra với netstat:

sudo netstat -plunt | grep mysqld
tcp 0 0 db_server_ip:3306 0.0.0.0:* LISTEN 27328/mysqld
 

netstatin số liệu thống kê về hệ thống mạng của máy chủ của chúng ta.Đầu ra này chỉ một quá trình được gọi là mysqld được gắn vào  db_server_ip tại cổng 3306, cổng MySQL tiêu chuẩn.

Bây giờ mở cổng đó trên firewall để cho phép sự lưu thông :

sudo ufw allow mysql

Tiếp theo, chúng ta sẽ thiết lập người dùng và cơ sở dữ liệu chúng ta cần truy cập vào máy chủ từ xa.

Bước 3 - Thiết lập cơ sở dữ liệu WordPress và các chứng nhận từ xa

Mặc dù  MySQL đang nghe trên một địa chỉ IP bên ngoài, nhưng hiện tại không có người dùng hoặc cơ sở dữ liệu được cho phép ở xa. Hãy tạo một cơ sở dữ liệu cho WordPress, và một người dùng có thể truy cập nó.

Bắt đầu bằng việc kết nối với MySQL sử dụng tài khoản MySQL root:

mysql -u root -p

Bạn sẽ được hỏi về mật khẩu MySQL root và sau đó có lời nhắc mysql> .

Bây giờ chúng ta có thể tạo ra cơ sở dữ liệu mà WordPress sẽ sử dụng,gọi là wordpress để có thể dễ dàng nhận diện sau đó:

mysql> CREATE DATABASE wordpress;

Lưu ý : Tất cả các câu lệnh SQL phải kết thúc bằng dấu chấm phẩy (;). Nếu bạn nhấnENTER trên một câu lệnh MySQL và chỉ nhìn thấy một dòng lệnh mới với dấu nhắc  a -> , bạn có thể quên dấu chấm phẩy . Chỉ cần gõ vào dòng mới và nhấn ENTER lần nữa để tiếp tục.

Bây giờ chúng ta có một cơ sở dữ liệu, chúng ta cần phải tạo ra người dùng của chúng ta. Một vòng xoắn trong việc tạo ra người dùng của chúng ta là cần phải xác định hai cấu hình khác nhau dựa trên nơi mà người dùng đang kết nối. Chúng ta sẽ tạo ra một người dùng cục bộ, và một người dùng từ xa gắn với địa chỉ IP của máy chủ web .

Đầu tiên , chúng ta tạo ra người dùng cục bộ wordpressuser và làm cho tài khoản này chỉ khớp với các kết nối cục bộ sử dụng  localhost trong khai báo :

mysql> CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password';

Hãy tiếp tục và cấp cho tài khoản này quyền truy cập đầy đủ vào cơ sở dữ liệu của chúng ta :

mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'localhost';

Người dùng này có thể thực hiện bất kỳ thao tác nào trên cơ sở dữ liệu cho WordPress, nhưng tài khoản này không thể được sử dụng từ xa vì nó chỉ khớp các kết nối từ máy cục bộ.

Bây giờ hãy tạo tài khoản đồng hành sẽ kết hợp các kết nối độc quyền từ máy chủ web của chúng ta. Đối với điều này, bạn sẽ cần địa chỉ IP của máy chủ web của mình. Chúng ta có thể đặt tên tài khoản này bất cứ điều gì, nhưng để có một trải nghiệm nhất quán hơn,  sử dụng chính xác tên người dùng giống như  đã làm ở trên, chỉ với phần máy chủ được sửa đổi.

Lưu ý rằng bạn phải sử dụng một địa chỉ IP sử dụng cùng một mạng mà bạn đã cấu hình trong tệp mysqld.cnf. Điều này có nghĩa là nếu bạn sử dụng IP mạng riêng, bạn sẽ muốn tạo quy tắc dưới đây để sử dụng IP riêng của máy chủ web . Nếu bạn đã tạo cấu hình MySQL để sử dụng internet công cộng, bạn nên kết hợp với địa chỉ IP công cộng của máy chủ web.

mysql> CREATE USER 'wordpressuser'@'web-server_ip' IDENTIFIED BY 'password';

Bây giờ chúng ta có tài khoản từ xa , chúng ta có thể cung cấp cho nó những đặc quyền giống như người dùng cục bộ:

mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpressuser'@'web_server_ip';

Làm ngang bằng các đặc quyền để ghi vào đĩa và bắt đầu sử dụng chúng:

mysql> FLUSH PRIVILEGES;

Sau đó kết thúc lời nhắc bằng cách gõ

mysql> exit

Bây giờ chúng ta đã thiết lập một cơ sở dữ liệu mới và  cho phép người sử dụng từ xa , hãy kiểm tra cơ sở dữ liệu và các kết nối.

Bước 4 - Kiểm tra các kết nối từ xa và cục bộ

Trước khi tiếp tục, tốt nhất bạn nên xác minh rằng bạn có thể kết nối với cơ sở dữ liệu của bạn từ cả máy nội bộ và từ máy chủ web của bạn sử dụng tài khoản wordpressuser 

Trước hết, kiểm tra kết nối cục bộ từ database machine bằng cách cố đăng nhập bằng tài khoản mới của chúng ta:

mysql -u wordpressuser -p

Nhập mật khẩu mà bạn thiết lập cho tài khoản này khi được nhắc.

Nếu bạn nhận được một dấu nhắc MySQL, thì kết nối cục bộ đã thành công. Bạn có thể thoát ra bằng cách gõ:

mysql> exit

Đăng nhập vào web server để kiểm tra các kết nối từ xa .

Trên máy chủ web của bạn, bạn sẽ cần phải cài đặt một số công cụ khách hàng cho MySQL để truy cập cơ sở dữ liệu từ xa. Cập nhật gói bộ nhớ cache cục bộ của bạn, và sau đó cài đặt các tiện ích khách hàng:

On your web server, you'll need to install some client tools for MySQL in order to access the remote database. Update your local package cache, and then install the client utilities:

sudo apt-get update
sudo apt-get install mysql-client

Bây giờ, chúng ta có thể kết nối với máy chủ cơ sở dữ liệu của chúng ta sử dụng cú pháp sau:

mysql -u wordpressuser -h db_server_ip -p

Một lần nữa, bạn phải chắc chắn rằng bạn đang sử dụng đúng địa chỉ IP cho máy chủ cơ sở dữ liệu. Nếu bạn cấu hình MySQL để nghe trên mạng riêng, hãy nhập IP mạng cơ sở dữ liệu riêng của bạn, nếu không ,nhập địa chỉ IP công cộng của máy chủ cơ sở dữ liệu của bạn.

Bạn sẽ được hỏi về mật khẩu tài khoản wordpressuser, và nếu tất cả đều tốt, bạn sẽ được đưa ra một nhắc nhở MySQL. Chúng ta có thể xác minh rằng kết nối đang sử dụng SSL với lệnh sau:

mysql> status

 

 
Output
--------------
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper
Connection id: 52 
Current database: 
Current user: wordpressuser@203.0.113.111 SSL: Cipher in use is DHE-RSA-AES256-SHA 
Current pager: stdout 
Using outfile: '' 
Using delimiter: ; 
Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu) 
Protocol version: 10 
Connection: 203.0.113.111 via TCP/IP 
Server characterset: latin1 
Db characterset: latin1 
Client characterset: utf8 
Conn. characterset: utf8 
TCP port: 3306 
Uptime: 3 hours 43 min 40 sec 
Threads: 1 Questions: 1858 Slow queries: 0 Opens: 276 Flush tables: 1 Open tables: 184 Queries per second avg: 0.138 
--------------

Dòng SSL: sẽ cho biết nếu một mật mã SSL đang được sử dụng. Bạn có thể tiếp tục và thoát ra khỏi nhắc ngay bây giờ, vì bạn đã xác minh rằng bạn có thể kết nối từ xa:

mysql> exit 

Để kiểm tra thêm, bạn có thể thử làm cùng một thứ từ máy chủ thứ ba để đảm bảo rằng máy chủ này không được cấp quyền truy cập. Bạn đã xác minh truy cập cục bộ và truy cập từ máy chủ web, nhưng bạn chưa xác minh rằng các kết nối khác sẽ bị từ chối.

Tiếp tục và thử cùng một thủ tục trên một máy chủ mà bạn đã không cấu hình một tài khoản người dùng cụ thể. Bạn có thể phải cài đặt tiện ích khách hàng như bạn đã làm ở trên:

mysql -u wordpressuser -h db_server_ip -p

Điều này không hoàn thành thành công. Nó sẽ hiện rat lỗi có như sau:

Output
ERROR 1130 (HY000): Host '203.0.113.12' is not allowed to connect to this MySQL server
 

Đây là những gì chúng ta mong đợi .

Chúng ta đã kiểm tra thành công kết nối từ xa , và bây giờ có thể tiến hành cài đặt WordPress .

 

Bước 5 — Cài đặt WordPress

Để chứng minh khả năng của máy chủ MySQL có thể truy cập từ xa , chúng ta sẽ cài đặt và cấu hình WordPress - blogging platform phổ biến - trên máy chủ web của chúng ta. Điều này sẽ yêu cầu chúng ta tải xuống và trích xuất phần mềm, định cấu hình thông tin kết nối và sau đó chạy qua cài đặt trên nền Web của WordPress.

Trên  web server, tải xuống phiên bản mới nhất của WordPress vào thư mục chính của bạn:

cd ~
curl -o https://wordpress.org/latest.tar.gz

Trích xuất các tệp tin, sẽ tạo một thư mục được gọi là wordpress trong thư mục chính của bạn:

tar xzvf latest.tar.gz

WordPress bao gồm một tệp cấu hình mẫu mà chúng ta sẽ sử dụng như một điểm khởi đầu. Chúng ta tạo một bản sao của tệp này, di chuyển -sampletừ tên tệp tin vì thé  nó sẽ được chạy bởi WordPress:

cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php

Khi chúng ta mở tệp, câu lệnh công việc đầu tiên là điều chỉnh một số khóa bí mật để cung cấp bảo mật cho tiến trình cài đặt của chúng ta. WordPress cung cấp một chương trình tạo an toàn cho các giá trị này để bạn không phải tự mình tìm ra các giá trị tốt . Chúng chỉ được sử dụng trong nội bộ, vì vậy sẽ không ảnh hưởng đến khả năng sử dụng các giá trị phức tạp, an toàn ở đây.

Để lấy các giá trị bảo mật từ trình tạo khoá bí mật WordPress, hãy nhập:

curl -s https://api.wordpress.org/secret-key/1.1/salt/

Thao tác này sẽ in ra một số cấu hình mà chúng ta có thể sao chép và dán vào tệp wp-config.php .

Warning! It is important that you request unique values each time. Do not copy the values shown below!

 Output
define('AUTH_KEY', '1jl/vqfsDO NOT COPY THESE VALUES c_j{iwqD^<+c9.kDO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3'); 
define('LOGGED_IN_KEY', 'W(50,{W^,OPB%PBDO NOT COPY THESE VALUES 2;y&,2m%3]R6DUth[;88'); 
define('NONCE_KEY', 'll,4UC)7ua+8DO NOT COPY THESE VALUES #`DXF+[$atzM7 o^-C7g'); 
define('AUTH_SALT', 'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES 07VC*Lj*lD&?3w!BT#-'); 
define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h{!_xY'); 
define('LOGGED_IN_SALT', 'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES t6**bRVFSD[Hi])-qS`|'); 
define('NONCE_SALT', 'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');
 

Sao chép đầu ra bạn nhận được vào khay nhớ tạm thời của bạn, sau đó mở tệp cấu hình trong trình chỉnh sửa văn bản của bạn:

nano ~/wordpress/wp-config.php

Tìm phần có chứa các giá trị giả cho các cài đặt đó. Nó sẽ giống như thế này:

wp-config.php
. . .
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
. . .

Xóa những dòng đó và dán vào các giá trị mà bạn đã sao chép từ dòng lệnh.

Tiếp theo, chúng ta cần phải nhập thông tin kết nối cho cơ sở dữ liệu từ xa . Những dòng cấu hình nằm ở đầu tệp, ngay phía trên nơi chúng ta dán vào các khóa. Hãy nhớ sử dụng cùng một địa chỉ IP bạn đã sử dụng trong thử nghiệm cơ sở dữ liệu  từ xa của bạn trước đó:

wp-config.php
. . .
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'wordpressuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
/** MySQL hostname */
define('DB_HOST', 'db_server_ip');
. . .

Và cuối cùng, bất cứ nơi nào trong tập tin, dán dòng sau đây mà nói với WordPress để sử dụng một kết nối SSL vào cơ sở dữ liệu MySQL của chúng ta:

wp-config.php
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);

Lưu và đóng file.

Tiếp theo, chúng ta sẽ cần phải sao chép các tập tin và thư mục tìm thấy trong thư mục ~/wordpress đến tài liệu gốc của Nginx. Chúng ta sử dụng chỉ báo -a  để đảm bảo quyền của chúng ta được duy trì:

sudo cp -a ~/wordpress/* /var/www/html

Bây giờ tất cả các tập tin của chúng ta được đặt đúng chỗ. Việc còn lại là thay đổi quyền sở hữu tập tin. Chúng ta sẽ thiết lập tất cả các tệp trong tài liệu gốc do người dùng máy chủ web của chúng ta sở hữu, www-data:

sudo chown -R www-data:www-data /var/www/html

WordPress bây giờ sẽ được cài đặt và sẵn sàng để chạy thông qua các trang web dựa trên đoạn chương trình. Chúng ta sẽ làm điều đó trong bước tiếp theo.

 

Bước 6 - Thiết lập Wordpress qua Giao diện Web

WordPress có một đoạn chương trình cài đặt dựa trên web sẽ hỏi một vài câu hỏi và cài đặt các bảng cần thiết trong cơ sở dữ liệu của chúng ta. Hãy bắt đầu ngay bây giờ.

Điều hướng đến tên miền (hoặc địa chỉ IP công cộng) liên kết với máy chủ web của bạn:

http://example.com

Bạn sẽ thấy một màn hình lựa chọn ngôn ngữ cho trình cài đặt WordPress. Chọn ngôn ngữ thích hợp và nhấp qua màn hình cài đặt chính:

WordPress install screen

Khi bạn đã gửi thông tin của mình, bạn sẽ phải đăng nhập vào giao diện quản trị WordPress bằng tài khoản bạn vừa tạo. Sau đó, bạn sẽ được đưa đến bảng điều khiển nơi bạn có thể tùy chỉnh và vận hành trang web của mình.

 

Kết luận

Trong hướng dẫn này, chúng ta đã thiết lập một cơ sở dữ liệu MySQL để chấp nhận các kết nối được bảo vệ bởi SSL từ một cài đặt Wordpress từ xa. Các lệnh và kỹ thuật chúng ta sử dụng có thể áp dụng cho bất kỳ ứng dụng web nào được viết bằng bất kỳ ngôn ngữ lập trình nào, nhưng chi tiết thực hiện cụ thể sẽ khác nhau. 

Để biết thêm nhiều thông tin tại ViCloud Community