Create CICD_SETUP.md

This commit is contained in:
2026-03-31 12:31:20 +05:30
parent d1800b4888
commit b86f02699e

133
CICD_SETUP.md Normal file
View File

@@ -0,0 +1,133 @@
# CI/CD Setup — Gitea Actions (Auto Deploy)
This doc covers how to set up automatic deployment to your production server whenever you push to `main`. The deploy runs `deploy.sh` (`git pull && docker-compose down && docker-compose up -d --build`).
---
## Prerequisites
### On Gitea
- Gitea Actions must be enabled (check Site Administration → Configuration)
- At least one Actions runner must be registered and online
### On the Production Server
- Docker and docker-compose installed
- The repo already cloned at a known path
- SSH access configured
---
## Step 1 — Install a Gitea Actions Runner
If you don't already have a runner:
1. Download the runner binary from your Gitea instance or from the Gitea releases page
2. Register it:
```
./act_runner register --instance https://your-gitea-url --token <runner-token>
```
Get the token from: Gitea → Site Administration → Runners → Create Runner
3. Start the runner:
```
./act_runner daemon
```
Consider running it as a systemd service so it survives reboots.
---
## Step 2 — Set Up SSH Key for Deployment
On your local machine or CI machine, generate a dedicated deploy key:
```bash
ssh-keygen -t ed25519 -C "gitea-deploy" -f ~/.ssh/gitea_deploy
```
Copy the **public key** (`gitea_deploy.pub`) to your production server:
```bash
ssh-copy-id -i ~/.ssh/gitea_deploy.pub user@your-server
```
Or manually append it to `~/.ssh/authorized_keys` on the server.
---
## Step 3 — Add Secrets in Gitea
Go to: your repo → Settings → Secrets → Add Secret
| Secret Name | Value |
|------------------|--------------------------------------------|
| `DEPLOY_HOST` | IP address or hostname of your server |
| `DEPLOY_USER` | SSH username (e.g. `ubuntu`, `root`) |
| `DEPLOY_SSH_KEY` | Full contents of the **private** key file |
| `DEPLOY_PORT` | SSH port (default: `22`) |
---
## Step 4 — Create the Workflow File
Create `.gitea/workflows/deploy.yml` in the repo root:
```yaml
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.DEPLOY_SSH_KEY }}
port: ${{ secrets.DEPLOY_PORT }}
script: |
cd /path/to/grateful-journal # <-- update this path
bash deploy.sh
```
Update the `cd` path to wherever the repo lives on your server.
---
## Alternative — Runner Running Directly on the Server
If your Gitea Actions runner is already installed on the production server itself, you can skip SSH entirely and simplify the workflow:
```yaml
name: Deploy
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Run deploy script
run: |
cd /path/to/grateful-journal # <-- update this path
bash deploy.sh
```
This is simpler and avoids managing SSH keys.
---
## Verifying It Works
1. Push a commit to `main`
2. Go to your repo → Actions tab in Gitea
3. You should see the workflow run and each step's log output
If the runner isn't picking up jobs, check that the runner is online in Site Administration → Runners.