Личный сайт-портфолио на FastAPI + Jinja2 с мультиязычным контентом (ru/en).
- FastAPI
- Jinja2 templates
- Docker / docker-compose
- Скопируй пример env:
cp .env.example .env
- Подними контейнер:
docker compose up --build -d
- Открой сайт:
http://localhost:8000
- Установи зависимости:
pip install -r requirements.txt
- Запусти приложение:
uvicorn app.main:app --reload
- Непривилегированный пользователь в контейнере (
appuser). - Health/readiness endpoint'ы:
/healthz,/readyz. docker-composehealthcheck (проверка/readyz).- Базовые security headers + gzip.
- Ограничение хостов через
ALLOWED_HOSTS. - Версионирование ассетов через
ASSET_VERSION.
ASSET_VERSION— версия статики для cache-busting (повышай при релизе).ROOT_PATH— если приложение работает не с/, а с подпути.ALLOWED_HOSTS— список разрешённых хостов через запятую.
Пример:
ASSET_VERSION=5
ROOT_PATH=
ALLOWED_HOSTS=example.com,www.example.com- Проверка синтаксиса Python:
python -m compileall app static/js
- Проверка health endpoint:
curl -s http://localhost:8000/healthz
- Проверка readiness endpoint:
curl -s http://localhost:8000/readyz
app/— backend-код (роуты и middleware)templates/— Jinja-шаблоны страницstatic/— CSS/JS/контент (static/content/*.json)