WordMove làm việc tốt nhất trên Mac OS hoặc Ubuntu, CentOS. Nếu bạn dùng Windows thì có thể nó làm việc không chính xác hoặc bị lỗi.
Thân chào các độc giả, vài tháng nay do mình về Việt Nam có việc nên không thể viết bài thường xuyên được do chưa có thời gian, định bụng là sẽ viết lại sau khi về nước lại nhưng nghỉ viết lâu quá cũng sốt ruột thay. Vì vậy, hôm nay tranh thủ chút thời gian rảnh rỗi viết về một công cụ mà mình dùng rất thường xuyên khi deploy WordPress ở nhiều môi trường khác nhau (môi trường ở đây nghĩa là localhost, host, testing server,…), đó là WordMove.
Thường thì công cụ WordMove này sẽ phát huy tác dụng tốt nhất nếu bạn sử dụng kèm với Vagrant và VVV nên nếu bạn đã từng tìm hiểu về nó rồi thì hãy sử dụng chung. Trong bài viết này mình sẽ hướng dẫn theo hướng sử dụng với công cụ tạo localhost Ampps.
Tại sao phải dùng nhiều môi trường khác nhau?
Vấn đề này có lẽ mình sẽ nói chi tiết hơn ở một bài viết khác nhưng ở đây mình có thể nói sơ qua. Ví dụ khi lập trình một theme cho WordPress cho một dự án nào đó, chúng ta sẽ làm ở localhost, môi trường này gọi là Development. Song đó, chúng ta cần một host để có thử nghiệm những tính năng chúng ta làm trên Development và host này chúng ta có thể xem trong nội bộ hoặc chỉ cho khách hàng xem, môi trường này thường gọi là Staging, và cuối cùng là một cái host chính để chạy website mà sau khi test đầy đủ chúng ta sẽ đưa lên đó, môi trường chính này được gọi là Production. Dĩ nhiên bạn có thể tạo ra bao nhiêu môi trường khác là tùy nhu cầu của bạn.
Mục đích của việc setup các môi trường này là để chúng ta linh hoạt trong lúc làm việc và chia sẻ với những người khác, thích hợp làm việc nhóm.
WordMove có công dụng gì?
Khi làm việc trong nhiều môi trường khác nhau, mỗi lần bạn sửa xong phần nào và muốn upload lên môi trường khác bạn phải sử dụng giao thức FTP hoặc cái gì đó để upload từng tập tin đã thay đổi lên. Đối với database thì còn cực hơn nữa, bạn phải export ra bằng phpMyAdmin rồi import nó vào môi trường cần đưa lên. Các thao tác như vậy chiếm thời gian không hề ít nên hiệu suất làm việc không cao.
WordMove được sinh ra để giúp chúng ta đồng bộ những thay đổi trong mã nguồn (kể cả database) ở nhiều môi trường khác nhau. Mình sẽ lấy một ví dụ sử dụng WordMove đơn giản để bạn thấy được sự tiện dụng của nó.
Ví dụ mình có một website đang chạy trên môi trường Production, mình sẽ gõ lệnh sau để lấy toàn bộ nội dung website WordPress đó về localhost.
wordmove pull -e production --all
Hoặc mình chỉ muốn lấy theme thì dùng lệnh sau.
wordmove pull -e production --themes
Sửa xong ở localhost, mình muốn đưa toàn bộ nội dung ở localhost lên website thử nghiệm thì mình dùng lệnh sau:
wordmove push -e staging --all
Hoặc lấy nội dung từ staging về localhost
wordmove pull -e staging --plugins
Lưu ý là những lần push hay pull sau, nó chỉ lấy nội dung đã được chỉnh sửa so với lần trước đó nên rất tiết kiệm thời gian.
Rất tiện lợi phải không nào, chúng ta không cần sử dụng đến FTP nữa khi dùng WordMove.
Hướng dẫn cài đặt WordMove
Cài đặt WordMove trên Linux
Trước khi cài đặt RubyGem từ source thì bạn hãy update các software trong hệ điều hành và cài một số software cần thiết.
sudo apt-get update sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev python-software-properties libffi-dev
Để cài đặt được WordMove thì trước hết máy cần cài phải được cài đặt Ruby phiên bản mới nhất.
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz tar -xvf ruby-2.3.1.tar.gz cd ruby-2.3.1 ./configure sudo make install
Sau khi cài xong Ruby thì cập nhật gem mới nhất.
sudo gem update --system
Cuối cùng là cài đặt WordMove
sudo gem install wordmove
Cài đặt rsync và lftp
rsync được bắt buộc yêu cầu phải được cài đặt trên máy của bạn nếu như bạn muốn sử dụng giao thức SSH để đồng bộ hóa dữ liệu trên các môi trường khác nhau. Còn lftp là ứng dụng yêu cầu nếu bạn cần sử dụng giao thức FTP để đồng bộ. Tốt nhất bạn nên cài cả 2 ứng dụng này vào máy luôn, ví dụ cài đặt rsync và lftp trên Ubuntu.
sudo apt-get install lftp rsync -y
Cài đặt WordMove trên Mac OS
Để cài đặt WordMove trên Mac OS. Trước tiên bạn cần cài đặt homebrew tại theo hướng dẫn tại http://brew.sh/.
Sau đó sử dụng lệnh brew để cập nhật Ruby mới nhất.
brew install ruby
Cuối cùng là cài WordMove
sudo gem install wordmove
Đối với Mac bạn cần cài thêm SSHPass.
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
Sau khi cài đặt xong, bạn thử gõ lệnh wordmove, nếu nó ra kết quả giống như bên dưới thì đã cài đặt thành công.
Đối với người dùng Ubuntu không sử dụng Vagrant
Nếu bạn không sử dụng Vagrant làm localhost và đang sử dụng Ubuntu thì phải làm một bước nữa đó là thêm thư mục chứa các lệnh MySQL của phần mềm localhost đang sử dụng vào .bashrc để nó có thể import và export database khi sử dụng.
Trước tiên bạn cần xác định thư mục bin của MySQL trong phần mềm localhost đang sử dụng. Ví dụ nếu bạn dùng Ampps, thì thư mục bin của MySQL sẽ nằm ở /usr/local/ampps/mysql/bin
, bạn thử chạy dòng sau xem nó có ra thông tin lệnh mysqldump không.
/usr/local/ampps/mysql/bin/mysqldump
Kết quả trả về như thế này là đúng đường dẫn:
Usage: mysqldump database OR mysqldump --databases DB1 OR mysqldump --all-databases For more options, use mysqldump --help
Sau đó gõ lệnh sau:
echo 'PATH="/usr/local/ampps/mysql/bin:$PATH"' >> ~/.bashrc
Nhớ sửa lại đường dẫn /usr/local/ampps/mysql/bin
thành thư mục chứa mysqldump phù hợp với localhost của bạn.
Bây giờ bạn hãy tắt Terminal và mở lại rồi gõ mysqldump xem nó có ra thông tin mysqldump như ở trên không, nếu hiện ra thì thành công.
Kế tiếp là hãy chmod thư mục localhost thành 777 để nó có quyền ghi (trường hợp bạn không sử dụng tài khoản root).
sudo chmod -R 777 /usr/local/ampps
Vậy là xong rồi, chúng ta tiến hành cấu hình Wordmove thôi.
Cấu hình WordMove
Để cấu hình Wordmove, bạn truy cập vào thư mục gốc của website trên localhost và dùng lệnh wordmove init
để tạo tập tin Movefile.yml
, tập tin này sẽ chứa đựng các cấu hình của các môi trường để có thể đồng bộ với nhau.
cd /usr/local/ampps/www/testwm wordmove init
Sau khi dùng lệnh wordmove init, bạn mở tập tin Movefile.yml
ra sẽ thấy nội dung sau (dòng nào có dấu #
là chưa được kích hoạt, muốn dùng thì xóa dấu đó đi):
local:
vhost: "http://vhost.local"
wordpress_path: "/usr/local/ampps/www" # use an absolute path here
database:
name: "database_name"
user: "user"
password: "password"
host: "127.0.0.1"
production:
vhost: "http://example.com"
wordpress_path: "/var/www/your_site" # use an absolute path here
database:
name: "database_name"
user: "user"
password: "password"
host: "host"
# port: "3308" # Use just in case you have exotic server config
# mysqldump_options: "–max_allowed_packet=1G" # Only available if using SSH
exclude:
– ".git/"
– ".gitignore"
– "node_modules/"
– "bin/"
– "tmp/*"
– "Gemfile*"
– "Movefile"
– "wp-config.php"
– "wp-content/*.sql"
# paths: # you can customize wordpress internal paths
# wp_content: "wp-content"
# uploads: "wp-content/uploads"
# plugins: "wp-content/plugins"
# mu_plugins: "wp-content/mu-plugins"
# themes: "wp-content/themes"
# languages: "wp-content/languages"
# ssh:
# host: "host"
# user: "user"
# password: "password" # password is optional, will use public keys if available.
# port: 22 # Port is optional
# rsync_options: "–verbose" # Additional rsync options, optional
# gateway: # Gateway is optional
# host: "host"
# user: "user"
# password: "password" # password is optional, will use public keys if available.
# ftp:
# user: "user"
# password: "password"
# host: "host"
# passive: true
# scheme: "ftps" # default "ftp"
# staging: # multiple environments can be specified
#
Trước tiên bạn lưu ý, ở tập tin trên mình đã khai báo ra hai môi trường tên là local (tượng trưng cho localhost) và production (tượng trưng cho môi trường đang chạy website chính thức), bạn có thể tạo ra bao nhiêu môi trường cũng được tùy thích.
Ở mỗi môi trường, chúng ta có các thiết lập sau:
Thiết lập đường dẫn và thư mục
vhost: "http://vhost.local" wordpress_path: "/home/john/sites/your_site" # use an absolute path here
Lưu ý đường dẫn thư mục phải là đường dẫn tuyệt đối trên localhost, nếu thiết lập FTP cho môi trường trên host thì xem thêm ở dưới.
Thiết lập thông tin database
database: name: "database_name" user: "user" password: "password" host: "127.0.0.1"
Lưu ý, trường hợp bạn dùng Vagrant và thiết lập cho môi trường trên host thì phần host
là địa chỉ IP của máy chủ nha.
Thiết lập bỏ qua tập tin và thư mục
Khi tiến hành đồng bộ dữ liệu ở nhiều môi trường, bạn có thể sẽ cần bỏ qua một số tập tin mà không cho phép nó đồng bộ. Ví dụ như tập tin wp-config.php chúng ta sẽ không nên đồng bộ vì nó chứa thông tin database riêng của mỗi môi trường. Để khai báo các thành phần không muốn đồng bộ bạn sẽ khai báo bằng từ khóa exclude như phía dưới.
exclude: - ".git/" - ".gitignore" - ".sass-cache/" - "bin/" - "tmp/*" - "Gemfile*" - "Movefile" - "wp-config.php" - "wp-content/*.sql"
Thiết lập thông tin SSH
Nếu server trên môi trường của bạn có hỗ trợ giao thức SSH để truy cập vào thì hãy khai báo phần này trong môi trường đó.
ssh: host: "host" user: "user" password: "123456" port: "22"
Thiết lập thông tin FTP
Nếu bạn không có SSH thì có thể sử dụng FTP để truy cập vào máy chủ.
ftp: host: "ftp.domain.com" user: "user" password: "123456" port: "21"
Lưu ý khi sử dụng FTP, phần wordpress_path
của môi trường đó bạn sẽ phải nhập đường dẫn tương đối chứ không phải đường dẫn tuyệt đối trên máy chủ. Ví dụ khi đăng nhập vào FTP, bạn thấy thư mục public_html thì sẽ khai báo wordpress_path như sau:
wordpress_path: "/public_html" # use an absolute path here
Trường hợp website bạn không chứa dữ liệu ở thư mục gốc public_html thì có thể thêm đường dẫn vào cho phù hợp. Nói chung là chỉ ghi đường dẫn thư mục bắt đầu từ thư mục hiện tại của tài khoản FTP.
Lưu ý khi thiết lập
Khi thiết lập mỗi môi trường trong Movefile.yml thì các thành phần bên trong môi trường đó phải được thụt vào, giống như đoạn thiết lập mẫu ở trên. Đó là quy chuẩn bắt buộc.
Cấu hình đường dẫn trong wp-config.php
Khi tiến hành đồng bộ database ở nhiều môi trường, thì thiết lập site_url và site_address trong database sẽ bị đổi nên dẫn tới việc load trang không đúng. Vì vậy bạn cần phải thiết lập đường dẫn của website hiện tại trong wp-config.php ở tất cả môi trường bằng cách thêm đoạn sau vào:
define(‘WP_HOME’,’http://example.com’);
define(‘WP_SITEURL’,’http://example.com’);
Nhớ là thiết lập ở môi trường nào thì hãy sửa URL cho đúng với môi trường đó.
Cách sử dụng
Sau khi đã thiết lập xong rồi, chúng ta sẽ tiến hành sử dụng nó bằng cách truy cập vào thư mục đang chứa tập tin Movefile.yml và dùng lệnh WordMove.
Trong tập hợp lệnh này, chúng ta có một lệnh ví dụ như sau:
wordmove pull -e production --all
Lệnh trên nghĩa là chúng ta sẽ kéo (pull
) toàn bộ dữ liệu WordPress (--all
) trên môi trường production (-e production
) về localhost của bạn. Nếu bạn có đặt nhiều môi trường khác nhau thì sẽ nhập tên môi trường tương ứng vào tham số -e
.
Trường hợp bạn muốn chuyển dữ liệu từ localhost lên trên môi trường production thì sẽ dùng tham số push như sau:
wordmove push -e production --all
Ngoài tham số --all
để đồng bộ tất cả thì chúng ta có một số tham số khác như:
--db
: Chỉ đồng bộ database--themes
: Chỉ đồng bộ themes--plugins
: Chỉ đồng bộ plugins--uploads
: Chỉ đồng bộ thư mục wp-content/uploads.
Nếu bạn cần hướng dẫn chi tiết thì có thể gõ lệnh wordmove help.
Một số thông tin tham khảo
Ở bài hướng dẫn này mình đã viết khá chi tiết và đầy đủ nhưng cũng không thể tránh khỏi các thiếu sót. Nếu bạn muốn tra cứu thêm thông tin về WordMove thì có thể vào các bài viết dưới đây để hiểu thêm về nó:
- Movefile configurations explained
- Usage and flags explained
- Screencast hướng dẫn của tác giả
- Multiple environments explained
Mình sử dụng WordMove cùng với Vagrant và VVV hằng ngày nên thấy nó rất tốt và hiệu quả. Nếu các bạn gặp trở ngại trong khi cài đặt thì có thể comment bên dưới mình sẽ hỗ trợ kỹ hơn.