mirror of
https://github.com/cnlimiter/codex-register.git
synced 2026-06-25 17:24:06 +08:00
docs(readme): 更新 README docker-compose 以包含环境变量配置说明
This commit is contained in:
19
.env.example
Normal file
19
.env.example
Normal file
@@ -0,0 +1,19 @@
|
||||
# OpenAI 自动注册系统 - 环境变量配置示例
|
||||
# 复制此文件为 .env 并填写对应值
|
||||
|
||||
# ── Web UI 监听地址 ──────────────────────────────────────────
|
||||
# 监听主机(默认 0.0.0.0)
|
||||
# APP_HOST=0.0.0.0
|
||||
|
||||
# 监听端口(默认 8000)
|
||||
# APP_PORT=8000
|
||||
|
||||
# Web UI 访问密钥(默认 admin123,强烈建议修改)
|
||||
# APP_ACCESS_PASSWORD=your_secret_password
|
||||
|
||||
# ── 数据库 ───────────────────────────────────────────────────
|
||||
# 本地 SQLite(默认,无需配置)
|
||||
# APP_DATABASE_URL=data/database.db
|
||||
|
||||
# 远程 PostgreSQL(优先)
|
||||
# APP_DATABASE_URL=postgresql://user:password@host:5432/dbname
|
||||
32
.github/workflows/build.yml
vendored
32
.github/workflows/build.yml
vendored
@@ -63,17 +63,37 @@ jobs:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- name: 检出代码(获取附加文件)
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: 下载所有构建产物
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
path: dist/
|
||||
|
||||
- name: 整理文件
|
||||
- name: 整理文件并打包 zip
|
||||
run: |
|
||||
mkdir -p release
|
||||
# 为每个平台二进制文件打包成 zip
|
||||
find dist/ -type f | while read f; do
|
||||
name=$(basename "$f")
|
||||
cp "$f" "release/$name"
|
||||
# 根据文件名确定平台标识
|
||||
case "$name" in
|
||||
*windows*) platform=$(echo "$name" | sed 's/\.[^.]*$//') ;;
|
||||
*linux*) platform="$name" ;;
|
||||
*macos*) platform="$name" ;;
|
||||
*) platform="$name" ;;
|
||||
esac
|
||||
tmpdir="tmp_${platform}"
|
||||
mkdir -p "$tmpdir"
|
||||
cp "$f" "$tmpdir/"
|
||||
cp README.md "$tmpdir/README.md"
|
||||
cp .env.example "$tmpdir/.env.example"
|
||||
[ -f LICENSE ] && cp LICENSE "$tmpdir/LICENSE" || true
|
||||
cd "$tmpdir"
|
||||
zip -r "../release/${platform}.zip" .
|
||||
cd ..
|
||||
rm -rf "$tmpdir"
|
||||
done
|
||||
ls -lh release/
|
||||
|
||||
@@ -83,7 +103,7 @@ jobs:
|
||||
files: release/*
|
||||
generate_release_notes: true
|
||||
body: |
|
||||
## OpenAI/Codex CLI 自动注册系统
|
||||
## OpenAI 自动注册系统 v2
|
||||
|
||||
### 下载说明
|
||||
| 平台 | 文件 |
|
||||
@@ -102,4 +122,10 @@ jobs:
|
||||
|
||||
# 指定端口
|
||||
./codex-register --port 8080
|
||||
|
||||
# 调试模式(热重载)
|
||||
./codex-register --debug
|
||||
|
||||
# 设置 Web UI 访问密钥
|
||||
./codex-register --access-password mypassword
|
||||
```
|
||||
|
||||
17
README.md
17
README.md
@@ -77,6 +77,23 @@ uv sync
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
### 环境变量配置(可选)
|
||||
|
||||
复制 `.env.example` 为 `.env`,按需填写:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
| 变量 | 说明 | 默认值 |
|
||||
|------|------|--------|
|
||||
| `APP_HOST` | 监听主机 | `0.0.0.0` |
|
||||
| `APP_PORT` | 监听端口 | `8000` |
|
||||
| `APP_ACCESS_PASSWORD` | Web UI 访问密钥 | `admin123` |
|
||||
| `APP_DATABASE_URL` | 数据库连接字符串 | `data/database.db` |
|
||||
|
||||
> 优先级:命令行参数 > 环境变量(`.env`)> 数据库设置 > 默认值
|
||||
|
||||
### 启动 Web UI
|
||||
|
||||
```bash
|
||||
|
||||
@@ -5,14 +5,22 @@ services:
|
||||
build: .
|
||||
container_name: codex-register
|
||||
ports:
|
||||
- "8000:8000"
|
||||
- "${APP_PORT:-8000}:8000"
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
- ./logs:/app/logs
|
||||
environment:
|
||||
- PYTHONUNBUFFERED=1
|
||||
# Web UI 配置(也可在 .env 文件中设置)
|
||||
- APP_HOST=0.0.0.0
|
||||
- APP_PORT=${APP_PORT:-8000}
|
||||
- APP_ACCESS_PASSWORD=${APP_ACCESS_PASSWORD:-admin123}
|
||||
# 数据库(默认 SQLite,如需 PostgreSQL 取消下方注释)
|
||||
# - APP_DATABASE_URL=postgresql://user:password@db:5432/codex
|
||||
# HTTP 代理(如需代理取消下方注释)
|
||||
# - HTTP_PROXY=http://your-proxy:port
|
||||
# - HTTPS_PROXY=http://your-proxy:port
|
||||
env_file:
|
||||
- path: .env
|
||||
required: false
|
||||
restart: unless-stopped
|
||||
# 如果需要代理,取消下面注释并修改地址
|
||||
# environment:
|
||||
# - HTTP_PROXY=http://your-proxy:port
|
||||
# - HTTPS_PROXY=http://your-proxy:port
|
||||
|
||||
@@ -535,6 +535,18 @@ def _load_settings_from_db() -> Dict[str, Any]:
|
||||
env_url = os.environ.get("APP_DATABASE_URL") or os.environ.get("DATABASE_URL")
|
||||
if env_url:
|
||||
settings_dict["database_url"] = _normalize_database_url(env_url)
|
||||
env_host = os.environ.get("APP_HOST")
|
||||
if env_host:
|
||||
settings_dict["webui_host"] = env_host
|
||||
env_port = os.environ.get("APP_PORT")
|
||||
if env_port:
|
||||
try:
|
||||
settings_dict["webui_port"] = int(env_port)
|
||||
except ValueError:
|
||||
pass
|
||||
env_password = os.environ.get("APP_ACCESS_PASSWORD")
|
||||
if env_password:
|
||||
settings_dict["webui_access_password"] = env_password
|
||||
return settings_dict
|
||||
except Exception as e:
|
||||
print(f"[Settings] 从数据库加载设置失败: {e},使用默认值")
|
||||
|
||||
20
webui.py
20
webui.py
@@ -24,8 +24,28 @@ from src.database.init_db import initialize_database
|
||||
from src.config.settings import get_settings
|
||||
|
||||
|
||||
def _load_dotenv():
|
||||
"""加载 .env 文件(可执行文件同目录或项目根目录)"""
|
||||
env_path = project_root / ".env"
|
||||
if not env_path.exists():
|
||||
return
|
||||
with open(env_path, encoding="utf-8") as f:
|
||||
for line in f:
|
||||
line = line.strip()
|
||||
if not line or line.startswith("#") or "=" not in line:
|
||||
continue
|
||||
key, _, value = line.partition("=")
|
||||
key = key.strip()
|
||||
value = value.strip().strip('"').strip("'")
|
||||
if key and key not in os.environ:
|
||||
os.environ[key] = value
|
||||
|
||||
|
||||
def setup_application():
|
||||
"""设置应用程序"""
|
||||
# 加载 .env 文件(优先级低于已有环境变量)
|
||||
_load_dotenv()
|
||||
|
||||
# 确保数据目录和日志目录在可执行文件所在目录(打包后也适用)
|
||||
data_dir = project_root / "data"
|
||||
logs_dir = project_root / "logs"
|
||||
|
||||
Reference in New Issue
Block a user