151 lines
3.9 KiB
Markdown
151 lines
3.9 KiB
Markdown
# GitHub Actions Deployment Workflows
|
|
|
|
Các workflow tự động deploy được tạo cho project Laravel Portal.
|
|
|
|
## Workflows Available
|
|
|
|
### 1. `deploy.yml` - Deployment thông thường
|
|
- **Trigger**: Push vào branches `main`, `master`, `develop` hoặc manual trigger
|
|
- **Mục đích**: Deploy cho staging/development environment
|
|
- **Actions**: Git pull, npm run production, Laravel optimization
|
|
|
|
### 2. `deploy-minified.yml` - Production Deployment với minification
|
|
- **Trigger**: Push vào branches `main`, `master` hoặc manual trigger
|
|
- **Mục đích**: Deploy cho production environment
|
|
- **Actions**: Git pull, npm run minify-all, database migration, backup, cleanup
|
|
|
|
## Setup Requirements
|
|
|
|
### 1. GitHub Secrets Configuration
|
|
|
|
Cần setup các secrets sau trong GitHub repository:
|
|
|
|
#### For `deploy.yml`:
|
|
```
|
|
HOST - IP address hoặc domain của server
|
|
USERNAME - SSH username
|
|
SSH_KEY - SSH private key content
|
|
PORT - SSH port (optional, default: 22)
|
|
PROJECT_PATH - Đường dẫn tới project (optional, default: /var/www/portal)
|
|
```
|
|
|
|
#### For `deploy-minified.yml`:
|
|
```
|
|
PROD_HOST - Production server IP/domain
|
|
PROD_USERNAME - Production SSH username
|
|
PROD_SSH_KEY - Production SSH private key
|
|
PROD_PORT - Production SSH port (optional, default: 22)
|
|
PROD_PROJECT_PATH - Production project path (optional, default: /var/www/portal)
|
|
```
|
|
|
|
### 2. Server Requirements
|
|
|
|
#### Server cần có sẵn:
|
|
- Git
|
|
- PHP >= 8.0
|
|
- Composer
|
|
- Node.js & NPM
|
|
- Web server (nginx/apache) với quyền www-data
|
|
|
|
#### Project directory structure:
|
|
```
|
|
/var/www/portal/ # Main project
|
|
/var/www/portal-backup-* # Backup directories (auto-created)
|
|
```
|
|
|
|
### 3. SSH Key Setup
|
|
|
|
1. **Generate SSH key pair:**
|
|
```bash
|
|
ssh-keygen -t rsa -b 4096 -C "github-actions@yourdomain.com"
|
|
```
|
|
|
|
2. **Add public key to server:**
|
|
```bash
|
|
# Copy public key to server
|
|
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
|
|
```
|
|
|
|
3. **Add private key to GitHub Secrets:**
|
|
- Copy nội dung của private key file
|
|
- Paste vào GitHub Secrets với tên `SSH_KEY` hoặc `PROD_SSH_KEY`
|
|
|
|
## Manual Deployment
|
|
|
|
Có thể trigger deployment manually:
|
|
|
|
1. Vào GitHub repository
|
|
2. Click tab "Actions"
|
|
3. Chọn workflow muốn chạy
|
|
4. Click "Run workflow"
|
|
5. Chọn branch và click "Run workflow"
|
|
|
|
## Workflow Features
|
|
|
|
### Security Features:
|
|
- SSH key authentication
|
|
- Separate production secrets
|
|
- Backup before deployment
|
|
|
|
### Performance Features:
|
|
- Asset minification cho production
|
|
- Laravel optimization commands
|
|
- Cache clearing/rebuilding
|
|
|
|
### Maintenance Features:
|
|
- Automatic backup rotation (keep last 5)
|
|
- Queue restart
|
|
- Permission fixing
|
|
- Database migration
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues:
|
|
|
|
1. **SSH Connection Failed:**
|
|
- Kiểm tra HOST, USERNAME, SSH_KEY secrets
|
|
- Verify SSH key format (complete private key including headers)
|
|
|
|
2. **Permission Denied:**
|
|
- Kiểm tra SSH user có quyền access project directory
|
|
- Verify www-data ownership
|
|
|
|
3. **Build Failed:**
|
|
- Kiểm tra Node.js version trên server
|
|
- Verify npm dependencies
|
|
|
|
4. **Laravel Commands Failed:**
|
|
- Kiểm tra PHP version compatibility
|
|
- Verify .env file exists và correct
|
|
|
|
### Debug Commands:
|
|
Để debug, có thể thêm các commands sau vào workflow:
|
|
|
|
```yaml
|
|
# Add to workflow script section
|
|
echo "Current user: $(whoami)"
|
|
echo "Current directory: $(pwd)"
|
|
echo "PHP version: $(php -v)"
|
|
echo "Node version: $(node -v)"
|
|
echo "NPM version: $(npm -v)"
|
|
```
|
|
|
|
## Environment-specific Customization
|
|
|
|
Có thể customize workflows theo environment:
|
|
|
|
### Development:
|
|
- Sử dụng `npm run dev` thay vì `production`
|
|
- Skip database migrations
|
|
- Enable debug mode
|
|
|
|
### Staging:
|
|
- Sử dụng `npm run production`
|
|
- Include database migrations
|
|
- Moderate optimization
|
|
|
|
### Production:
|
|
- Sử dụng `npm run minify-all`
|
|
- Full optimization
|
|
- Backup và cleanup
|
|
- Queue restart |