This commit is contained in:
@@ -1,27 +1,91 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
echo "[update.sh] Проверка bot.db..."
|
||||
if [ -d "bot.db" ]; then
|
||||
echo "Удаляю папку bot.db..."
|
||||
rm -rf bot.db
|
||||
# === Настройки ===
|
||||
SERVICE="bot" # имя сервиса в docker-compose.yml
|
||||
APP_DIR="/app" # рабочая директория в контейнере
|
||||
HOST_DB_DIR="./db" # каталог БД на хосте
|
||||
HOST_DB_FILE="./db/bot.db" # файл БД на хосте
|
||||
DEFAULT_DB_URL="sqlite+aiosqlite:////app/db/bot.db" # единый путь БД внутри контейнера
|
||||
|
||||
log() { echo -e "[update.sh] $*"; }
|
||||
|
||||
# === Работаем из директории скрипта ===
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
|
||||
# === Приводим БД к каталогу ./db/bot.db ===
|
||||
log "Проверка корректности БД (./db/bot.db)..."
|
||||
mkdir -p "${HOST_DB_DIR}"
|
||||
|
||||
# если раньше был конфликтный объект ./bot.db
|
||||
if [[ -d "./bot.db" ]]; then
|
||||
log "Найдена ПАПКА ./bot.db → удаляю, чтобы не конфликтовала с файлом БД."
|
||||
rm -rf ./bot.db
|
||||
fi
|
||||
if [ ! -f "bot.db" ]; then
|
||||
echo "Создаю пустой файл bot.db..."
|
||||
touch bot.db
|
||||
if [[ -f "./bot.db" && ! -f "${HOST_DB_FILE}" ]]; then
|
||||
log "Переношу старый файл ./bot.db в ${HOST_DB_FILE} ..."
|
||||
mv ./bot.db "${HOST_DB_FILE}"
|
||||
fi
|
||||
if [[ ! -f "${HOST_DB_FILE}" ]]; then
|
||||
log "Создаю пустой файл БД: ${HOST_DB_FILE}"
|
||||
:> "${HOST_DB_FILE}"
|
||||
fi
|
||||
|
||||
echo "[update.sh] Получение свежего кода..."
|
||||
git pull
|
||||
# === .env: страхуем DATABASE_URL ===
|
||||
if [[ -f ".env" ]]; then
|
||||
if ! grep -q '^DATABASE_URL=' .env; then
|
||||
log "В .env не найден DATABASE_URL — дописываю с ${DEFAULT_DB_URL}"
|
||||
echo "DATABASE_URL=${DEFAULT_DB_URL}" >> .env
|
||||
fi
|
||||
else
|
||||
log "Файл .env не найден — создаю и прописываю DATABASE_URL=${DEFAULT_DB_URL}"
|
||||
echo "DATABASE_URL=${DEFAULT_DB_URL}" > .env
|
||||
fi
|
||||
|
||||
echo "[update.sh] Пересборка контейнера..."
|
||||
# === Git pull ===
|
||||
log "Получение свежего кода (git pull --rebase --autostash)..."
|
||||
git pull --rebase --autostash
|
||||
|
||||
# === Пересборка образа ===
|
||||
log "Пересборка контейнера..."
|
||||
docker compose build --no-cache
|
||||
|
||||
echo "[update.sh] Применение миграций Alembic..."
|
||||
docker compose run --rm bot alembic revision --autogenerate -m "update"
|
||||
docker compose run --rm bot alembic upgrade head
|
||||
# === (Опционально) создаём ревизию Alembic с комментарием ===
|
||||
MIG_MSG="${1-}"
|
||||
if [[ -z "${MIG_MSG}" ]]; then
|
||||
read -rp "[update.sh] Комментарий для новой миграции Alembic (Enter — пропустить создание ревизии): " MIG_MSG
|
||||
fi
|
||||
|
||||
echo "[update.sh] Запуск контейнера..."
|
||||
if [[ -n "${MIG_MSG}" ]]; then
|
||||
log "Создание ревизии Alembic с комментарием: ${MIG_MSG}"
|
||||
docker compose run --rm -T \
|
||||
-e MIG_MSG="${MIG_MSG}" \
|
||||
"${SERVICE}" sh -lc "cd '${APP_DIR}' && alembic revision --autogenerate -m \"\${MIG_MSG}\""
|
||||
else
|
||||
log "Создание ревизии пропущено."
|
||||
fi
|
||||
|
||||
# === Применяем миграции ===
|
||||
log "Применение миграций Alembic (upgrade head)..."
|
||||
docker compose run --rm -T "${SERVICE}" sh -lc "cd '${APP_DIR}' && alembic upgrade head"
|
||||
|
||||
# === Запуск приложения ===
|
||||
log "Запуск контейнера в фоне..."
|
||||
docker compose up -d
|
||||
|
||||
echo "[update.sh] Готово!"
|
||||
# === Мини-проверка окружения и таблиц ===
|
||||
log "Проверка DATABASE_URL внутри контейнера и списка таблиц..."
|
||||
docker compose exec -T "${SERVICE}" sh -lc "
|
||||
echo 'DATABASE_URL='\"\$DATABASE_URL\";
|
||||
if [ -f /app/db/bot.db ]; then
|
||||
echo '[DB] /app/db/bot.db найден. Таблицы:';
|
||||
sqlite3 /app/db/bot.db '.tables' || true;
|
||||
elif [ -f /db/bot.db ]; then
|
||||
echo '[DB] /db/bot.db найден (проверь docker-compose volume!). Таблицы:';
|
||||
sqlite3 /db/bot.db '.tables' || true;
|
||||
else
|
||||
echo 'Файл БД не найден в стандартных путях /app/db/bot.db или /db/bot.db';
|
||||
fi
|
||||
"
|
||||
|
||||
log "Готово!"
|
||||
|
||||
Reference in New Issue
Block a user