Test auto-deploy
This commit is contained in:
@@ -1,192 +1,192 @@
|
||||
# Deployment Guide - App Pipeline
|
||||
|
||||
Complete guide for deploying applications using the custom deployment pipeline with Gitea, Docker, and Traefik.
|
||||
|
||||
## 1. Create New Application
|
||||
|
||||
### 1.1 Gitea Repository
|
||||
|
||||
1. Log in to Gitea: https://git.appmodel.nl
|
||||
2. Create a new repository:
|
||||
- **Owner**: Tour
|
||||
- **Name**: `viewer` (or your app name)
|
||||
|
||||
### 1.2 Generate Skeleton on Server
|
||||
|
||||
On the server, run:
|
||||
|
||||
```bash
|
||||
apps-create viewer static-fe
|
||||
```
|
||||
|
||||
This command:
|
||||
- Sets up `/opt/apps/viewer` (attempts to clone from `git@git.appmodel.nl:Tour/viewer.git`)
|
||||
- Generates a multi-stage Dockerfile for a Node-based static frontend
|
||||
- Creates `~/infra/viewer/docker-compose.yml` with:
|
||||
- Service `viewer`
|
||||
- Connection to `traefik_net`
|
||||
- Traefik route: `https://viewer.appmodel.nl`
|
||||
|
||||
## 2. Development & Build
|
||||
|
||||
On your development machine:
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone git@git.appmodel.nl:Tour/viewer.git
|
||||
cd viewer
|
||||
|
||||
# Build your app as usual
|
||||
npm install
|
||||
npm run build # output goes to dist/
|
||||
|
||||
# Commit and push
|
||||
git add .
|
||||
git commit -m "First version"
|
||||
git push
|
||||
```
|
||||
|
||||
**Note**: The Dockerfile expects a `dist/` directory containing static files.
|
||||
|
||||
## 3. Deployment Pipeline
|
||||
|
||||
### 3.1 Manual Deploy with `app-deploy`
|
||||
|
||||
On the server, use the generic deploy command:
|
||||
|
||||
```bash
|
||||
app-deploy viewer
|
||||
```
|
||||
|
||||
This command performs:
|
||||
1. `cd /opt/apps/viewer`
|
||||
2. `git pull --ff-only`
|
||||
3. `cd /home/tour/infra/viewer`
|
||||
4. `docker compose up -d --build viewer`
|
||||
|
||||
Logs are saved to: `/var/log/app-deploy-viewer.log`
|
||||
|
||||
### 3.2 Automatic Deployment via Gitea Hook
|
||||
|
||||
Set up automatic deployment on every push:
|
||||
|
||||
1. In Gitea, go to repository `Tour/viewer`
|
||||
2. Navigate to **Settings → Git Hooks**
|
||||
3. Select **post-receive**
|
||||
4. Add the following script:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
/usr/local/bin/app-deploy viewer
|
||||
```
|
||||
|
||||
**Result**: Every `git push` to `Tour/viewer` automatically triggers a deployment.
|
||||
|
||||
## 4. Traefik & DNS Configuration
|
||||
|
||||
### Traefik Setup
|
||||
|
||||
Traefik runs in the traefik stack on the same server and manages:
|
||||
- `git.appmodel.nl`
|
||||
- `auction.appmodel.nl`
|
||||
- `aupi.appmodel.nl`
|
||||
- ... (new apps via labels)
|
||||
|
||||
### Auto-Generated Labels
|
||||
|
||||
The `apps-create` command automatically adds the correct Traefik labels:
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.viewer.rule=Host(`viewer.appmodel.nl`)"
|
||||
- "traefik.http.routers.viewer.entrypoints=websecure"
|
||||
- "traefik.http.routers.viewer.tls=true"
|
||||
- "traefik.http.routers.viewer.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.viewer.loadbalancer.server.port=80"
|
||||
```
|
||||
|
||||
### DNS Configuration
|
||||
|
||||
Add a DNS record pointing to your server's public IP:
|
||||
|
||||
```
|
||||
viewer.appmodel.nl → <server-public-ip>
|
||||
```
|
||||
|
||||
Traefik + Let's Encrypt will automatically handle SSL certificate generation.
|
||||
|
||||
## 5. Future Application Types
|
||||
|
||||
The `apps-create` script currently supports:
|
||||
|
||||
- **`static-fe`** – Node build → Nginx → static frontend
|
||||
|
||||
### Planned Types
|
||||
|
||||
Future app types can be added:
|
||||
|
||||
```bash
|
||||
# Python API
|
||||
apps-create stats api-py
|
||||
|
||||
# Background worker/crawler
|
||||
apps-create crawler worker-py
|
||||
```
|
||||
|
||||
Each type will have:
|
||||
- Custom Dockerfile template
|
||||
- Standard `docker-compose.yml` configuration
|
||||
- Same deployment pipeline: `app-deploy <name>`
|
||||
|
||||
## Quick Reference
|
||||
|
||||
### Create and Deploy New App
|
||||
|
||||
```bash
|
||||
# On server: create skeleton
|
||||
apps-create viewer static-fe
|
||||
|
||||
# On dev machine: develop and push
|
||||
git clone git@git.appmodel.nl:Tour/viewer.git
|
||||
cd viewer
|
||||
npm install
|
||||
npm run build
|
||||
git add .
|
||||
git commit -m "Initial commit"
|
||||
git push
|
||||
|
||||
# On server: deploy (or auto-deploys via hook)
|
||||
app-deploy viewer
|
||||
```
|
||||
|
||||
### Existing Infrastructure
|
||||
|
||||
| Service | URL | Description |
|
||||
|---------|-----|-------------|
|
||||
| Gitea | https://git.appmodel.nl | Git repository hosting |
|
||||
| Auction | https://auction.appmodel.nl | Auction frontend |
|
||||
| Aupi API | https://aupi.appmodel.nl | Auction backend API |
|
||||
| Traefik | - | Reverse proxy & SSL |
|
||||
|
||||
### Log Locations
|
||||
|
||||
- Deployment logs: `/var/log/app-deploy-<app-name>.log`
|
||||
- Docker logs: `docker compose logs -f <service-name>`
|
||||
|
||||
### Useful Commands
|
||||
|
||||
```bash
|
||||
# View deployment logs
|
||||
tail -f /var/log/app-deploy-viewer.log
|
||||
|
||||
# View container logs
|
||||
cd ~/infra/viewer
|
||||
docker compose logs -f viewer
|
||||
|
||||
# Restart service
|
||||
docker compose restart viewer
|
||||
|
||||
# Rebuild without cache
|
||||
docker compose up -d --build --no-cache viewer
|
||||
```
|
||||
# Deployment Guide - App Pipeline
|
||||
|
||||
Complete guide for deploying applications using the custom deployment pipeline with Gitea, Docker, and Traefik.
|
||||
|
||||
## 1. Create New Application
|
||||
|
||||
### 1.1 Gitea Repository
|
||||
|
||||
1. Log in to Gitea: https://git.appmodel.nl
|
||||
2. Create a new repository:
|
||||
- **Owner**: Tour
|
||||
- **Name**: `viewer` (or your app name)
|
||||
|
||||
### 1.2 Generate Skeleton on Server
|
||||
|
||||
On the server, run:
|
||||
|
||||
```bash
|
||||
apps-create viewer static-fe
|
||||
```
|
||||
|
||||
This command:
|
||||
- Sets up `/opt/apps/viewer` (attempts to clone from `git@git.appmodel.nl:Tour/viewer.git`)
|
||||
- Generates a multi-stage Dockerfile for a Node-based static frontend
|
||||
- Creates `~/infra/viewer/docker-compose.yml` with:
|
||||
- Service `viewer`
|
||||
- Connection to `traefik_net`
|
||||
- Traefik route: `https://viewer.appmodel.nl`
|
||||
|
||||
## 2. Development & Build
|
||||
|
||||
On your development machine:
|
||||
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone git@git.appmodel.nl:Tour/viewer.git
|
||||
cd viewer
|
||||
|
||||
# Build your app as usual
|
||||
npm install
|
||||
npm run build # output goes to dist/
|
||||
|
||||
# Commit and push
|
||||
git add .
|
||||
git commit -m "First version"
|
||||
git push
|
||||
```
|
||||
|
||||
**Note**: The Dockerfile expects a `dist/` directory containing static files.
|
||||
|
||||
## 3. Deployment Pipeline
|
||||
|
||||
### 3.1 Manual Deploy with `app-deploy`
|
||||
|
||||
On the server, use the generic deploy command:
|
||||
|
||||
```bash
|
||||
app-deploy viewer
|
||||
```
|
||||
|
||||
This command performs:
|
||||
1. `cd /opt/apps/viewer`
|
||||
2. `git pull --ff-only`
|
||||
3. `cd /home/tour/infra/viewer`
|
||||
4. `docker compose up -d --build viewer`
|
||||
|
||||
Logs are saved to: `/var/log/app-deploy-viewer.log`
|
||||
|
||||
### 3.2 Automatic Deployment via Gitea Hook
|
||||
|
||||
Set up automatic deployment on every push:
|
||||
|
||||
1. In Gitea, go to repository `Tour/viewer`
|
||||
2. Navigate to **Settings → Git Hooks**
|
||||
3. Select **post-receive**
|
||||
4. Add the following script:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
/usr/local/bin/app-deploy viewer
|
||||
```
|
||||
|
||||
**Result**: Every `git push` to `Tour/viewer` automatically triggers a deployment.
|
||||
|
||||
## 4. Traefik & DNS Configuration
|
||||
|
||||
### Traefik Setup
|
||||
|
||||
Traefik runs in the traefik stack on the same server and manages:
|
||||
- `git.appmodel.nl`
|
||||
- `auction.appmodel.nl`
|
||||
- `aupi.appmodel.nl`
|
||||
- ... (new apps via labels)
|
||||
|
||||
### Auto-Generated Labels
|
||||
|
||||
The `apps-create` command automatically adds the correct Traefik labels:
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.viewer.rule=Host(`viewer.appmodel.nl`)"
|
||||
- "traefik.http.routers.viewer.entrypoints=websecure"
|
||||
- "traefik.http.routers.viewer.tls=true"
|
||||
- "traefik.http.routers.viewer.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.viewer.loadbalancer.server.port=80"
|
||||
```
|
||||
|
||||
### DNS Configuration
|
||||
|
||||
Add a DNS record pointing to your server's public IP:
|
||||
|
||||
```
|
||||
viewer.appmodel.nl → <server-public-ip>
|
||||
```
|
||||
|
||||
Traefik + Let's Encrypt will automatically handle SSL certificate generation.
|
||||
|
||||
## 5. Future Application Types
|
||||
|
||||
The `apps-create` script currently supports:
|
||||
|
||||
- **`static-fe`** – Node build → Nginx → static frontend
|
||||
|
||||
### Planned Types
|
||||
|
||||
Future app types can be added:
|
||||
|
||||
```bash
|
||||
# Python API
|
||||
apps-create stats api-py
|
||||
|
||||
# Background worker/crawler
|
||||
apps-create crawler worker-py
|
||||
```
|
||||
|
||||
Each type will have:
|
||||
- Custom Dockerfile template
|
||||
- Standard `docker-compose.yml` configuration
|
||||
- Same deployment pipeline: `app-deploy <name>`
|
||||
|
||||
## Quick Reference
|
||||
|
||||
### Create and Deploy New App
|
||||
|
||||
```bash
|
||||
# On server: create skeleton
|
||||
apps-create viewer static-fe
|
||||
|
||||
# On dev machine: develop and push
|
||||
git clone git@git.appmodel.nl:Tour/viewer.git
|
||||
cd viewer
|
||||
npm install
|
||||
npm run build
|
||||
git add .
|
||||
git commit -m "Initial commit"
|
||||
git push
|
||||
|
||||
# On server: deploy (or auto-deploys via hook)
|
||||
app-deploy viewer
|
||||
```
|
||||
|
||||
### Existing Infrastructure
|
||||
|
||||
| Service | URL | Description |
|
||||
|---------|-----|-------------|
|
||||
| Gitea | https://git.appmodel.nl | Git repository hosting |
|
||||
| Auction | https://auction.appmodel.nl | Auction frontend |
|
||||
| Aupi API | https://aupi.appmodel.nl | Auction backend API |
|
||||
| Traefik | - | Reverse proxy & SSL |
|
||||
|
||||
### Log Locations
|
||||
|
||||
- Deployment logs: `/var/log/app-deploy-<app-name>.log`
|
||||
- Docker logs: `docker compose logs -f <service-name>`
|
||||
|
||||
### Useful Commands
|
||||
|
||||
```bash
|
||||
# View deployment logs
|
||||
tail -f /var/log/app-deploy-viewer.log
|
||||
|
||||
# View container logs
|
||||
cd ~/infra/viewer
|
||||
docker compose logs -f viewer
|
||||
|
||||
# Restart service
|
||||
docker compose restart viewer
|
||||
|
||||
# Rebuild without cache
|
||||
docker compose up -d --build --no-cache viewer
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user