Add GitHub server deployment guide

This commit is contained in:
Ochenstarik 2026-07-14 12:31:06 +07:00
parent 2ce385554f
commit 1f071cdaa6
2 changed files with 85 additions and 18 deletions

View file

@ -20,40 +20,92 @@
- SQLite в режиме WAL и защита от повторного дневного отчёта;
- готовый Docker-запуск на сервере.
## Автоматическая установка на сервер
## Развёртывание на сервере из GitHub
Для Ubuntu или Debian используйте интерактивный установщик `install.sh`. Он скачивает актуальную копию проекта с публичной папки Яндекс.Диска, при необходимости устанавливает Docker, спрашивает токен и настройки отчётов, после чего запускает бота.
Ниже приведён готовый вариант для чистого сервера с Ubuntu 22.04/24.04 или Debian 12. Установщик сам поставит Docker и Docker Compose, запросит настройки и запустит бота с автоматическим перезапуском.
Скопируйте `install.sh` на сервер и выполните:
### 1. Подготовьте доступ к приватному репозиторию
Репозиторий приватный, поэтому серверу нужен SSH-ключ. На сервере выполните:
```bash
sudo apt update
sudo apt install -y git openssh-client
ssh-keygen -t ed25519 -C "finance-bot-server"
cat ~/.ssh/id_ed25519.pub
```
При создании ключа можно нажимать `Enter`, оставляя предлагаемые значения. Скопируйте строку, которую показала последняя команда. Откройте репозиторий в GitHub и добавьте ключ: **Settings → Deploy keys → Add deploy key**. Галочку **Allow write access** не включайте — серверу достаточно доступа на чтение только к этому репозиторию.
Проверьте подключение:
```bash
ssh -T git@github.com
```
При первом подключении ответьте `yes`. Сообщение GitHub об успешной аутентификации означает, что доступ настроен.
### 2. Скачайте и установите бота
```bash
cd ~
git clone git@github.com:ochenstarik-ui/finance-telegram-bot.git
cd finance-telegram-bot
sudo bash install.sh
```
Или скачайте сам установщик из публичной папки прямо на сервере:
Во время установки будут запрошены:
- папка установки — обычно достаточно нажать `Enter`, чтобы использовать `/opt/finance-bot`;
- токен бота, полученный у [@BotFather](https://t.me/BotFather);
- часовой пояс — по умолчанию `Asia/Novosibirsk`;
- время ежедневного отчёта — по умолчанию `21:00`;
- разрешение установить Docker, если его ещё нет.
Токен при вводе не отображается. Настройки сохраняются в `/opt/finance-bot/.env` с доступом только для root, а база данных — в постоянном Docker-томе.
### 3. Проверьте запуск
```bash
PUBLIC_URL='https://disk.yandex.ru/d/hhbDTO08CB030Q'
INSTALLER_URL="$(curl -fsSG 'https://cloud-api.yandex.net/v1/disk/public/resources/download' \
--data-urlencode "public_key=$PUBLIC_URL" --data-urlencode 'path=/install.sh' \
| python3 -c 'import json,sys; print(json.load(sys.stdin)["href"])')"
curl -fsSL "$INSTALLER_URL" -o install.sh
sudo docker compose -f /opt/finance-bot/compose.yaml ps
sudo docker compose -f /opt/finance-bot/compose.yaml logs --tail=100 finance-bot
```
Для просмотра журнала в реальном времени:
```bash
sudo docker compose -f /opt/finance-bot/compose.yaml logs -f finance-bot
```
Выход из просмотра журнала — `Ctrl+C`; бот при этом продолжит работать.
### Обновление до новой версии
После появления изменений в GitHub выполните:
```bash
cd ~/finance-telegram-bot
git pull --ff-only
sudo bash install.sh
```
Установщик спросит:
Установщик предложит сохранить прежний токен. Повторное развёртывание пересоберёт контейнер, но не удалит `.env`, операции и настройки из базы данных.
- папку установки;
- токен, полученный у [@BotFather](https://t.me/BotFather);
- часовой пояс;
- время ежедневного отчёта.
Повторный запуск обновляет код, но сохраняет `.env` и базу данных в Docker-томе. Публичная ссылка проекта уже записана в скрипте. При необходимости её можно переопределить:
### Управление ботом
```bash
sudo FINANCE_BOT_PUBLIC_URL="https://disk.yandex.ru/d/другая-ссылка" bash install.sh
# Перезапустить
sudo docker compose -f /opt/finance-bot/compose.yaml restart finance-bot
# Остановить
sudo docker compose -f /opt/finance-bot/compose.yaml stop finance-bot
# Запустить после остановки
sudo docker compose -f /opt/finance-bot/compose.yaml start finance-bot
```
Если `install.sh` запустить отдельно, без остальных файлов проекта рядом, он по-прежнему сможет загрузить резервную копию с Яндекс.Диска.
## Ручной запуск на сервере
Понадобятся Docker и Docker Compose.

View file

@ -6,6 +6,7 @@ PUBLIC_URL="${FINANCE_BOT_PUBLIC_URL:-https://disk.yandex.ru/d/hhbDTO08CB030Q}"
DEFAULT_INSTALL_DIR="/opt/finance-bot"
YANDEX_API="https://cloud-api.yandex.net/v1/disk/public/resources/download"
TMP_DIR=""
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
if [[ -t 1 ]]; then
BOLD='\033[1m'
@ -203,6 +204,20 @@ except (KeyError, ValueError):
info "Проект скачан и проверен"
}
locate_project() {
if [[ -f "${SCRIPT_DIR}/compose.yaml" \
&& -f "${SCRIPT_DIR}/Dockerfile" \
&& -f "${SCRIPT_DIR}/pyproject.toml" \
&& -d "${SCRIPT_DIR}/app" ]]; then
DOWNLOADED_PROJECT_DIR="$SCRIPT_DIR"
info "Использую проект из ${SCRIPT_DIR}"
return
fi
warn "Рядом с установщиком не найден проект — загружаю резервную копию с Яндекс.Диска"
download_project
}
deploy_project() {
mkdir -p "$INSTALL_DIR"
cp -a "${DOWNLOADED_PROJECT_DIR}/." "$INSTALL_DIR/"
@ -244,7 +259,7 @@ main() {
prompt_install_dir
prompt_bot_settings
install_docker
download_project
locate_project
deploy_project
}