update github workflow
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
# 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
|
||||
@@ -0,0 +1,74 @@
|
||||
name: Deploy to Production (Minified)
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, master ]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Deploy to production server
|
||||
uses: appleboy/ssh-action@v1.0.3
|
||||
with:
|
||||
host: ${{ secrets.PROD_HOST }}
|
||||
username: ${{ secrets.PROD_USERNAME }}
|
||||
key: ${{ secrets.PROD_SSH_KEY }}
|
||||
port: ${{ secrets.PROD_PORT || 22 }}
|
||||
script: |
|
||||
# Navigate to project directory
|
||||
cd ${{ secrets.PROD_PROJECT_PATH || '/var/www/portal' }}
|
||||
|
||||
# Backup current deployment
|
||||
echo "💾 Creating backup..."
|
||||
cp -r . ../portal-backup-$(date +%Y%m%d_%H%M%S) || true
|
||||
|
||||
# Pull latest code
|
||||
echo "🔄 Pulling latest code..."
|
||||
git pull origin ${{ github.ref_name }}
|
||||
|
||||
# Install/Update Composer dependencies for production
|
||||
echo "📦 Installing Composer dependencies..."
|
||||
composer install --no-dev --optimize-autoloader --no-interaction
|
||||
|
||||
# Install/Update NPM dependencies
|
||||
echo "📦 Installing NPM dependencies..."
|
||||
npm ci --only=production
|
||||
|
||||
# Build and minify assets
|
||||
echo "🏗️ Building and minifying assets..."
|
||||
npm run minify-all
|
||||
|
||||
# Run database migrations (if needed)
|
||||
echo "🗃️ Running database migrations..."
|
||||
php artisan migrate --force
|
||||
|
||||
# Laravel optimizations for production
|
||||
echo "⚡ Optimizing Laravel for production..."
|
||||
php artisan config:cache
|
||||
php artisan route:cache
|
||||
php artisan view:cache
|
||||
php artisan optimize
|
||||
|
||||
# Clear all caches
|
||||
echo "🧹 Clearing caches..."
|
||||
php artisan cache:clear
|
||||
php artisan view:clear
|
||||
php artisan config:clear
|
||||
|
||||
# Queue restart (if using queues)
|
||||
echo "🔄 Restarting queues..."
|
||||
php artisan queue:restart || true
|
||||
|
||||
# Set proper permissions
|
||||
echo "🔐 Setting permissions..."
|
||||
chmod -R 755 storage bootstrap/cache public/uploads
|
||||
chown -R www-data:www-data storage bootstrap/cache public/uploads
|
||||
|
||||
# Cleanup old backups (keep last 5)
|
||||
echo "🧹 Cleaning up old backups..."
|
||||
find ../portal-backup-* -maxdepth 0 -type d | sort | head -n -5 | xargs rm -rf || true
|
||||
|
||||
echo "✅ Production deployment completed successfully!"
|
||||
@@ -0,0 +1,56 @@
|
||||
name: Deploy to Server
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ production ]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Deploy to server
|
||||
uses: appleboy/ssh-action@v1.0.3
|
||||
with:
|
||||
host: ${{ secrets.HOST }}
|
||||
username: ${{ secrets.USERNAME }}
|
||||
key: ${{ secrets.SSH_KEY }}
|
||||
port: ${{ secrets.PORT || 22 }}
|
||||
script: |
|
||||
# Navigate to project directory
|
||||
cd ${{ secrets.PROJECT_PATH || '/var/www/portal' }}
|
||||
|
||||
# Pull latest code
|
||||
echo "🔄 Pulling latest code..."
|
||||
git pull origin ${{ github.ref_name }}
|
||||
|
||||
# Install/Update Composer dependencies
|
||||
echo "📦 Installing Composer dependencies..."
|
||||
composer install --no-dev --optimize-autoloader
|
||||
|
||||
# Install/Update NPM dependencies
|
||||
echo "📦 Installing NPM dependencies..."
|
||||
npm ci --only=production
|
||||
|
||||
# Build assets
|
||||
echo "🏗️ Building assets..."
|
||||
npm run production
|
||||
|
||||
# Laravel optimizations
|
||||
echo "⚡ Optimizing Laravel..."
|
||||
php artisan config:cache
|
||||
php artisan route:cache
|
||||
php artisan view:cache
|
||||
php artisan optimize
|
||||
|
||||
# Clear application cache
|
||||
echo "🧹 Clearing application cache..."
|
||||
php artisan cache:clear
|
||||
|
||||
# Set permissions
|
||||
echo "🔐 Setting permissions..."
|
||||
chmod -R 755 storage bootstrap/cache
|
||||
chown -R www-data:www-data storage bootstrap/cache
|
||||
|
||||
echo "✅ Deployment completed successfully!"
|
||||
Reference in New Issue
Block a user