fix(database): initialize database correctly and fix script
This commit is contained in:
@@ -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}"
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user