Cách backup trang web WordPress vào bộ nhớ đối tượng
DigitalOcean Spaces có thể cung cấp giải pháp lưu trữ đối tượng cho dữ liệu trang web WordPress. Dữ liệu này thường đa dạng, bao gồm tài sản phương tiện và file database , làm cho nó trở thành thành phần tốt cho việc lưu trữ đối tượng. Vì các giải pháp như Spaces có thể lưu trữ một lượng lớn dữ liệu phi cấu trúc nên chúng có thể chứa các nội dung tĩnh trên trang web . Lưu trữ riêng các nội dung tĩnh có thể tối ưu hóa hiệu suất trang web bằng cách giải phóng không gian và tài nguyên trên server của bạn. Nếu trang web có nội dung động - tài nguyên có tỷ lệ yêu cầu cao hoặc file database cần sửa đổi thường xuyên - bạn có thể xem xét ghép nối giải pháp lưu trữ khối với DigitalOcean Space để lưu trữ dữ liệu một cách tối ưu. Để tìm hiểu thêm về lưu trữ đối tượng và khối, hãy xemhướng dẫn của ta về Lưu trữ đối tượng và Dịch vụ lưu trữ khối .Trong hướng dẫn này, ta sẽ sử dụng Spaces để backup dữ liệu WordPress. Vì API DigitalOcean Spaces có thể tương thích với API AWS S3, ta sẽ có thể sử dụng các plugin tương thích với S3 để quản lý các bản backup của bạn , cũng như S3cmd , một công cụ khách để làm việc với các repository đối tượng S3 và S3-comptabile. Ta sẽ xem xét một số phương pháp khác nhau để tạo bản backup : sử dụng plugin WordPress, tạo bản backup thủ công bằng S3cmd và tự động backup bằng S3cmd và một tập lệnh được tạo cho mục đích đó.
Yêu cầu
Hướng dẫn này giả định bạn có version WordPress trên server cũng như DigitalOcean . Nếu không, bạn có thể cài đặt như sau:
- Một server Ubuntu 16.04, được cài đặt theo hướng dẫn Cài đặt server ban đầu với Ubuntu 16.04 của ta .
- LAMP , được cài đặt trên server của bạn theo hướng dẫn của ta về Cách cài đặt ngăn xếp Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 16.04 .
- WordPress, được cài đặt trên server của bạn theo hướng dẫn của ta về Cách cài đặt WordPress với LAMP trên Ubuntu 16.04 .
- Khóa API và DigitalOcean , được tạo theo Cách tạo DigitalOcean và khóa API .
Với những yêu cầu này, ta có thể bắt đầu tiến hành backup một trang web WordPress vào Spaces.
Sửa đổi quyền của WordPress
 Trong suốt hướng dẫn này,  ta  sẽ làm việc với folder  wp-content/uploads trong dự án WordPress của  ta , vì vậy điều quan trọng là folder  này phải tồn tại và có quyền chính xác. Bạn có thể tạo nó bằng mkdir , sử dụng cờ -p để tạo folder  nếu nó không tồn tại và tránh gặp lỗi nếu có:
- sudo mkdir -p /var/www/html/wp-content/uploads 
 Đến đây bạn  có thể đặt quyền trên folder . Trước tiên, hãy đặt quyền sở hữu của nó cho  user  của bạn ( ta  sẽ sử dụng sammy ở đây, nhưng hãy đảm bảo sử dụng  user  sudo không phải root của bạn) và quyền sở hữu  group  đối với  group  www-data :
- sudo chown -R sammy:www-data /var/www/html/wp-content/uploads 
Tiếp theo, cài đặt các quyền sẽ cung cấp cho web server quyền ghi vào folder này:
- sudo chmod -R g+w /var/www/html/wp-content/uploads 
 Như vậy,   ta  sẽ có thể sử dụng các plugin để tạo bản  backup  cho các wp-content/uploads folder  wp-content/uploads và tương tác với các wp-content/uploads của  ta  từ giao diện WordPress.
Sử dụng các plugin để tạo bản backup
 Có nhiều plugin tương thích với S3 mà bạn có thể sử dụng để  backup  trang WordPress vào Không gian  của bạn . Một yếu tố cần xem xét khi bạn đánh giá các plugin là bạn có muốn  backup  các file  database   của bạn  hay không, vì một số tài nguyên này không cung cấp khả năng đó. Một yếu tố khác cần lưu ý là liệu plugin có lấy tài nguyên từ các plugin khác hay không. Ví dụ: nếu bạn đang sử dụng trình quản lý tài liệu, bạn  có thể cần  xem xét liệu plugin  backup  của bạn có nắm bắt được các file  và tài nguyên do trình quản lý tài liệu của bạn tạo trong folder  wp-content/uploads .
Cài đặt Plugin với WP-CLI
Có thể làm việc với WP-CLI để quản lý các plugin WordPress của bạn từ dòng lệnh. Ta sẽ cài đặt nó trong phần này và sử dụng nó trong phần tiếp theo để trình bày cách làm việc với các plugin để backup dữ liệu WordPress vào Spaces.
 Để cài đặt WP-CLI,  ta  sẽ làm theo các bước được đề xuất của dự án. Chạy lệnh sau để tải file  binary  xuống folder  tmp của bạn:
- cd /tmp 
- curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar 
Để làm cho file này có thể thực thi và có thể sử dụng được từ dòng lệnh, hãy nhập như sau:
- chmod +x /tmp/wp-cli.phar 
Khi  ta  đã thực thi file ,  ta  có thể đổi tên nó và di chuyển nó đến một vị trí trong PATH của  ta :
- sudo mv /tmp/wp-cli.phar /usr/local/bin/wp 
Nếu ta muốn kiểm tra xem cài đặt của bạn đã thành công chưa, ta có thể chạy như sau:
- wp --info 
Điều này sẽ cung cấp cho ta thông tin chung về version ta đang sử dụng và đường dẫn của nó.
Như vậy, ta có thể sử dụng WP-CLI để cài đặt bất kỳ plugin nào mà ta muốn sử dụng và quản lý các việc khác liên quan đến trang WordPress của ta .
Cài đặt và cấu hình UpdraftPlus Backup
Nếu bạn lo lắng về việc backup các file database cùng với các tài sản phương tiện khác, thì bạn có thể cần sử dụng một plugin cung cấp tùy chọn backup database . UpdraftPlus Backup cung cấp version miễn phí, tương thích với S3 cho phép backup database và phương tiện, cùng với lập lịch backup .
Để cài đặt UpdraftPlus, ta có thể chuyển đến folder plugin WordPress của bạn :
- cd /var/www/html/wp-content/plugins 
Từ đây,  ta  có thể cài đặt updraftplus bằng lệnh wp :
- wp plugin install updraftplus 
Để kích hoạt plugin, ta có thể chạy:
- wp plugin activate updraftplus 
Từ đây, ta có thể chuyển đến tab plugin ở phía bên trái của console quản trị WordPress:
Bằng cách chọn Plugin đã cài đặt , ta sẽ đến một trang liệt kê các plugin đã cài đặt của ta . Ta sẽ thấy UpdraftPlus - Backup / Khôi phục trong danh sách các tùy chọn có sẵn:
Để cấu hình cài đặt cho các bản backup của bạn, hãy chuyển đến tab Cài đặt trong console quản trị của bạn và chọn Backup UpdraftPlus từ danh sách các tùy chọn có sẵn. Sẽ có một màn hình đích giống như sau:
Ta sẽ giới thiệu cách thực hiện backup trang web cơ bản với plugin này. Trong tab Cài đặt ở đầu trang, bạn sẽ tìm thấy menu cho phép bạn lên lịch backup :
Nếu bạn muốn kiểm tra xem plugin có hoạt động hay không, bạn có thể để bộ này thành Thủ công . Ta sẽ giữ nguyên cài đặt này ngay bây giờ để kiểm tra xem plugin có hoạt động chính xác hay không.
Bên dưới menu này, bạn sẽ thấy các tùy chọn lưu trữ từ xa khác nhau. Chọn S3-Tương thích (Chung) :
Khi chọn tùy chọn này, bạn sẽ thấy một menu yêu cầu thông tin DigitalOcean Space của bạn:
 Dựa trên URL của Không gian của bạn,  bạn có thể  xác định tên  group  và điểm cuối của nó. Ví dụ: nếu URL của Không gian của bạn là https:// example-name .nyc3.digitaloceanspaces.com , thì example-name sẽ là  group  của bạn và nyc3.digitaloceanspaces.com sẽ là điểm cuối của bạn. Vị trí S3 sẽ là tên  group  của bạn và điểm cuối S3 sẽ là điểm cuối của bạn.
Dưới đây, bạn sẽ tìm thấy các tùy chọn cho các file để bao gồm và loại trừ trong bản backup của bạn :
Khi bạn đã điền vào các cài đặt này để phản ánh những gì bạn muốn backup , bạn có thể chuyển trở lại tab Trạng thái Hiện tại . Khi bạn chọn Backup ngay từ các node có sẵn ở đầu màn hình, bạn sẽ thấy menu sau:
Tại đây, bạn có thể chọn có muốn backup database của bạn hay không.
Khi bạn đã chọn tùy chọn Backup ngay ở cuối trình đơn này, các file backup của bạn sẽ nằm trong group của bạn. Bạn có thể chuyển đến trang Spaces của bạn trong console DigitalOcean để kiểm tra xem chúng có ở đó không. Khi bạn đã kiểm tra chức năng của plugin, bạn có thể sửa đổi cài đặt lịch backup cho phù hợp với nhu cầu của bạn .
Backup WordPress với S3cmd
Là một công cụ dòng lệnh để quản lý dữ liệu trong các giải pháp lưu trữ đối tượng, S3cmd cung cấp nhiều tùy chọn để backup dữ liệu WordPress của bạn vào Spaces. Nó được dùng trong các lệnh cô lập và trong các tập lệnh tự động hóa quá trình backup .
 Nếu bạn chưa cài đặt s3cmd trên  server   của bạn , bạn có thể cài đặt nó  theo  phần “Cài đặt S3cmd” của hướng dẫn này và  cấu hình  nó với thông tin Spaces của bạn  theo  phần “ Cấu hình  S3cmd” .
  Đến đây bạn  đã cài đặt và  cấu hình  s3cmd với thông tin Spaces  của bạn . Bạn có thể xác minh cấu hình s3cmd  bằng lệnh :
- s3cmd --dump-config 
Bạn sẽ thấy kết quả như sau:
Output [default] access_key = Your_Spaces_Access_Key access_token = add_encoding_exts = add_headers = bucket_location = US ca_certs_file = cache_file = check_ssl_certificate = True check_ssl_hostname = True cloudfront_host = cloudfront.amazonaws.com default_mime_type = binary/octet-stream delay_updates = False delete_after = False delete_after_fetch = False delete_removed = False dry_run = False enable_multipart = True encrypt = False  ... Khi  ta  đã kiểm tra thông tin cấu hình s3cmd của s3cmd  đảm bảo  rằng thông tin đó  trùng với  thông tin đăng nhập Spaces của  ta ,  ta  sẽ sẵn sàng sử dụng s3cmd để  backup  các file  vào Không gian của  ta .  Ta  sẽ thực hiện việc này theo cách thủ công trước tiên, trước khi chuyển sang tạo một tập lệnh sẽ tự động hóa công việc này.
 Tạo bản  backup  thủ công của folder  wp-content/uploads
 Để tạo bản  backup  của folder  wp-content/uploads  ta ,  ta  sẽ sử dụng lệnh có tên s3cmd sync . Điều này sẽ cho phép  ta  chỉ chuyển những file  chưa tồn tại trong Không gian của  ta . Mặc dù điều này có thể không quan trọng đối với việc chuyển một lần, nhưng nó có thể nhanh chóng trở nên quan trọng khi bạn chuyển nhiều dữ liệu hơn vào Không gian  của bạn .  Ta  sẽ sử dụng sammys-bucket cho  group   của bạn  và sammys-backup để chỉ định một folder   backup  trên Không gian của  ta , nhưng bạn nên thay thế chúng bằng tên của  group  và folder   backup  của bạn (nếu có). Để  đảm bảo  các file  của  ta  sẽ đến đích dự kiến,  ta  sẽ sử dụng tùy chọn --dry-run với s3cmd , như sau:
- s3cmd sync --dry-run /var/www/html/wp-content/uploads s3://sammys-bucket/sammys-backups/ 
Nếu  kết quả  của lệnh  cho biết   dữ liệu  sẽ đến đích dự kiến, thì bạn có thể tiếp tục và chạy lệnh mà không có tùy chọn --dry-run :
- s3cmd sync /var/www/html/wp-content/uploads s3://sammys-bucket/sammys-backups/ 
Tạo bản backup thủ công của database MySQL
Bây giờ ta có thể tạo một bản backup thủ công database MySQL của bạn . Điều này sẽ xảy ra trong 4 phần. Đầu tiên, ta có thể tạo một folder trong folder chính để chứa các file database của ta :
- mkdir ~/mysqldmp 
Tiếp theo,  ta  sẽ tạo một file  để chứa thông tin  user  và password  database  của  ta . Điều này sẽ giúp  ta  tránh chuyển thông tin đó đến dòng lệnh trong quá trình tạo file   backup  của  ta . Các tùy chọn dành riêng cho  user  cho MySQL thường được lưu trữ trong ~/.my.cnf , vì vậy  ta  sẽ tạo file  đó trong folder  chính  của bạn . Kiểu:
- nano ~/.my.cnf 
Bên trong file , ta sẽ chỉ định tên user và password cho client MySQL của ta :
 [client] user=mysql_user password=mysql_password  Lưu file  này  bằng lệnh  CTRL+X theo sau là Y
Để hạn chế quyền đọc và ghi cho user của ta , ta có thể nhập như sau:
- chmod 600 .my.cnf 
Bây giờ  ta  sẽ có thể chạy lệnh mysqldump để tạo một bản sao của các file  database   của bạn  mà không cần chuyển thông tin password  vào dòng lệnh. Khi  ta  chạy mysqldump , nó sẽ tìm kiếm file  .my.cnf của  ta  như một phần của quy trình để đọc các tùy chọn mặc định. Để nén  kết quả  từ database  của  ta ,  ta  cũng có thể sử dụng gzip , như sau:
- mysqldump mysqldatabase_name | gzip > ~/mysqldmp/mysql_dump.sql.gz 
Cuối cùng,  ta  có thể sử dụng s3cmd để gửi file  nén đến Không gian của  ta :
- s3cmd sync mysqldmp/mysql_dump.sql.gz s3://sammys-bucket/sammys-backups/ 
Đến đây bạn sẽ thấy file database nén trong Không gian của bạn .
Tự động hóa backup WordPress với Cron
 Tự động hóa các bản  backup  của bạn sẽ  đảm bảo  dữ liệu WordPress của bạn vẫn có thể truy cập và khôi phục được. Mặc dù có thể tạo bản  backup  theo cách thủ công, đây là một quá trình tốn thời gian và có thể được tự động hóa một cách hữu ích với trình lập lịch công việc cron . Để tìm hiểu thêm về cách sử dụng cron để lập lịch tác vụ, hãy xem hướng dẫn của  ta  về Cách lập lịch tác vụ thường xuyên với Cron và Anacron trên VPS .
Để tạo file cho tập lệnh backup của ta , ta có thể sử dụng lệnh sau:
- nano ~/wp-sync.sh 
Trong file trống, trước tiên ta sẽ viết như sau để cho biết tập lệnh này sẽ được chạy bởi shell Bash:
 #!/bin/bash  Tiếp theo,  ta  sẽ khai báo các biến sẽ chỉ định thông tin về những file  và database  nào  ta  sẽ  backup . Các biến DATABASE và UPLOADS_DIR của  ta  sẽ chỉ định thông tin về database  và folder  mà  ta  sẽ  backup .  Ta  sẽ khai báo các biến này dưới dạng mảng, cho phép  ta  chỉ định nhiều hơn một giá trị:
... DATABASE=("mysqldatabase_name") # To add more than one database, separate values with spaces: ("database1" "database2") UPLOADS_DIR=("/var/www/html/wp-content/uploads") # To add more than one directory, separate values with spaces: ("folder1" "folder2")  BACKUP_DIR=/home/sammy/mysqldmp Biến DATABASE chỉ định tên của database  WordPress hoặc các database  mà mysqldump sẽ  backup . UPLOADS_DIR trỏ đến folder  hoặc các folder  mà  ta  đang  backup . BACKUP_DIR cho script biết nơi mysqldump sẽ ghi file   backup .
 Tiếp theo,  ta  sẽ đặt thông tin s3cmd , bao gồm cả thông tin  group  Spaces của  ta . Thông tin này sẽ phản ánh thông tin thùng s3 từ file  cấu hình s3cmd của  ta . Khi  ta  chỉ định biến S3_CMD của S3_CMD ,  ta  sẽ bao gồm một đường dẫn đến binary  s3cmd cho cron .  Ta  cũng sẽ bao gồm một biến DATE , cho phép  ta  tạo dấu thời gian cho các file   backup   của bạn :
...  DATE=$(date +%y%m%d-%H_%M_%S)   S3_CMD="/usr/local/bin/s3cmd" S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/ Ở đây,  ta  đã làm cho biến DATE rất chi tiết, để nắm bắt năm ( %y ), tháng ( %m ), ngày ( %d ), giờ ( %H ), phút ( %M ) và giây ( %S ) của bản  backup  của  ta . Tùy thuộc vào tần suất của lịch trình  backup , bạn có thể sửa đổi điều này theo cách cho phép bạn theo dõi các bản  backup   của bạn  một cách hữu ích. Biến S3_CMD của  ta  sẽ trỏ đến file  thực thi s3cmd sẽ cho phép  ta  chạy các lệnh  của bạn .
 Tiếp theo,  ta  sẽ bao gồm một tập hợp các lệnh sẽ tạo folder  mysqldmp của  ta , trong trường hợp nó chưa tồn tại và xóa  các file   nào khỏi folder  đó trong quá trình cập nhật:
...  mkdir -p $BACKUP_DIR rm -rf "${BACKUP_DIR:?}/*"  Cuối cùng,  ta  sẽ tạo vòng lặp for để chạy s3cmd sync cho các file  database  của  ta .  Ta  sẽ lại sử dụng mysqldump để tạo file  database  nén, nhưng  ta  sẽ thêm vào nó tùy chọn --defaults-extra-file , tùy chọn này cho mysqldump đọc .my.cnf ngoài các file  tùy chọn tiêu chuẩn.  Ta  cũng sẽ lặp lại qua mảng database   của bạn , thực hiện cùng một  group  hành động trên mỗi database :
...  for DB in "${DATABASE[@]}" do mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz" $S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET" done  Các lệnh s3cmd sync mysqldump và s3cmd sync thực hiện công việc tương tự như chúng đã làm trong phần trước. Tuy nhiên, vì  ta  đã thêm dấu thời gian của biến DATE vào  group   của bạn , các file  của  ta  sẽ được tạo trong Không gian của  ta  theo cách cho phép  ta  dễ dàng theo dõi khi chúng được tạo.
 Tiếp theo,  ta  sẽ tạo một vòng lặp cho folder   của bạn .   ,  ta  sẽ lặp lại qua mảng UPLOADS_DIR để thực hiện các hành động giống nhau trên mỗi folder :
...  for DIR in "${UPLOADS_DIR[@]}" do $S3_CMD sync "$DIR" "$S3_BUCKET" done    , lệnh s3cmd sync giống với lệnh  ta  đã sử dụng để  backup  thủ công folder  này. Sự khác biệt là dấu thời gian được gắn vào vật liệu này trong Không gian của  ta .
Tập lệnh đầy đủ sẽ trông như thế này:
#!/bin/bash  DATABASE=("mysqldatabase_name") # To add more than one database, separate values with spaces: ("database1" "database2") UPLOADS_DIR=("/var/www/html/wp-content/uploads") # To add more than one directory, separate values with spaces: ("folder1" "folder2")  BACKUP_DIR=/home/sammy/mysqldmp  DATE=$(date +%y%m%d-%H_%M_%S)  S3_CMD="/usr/local/bin/s3cmd" S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/  mkdir -p $BACKUP_DIR rm -rf "${BACKUP_DIR:?}/*"  for DB in "${DATABASE[@]}" do mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz" $S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET" done  for DIR in "${UPLOADS_DIR[@]}" do $S3_CMD sync "$DIR" "$S3_BUCKET" done  Bây giờ  ta  có thể thực thi tập lệnh wp-sync.sh của wp-sync.sh :
- chmod +x ~/wp-sync.sh 
Để kiểm tra nó, ta có thể chạy:
- sudo ~/wp-sync.sh 
Điều hướng đến Không gian của bạn và  đảm bảo  các file  của bạn được sao chép như dự định. Khi bạn đã kiểm tra điều này, bạn có thể chỉnh sửa file  crontab để chạy tập lệnh ở một khoảng thời gian mong muốn.
 Mở bằng file  crontab  bằng lệnh :
- crontab -e 
Nếu đây là lần đầu tiên bạn chỉnh sửa file này, bạn cần chọn editor :
no crontab for root - using an empty one Select an editor.  To change later, run 'select-editor'.   1. /bin/ed   2. /bin/nano        <---- easiest   3. /usr/bin/vim.basic   4. /usr/bin/vim.tiny Choose 1-4 [2]:  ...  Bạn có thể chọn 2 cho nano hoặc nhập số tương ứng với  editor  mà bạn chọn.
Ở cuối file , ta sẽ thêm một dòng để chỉ định tần suất tập lệnh của ta sẽ chạy. Để kiểm tra chức năng của tập lệnh, ta có thể đặt khoảng thời gian thành hai phút như sau:
...  */2 * * * * /home/sammy/wp-sync.sh Sau hai phút, bạn sẽ thấy một kho file  được đóng dấu thời gian trong Không gian  của bạn .  Đến đây bạn  có thể sửa đổi file  crontab để chỉ định khoảng thời gian bạn muốn sử dụng cho các bản  backup   của bạn .
Kết luận
Ta đã đề cập đến một số cách bạn có thể backup dữ liệu WordPress của bạn vào dịch vụ lưu trữ đối tượng Spaces của DigitalOcean.
 Để tìm hiểu thêm về cách làm việc với s3cmd và Spaces, hãy xem hướng dẫn  cấu hình  s3cmd 2x để quản lý DigitalOcean Spaces và hướng dẫn của  ta  về quản lý DigitalOcean Spaces với s3cmd . Bạn cũng có thể xem hướng dẫn của  ta  về Cách Tự động hóa  Backup  với  DigitalOcean  và Cách  Backup  Kho lưu trữ Git của Bạn vào  DigitalOcean  để biết thêm ví dụ về các tập lệnh tự động hóa và các tùy chọn  backup . Cuối cùng, để biết thêm thông tin về cách tối ưu hóa cách bạn sử dụng Spaces, hãy xem Các phương pháp hay nhất về hiệu suất trên DigitalOcean Spaces .
Các tin liên quan
 

