Files
main-site/README.md
Codex_B 683cba4280
All checks were successful
CI / ci (pull_request) Successful in 32s
Complete missing UX flows and production integrity commands
2026-02-28 13:20:25 +00:00

68 lines
1.5 KiB
Markdown

# No Hype AI
Django 5.2 + Wagtail 7 blog engine for No Hype AI.
## Environment Variables
Required:
- `SECRET_KEY`
- `DATABASE_URL`
- `ALLOWED_HOSTS`
- `DEBUG`
- `WAGTAIL_SITE_NAME`
Also used:
- `WAGTAILADMIN_BASE_URL`
- `CONSENT_POLICY_VERSION`
- `EMAIL_BACKEND`
- `EMAIL_HOST`
- `EMAIL_PORT`
- `EMAIL_USE_TLS`
- `EMAIL_HOST_USER`
- `EMAIL_HOST_PASSWORD`
- `DEFAULT_FROM_EMAIL`
- `NEWSLETTER_PROVIDER`
## Containerized Development
```bash
docker compose build
docker compose run --rm web python manage.py migrate
docker compose up
```
App is exposed on `http://localhost:8035`.
## Test/Lint/Typecheck (Docker)
```bash
docker compose run --rm web pytest
docker compose run --rm web ruff check .
docker compose run --rm web mypy apps config
```
## Deploy Runbook
```bash
git pull origin main
pip install -r requirements/production.txt
python manage.py migrate --run-syncdb
python manage.py collectstatic --noinput
python manage.py tailwind build
python manage.py check_content_integrity
sudo systemctl reload gunicorn
```
## Backups
- PostgreSQL dump daily: `pg_dump | gzip > backup-$(date +%Y%m%d).sql.gz`
- `MEDIA_ROOT` rsynced offsite daily
- Restore DB: `gunzip -c backup-YYYYMMDD.sql.gz | psql "$DATABASE_URL"`
- Restore media: `rsync -avz <backup-host>:/path/to/media/ /srv/nohypeai/media/`
## Runtime Notes
- Keep Caddy serving `/static/` and `/media/` directly in production.
- Keep Gunicorn behind Caddy and run from a systemd service/socket pair.
- Use `python manage.py purge_old_comment_data --months 24` in cron for comment-data retention.