feat: auto LAN auth + setup.sh dev command
- auth.ts: auto-allow localhost:3000-3010 + LAN_HOST for trustedOrigins - setup.sh: new `dev` command (update + kill old processes + auto LAN IP + launch) - next.config.ts: allowedDevOrigins for LAN HMR
This commit is contained in:
115
setup.sh
115
setup.sh
@@ -6,6 +6,7 @@ set -uo pipefail
|
||||
# ============================================================
|
||||
# Usage:
|
||||
# ./setup.sh — интерактивное меню
|
||||
# ./setup.sh dev — обновить + запустить dev-сервер (auto LAN, kill old)
|
||||
# ./setup.sh install — первоначальная установка
|
||||
# ./setup.sh update — обновить проект (git pull + npm + prisma + rebuild)
|
||||
# ./setup.sh doctor — диагностика и автоисправление
|
||||
@@ -206,6 +207,7 @@ print_usage() {
|
||||
echo -e " ${BOLD}Команды:${NC}"
|
||||
echo -e " ${CYAN}install${NC} Первоначальная установка"
|
||||
echo -e " ${CYAN}update${NC} Обновить проект (git pull + npm + prisma + rebuild)"
|
||||
echo -e " ${CYAN}dev${NC} Обновить + запустить dev-сервер (auto LAN, kill old)"
|
||||
echo -e " ${CYAN}doctor${NC} Диагностика и автоисправление проблем"
|
||||
echo -e " ${CYAN}status${NC} Статус всех сервисов"
|
||||
echo -e " ${CYAN}admin${NC} Создать администратора"
|
||||
@@ -1266,6 +1268,86 @@ cmd_reset() {
|
||||
echo ""
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# COMMAND: dev — обновить + запустить dev-сервер
|
||||
# ============================================================
|
||||
|
||||
cmd_dev() {
|
||||
log_step "Dev Server — обновление и запуск"
|
||||
|
||||
# 1. Git pull (без интерактива — stash автоматически)
|
||||
log_step "1/6 — Обновление кода"
|
||||
if [[ -d .git ]]; then
|
||||
if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then
|
||||
git stash push -m "auto-stash before dev $(date +%Y%m%d_%H%M%S)" 2>&1
|
||||
log_ok "Изменения сохранены в stash"
|
||||
fi
|
||||
git pull --rebase 2>&1 | tail -5
|
||||
log_ok "git pull завершён"
|
||||
fi
|
||||
|
||||
# 2. npm install (только если package-lock изменился)
|
||||
log_step "2/6 — Зависимости"
|
||||
npm install 2>&1 | tail -3
|
||||
log_ok "npm install завершён"
|
||||
|
||||
# 3. Prisma
|
||||
log_step "3/6 — Prisma"
|
||||
npx prisma generate 2>&1 | tail -2
|
||||
if docker compose exec -T postgres pg_isready -U postgres &>/dev/null; then
|
||||
npx prisma db push --skip-generate --accept-data-loss 2>&1 | tail -3
|
||||
log_ok "Схема БД синхронизирована"
|
||||
else
|
||||
log_warn "PostgreSQL недоступен — миграция пропущена"
|
||||
fi
|
||||
|
||||
# 4. Инфраструктурные контейнеры
|
||||
log_step "4/6 — Контейнеры"
|
||||
docker compose up -d postgres minio redis pgbouncer 2>&1 | tail -5
|
||||
log_ok "Инфра-контейнеры запущены"
|
||||
|
||||
# 5. Убить старые процессы Next.js
|
||||
log_step "5/6 — Очистка старых процессов"
|
||||
local killed=0
|
||||
for pid in $(pgrep -f "next dev" 2>/dev/null || true); do
|
||||
kill "$pid" 2>/dev/null && ((killed++)) || true
|
||||
done
|
||||
# Убить процесс на порту 3000
|
||||
local port_pid
|
||||
port_pid=$(lsof -ti :3000 2>/dev/null || true)
|
||||
if [[ -n "$port_pid" ]]; then
|
||||
kill "$port_pid" 2>/dev/null && ((killed++)) || true
|
||||
fi
|
||||
if [[ $killed -gt 0 ]]; then
|
||||
log_ok "Убито процессов: $killed"
|
||||
sleep 1
|
||||
else
|
||||
log_ok "Старых процессов нет"
|
||||
fi
|
||||
|
||||
# 6. Очистка .next кеша
|
||||
log_step "6/6 — Очистка кеша"
|
||||
[[ -d ".next" ]] && rm -rf .next
|
||||
log_ok "Кеш очищен"
|
||||
|
||||
# Автоопределение LAN IP для auth
|
||||
local lan_ip
|
||||
lan_ip=$(hostname -I 2>/dev/null | awk '{print $1}' || true)
|
||||
if [[ -n "$lan_ip" && -z "$(env_get LAN_HOST)" ]]; then
|
||||
log_info "LAN IP: ${lan_ip}"
|
||||
if ! grep -q "^LAN_HOST=" .env 2>/dev/null; then
|
||||
echo "LAN_HOST=${lan_ip}" >> .env
|
||||
log_ok "LAN_HOST=${lan_ip} добавлен в .env"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Запуск
|
||||
echo ""
|
||||
log_ok "${GREEN}${BOLD}Готово! Запускаю dev-сервер...${NC}"
|
||||
echo ""
|
||||
exec npm run dev
|
||||
}
|
||||
|
||||
# ============================================================
|
||||
# MAIN — Роутер команд
|
||||
# ============================================================
|
||||
@@ -1282,6 +1364,9 @@ case "$CMD" in
|
||||
update)
|
||||
cmd_update
|
||||
;;
|
||||
dev)
|
||||
cmd_dev
|
||||
;;
|
||||
doctor|fix)
|
||||
cmd_doctor
|
||||
;;
|
||||
@@ -1316,24 +1401,26 @@ case "$CMD" in
|
||||
else
|
||||
echo -e " ${BOLD}Что делаем?${NC}"
|
||||
echo ""
|
||||
echo -e " ${BOLD}1)${NC} ${CYAN}doctor${NC} — диагностика и исправление"
|
||||
echo -e " ${BOLD}2)${NC} ${CYAN}update${NC} — обновить проект"
|
||||
echo -e " ${BOLD}3)${NC} ${CYAN}status${NC} — статус сервисов"
|
||||
echo -e " ${BOLD}4)${NC} ${CYAN}admin${NC} — создать администратора"
|
||||
echo -e " ${BOLD}5)${NC} ${CYAN}restart${NC} — перезапуск контейнеров"
|
||||
echo -e " ${BOLD}6)${NC} ${CYAN}install${NC} — полная переустановка"
|
||||
echo -e " ${BOLD}7)${NC} ${CYAN}reset${NC} — сброс всего"
|
||||
echo -e " ${BOLD}1)${NC} ${CYAN}dev${NC} — ${GREEN}обновить + запустить dev-сервер${NC}"
|
||||
echo -e " ${BOLD}2)${NC} ${CYAN}doctor${NC} — диагностика и исправление"
|
||||
echo -e " ${BOLD}3)${NC} ${CYAN}update${NC} — обновить проект"
|
||||
echo -e " ${BOLD}4)${NC} ${CYAN}status${NC} — статус сервисов"
|
||||
echo -e " ${BOLD}5)${NC} ${CYAN}admin${NC} — создать администратора"
|
||||
echo -e " ${BOLD}6)${NC} ${CYAN}restart${NC} — перезапуск контейнеров"
|
||||
echo -e " ${BOLD}7)${NC} ${CYAN}install${NC} — полная переустановка"
|
||||
echo -e " ${BOLD}8)${NC} ${CYAN}reset${NC} — сброс всего"
|
||||
echo ""
|
||||
ask "Выбери действие" "1" CHOICE
|
||||
|
||||
case "$CHOICE" in
|
||||
1|doctor) cmd_doctor ;;
|
||||
2|update) cmd_update ;;
|
||||
3|status) cmd_status ;;
|
||||
4|admin) cmd_admin ;;
|
||||
5|restart) cmd_restart ;;
|
||||
6|install) cmd_install ;;
|
||||
7|reset) cmd_reset ;;
|
||||
1|dev) cmd_dev ;;
|
||||
2|doctor) cmd_doctor ;;
|
||||
3|update) cmd_update ;;
|
||||
4|status) cmd_status ;;
|
||||
5|admin) cmd_admin ;;
|
||||
6|restart) cmd_restart ;;
|
||||
7|install) cmd_install ;;
|
||||
8|reset) cmd_reset ;;
|
||||
*) log_err "Неизвестный выбор: ${CHOICE}"; print_usage ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user