Bài 19: Git và quy trình deploy cơ bản
Bài này chi tiết hóa Git/deploy theo hướng dễ hiểu, có lệnh thực hành, tình huống production, checklist và bài tập.
- Hiểu Git/deploy dùng để giải quyết vấn đề gì trong production.
- Nắm các lệnh/cấu hình quan trọng.
- Biết quy trình thực hành từng bước trong lab.
- Có checklist kiểm tra trước khi áp dụng production.
Chốt ý nhanh
| Chủ đề | Điểm cần nhớ |
|---|---|
| Git | Không chỉ dành cho dev; SysAdmin cũng cần để kiểm soát thay đổi và rollback. |
| Deploy | Mục tiêu là đưa phiên bản mới lên an toàn, có kiểm tra và có đường lui. |
| Kỷ luật | Production không nên sửa tay lung tung mà không ghi nhận thay đổi. |
1. Bối cảnh thực tế
Git/deploy không phải kiến thức lý thuyết riêng lẻ. Trong vận hành production, nó giúp giảm downtime, giảm rủi ro bảo mật và giúp hệ thống dễ khôi phục hơn khi có sự cố.
2. Các khái niệm cần nắm
- Trạng thái hiện tại: trước khi sửa phải biết hệ thống đang chạy thế nào.
- Thay đổi nhỏ: thay đổi từng bước để dễ rollback.
- Log/metric: dùng để xác nhận thay đổi đúng hay sai.
- Rollback: luôn có đường quay lại khi cấu hình lỗi.
3. Lab thực hành
git status git branch git log --oneline -5 git remote -v git pull origin main # deploy mẫu sudo systemctl status app sudo systemctl restart app curl -fsS http://127.0.0.1:3000/health
Khi thực hành, anh nên ghi lại output trước và sau. Đây là thói quen rất quan trọng của SysAdmin/DevOps.
4. Tình huống thực tế
Anh deploy code mới lên server. Trước khi pull cần biết branch hiện tại, commit đang chạy, working tree có sạch không. Sau deploy phải restart/reload service và health check.
5. Quy trình triển khai an toàn
- Xác định mục tiêu thay đổi.
- Backup file cấu hình hoặc tạo snapshot nếu thay đổi rủi ro.
- Kiểm tra trạng thái hiện tại bằng lệnh phù hợp.
- Thay đổi trên lab/staging trước nếu có.
- Áp dụng production trong khung giờ phù hợp.
- Kiểm tra log, service, port, endpoint sau thay đổi.
- Ghi lại thay đổi và phương án rollback.
6. Lỗi thường gặp
- Làm trực tiếp production mà không backup.
- Sửa nhiều thứ cùng lúc nên không biết lỗi do đâu.
- Không đọc log sau khi reload/restart service.
- Không ghi lại command đã chạy.
7. Checklist
- Đã kiểm tra trạng thái hiện tại.
- Đã backup cấu hình/dữ liệu liên quan.
- Đã test syntax/config nếu có.
- Đã xác nhận service hoạt động sau thay đổi.
- Đã ghi lại thay đổi vào tài liệu vận hành.
8. Bài tập
- Dựng lab nhỏ cho chủ đề này.
- Chạy toàn bộ lệnh kiểm tra.
- Tạo một lỗi nhỏ có kiểm soát và sửa lại.
- Viết checklist 5 bước dùng cho production.
Phần thực hành mở rộng: Git và deploy theo hướng ít rủi ro hơn
Nhiều sự cố production không đến từ lỗi lớn, mà đến từ thay đổi nhỏ không được theo dõi. Git giúp lưu vết, còn quy trình deploy giúp biến thay đổi thành thứ có kiểm soát.
Lab 1: Tạo repo và theo dõi file cấu hình
mkdir deploy-lab && cd deploy-lab
git init
echo 'APP_ENV=staging' > .env.example
echo 'server config v1' > deploy.conf
git add .
git commit -m 'init deploy lab'
Ngay cả file cấu hình, script deploy hay runbook cũng đáng để đưa vào Git.
Lab 2: Mô phỏng thay đổi và xem diff trước khi deploy
echo 'server config v2' > deploy.conf
git diff
git status
git add deploy.conf
git commit -m 'update deploy config'
Thói quen xem git diff trước khi đẩy thay đổi là cực kỳ quan trọng trong vận hành.
Lab 3: Mô phỏng deploy bằng rsync hoặc pull có kiểm soát
mkdir -p ~/deploy-target
rsync -avh ./ ~/deploy-target/
ls -la ~/deploy-target
Nếu dùng pull trên server, phải hiểu rõ rủi ro: local change, file chưa commit, và trạng thái working tree không sạch.
Lab 4: Chuẩn bị rollback tối thiểu
git log --oneline --decorate -n 5
git checkout HEAD~1 -- deploy.conf
cat deploy.conf
Rollback không nhất thiết luôn là git reset --hard. Với production, nhiều khi chỉ cần xác định đúng file thay đổi và hoàn nguyên cẩn thận.
Lab 5: Viết checklist deploy ngắn
- xác nhận branch/version triển khai
- backup config hoặc snapshot trước thay đổi
- test syntax/config sau deploy
- health check sau deploy
- chuẩn bị rollback nếu fail
Tình huống thực tế
Một file Nginx sửa tay trực tiếp trên production lúc đêm muộn, không commit, không backup, là công thức kinh điển cho sự cố khó truy vết. Ngược lại, chỉ cần có Git và checklist deploy, nhiều lỗi sẽ bị chặn từ rất sớm.
Lỗi phổ biến
- Deploy xong mới xem lại đã thay đổi gì.
- Sửa trực tiếp trên production rồi quên đồng bộ ngược về repo.
- Không có rollback path.
- Nhầm branch, nhầm commit hoặc deploy thiếu file.
Kết bài
Sau bài này, anh nên coi Git là công cụ vận hành chứ không chỉ là đồ nghề của developer. Khi kiểm soát được thay đổi và deploy có trật tự, anh đã bước gần hơn tới một hệ thống production ít bất ngờ hơn. Tiếp theo là cron và scheduled jobs — nơi những tác vụ tự động nhỏ có thể tạo ra hậu quả rất lớn nếu quản lý kém.
