Dockerize Django app with dev/beta/prod env config and uv (#6)
Unit Tests / test (push) Successful in 10s
Unit Tests / test (push) Successful in 10s
## 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
This commit was merged in pull request #6.
This commit is contained in:
@@ -1,4 +1,58 @@
|
||||
# company_site
|
||||
|
||||
Django site for compan
|
||||
Somethinf
|
||||
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>`.
|
||||
|
||||
Reference in New Issue
Block a user