feat: 切换邮箱认证并重构前后端启动与门禁
This commit is contained in:
@@ -58,6 +58,8 @@ services:
|
||||
GOTRUE_JWT_DEFAULT_GROUP_NAME: authenticated
|
||||
GOTRUE_JWT_EXP: 3600
|
||||
GOTRUE_JWT_SECRET: ${ERYAO_SUPABASE__JWT_SECRET}
|
||||
GOTRUE_EXTERNAL_EMAIL_ENABLED: "true"
|
||||
GOTRUE_EXTERNAL_PHONE_ENABLED: "false"
|
||||
GOTRUE_MAILER_AUTOCONFIRM: "false"
|
||||
GOTRUE_SMTP_ADMIN_EMAIL: dev@example.com
|
||||
GOTRUE_SMTP_HOST: localhost
|
||||
|
||||
+6
-10
@@ -4,6 +4,7 @@ set -euo pipefail
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
SESSION_NAME="${SESSION_NAME:-eryao-dev}"
|
||||
ENV_FILE="$ROOT_DIR/.env"
|
||||
ENV_LOADER="$ROOT_DIR/infra/scripts/lib/env.sh"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 {start|stop|restart}"
|
||||
@@ -16,12 +17,9 @@ usage() {
|
||||
}
|
||||
|
||||
load_env_if_exists() {
|
||||
if [ -f "$ENV_FILE" ]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
. "$ENV_FILE"
|
||||
set +a
|
||||
fi
|
||||
# shellcheck disable=SC1090
|
||||
. "$ENV_LOADER"
|
||||
load_env_file "$ENV_FILE"
|
||||
}
|
||||
|
||||
is_port_in_use() {
|
||||
@@ -152,16 +150,14 @@ start() {
|
||||
echo "Warning: ERYAO_DEEPSEEK__API_KEY is empty; deepseek calls may fail." >&2
|
||||
fi
|
||||
|
||||
WEB_CMD="cd '$ROOT_DIR' && PYTHONPATH=backend/src ERYAO_RUNTIME__SERVICE_NAME=web uv run uvicorn backend.src.app:app --host ${ERYAO_WEB__HOST:-0.0.0.0} --port ${WEB_PORT} --workers ${ERYAO_WEB__WORKERS:-2} --log-level ${UVICORN_LOG_LEVEL}"
|
||||
WEB_CMD="cd '$ROOT_DIR' && PYTHONPATH=backend/src ERYAO_RUNTIME__SERVICE_NAME=web uv run uvicorn app:app --host ${ERYAO_WEB__HOST:-0.0.0.0} --port ${WEB_PORT} --workers ${ERYAO_WEB__WORKERS:-2} --log-level ${UVICORN_LOG_LEVEL}"
|
||||
|
||||
WORKER_AGENT_CMD="cd '$ROOT_DIR' && PYTHONPATH=backend/src ERYAO_RUNTIME__SERVICE_NAME=worker-agent uv run taskiq worker core.taskiq.app:worker_agent_broker core.runtime.tasks --workers ${ERYAO_WORKER__GROUPS__AGENT__CONCURRENCY:-2}"
|
||||
WORKER_GENERAL_CMD="cd '$ROOT_DIR' && PYTHONPATH=backend/src ERYAO_RUNTIME__SERVICE_NAME=worker-general uv run taskiq worker core.taskiq.app:worker_general_broker core.runtime.tasks --workers ${ERYAO_WORKER__GROUPS__GENERAL__CONCURRENCY:-1}"
|
||||
|
||||
echo "Starting tmux web process in session '$SESSION_NAME'..."
|
||||
|
||||
tmux new-session -d -s "$SESSION_NAME" -n web "bash -lc \"$WEB_CMD; echo '[web] exited'; exec bash\""
|
||||
tmux new-window -t "$SESSION_NAME" -n worker-agent "bash -lc \"$WORKER_AGENT_CMD; echo '[worker-agent] exited'; exec bash\""
|
||||
tmux new-window -t "$SESSION_NAME" -n worker-general "bash -lc \"$WORKER_GENERAL_CMD; echo '[worker-general] exited'; exec bash\""
|
||||
|
||||
echo ""
|
||||
echo "=== App Started ==="
|
||||
@@ -187,7 +183,7 @@ stop() {
|
||||
|
||||
echo "Checking for orphaned processes..."
|
||||
|
||||
kill_matching_processes "uvicorn" "uv run uvicorn backend.src.app:app"
|
||||
kill_matching_processes "uvicorn" "uv run uvicorn app:app"
|
||||
|
||||
kill_listening_processes "port ${WEB_PORT} listeners" "$WEB_PORT"
|
||||
|
||||
|
||||
Executable
+47
@@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
|
||||
ENV_FILE="$ROOT_DIR/.env"
|
||||
ENV_LOADER="$ROOT_DIR/infra/scripts/lib/env.sh"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 {migrate|init-data|bootstrap}"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " migrate Run database migrations only"
|
||||
echo " init-data Initialize seed data only"
|
||||
echo " bootstrap Run migrations + init-data"
|
||||
echo ""
|
||||
echo "Note: Requires redis service running (docker compose up -d redis)"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [ ! -f "$ENV_FILE" ]; then
|
||||
echo "Error: env file not found at $ENV_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
. "$ENV_LOADER"
|
||||
load_env_file "$ENV_FILE"
|
||||
|
||||
cd "$ROOT_DIR"
|
||||
|
||||
case "${1:-}" in
|
||||
migrate)
|
||||
echo "=== Running Migrations ==="
|
||||
PYTHONPATH=backend/src uv run python -m core.runtime.cli migrate
|
||||
;;
|
||||
init-data)
|
||||
echo "=== Running Init Data ==="
|
||||
PYTHONPATH=backend/src uv run python -m core.runtime.cli init-data
|
||||
;;
|
||||
bootstrap)
|
||||
echo "=== Running Bootstrap ==="
|
||||
PYTHONPATH=backend/src uv run python -m core.runtime.cli bootstrap
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
@@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
|
||||
load_env_file() {
|
||||
local env_file="$1"
|
||||
if [ ! -f "$env_file" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
while IFS= read -r raw_line || [ -n "$raw_line" ]; do
|
||||
local line key value
|
||||
line="${raw_line%$'\r'}"
|
||||
|
||||
[[ -z "${line//[[:space:]]/}" ]] && continue
|
||||
[[ "$line" =~ ^[[:space:]]*# ]] && continue
|
||||
[[ "$line" != *"="* ]] && continue
|
||||
|
||||
key="${line%%=*}"
|
||||
value="${line#*=}"
|
||||
key="${key#${key%%[![:space:]]*}}"
|
||||
key="${key%${key##*[![:space:]]}}"
|
||||
|
||||
if [[ ! "$key" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
value="${value#${value%%[![:space:]]*}}"
|
||||
value="${value%${value##*[![:space:]]}}"
|
||||
|
||||
if [[ "$value" =~ ^\".*\"$ ]]; then
|
||||
value="${value:1:${#value}-2}"
|
||||
elif [[ "$value" =~ ^\'.*\'$ ]]; then
|
||||
value="${value:1:${#value}-2}"
|
||||
fi
|
||||
|
||||
export "$key=$value"
|
||||
done < "$env_file"
|
||||
}
|
||||
Reference in New Issue
Block a user