Nếu bạn đang quản lý một hoặc nhiều website WordPress trên VPS, có lẽ bạn đã từng trải qua quy trình cập nhật khá quen thuộc: chỉnh sửa code trên máy local, nén source code, upload lên server qua FTP hoặc SFTP, sau đó kiểm tra lại xem website có hoạt động bình thường hay không.
Quy trình này không quá phức tạp khi chỉ có một website. Nhưng khi số lượng website tăng lên, việc cập nhật thủ công bắt đầu trở thành một công việc tốn thời gian, dễ nhầm lẫn và khó kiểm soát.
Đó là lý do Git Deployment trở thành một giải pháp đáng cân nhắc.
Thay vì upload từng file lên VPS, bạn có thể sử dụng Git để quản lý source code và tự động triển khai những thay đổi mới nhất lên server mỗi khi có commit hoặc push mới.
Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng Git để tự động hóa quy trình cập nhật website trên VPS Linux, đặc biệt phù hợp với những website WordPress.
1. Tại sao nên sử dụng Git để deploy website?
FTP và SFTP vẫn là những phương thức truyền file phổ biến. Tuy nhiên, chúng không được thiết kế để quản lý phiên bản source code hay tự động hóa quy trình triển khai.
Khi sử dụng Git, bạn có thể giải quyết nhiều vấn đề cùng lúc:
- Quản lý phiên bản: Theo dõi lịch sử thay đổi của source code, biết file nào đã được chỉnh sửa và khi nào.
- Đồng bộ code: Chỉ cần push code lên repository, VPS có thể lấy phiên bản mới nhất mà không cần upload thủ công từng file.
- Giảm sai sót: Hạn chế tình trạng bỏ sót file hoặc ghi đè nhầm source code.
- Tự động hóa: Kết hợp Git hooks hoặc CI/CD để triển khai website sau mỗi lần cập nhật.
- Dễ dàng rollback: Có thể quay lại một phiên bản code trước đó khi phát sinh lỗi.
Đặc biệt, nếu bạn đang quản lý nhiều website WordPress trên cùng một VPS hoặc nhiều VPS khác nhau, Git Deployment giúp chuẩn hóa quy trình triển khai và tiết kiệm đáng kể thời gian.
2. Git Deployment hoạt động như thế nào?
Về cơ bản, quy trình triển khai website bằng Git khá đơn giản:
- Developer chỉnh sửa code trên máy local.
- Commit những thay đổi vào Git repository.
- Push code lên GitHub, GitLab hoặc một Git server riêng.
- VPS nhận thông báo có phiên bản mới.
- Server tự động lấy code và cập nhật vào thư mục website.
Có nhiều cách triển khai quy trình này. Chẳng hạn, bạn có thể sử dụng GitHub Actions, GitLab CI/CD, webhook hoặc một Git hook trực tiếp trên VPS.
Trong ví dụ dưới đây, chúng ta sẽ sử dụng một repository Git và SSH để triển khai code lên server.
3. Chuẩn bị môi trường trên VPS
Giả sử bạn đang sử dụng Ubuntu hoặc Debian và website WordPress được đặt tại:
/var/www/example.comTrước tiên, hãy kiểm tra Git đã được cài đặt chưa:
git --versionNếu chưa có, bạn có thể cài đặt bằng:
sudo apt update
sudo apt install git -yTiếp theo, kiểm tra quyền truy cập vào thư mục website. Bạn nên sử dụng một Linux user riêng để thực hiện quá trình deploy thay vì chạy mọi thao tác bằng root.
Ví dụ:
sudo adduser deployCấp quyền phù hợp cho thư mục website:
sudo chown -R deploy:www-data /var/www/example.comLưu ý: Không nên áp dụng lệnh thay đổi ownership một cách máy móc trên website đang hoạt động. Hãy kiểm tra cấu hình PHP-FPM, web server và quyền ghi của WordPress trước khi thay đổi.
4. Kết nối VPS với Git repository
Để VPS có thể lấy code từ GitHub hoặc GitLab mà không cần nhập mật khẩu mỗi lần, chúng ta có thể sử dụng SSH key.
Chuyển sang user deploy:
sudo -iu deployTạo SSH key:
ssh-keygen -t ed25519 -C "[email protected]"Sau khi tạo xong, bạn sẽ có hai file:
~/.ssh/id_ed25519: Private key.~/.ssh/id_ed25519.pub: Public key.
Lấy public key:
cat ~/.ssh/id_ed25519.pubThêm public key vào SSH Keys hoặc Deploy Keys trên GitHub/GitLab.
Sau đó kiểm tra kết nối:
ssh -T [email protected]Nếu kết nối thành công, VPS đã có thể truy cập repository.
Lưu ý bảo mật: Không chia sẻ private key và không đưa private key vào source code. Nếu có thể, hãy sử dụng Deploy Key chỉ có quyền đọc repository.
5. Clone source code lên VPS
Bây giờ chúng ta có thể clone repository vào thư mục website.
Ví dụ:
git clone [email protected]:username/my-wordpress-site.git /var/www/example.comNếu thư mục website đã tồn tại và chứa dữ liệu WordPress, đừng clone đè trực tiếp. Hãy kiểm tra cấu trúc thư mục và chọn phương án triển khai phù hợp.
Sau khi clone, kiểm tra trạng thái repository:
cd /var/www/example.com
git statusTừ đây, source code trên VPS đã được quản lý bởi Git.
6. Tự động cập nhật website bằng Git
Ở mức cơ bản, mỗi lần có code mới, bạn chỉ cần chạy:
cd /var/www/example.com
git pull origin mainTuy nhiên, mục tiêu của chúng ta là không phải đăng nhập SSH vào VPS và chạy lệnh này mỗi lần.
Một cách đơn giản là sử dụng GitHub Actions kết hợp SSH.
Tạo file workflow trong repository:
.github/workflows/deploy.yml
name: Deploy WordPress
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy to VPS
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.VPS_HOST }}
username: ${{ secrets.VPS_USER }}
key: ${{ secrets.VPS_SSH_KEY }}
script: |
cd /var/www/example.com
git pull origin mainTiếp theo, vào Settings → Secrets and variables → Actions trên GitHub và thêm các thông tin:
VPS_HOST: IP hoặc hostname của VPS.VPS_USER: Linux user dùng để deploy.VPS_SSH_KEY: Private SSH key được cấp riêng cho GitHub Actions.
Kể từ lúc này, mỗi khi bạn push code lên branch main, GitHub Actions sẽ kết nối đến VPS và thực hiện lệnh cập nhật.
Bạn không cần phải upload file thủ công nữa.
7. Một số lưu ý khi triển khai WordPress bằng Git
Không phải toàn bộ thư mục WordPress đều nên được đưa vào Git repository.
Đối với một website WordPress thông thường, bạn nên cân nhắc:
Những thành phần nên quản lý bằng Git:
- Custom theme.
- Custom plugins.
- Các plugin được phát triển riêng.
- Source code và cấu hình triển khai không chứa thông tin bí mật.
Những thành phần không nên đưa vào repository:
wp-content/uploads/.- Cache và temporary files.
- Database dump chứa dữ liệu thực tế.
- File log.
- File cấu hình chứa mật khẩu, API keys hoặc thông tin nhạy cảm.
Bạn có thể sử dụng .gitignore để loại trừ những file và thư mục không cần thiết.
Ví dụ:
wp-content/uploads/
wp-content/cache/
wp-content/upgrade/
*.log
.env
wp-config.phpTùy theo cấu trúc dự án, bạn có thể điều chỉnh .gitignore cho phù hợp. Nếu sử dụng Composer hoặc một cấu trúc WordPress riêng, hãy đảm bảo các dependency cần thiết vẫn được triển khai đầy đủ.
Một vấn đề khác cũng cần quan tâm là database. Git chỉ quản lý source code, không tự động đồng bộ dữ liệu database giữa local và production.
Ngoài ra, git pull trực tiếp vào thư mục đang chạy website có thể khiến code được cập nhật trong lúc người dùng đang truy cập. Với những website quan trọng, bạn nên cân nhắc chiến lược release directory, kiểm tra trạng thái deploy và rollback thay vì chỉ chạy một lệnh pull đơn giản.
8. Có thể mở rộng Git Deployment như thế nào?
Sau khi đã triển khai thành công quy trình cơ bản, bạn có thể tiếp tục mở rộng hệ thống.
Một số hướng phát triển đáng cân nhắc:
- Deploy nhiều website: Sử dụng một workflow để triển khai nhiều website trên cùng VPS.
- Deploy nhiều VPS: Phân phối code đến nhiều server từ một repository.
- Tự động backup: Backup source code hoặc database trước khi deploy.
- Kiểm tra trước khi deploy: Chạy PHP lint, PHPUnit hoặc các bài kiểm tra cần thiết.
- Rollback: Quay lại release trước đó khi quá trình triển khai gặp lỗi.
- Thông báo trạng thái: Gửi thông báo qua Slack, Telegram hoặc email sau mỗi lần deploy.
Với những hệ thống có nhiều website và nhiều môi trường khác nhau, bạn có thể xây dựng một công cụ deployment riêng để quản lý tập trung thay vì phải duy trì nhiều workflow rời rạc.
Kết luận
Git không chỉ là công cụ để quản lý source code. Khi được kết hợp với SSH và CI/CD, nó còn giúp tự động hóa quy trình triển khai website, giảm thao tác thủ công và giúp việc quản lý nhiều website trên VPS trở nên nhất quán hơn.
Bạn không nhất thiết phải bắt đầu với một hệ thống CI/CD phức tạp. Chỉ cần một repository, một VPS và một workflow GitHub Actions đơn giản là đã có thể cải thiện đáng kể quy trình làm việc.
Điều quan trọng là xây dựng một quy trình triển khai phù hợp với kiến trúc website và hạ tầng đang sử dụng.
Bạn đang cập nhật website trên VPS bằng FTP, SFTP hay đã sử dụng Git Deployment? Hãy chia sẻ cách bạn đang triển khai trong phần bình luận nhé.



