Исправлен деплой скрипт
This commit is contained in:
64
README.md
64
README.md
@@ -24,7 +24,7 @@ make run # создаст .venv, поставит зависим
|
||||
Яндекс.Диск (xlsx)
|
||||
│ скачивание по публичной ссылке
|
||||
▼
|
||||
api (FastAPI), порт 8000, наружу — только 127.0.0.1 (в docker так публикуется порт)
|
||||
api (FastAPI), порт 8000, в docker публикуется на 127.0.0.1
|
||||
• скачивает и разбирает xlsx без сторонних библиотек
|
||||
• кэш в памяти: TTL + проверка даты изменения файла + stale-while-error
|
||||
• один воркер, поэтому кэш общий
|
||||
@@ -128,7 +128,8 @@ src/
|
||||
tools/
|
||||
make_icons.py генерация иконок приложения из логотипа (нужен rsvg-convert)
|
||||
deploy/
|
||||
nginx-dev.conf пример сайта nginx для отдельного стенда
|
||||
nginx-site.sh генерация и включение конфига nginx (SSL — сертификат родителя)
|
||||
nginx-dev.conf конфиг-заготовка для стенда без wildcard у родителя
|
||||
README-dev.md как поднять второй стенд рядом с основным
|
||||
tests/
|
||||
conftest.py общие фикстуры
|
||||
@@ -176,8 +177,8 @@ tests/
|
||||
| `SCHEDULE_RETRY_AFTER` | `60` | api | пауза между попытками при сбое источника |
|
||||
| `SCHEDULE_API` | `http://127.0.0.1:8000` | frontend | адрес бэкенда (в docker: `http://api:8000`) |
|
||||
| `SCHEDULE_PROXY_TIMEOUT` | `150` | frontend | таймаут прокси к бэкенду, сек |
|
||||
| `API_PORT` | `8000` | docker | внешний порт api |
|
||||
| `FRONTEND_PORT` | `8080` | docker | внешний порт frontend (на проде: `127.0.0.1:8090`) |
|
||||
| `API_PORT` | `8000` | docker | внешний порт api (публикуется на 127.0.0.1) |
|
||||
| `FRONTEND_PORT` | `8080` | docker | внешний порт frontend (публикуется на 127.0.0.1) |
|
||||
|
||||
`.env` ищется вверх от каталога модуля: и backend, и frontend находят общий
|
||||
`.env` в корне репозитория; `load_dotenv` не перезаписывает уже выставленные
|
||||
@@ -219,12 +220,35 @@ tests/
|
||||
пакет venv: `sudo apt install python3-venv` (для нестандартной версии —
|
||||
например, `python3.12-venv`).
|
||||
- `httpx2` и `httpcore2` — новые пакеты (август 2026, httpx перешёл под
|
||||
опеку Pydantic и был переименован). Если pip берёт пакеты из корпоративного
|
||||
зеркала или старого индекса, этих пакетов там может ещё не быть; проверьте
|
||||
установку напрямую: `pip install -r requirements-dev.txt -i https://pypi.org/simple`.
|
||||
В коде и тестах модуль импортируется как `httpx2`; `import httpx` больше
|
||||
не работает. В рабочем коде httpx2 не используется — нужен только тестам.
|
||||
- Makefile написан под bash: Linux, macOS или WSL. На Windows без WSL
|
||||
опеку Pydantic и был переименован). В коде и тестах модуль импортируется
|
||||
как `httpx2`; `import httpx` больше не работает. В рабочем коде httpx2
|
||||
не используется — нужен только тестам.
|
||||
|
||||
**Если pip не находит пакеты: зеркала**
|
||||
|
||||
Если pip настроен на корпоративное/национальное зеркало, оно может отставать
|
||||
от PyPI — свежие пакеты на нём ещё не появились. Диагностика и обход:
|
||||
|
||||
```bash
|
||||
pip index versions httpx2 # есть ли пакет на текущем индексе
|
||||
pip install -r requirements-dev.txt -i <зеркало> # разово через другое зеркало
|
||||
pip config set global.index-url <зеркало> # закрепить зеркало навсегда
|
||||
```
|
||||
|
||||
Зеркала, проверенные 07.10.2026 (пакеты `httpx2`/`httpcore2` на месте;
|
||||
URL подставлять как есть в `-i` / `index-url`):
|
||||
|
||||
| Зеркало | URL |
|
||||
|---|---|
|
||||
| PyPI, официальный | `https://pypi.org/simple` |
|
||||
| TUNA (Tsinghua) | `https://pypi.tuna.tsinghua.edu.cn/simple` |
|
||||
| Huawei Cloud | `https://mirrors.huaweicloud.com/repository/pypi/simple` |
|
||||
| BFSU | `https://mirrors.bfsu.edu.cn/pypi/web/simple` |
|
||||
| SJTU | `https://mirror.sjtu.edu.cn/pypi/web/simple` |
|
||||
| USTC | `https://mirrors.ustc.edu.cn/pypi/simple` |
|
||||
| SUSTech | `https://mirrors.sustech.edu.cn/pypi/simple` |
|
||||
|
||||
Makefile написан под bash: Linux, macOS или WSL. На Windows без WSL
|
||||
используйте Docker-вариант из раздела «В Docker».
|
||||
|
||||
## Запуск
|
||||
@@ -243,6 +267,8 @@ make run # = make venv + запуск api и сайта
|
||||
- API — <http://127.0.0.1:8000> (например, `/status` и `/groups`);
|
||||
- сайт — <http://127.0.0.1:8080> (его и открывать в браузере).
|
||||
|
||||
Чтобы отвязать процесс от терминала, стоит запускать через `nohup make run &`
|
||||
|
||||
Остановить — `Ctrl+C`. Данные скачиваются сразу на старте приложения
|
||||
(скачивание занимает несколько секунд) и дальше обновляются по интервалу.
|
||||
|
||||
@@ -274,6 +300,24 @@ cp .env.example .env # вписать SCHEDULE_LINK (и порты при
|
||||
У обоих сервисов есть healthcheck на `/healthz`; frontend стартует после того,
|
||||
как api стал healthy. Обновление: `git pull && docker compose up -d --build`.
|
||||
|
||||
### Настройка nginx (прод)
|
||||
|
||||
Скрипт генерирует и включает конфиг сайта: http → https, прокси на
|
||||
`FRONTEND_PORT` из `.env`, после проверки `nginx -t` перечитывает nginx.
|
||||
SSL обеспечивается сертификатом родительского домена (обычно wildcard
|
||||
`*.our-place.ru`) — отдельный certbot для поддомена не нужен.
|
||||
|
||||
```bash
|
||||
sudo ls /etc/letsencrypt/live/ # имя сертификата родительского домена
|
||||
sudo make nginx-install # или: sudo deploy/nginx-site.sh
|
||||
```
|
||||
|
||||
Параметры: `--domain sched.example.ru`, `--cert example.ru` (по умолчанию —
|
||||
родительский домен от `--domain`), `--port 8090` (по умолчанию —
|
||||
`FRONTEND_PORT` из `.env`). Посмотреть конфиг, ничего не меняя:
|
||||
`make nginx-print`. Если wildcard у родителя нет — выпустите сертификат
|
||||
скриптом certbot, как для dev-стенда (см. `deploy/README-dev.md`).
|
||||
|
||||
### Тесты
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user