Add DevOps deployment prompt for VPS setup
This commit is contained in:
130
docs/DEVOPS_DEPLOY_PROMPT.md
Normal file
130
docs/DEVOPS_DEPLOY_PROMPT.md
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
# DevOps Agent: Deploy Vault-Dash to VPS
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Configure the deployment secrets and keys needed to deploy the `vault-dash` application from Forgejo CI/CD to a VPS.
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
The `vault-dash` project is a Python/FastAPI/NiceGUI dashboard for options hedging analysis. The CI/CD pipeline runs on Forgejo Actions and currently fails at the `build` and `deploy` stages due to missing secrets.
|
||||||
|
|
||||||
|
### Current Infrastructure
|
||||||
|
|
||||||
|
- **Forgejo Server**: `http://git.uncloud.vpn` (internal VPN address)
|
||||||
|
- **Git URL**: `ssh://git@10.100.0.2:2222/bu5hm4nn/vault-dash.git`
|
||||||
|
- **Runner Labels**: `[linux, docker]`
|
||||||
|
- **Target Deployment**: VPS (details to be determined)
|
||||||
|
|
||||||
|
## Deployment Workflow
|
||||||
|
|
||||||
|
The `.forgejo/workflows/deploy.yaml` workflow has these stages:
|
||||||
|
|
||||||
|
1. **lint** → **test** → **type-check** → **build** → **deploy**
|
||||||
|
|
||||||
|
The build stage pushes to a Docker registry, and the deploy stage uses SSH to deploy to a VPS.
|
||||||
|
|
||||||
|
## Required Secrets
|
||||||
|
|
||||||
|
### 1. Docker Registry Secrets
|
||||||
|
|
||||||
|
The `build` job needs:
|
||||||
|
- `REGISTRY_PASSWORD` (or falls back to `GITHUB_TOKEN`)
|
||||||
|
- `REGISTRY` environment variable (defaults to `10.100.0.2:3000`)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
env:
|
||||||
|
REGISTRY: ${{ vars.REGISTRY || '10.100.0.2:3000' }}
|
||||||
|
IMAGE_NAME: ${{ github.repository }}
|
||||||
|
|
||||||
|
# In docker/login-action:
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.REGISTRY_PASSWORD || secrets.GITHUB_TOKEN }}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Deployment Secrets
|
||||||
|
|
||||||
|
The `deploy` job needs:
|
||||||
|
- `DEPLOY_HOST` - VPS hostname/IP address
|
||||||
|
- `DEPLOY_USER` - SSH user (defaults to `deploy`)
|
||||||
|
- `DEPLOY_PORT` - SSH port (defaults to `22`)
|
||||||
|
- `DEPLOY_PATH` - Deploy path (defaults to `/opt/vault-dash`)
|
||||||
|
- `DEPLOY_SSH_PRIVATE_KEY` - SSH private key for authentication
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
env:
|
||||||
|
DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }}
|
||||||
|
DEPLOY_USER: ${{ secrets.DEPLOY_USER || 'deploy' }}
|
||||||
|
DEPLOY_PORT: ${{ secrets.DEPLOY_PORT || '22' }}
|
||||||
|
DEPLOY_PATH: ${{ secrets.DEPLOY_PATH || '/opt/vault-dash' }}
|
||||||
|
DEPLOY_SSH_PRIVATE_KEY: ${{ secrets.DEPLOY_SSH_PRIVATE_KEY }}
|
||||||
|
APP_IMAGE: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tasks
|
||||||
|
|
||||||
|
1. **Determine VPS details**: Where should the application be deployed? What's the host IP/hostname?
|
||||||
|
|
||||||
|
2. **Create a deploy user on the VPS**:
|
||||||
|
- Create a `deploy` user with sudo privileges for Docker
|
||||||
|
- Generate an SSH keypair for the deploy user
|
||||||
|
- Configure the public key in the VPS `~/.ssh/authorized_keys`
|
||||||
|
|
||||||
|
3. **Add Forgejo secrets**:
|
||||||
|
- In Forgejo, go to Repository → Settings → Secrets
|
||||||
|
- Add `DEPLOY_HOST` with the VPS address
|
||||||
|
- Add `DEPLOY_SSH_PRIVATE_KEY` with the private key content
|
||||||
|
- Add `REGISTRY_PASSWORD` if using the internal registry
|
||||||
|
|
||||||
|
4. **Configure Docker on the VPS**:
|
||||||
|
- Ensure Docker and Docker Compose are installed
|
||||||
|
- The deploy script will pull the container image from the registry
|
||||||
|
|
||||||
|
5. **Verify network connectivity**:
|
||||||
|
- Forgejo runner must be able to reach the VPS via SSH
|
||||||
|
- VPS must be able to pull images from the registry
|
||||||
|
|
||||||
|
## Instructions for the DevOps Agent
|
||||||
|
|
||||||
|
When setting up the deployment:
|
||||||
|
|
||||||
|
1. **For the SSH key**: Generate a dedicated deploy key (not a personal key):
|
||||||
|
```bash
|
||||||
|
ssh-keygen -t ed25519 -f vault-dash-deploy-key -N "" -C "vault-dash-deploy@forgejo"
|
||||||
|
```
|
||||||
|
The private key (`vault-dash-deploy-key`) goes into `DEPLOY_SSH_PRIVATE_KEY` secret.
|
||||||
|
The public key (`vault-dash-deploy-key.pub`) goes into the VPS user's `~/.ssh/authorized_keys`.
|
||||||
|
|
||||||
|
2. **For the deploy user on VPS**:
|
||||||
|
```bash
|
||||||
|
# Create deploy user
|
||||||
|
sudo useradd -m -s /bin/bash deploy
|
||||||
|
|
||||||
|
# Add to docker group
|
||||||
|
sudo usermod -aG docker deploy
|
||||||
|
|
||||||
|
# Set up SSH directory
|
||||||
|
sudo -u deploy mkdir -p /home/deploy/.ssh
|
||||||
|
sudo -u deploy chmod 700 /home/deploy/.ssh
|
||||||
|
|
||||||
|
# Add the public key
|
||||||
|
echo "ssh-ed25519 AAAA... vault-dash-deploy@forgejo" | sudo -u deploy tee /home/deploy/.ssh/authorized_keys
|
||||||
|
sudo -u deploy chmod 600 /home/deploy/.ssh/authorized_keys
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **For the Docker registry** (if using internal Forgejo registry):
|
||||||
|
- The registry must be accessible from both the runner and the VPS
|
||||||
|
- The `REGISTRY_PASSWORD` can be the user's Forgejo token or a dedicated registry token
|
||||||
|
|
||||||
|
4. **Create a dedicated deployment directory**:
|
||||||
|
```bash
|
||||||
|
sudo mkdir -p /opt/vault-dash
|
||||||
|
sudo chown deploy:deploy /opt/vault-dash
|
||||||
|
```
|
||||||
|
|
||||||
|
## Output
|
||||||
|
|
||||||
|
Please provide:
|
||||||
|
1. The VPS hostname/IP address
|
||||||
|
2. The SSH public key to add to the VPS
|
||||||
|
3. Confirmation of all secrets added to Forgejo
|
||||||
|
4. Any additional network or firewall configurations needed
|
||||||
Reference in New Issue
Block a user