158 lines
5.5 KiB
YAML
158 lines
5.5 KiB
YAML
|
|
name: Deploy to Production
|
||
|
|
|
||
|
|
on:
|
||
|
|
release:
|
||
|
|
types: [ published ]
|
||
|
|
workflow_dispatch:
|
||
|
|
inputs:
|
||
|
|
environment:
|
||
|
|
description: 'Environment to deploy to'
|
||
|
|
required: true
|
||
|
|
default: 'staging'
|
||
|
|
type: choice
|
||
|
|
options:
|
||
|
|
- staging
|
||
|
|
- production
|
||
|
|
|
||
|
|
env:
|
||
|
|
REGISTRY: ghcr.io
|
||
|
|
|
||
|
|
jobs:
|
||
|
|
deploy:
|
||
|
|
runs-on: ubuntu-latest
|
||
|
|
environment: ${{ github.event.inputs.environment || 'production' }}
|
||
|
|
|
||
|
|
steps:
|
||
|
|
- name: Checkout repository
|
||
|
|
uses: actions/checkout@v4
|
||
|
|
|
||
|
|
- name: Set environment variables
|
||
|
|
run: |
|
||
|
|
if [ "${{ github.event_name }}" == "release" ]; then
|
||
|
|
echo "DEPLOY_ENV=production" >> $GITHUB_ENV
|
||
|
|
echo "IMAGE_TAG=${{ github.ref_name }}" >> $GITHUB_ENV
|
||
|
|
else
|
||
|
|
echo "DEPLOY_ENV=${{ github.event.inputs.environment }}" >> $GITHUB_ENV
|
||
|
|
echo "IMAGE_TAG=latest" >> $GITHUB_ENV
|
||
|
|
fi
|
||
|
|
|
||
|
|
- name: Create deployment package
|
||
|
|
run: |
|
||
|
|
mkdir -p deployment
|
||
|
|
|
||
|
|
# Copy docker-compose files
|
||
|
|
cp app/docker-compose.yml deployment/docker-compose-app.yml
|
||
|
|
cp node/docker-compose.yml deployment/docker-compose-node.yml
|
||
|
|
|
||
|
|
# Copy environment templates
|
||
|
|
cp app/.env.example deployment/.env.app.example
|
||
|
|
cp node/.env.example deployment/.env.node.example
|
||
|
|
|
||
|
|
# Create deployment script
|
||
|
|
cat > deployment/deploy.sh << 'EOF'
|
||
|
|
#!/bin/bash
|
||
|
|
set -e
|
||
|
|
|
||
|
|
REGISTRY="${{ env.REGISTRY }}"
|
||
|
|
REPO="${{ github.repository }}"
|
||
|
|
TAG="${{ env.IMAGE_TAG }}"
|
||
|
|
|
||
|
|
echo "Deploying FRP Manager to ${{ env.DEPLOY_ENV }}"
|
||
|
|
echo "Using images: $REGISTRY/$REPO/frp-manager-app:$TAG and $REGISTRY/$REPO/home-server-agent:$TAG"
|
||
|
|
|
||
|
|
# Pull latest images
|
||
|
|
docker pull $REGISTRY/$REPO/frp-manager-app:$TAG
|
||
|
|
docker pull $REGISTRY/$REPO/home-server-agent:$TAG
|
||
|
|
|
||
|
|
# Update docker-compose files with new image references
|
||
|
|
sed -i "s|build: \.|image: $REGISTRY/$REPO/frp-manager-app:$TAG|g" docker-compose-app.yml
|
||
|
|
sed -i "s|build: \.|image: $REGISTRY/$REPO/home-server-agent:$TAG|g" docker-compose-node.yml
|
||
|
|
|
||
|
|
echo "Deployment package ready!"
|
||
|
|
echo "1. Configure .env files based on .env.*.example"
|
||
|
|
echo "2. Run: docker-compose -f docker-compose-app.yml up -d"
|
||
|
|
echo "3. Run: docker-compose -f docker-compose-node.yml up -d (on home server)"
|
||
|
|
EOF
|
||
|
|
|
||
|
|
chmod +x deployment/deploy.sh
|
||
|
|
|
||
|
|
- name: Create deployment documentation
|
||
|
|
run: |
|
||
|
|
cat > deployment/README.md << 'EOF'
|
||
|
|
# FRP Manager Deployment Package
|
||
|
|
|
||
|
|
This package contains everything needed to deploy the FRP Manager application.
|
||
|
|
|
||
|
|
## Files
|
||
|
|
|
||
|
|
- `docker-compose-app.yml` - App deployment configuration
|
||
|
|
- `docker-compose-node.yml` - Node deployment configuration
|
||
|
|
- `.env.app.example` - App environment template
|
||
|
|
- `.env.node.example` - Node environment template
|
||
|
|
- `deploy.sh` - Deployment script
|
||
|
|
|
||
|
|
## Quick Start
|
||
|
|
|
||
|
|
### 1. App Server (VPS)
|
||
|
|
```bash
|
||
|
|
# Configure environment
|
||
|
|
cp .env.app.example .env
|
||
|
|
# Edit .env with your configuration
|
||
|
|
|
||
|
|
# Deploy
|
||
|
|
docker-compose -f docker-compose-app.yml up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
### 2. Home Server
|
||
|
|
```bash
|
||
|
|
# Configure environment
|
||
|
|
cp .env.node.example .env
|
||
|
|
# Edit .env with your configuration
|
||
|
|
|
||
|
|
# Deploy
|
||
|
|
docker-compose -f docker-compose-node.yml up -d
|
||
|
|
```
|
||
|
|
|
||
|
|
## Environment Variables
|
||
|
|
|
||
|
|
See the `.env.*.example` files for required configuration.
|
||
|
|
|
||
|
|
**Important**: Set matching tokens for `NODE_TOKEN` (app) and `API_TOKEN` (node).
|
||
|
|
|
||
|
|
## Verification
|
||
|
|
|
||
|
|
1. Check app: `http://your-vps:3000`
|
||
|
|
2. Check node: `http://your-home-server:3001/health`
|
||
|
|
3. Test integration via the "Push to Node" button in the web interface
|
||
|
|
|
||
|
|
## Version
|
||
|
|
|
||
|
|
- App Image: `${{ env.REGISTRY }}/${{ github.repository }}/frp-manager-app:${{ env.IMAGE_TAG }}`
|
||
|
|
- Node Image: `${{ env.REGISTRY }}/${{ github.repository }}/home-server-agent:${{ env.IMAGE_TAG }}`
|
||
|
|
EOF
|
||
|
|
|
||
|
|
- name: Package deployment artifacts
|
||
|
|
run: |
|
||
|
|
tar -czf frp-manager-deployment-${{ env.IMAGE_TAG }}.tar.gz -C deployment .
|
||
|
|
|
||
|
|
- name: Upload deployment package
|
||
|
|
uses: actions/upload-artifact@v4
|
||
|
|
with:
|
||
|
|
name: frp-manager-deployment-${{ env.DEPLOY_ENV }}-${{ env.IMAGE_TAG }}
|
||
|
|
path: frp-manager-deployment-${{ env.IMAGE_TAG }}.tar.gz
|
||
|
|
retention-days: 90
|
||
|
|
|
||
|
|
- name: Create deployment summary
|
||
|
|
run: |
|
||
|
|
echo "## Deployment Summary" >> $GITHUB_STEP_SUMMARY
|
||
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||
|
|
echo "**Environment:** ${{ env.DEPLOY_ENV }}" >> $GITHUB_STEP_SUMMARY
|
||
|
|
echo "**Version:** ${{ env.IMAGE_TAG }}" >> $GITHUB_STEP_SUMMARY
|
||
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||
|
|
echo "### Images Built:" >> $GITHUB_STEP_SUMMARY
|
||
|
|
echo "- App: \`${{ env.REGISTRY }}/${{ github.repository }}/frp-manager-app:${{ env.IMAGE_TAG }}\`" >> $GITHUB_STEP_SUMMARY
|
||
|
|
echo "- Node: \`${{ env.REGISTRY }}/${{ github.repository }}/home-server-agent:${{ env.IMAGE_TAG }}\`" >> $GITHUB_STEP_SUMMARY
|
||
|
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||
|
|
echo "### Deployment Package:" >> $GITHUB_STEP_SUMMARY
|
||
|
|
echo "Download the deployment artifact and follow the README.md instructions." >> $GITHUB_STEP_SUMMARY
|