Add GitHub server deployment guide
This commit is contained in:
parent
2ce385554f
commit
1f071cdaa6
2 changed files with 85 additions and 18 deletions
86
README.md
86
README.md
|
|
@ -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.
|
||||
|
|
|
|||
17
install.sh
17
install.sh
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue