Files
company_site/README.md
T
westfarn 426cc82f04
Unit Tests / test (push) Successful in 10s
Dockerize Django app with dev/beta/prod env config and uv (#6)
## Summary

- Containerize the Django app with Docker and docker-compose (dev + production)
- Refactor settings into `dev` / `beta` / `prod` environments driven by environment variables
- Connect to PostgreSQL via `DATABASE_URL` or `DB_*` vars
- Migrate package management from pip to uv (`pyproject.toml`, `uv.lock`)
- Split Gitea workflows: PRs run unit tests only; pushes to `master` run tests, Docker validation, and deploy
- Update deploy script to rsync code, preserve server `.env`, validate config, and run Docker compose

Closes #4

## Test plan

- [x] `uv run python manage.py test` passes locally (10/10)
- [x] `DJANGO_ENV=beta` and `DJANGO_ENV=prod` load with correct logging levels
- [x] `scripts/validate-env.sh` rejects missing production variables
- [ ] `docker compose up --build` starts app + Postgres locally
- [ ] Containerized unit tests pass in CI Docker job
- [ ] Server `.env` created from `.env.prod.example` before first production deploy
- [ ] CI workflow runs on this PR (tests only, no deploy)

Reviewed-on: #6
2026-07-07 11:23:50 -07:00

59 lines
1.7 KiB
Markdown

# company_site
Django site for AIML Operations.
## Local development (uv)
```bash
uv sync
cp .env.example .env
cd company_site
DJANGO_ENV=dev uv run python manage.py migrate
DJANGO_ENV=dev uv run python manage.py runserver
```
## Docker (dev + Postgres)
```bash
cp .env.example .env
docker compose up --build
```
App: http://localhost:8000
## Environments
Set `DJANGO_ENV` to one of:
| Value | DEBUG default | Logging level |
|-------|---------------|---------------|
| `dev` | true | DEBUG |
| `beta` | false | INFO |
| `prod` | false | WARNING |
Secrets and service config come from environment variables. See `.env.example`.
## CI / deploy workflows
| Workflow | Trigger | What runs |
|----------|---------|-----------|
| `.gitea/workflows/ci.yml` | Pull requests to `master` | Unit tests only |
| `.gitea/workflows/deploy.yml` | Push to `master` | Unit tests → Docker build/test → deploy |
Deploy never runs on pull requests. Uses separate workflow files (not job `if` conditions) so Gitea runners handle it reliably.
## Production deploy
Server keeps its own `.env` at the live site path. Deploy rsyncs code but **never overwrites `.env`**.
1. On the server, copy `.env.prod.example` to `.env` and fill in production values.
2. Run `bash scripts/validate-env.sh /path/to/.env` to verify required variables.
3. Push to `master` — the deploy workflow runs `scripts/deploy.sh`, which:
- rsyncs checkout to live site (preserving `.env`)
- validates environment variables
- `docker compose -f docker-compose.prod.yml build`
- `docker compose up -d`
- runs migrations in the web container
Legacy venv/systemd deploy: `DEPLOY_MODE=legacy bash scripts/deploy.sh <checkout>`.