README: убрана пустая строка в блоке структуры после удаления install.sh
This commit is contained in:
70
README.md
70
README.md
@@ -46,68 +46,29 @@ nginx — порты 80/443, https://<домен сайта> → 127.0.0.1:<по
|
|||||||
|
|
||||||
## Установка на сервер
|
## Установка на сервер
|
||||||
|
|
||||||
Скачайте zip с проектом, распакуйте и запустите одну команду:
|
### Docker (deploy.sh)
|
||||||
|
|
||||||
|
Скачайте zip с проектом, распакуйте и заполните `.env`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
unzip schedule.zip && cd schedule
|
unzip schedule.zip && cd schedule
|
||||||
bash install.sh
|
cp .env.example .env && nano .env # SCHEDULE_LINK обязателен; ADMIN_* — по желанию
|
||||||
|
sudo ./deploy.sh # собрать образы и запустить
|
||||||
|
curl -s http://127.0.0.1:8080/api/status # {"has_data":true} — работает
|
||||||
```
|
```
|
||||||
|
|
||||||
Установка требует root — скрипт сам перезапустится через sudo. До запуска DNS
|
`deploy.sh` проверяет, что Docker и `.env` на месте, собирает образы и поднимает
|
||||||
домена уже должен указывать на сервер, а порты 80/443 — быть открытыми:
|
контейнеры. Обновление — тем же скриптом: `git pull && sudo ./deploy.sh`.
|
||||||
сертификат Let's Encrypt выпускается прямо в процессе установки.
|
Почему Docker: сервисы изолированы, автоматически перезапускаются, не зависят
|
||||||
|
от Python в системе и обновляются одной командой.
|
||||||
|
|
||||||
Скрипт спросит:
|
### Без Docker (systemd)
|
||||||
|
|
||||||
| Вопрос | Что ответить |
|
|
||||||
|---|---|
|
|
||||||
| Как ставить: Docker или систему | Docker — рекомендуется (разница ниже) |
|
|
||||||
| Публичная ссылка на таблицу | ссылка Я.Диска, единственная обязательная настройка |
|
|
||||||
| Домен сайта | например `sched.example.ru`; пусто = без nginx, сайт на 127.0.0.1 |
|
|
||||||
| Порт api и порт сайта | по умолчанию 8000 и 8080 |
|
|
||||||
| Пользователь служб (только для «в систему») | от кого работают сервисы |
|
|
||||||
| Почта (только если задан домен) | для уведомлений Let's Encrypt |
|
|
||||||
|
|
||||||
Ответы можно передать и флагами: `--mode`, `--link`, `--domain`, `--api-port`,
|
|
||||||
`--front-port`, `--user`, `--email`. `install.sh --dry-run` показывает план
|
|
||||||
установки, ничего не меняя.
|
|
||||||
|
|
||||||
### Docker или система — что выбрать
|
|
||||||
|
|
||||||
**Docker** — рекомендуется: сервисы изолированы, автоматически перезапускаются,
|
|
||||||
обновляются одной командой, не зависят от Python в системе. Установщик поставит
|
|
||||||
Docker (если нет), запишет `.env`, соберёт образы, запустит контейнеры и
|
|
||||||
дождётся их готовности.
|
|
||||||
|
|
||||||
**Система (без Docker)** — если Docker не нужен: установщик проверит Python
|
|
||||||
3.11+, создаст `.venv`, поставит зависимости и зарегистрирует две службы
|
|
||||||
systemd — `schedule-api` и `schedule-frontend` (автозапуск после ребута,
|
|
||||||
перезапуск при падении).
|
|
||||||
|
|
||||||
В обоих случаях, если домен задан, установщик дополнительно поставит nginx и
|
|
||||||
certbot, выпустит сертификат Let's Encrypt (webroot — продление автоматическое,
|
|
||||||
сайт не останавливается) и настроит конфиг: http → https, прокси на порт
|
|
||||||
фронта. Снаружи виден только nginx.
|
|
||||||
|
|
||||||
### Ручная установка (без скрипта)
|
|
||||||
|
|
||||||
Установщик делает ровно следующее — при желании те же шаги выполняются руками.
|
|
||||||
|
|
||||||
**Docker:**
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cp .env.example .env && nano .env # SCHEDULE_LINK (+ порты при желании)
|
|
||||||
sudo ./deploy.sh # собрать и запустить
|
|
||||||
curl -s http://127.0.0.1:8080/api/status # {"has_data":true} — работает
|
|
||||||
```
|
|
||||||
|
|
||||||
**Система:**
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt install -y python3 python3-venv python3-pip # Python 3.11+
|
sudo apt install -y python3 python3-venv python3-pip # Python 3.11+
|
||||||
python3 -m venv .venv
|
python3 -m venv .venv
|
||||||
.venv/bin/pip install -r requirements.txt
|
.venv/bin/pip install -r requirements.txt
|
||||||
cp .env.example .env && nano .env # SCHEDULE_LINK
|
cp .env.example .env && nano .env # SCHEDULE_LINK (+ ADMIN_*, если нужна админка)
|
||||||
```
|
```
|
||||||
|
|
||||||
Две службы systemd (`/etc/systemd/system/`), затем
|
Две службы systemd (`/etc/systemd/system/`), затем
|
||||||
@@ -144,6 +105,10 @@ RestartSec=3
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Если службы работают не от владельца каталога проекта, выдайте пользователю
|
||||||
|
службы права на запись в `data/` (там админка хранит ссылку, интервал и историю
|
||||||
|
входов) или задайте свой путь в `SETTINGS_FILE`.
|
||||||
|
|
||||||
**nginx + сертификат** (общий шаг для обоих способов; `.env` уже должен быть):
|
**nginx + сертификат** (общий шаг для обоих способов; `.env` уже должен быть):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -345,7 +310,6 @@ ADMIN_PASSWORD=<длинный пароль>
|
|||||||
## Структура кода
|
## Структура кода
|
||||||
|
|
||||||
```
|
```
|
||||||
install.sh интерактивная установка на сервер: Docker или systemd + nginx
|
|
||||||
src/
|
src/
|
||||||
backend/
|
backend/
|
||||||
main.py FastAPI: маршруты, create_app(cache), /healthz
|
main.py FastAPI: маршруты, create_app(cache), /healthz
|
||||||
@@ -370,7 +334,7 @@ src/
|
|||||||
tools/
|
tools/
|
||||||
make_icons.py генерация иконок приложения из логотипа (нужен rsvg-convert)
|
make_icons.py генерация иконок приложения из логотипа (нужен rsvg-convert)
|
||||||
deploy/
|
deploy/
|
||||||
nginx-site.sh генерация и включение конфига nginx (используется install.sh)
|
nginx-site.sh генерация и включение конфига nginx (ручная настройка)
|
||||||
tests/
|
tests/
|
||||||
conftest.py общие фикстуры
|
conftest.py общие фикстуры
|
||||||
xlsx_builder.py генерация xlsx в памяти (без openpyxl)
|
xlsx_builder.py генерация xlsx в памяти (без openpyxl)
|
||||||
|
|||||||
Reference in New Issue
Block a user