fix(database): initialize database correctly and fix script

This commit is contained in:
kilyabin
2026-03-05 22:36:41 +04:00
parent cbfda855ed
commit 4a1ec7859f
3 changed files with 33 additions and 21 deletions

View File

@@ -163,6 +163,14 @@ else
fi fi
fi fi
# Добавляем DATABASE_PATH в .env если не указан
if [ -f "$INSTALL_DIR/.env" ]; then
if ! grep -q "^DATABASE_PATH=" "$INSTALL_DIR/.env" 2>/dev/null; then
echo -e "${YELLOW}Adding DATABASE_PATH to .env...${NC}"
echo "DATABASE_PATH=$INSTALL_DIR/db/schedule-app.db" >> "$INSTALL_DIR/.env"
fi
fi
# Создаем папку db для базы данных, если её нет # Создаем папку db для базы данных, если её нет
if [ ! -d "$INSTALL_DIR/db" ]; then if [ ! -d "$INSTALL_DIR/db" ]; then
echo -e "${YELLOW}Creating db directory for database...${NC}" echo -e "${YELLOW}Creating db directory for database...${NC}"

View File

@@ -5,14 +5,19 @@ import bcrypt from 'bcrypt'
import type { GroupInfo, GroupsData } from './groups-loader' import type { GroupInfo, GroupsData } from './groups-loader'
import type { AppSettings } from './settings-loader' import type { AppSettings } from './settings-loader'
// Определяем корень проекта для хранения базы данных // Определяем путь к базе данных
function getDatabaseDir(): string { function getDatabasePath(): string {
// Если указан путь через переменную окружения, используем его // Приоритет 1: Явный полный путь через DATABASE_PATH
if (process.env.DATABASE_DIR) { if (process.env.DATABASE_PATH) {
return process.env.DATABASE_DIR return process.env.DATABASE_PATH
} }
// В production режиме (standalone) используем стандартный путь // Приоритет 2: Путь через DATABASE_DIR (для обратной совместимости)
if (process.env.DATABASE_DIR) {
return path.join(process.env.DATABASE_DIR, 'db', 'schedule-app.db')
}
// Приоритет 3: Автоматическое определение
const cwd = process.cwd() const cwd = process.cwd()
// Если мы в .next/standalone, поднимаемся на 2 уровня вверх к корню проекта // Если мы в .next/standalone, поднимаемся на 2 уровня вверх к корню проекта
@@ -21,28 +26,27 @@ function getDatabaseDir(): string {
// Нужно подняться до /opt/kspguti-schedule // Нужно подняться до /opt/kspguti-schedule
const standaloneMatch = cwd.match(/^(.+?)\/\.next\/standalone/) const standaloneMatch = cwd.match(/^(.+?)\/\.next\/standalone/)
if (standaloneMatch && standaloneMatch[1]) { if (standaloneMatch && standaloneMatch[1]) {
return standaloneMatch[1] return path.join(standaloneMatch[1], 'db', 'schedule-app.db')
} }
// Альтернативный способ: подняться на 2 уровня вверх // Альтернативный способ: подняться на 2 уровня вверх
return path.resolve(cwd, '..', '..') return path.resolve(cwd, '..', '..', 'db', 'schedule-app.db')
} }
// Проверяем стандартный путь для production // Проверяем стандартный путь для production
if (fs.existsSync('/opt/kspguti-schedule')) { if (fs.existsSync('/opt/kspguti-schedule')) {
return '/opt/kspguti-schedule' return path.join('/opt/kspguti-schedule', 'db', 'schedule-app.db')
} }
// В development используем текущую директорию // В development используем текущую директорию
return cwd return path.join(cwd, 'db', 'schedule-app.db')
} }
// Путь к директории базы данных // Путь к базе данных
const DATABASE_DIR = getDatabaseDir() const DB_PATH = getDatabasePath()
const DB_PATH = path.join(DATABASE_DIR, 'db', 'schedule-app.db')
const DEFAULT_PASSWORD = 'ksadmin' const DEFAULT_PASSWORD = 'ksadmin'
// Путь к старой базе данных (для миграции) // Путь к старой базе данных (для миграции из data/ в db/)
const OLD_DB_PATH = path.join(DATABASE_DIR, 'data', 'schedule-app.db') const OLD_DB_PATH = path.join(path.dirname(DB_PATH), '..', 'data', 'schedule-app.db')
// Создаем директорию db, если её нет // Создаем директорию db, если её нет
const dbDir = path.dirname(DB_PATH) const dbDir = path.dirname(DB_PATH)

View File

@@ -4,8 +4,8 @@ After=network.target
[Service] [Service]
Type=simple Type=simple
User=www-data User=sched-user
Group=www-data Group=sched-user
WorkingDirectory=/opt/kspguti-schedule/.next/standalone WorkingDirectory=/opt/kspguti-schedule/.next/standalone
Environment=NODE_ENV=production Environment=NODE_ENV=production
Environment=NEXT_TELEMETRY_DISABLED=1 Environment=NEXT_TELEMETRY_DISABLED=1