Hướng dẫn sau giúp bạn cài đặt WordPress chỉ bằng một dòng lệnh với wp-cli.
wp-cli là giao diện dòng lệnh của WordPress giúp thực hiện các tác vụ thường gặp và cả những tác vụ không thể tìm thấy trên giao diện quản trị của WordPress. Xem thêm hướng dẫn cài đặt wp-cli.
Mục lục
Các bước cài đặt WordPress bằng wp-cli
Trước khi thực hiện cài đặt, hãy đảm bảo bạn đã setup Domain, cài đặt chứng chỉ SSL và VirtualHost đầy đủ.
Tạo tài khoản truy cập database
Ở đây tôi sẽ tự sinh tên database; user name & password truy cập database; và table prefix dựa trên domain của website vì dù sao những thông tin này cũng chỉ dùng một lần và cần bảo mật tốt.
WP_DOMAIN="example.com"
DB_HOST="localhost"
DB_NAME="$(echo ${WP_DOMAIN} | sed 's/\./_/g')_db"
DB_USER="$(echo ${WP_DOMAIN} | sed 's/\./_/g')"
DB_PASSWORD="$(LC_CTYPE=C tr -dc A-Za-z0-9_\!\@\#\$\%\^\&\*\(\)-+= < /dev/urandom | head -c 16)"
DB_PREFIX="$(IFS=.;echo ${WP_DOMAIN}|sed -e 's/$/ /' -e 's/\([^ ]\)[^ ]* /\1/g' -e 's/^ *//')_"
# DB_NAME=example_com_db
# DB_USER=example_com
# DB_PASSWORD=< random generated 16-character password >
# DB_PREFIX=ec_
Tạo user trên MySQL/MariaDB với username và password vừa được tạo và cấp quyền truy cập vào database.
mysql -u root -p -e \
"DROP USER IF EXISTS '${DB_USER}'@'${DB_HOST}';
DROP DATABASE IF EXISTS ${DB_NAME};
CREATE USER '${DB_USER}'@'${DB_HOST}' IDENTIFIED BY '${DB_PASSWORD}';
GRANT ALL PRIVILEGES ON \`${DB_NAME}\`.* TO '${DB_USER}'@'${DB_HOST}' WITH GRANT OPTION;"
Tải mã nguồn WordPress
Tải mã nguồn WordPress về web root, ví dụ ~/public_html.
cd ~/public_html wp core download
Tạo file cấu hình wp-config.php
Tạo file wp-config.php với các thông tin về database ở trên cùng một số thiết lập bổ sung nếu muốn.
wp config create \
--dbname="${DB_NAME}" \
--dbuser="${DB_USER}" \
--dbpass="${DB_PASSWORD}" \
--dbprefix="${DB_PREFIX}" \
--extra-php << PHP
define( 'WP_ALLOW_MULTISITE', true );
define( 'WP_DEBUG', true );
define( 'DISALLOW_FILE_EDIT', true );
// ...other settings
PHP
chmod 644 wp-config.php
Tạo database từ wp-config.php
Tạo database từ các cấu hình vừa thiết lập trong wp-config.php ở bước trên.
wp db create
Cài đặt WordPress
Sau khi có database và file wp-config.php, ta bắt đầu tiến hành cài đặt WordPress. Các thông tin cần có ở đây bao gồm:
- Địa chỉ URL của website. (ví dụ ‘https://example.com‘)
- User name của Administrator. (ví dụ ‘admin’)
- Password của Admin. (Tôi sẽ tự sinh ra mật khẩu này)
- Email của Admin. (ví dụ ‘webmaster@example.com‘)
- Tiêu đề của website. (ví dụ ‘iCreativ’)
WP_SITE_NAME="iCreativ"
WP_SITE_URL="https://${WP_DOMAIN}"
WP_ADMIN_USERNAME="admin"
WP_ADMIN_PASSWORD="$(LC_CTYPE=C tr -dc A-Za-z0-9 < /dev/urandom | head -c 16)"
WP_ADMIN_EMAIL="webmaster@example.com"
wp core install \
--url="${WP_SITE_URL}" \
--title="${WP_SITE_NAME}" \
--admin_user="${WP_ADMIN_USERNAME}" \
--admin_password="${WP_ADMIN_PASSWORD}" \
--admin_email="${WP_ADMIN_EMAIL}" \
--skip-email
Các cấu hình sau cài đặt
Ban đầu có lẽ chúng ta nên ngăn chặn search engine duyệt trang này.
wp option update blog_public 0
Thiết lập đường dẫn tĩnh, điều này rất quan trọng nếu bạn làm SEO.
wp rewrite structure '/%category%/%postname%.html' --hard wp rewrite flush --hard
Xóa các plugin mặc định của WordPress là Akismet và Hello Dolly.
wp plugin delete akismet wp plugin delete hello
Cài đặt một số plugin từ WordPress Plugins. Chú ý tên plugin chính là slug của trang plugin. Ví dụ Contact Form 7 có URL là https://wordpress.org/plugins/contact-form-7/ thì tham số truyền vào lệnh sẽ là contact-form-7.
Để kích hoạt plugin sau khi cài, ta thêm tham số --activate.
wp plugin install wordpress-seo --activate wp plugin install contact-form-7 --activate wp plugin install wp-mail-smtp --activate wp plugin install kk-star-ratings ...
Xong! Vậy là việc cài đặt WordPress bằng dòng lệnh đã hoàn thành. Script hoàn chỉnh của việc cài đặt này như sau.
/usr/local/bin/wp-install.sh
#!/bin/bash
WP_SITE_NAME="WordPress"
WP_ADMIN_USERNAME="icreativ"
WP_ADMIN_EMAIL="webmaster@hainh.me"
WP_ADMIN_PASSWORD="$(LC_CTYPE=C tr -dc A-Za-z0-9 < /dev/urandom | head -c 16)"
WP_WEB_ROOT="$(pwd)"
DB_ROOT_USER="root"
DB_ROOT_PASSWORD="{ugly-password}"
usage()
{
echo "Usage: $(basename $0) [OPTIONS] DOMAIN"
echo
echo "Available OPTIONS:"
echo " -t TITLE : Website title (default: ${WP_SITE_NAME})."
echo " -u USERNAME : Admin user name (default: ${WP_ADMIN_USERNAME})"
echo " -m EMAIL : Admin email (default: ${WP_ADMIN_EMAIL})"
echo " -w WEBROOT : Web Root (default: current directory)"
echo " -l URL : Site URL (default: https://{DOMAIN})"
echo
}
# Whether or not ${1} is a valid domain
is_domain()
{
[[ ${1} =~ ^([a-zA-Z0-9_-]+\.)*[a-zA-Z0-9][a-zA-Z0-9_-]+\.[a-zA-Z]{2,11}?$ ]]
}
# Terminate the script if any error occurs
exit_on_error()
{
eval "${@@Q}"
local exit_code=$?
[ ${exit_code} -ne 0 ] && exit ${exit_code}
}
while getopts ":t:u:m:w:l:" o; do
case "${o}" in
t )
WP_SITE_NAME="${OPTARG}"
;;
u )
WP_ADMIN_USERNAME="${OPTARG}"
;;
m )
WP_ADMIN_EMAIL="${OPTARG}"
;;
w )
WP_WEB_ROOT="${OPTARG}"
;;
l )
WP_SITE_URL="${OPTARG}"
;;
h )
usage; exit 0
;;
\? )
echo "Invalid Option: -${OPTARG}." 1>&2
usage; exit 1
;;
: )
echo "Invalid Option: -${OPTARG} requires an argument." 1>&2
usage; exit 1
;;
esac
done
shift $((OPTIND-1))
WP_DOMAIN="$1"
if ! is_domain "${WP_DOMAIN}"; then
echo "Invalid domain '${WP_DOMAIN}'" 1>&2
exit 1
fi
if [ ! -d "${WP_WEB_ROOT}" ]; then
echo "The directory '${WP_WEB_ROOT}' not found!" 1>&2
exit 1
fi
if [ ! -w "${WP_WEB_ROOT}" ]; then
echo "The directory '${WP_WEB_ROOT}' is not writable!" 1>&2
exit 1
fi
[ -z "${WP_SITE_URL}" ] && WP_SITE_URL="https://${WP_DOMAIN}"
DB_HOST="localhost"
DB_NAME="$(echo ${WP_DOMAIN} | sed 's/\./_/g')_db"
DB_USER="$(echo ${WP_DOMAIN} | sed 's/\./_/g')"
DB_PASSWORD="$(LC_CTYPE=C tr -dc A-Za-z0-9_\!\@\#\$\%\^\&\*\(\)-+= < /dev/urandom | head -c 16)"
DB_PREFIX="$(IFS=.;echo ${WP_DOMAIN}|sed -e 's/$/ /' -e 's/\([^ ]\)[^ ]* /\1/g' -e 's/^ *//')_"
echo "========================================="
echo "Database:"
echo " Host : ${DB_HOST}"
echo " Name : ${DB_NAME}"
echo " User : ${DB_USER}"
echo " Password : ${DB_PASSWORD}"
echo " Table Prefix : ${DB_PREFIX}"
echo "========================================="
echo "WordPress:"
echo " Web root : ${WP_WEB_ROOT}"
echo " Domain : ${WP_DOMAIN}"
echo " Site URL : ${WP_SITE_URL}"
echo " Site name : ${WP_SITE_NAME}"
echo " User name : ${WP_ADMIN_USERNAME}"
echo " Password : ${WP_ADMIN_PASSWORD}"
echo " Email : ${WP_ADMIN_EMAIL}"
echo "========================================="
echo
read -n1 -rsp "Press 'c' to continue..." key
echo
if [ "${key}" != 'c' ]; then
echo "Opertation was cancelled!"
exit 0
fi
cd "${WP_WEB_ROOT}"
exit_on_error mysql -u${DB_ROOT_USER} -p${DB_ROOT_PASSWORD} -e \
"DROP USER IF EXISTS '${DB_USER}'@'${DB_HOST}';
DROP DATABASE IF EXISTS ${DB_NAME};
CREATE USER '${DB_USER}'@'${DB_HOST}' IDENTIFIED BY '${DB_PASSWORD}';
GRANT ALL PRIVILEGES ON \`${DB_NAME}\`.* TO '${DB_USER}'@'${DB_HOST}' WITH GRANT OPTION;"
# Download WordPress source code
exit_on_error wp core download
# Create the wp-config.php
exit_on_error wp config create \
--dbname="${DB_NAME}" \
--dbuser="${DB_USER}" \
--dbpass="${DB_PASSWORD}" \
--dbprefix="${DB_PREFIX}" \
--extra-php << PHP
define( 'WP_ALLOW_MULTISITE', true );
define( 'WP_DEBUG', true );
define( 'DISALLOW_FILE_EDIT', true );
// ...more settings go here
PHP
# Create the database
exit_on_error wp db create
# Install WordPress data
exit_on_error wp core install \
--url="${WP_SITE_URL}" \
--title="${WP_SITE_NAME}" \
--admin_user="${WP_ADMIN_USERNAME}" \
--admin_password="${WP_ADMIN_PASSWORD}" \
--admin_email="${WP_ADMIN_EMAIL}" \
--skip-email
# Discourage search engines
exit_on_error wp option update blog_public 0
# Set pretty urls
exit_on_error wp rewrite structure '/%category%/%postname%.html' --hard
exit_on_error wp rewrite flush --hard
# Delete akismet and hello dolly
exit_on_error wp plugin delete akismet
exit_on_error wp plugin delete hello
# Install essential plugins
exit_on_error wp plugin install wordpress-seo --activate
exit_on_error wp plugin install contact-form-7 --activate
exit_on_error wp plugin install wp-mail-smtp --activate
exit_on_error wp plugin install zero-spam --activate
exit_on_error wp plugin install enable-media-replace --activate
exit_on_error wp plugin install kk-star-ratings
echo
echo "==================================================="
echo "Login information"
echo " URL ...........: ${WP_SITE_URL}/wp-admin"
echo " Username ......: ${WP_ADMIN_USERNAME}"
echo " Password ......: ${WP_ADMIN_PASSWORD}"
echo "==================================================="
Sử dụng lệnh này như sau (Lưu ý, không chạy bằng tài khoản root, lệnh wp-cli cũng sẽ đưa ra cảnh báo về điều này)
wp-install.sh -t "My Website" \
-u johndoe \
-m john.doe@example.com \
-w /home/john/public_html \
-l http://example.com
Lệnh trên sẽ cài đặt WordPress vào thư mục /home/john/public_html với tài khoản admin là johndoe. Mật khẩu sẽ được hiển thị trong lúc cài đặt.








