mirror of
https://github.com/cnlimiter/codex-register.git
synced 2026-09-07 08:26:38 +08:00
docs(readme): 更新 README docker-compose 以包含环境变量配置说明
This commit is contained in:
@@ -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
|
||||||
@@ -63,17 +63,37 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: 检出代码(获取附加文件)
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: 下载所有构建产物
|
- name: 下载所有构建产物
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
path: dist/
|
path: dist/
|
||||||
|
|
||||||
- name: 整理文件
|
- name: 整理文件并打包 zip
|
||||||
run: |
|
run: |
|
||||||
mkdir -p release
|
mkdir -p release
|
||||||
|
# 为每个平台二进制文件打包成 zip
|
||||||
find dist/ -type f | while read f; do
|
find dist/ -type f | while read f; do
|
||||||
name=$(basename "$f")
|
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
|
done
|
||||||
ls -lh release/
|
ls -lh release/
|
||||||
|
|
||||||
@@ -83,7 +103,7 @@ jobs:
|
|||||||
files: release/*
|
files: release/*
|
||||||
generate_release_notes: true
|
generate_release_notes: true
|
||||||
body: |
|
body: |
|
||||||
## OpenAI/Codex CLI 自动注册系统
|
## OpenAI 自动注册系统 v2
|
||||||
|
|
||||||
### 下载说明
|
### 下载说明
|
||||||
| 平台 | 文件 |
|
| 平台 | 文件 |
|
||||||
@@ -102,4 +122,10 @@ jobs:
|
|||||||
|
|
||||||
# 指定端口
|
# 指定端口
|
||||||
./codex-register --port 8080
|
./codex-register --port 8080
|
||||||
|
|
||||||
|
# 调试模式(热重载)
|
||||||
|
./codex-register --debug
|
||||||
|
|
||||||
|
# 设置 Web UI 访问密钥
|
||||||
|
./codex-register --access-password mypassword
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -77,6 +77,23 @@ uv sync
|
|||||||
pip install -r requirements.txt
|
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
|
### 启动 Web UI
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
+13
-5
@@ -5,14 +5,22 @@ services:
|
|||||||
build: .
|
build: .
|
||||||
container_name: codex-register
|
container_name: codex-register
|
||||||
ports:
|
ports:
|
||||||
- "8000:8000"
|
- "${APP_PORT:-8000}:8000"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
- ./logs:/app/logs
|
- ./logs:/app/logs
|
||||||
environment:
|
environment:
|
||||||
- PYTHONUNBUFFERED=1
|
- 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
|
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")
|
env_url = os.environ.get("APP_DATABASE_URL") or os.environ.get("DATABASE_URL")
|
||||||
if env_url:
|
if env_url:
|
||||||
settings_dict["database_url"] = _normalize_database_url(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
|
return settings_dict
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[Settings] 从数据库加载设置失败: {e},使用默认值")
|
print(f"[Settings] 从数据库加载设置失败: {e},使用默认值")
|
||||||
|
|||||||
@@ -24,8 +24,28 @@ from src.database.init_db import initialize_database
|
|||||||
from src.config.settings import get_settings
|
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():
|
def setup_application():
|
||||||
"""设置应用程序"""
|
"""设置应用程序"""
|
||||||
|
# 加载 .env 文件(优先级低于已有环境变量)
|
||||||
|
_load_dotenv()
|
||||||
|
|
||||||
# 确保数据目录和日志目录在可执行文件所在目录(打包后也适用)
|
# 确保数据目录和日志目录在可执行文件所在目录(打包后也适用)
|
||||||
data_dir = project_root / "data"
|
data_dir = project_root / "data"
|
||||||
logs_dir = project_root / "logs"
|
logs_dir = project_root / "logs"
|
||||||
|
|||||||
Reference in New Issue
Block a user