From f17cd661271b128702e73dd927c7286a7a15372f Mon Sep 17 00:00:00 2001 From: happy game Date: Thu, 8 May 2025 11:05:00 +0800 Subject: [PATCH] =?UTF-8?q?feat(sqlite):=20=E5=B0=86=20SQLite=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E8=BF=81=E7=A7=BB=E5=88=B0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建 data 目录存放 SQLite 数据库 - 更新使用 SQLite 的文档 --- README.md | 12 ++++++++++++ app/database/connection.py | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8132487..dccce1b 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,12 @@ app/ * `-p 8000:8000`: 将容器的 8000 端口映射到主机的 8000 端口。 * `--env-file .env`: 使用 `.env` 文件设置环境变量。 + > 注意:如果使用 SQLite 数据库,需要挂载数据卷以持久化数据: + > ```bash + > docker run -d -p 8000:8000 --env-file .env -v /path/to/data:/app/data gemini-balance + > ``` + > 其中 `/path/to/data` 是主机上的数据存储路径,`/app/data` 是容器内的数据目录。 + #### b) 用现有的docker镜像部署 1. **拉取镜像**: @@ -109,6 +115,12 @@ app/ * `-p 8000:8000`: 将容器的 8000 端口映射到主机的 8000 端口 (根据需要调整)。 * `--env-file .env`: 使用 `.env` 文件设置环境变量 (确保 `.env` 文件存在于执行命令的目录)。 + > 注意:如果使用 SQLite 数据库,需要挂载数据卷以持久化数据: + > ```bash + > docker run -d -p 8000:8000 --env-file .env -v /path/to/data:/app/data ghcr.io/snailyp/gemini-balance:latest + > ``` + > 其中 `/path/to/data` 是主机上的数据存储路径,`/app/data` 是容器内的数据目录。 + ### 本地运行 (适用于开发和测试) 如果您想在本地直接运行源代码进行开发或测试,请按照以下步骤操作: diff --git a/app/database/connection.py b/app/database/connection.py index a434eb2..78cd874 100644 --- a/app/database/connection.py +++ b/app/database/connection.py @@ -1,6 +1,7 @@ """ 数据库连接池模块 """ +from pathlib import Path from databases import Database from sqlalchemy import create_engine, MetaData # from sqlalchemy.orm import sessionmaker # 不再需要 @@ -13,7 +14,11 @@ logger = get_database_logger() # 数据库URL if settings.DATABASE_TYPE == "sqlite": - DATABASE_URL = f"sqlite:///{settings.SQLITE_DATABASE}" + # 确保 data 目录存在 + data_dir = Path("data") + data_dir.mkdir(exist_ok=True) + db_path = data_dir / settings.SQLITE_DATABASE + DATABASE_URL = f"sqlite:///{db_path}" elif settings.DATABASE_TYPE == "mysql": if settings.MYSQL_SOCKET: DATABASE_URL = f"mysql+pymysql://{settings.MYSQL_USER}:{settings.MYSQL_PASSWORD}@/{settings.MYSQL_DATABASE}?unix_socket={settings.MYSQL_SOCKET}"