86 lines
2.7 KiB
Markdown
86 lines
2.7 KiB
Markdown
# Production deployment notes
|
|
|
|
## Gitea Actions
|
|
This repo includes `.gitea/workflows/ci-deploy.yml` for:
|
|
- backend build
|
|
- backend tests
|
|
- frontend tests
|
|
- frontend production build
|
|
- deployment to Ubuntu after successful tests on `main`
|
|
|
|
### Required secrets in Gitea
|
|
- `PROD_HOST`
|
|
- `PROD_USER`
|
|
- `PROD_SSH_KEY`
|
|
|
|
## Ubuntu server setup
|
|
Recommended app path:
|
|
- `/opt/job-tracker/app`
|
|
|
|
Persistent runtime secrets path:
|
|
- `/opt/job-tracker/shared/.env`
|
|
|
|
Requirements:
|
|
- Docker Engine
|
|
- Docker Compose plugin
|
|
- reverse proxy in front (Nginx, Caddy, or Traefik)
|
|
- shared env file present on server in `/opt/job-tracker/shared/.env`
|
|
- network connectivity from the backend container to your `mariadb` container/service
|
|
|
|
The deploy script will automatically create a symlink from:
|
|
- `/opt/job-tracker/shared/.env`
|
|
|
|
to:
|
|
- `/opt/job-tracker/app/.env`
|
|
|
|
This keeps secrets outside the uploaded repo checkout so they are not wiped by CI deploys.
|
|
|
|
### Example production `.env`
|
|
```env
|
|
DATABASE_PROVIDER=mariadb
|
|
JOBTRACKER_CONNECTION_STRING=server=mariadb;port=3306;database=jobtracker;user=jobtracker;password=REPLACE_ME
|
|
AUTH_JWT_KEY=replace_with_long_random_secret
|
|
AUTH_ADMIN_EMAIL=you@example.com
|
|
AUTH_ADMIN_PASSWORD=replace_with_strong_password
|
|
APP_PUBLIC_BASE_URL=https://your-domain.example
|
|
SUMMARIZER_BASE_URL=http://summarizer:8001
|
|
```
|
|
|
|
## Database recommendation
|
|
For production, yes — use a real database.
|
|
|
|
### Recommended direction
|
|
Short term:
|
|
- SQLite is acceptable for a single-user or very small deployment
|
|
- keep backups and volume persistence
|
|
|
|
Better production choice:
|
|
- MariaDB or PostgreSQL
|
|
|
|
### My recommendation
|
|
- **PostgreSQL** if you want the best long-term maintainability and fewer edge cases
|
|
- **MariaDB** is also fine if that is what you already know or host elsewhere
|
|
|
|
If you stay on SQLite:
|
|
- okay for small personal use
|
|
- not ideal for concurrent writes, larger scale, or operational robustness
|
|
|
|
## Practical recommendation for this project
|
|
If this app is going to be a real production service on Ubuntu:
|
|
- move to PostgreSQL first if possible
|
|
- MariaDB is still a reasonable option if preferred
|
|
|
|
## Deployment flow
|
|
1. push to `main`
|
|
2. Gitea Actions runs tests
|
|
3. if green, workflow uploads repo to server
|
|
4. `deploy/deploy.sh` links `/opt/job-tracker/shared/.env` into the repo checkout, then runs `docker compose build && docker compose up -d`
|
|
5. workflow checks service status after deployment
|
|
|
|
## Post-deploy verification you should also do manually the first time
|
|
- confirm reverse proxy routes to the frontend correctly
|
|
- confirm API auth/login works with production config
|
|
- confirm backend can connect to MariaDB
|
|
- confirm summarizer container is reachable from backend
|
|
- confirm reminder and admin/system pages load
|