Spaces:
Running
Running
# Hajimi 应用 Docker 部署指南 🚀 | |
## 欢迎使用 Hajimi 应用!本指南将引导您使用 Docker 在不同环境(本地电脑、远程服务器、NAS)中快速部署 Hajimi 应用。 | |
## 1. 准备工作 🛠️ | |
### 1.1 安装 Docker | |
请确保您的系统(Windows, macOS, Linux)已安装 Docker。 | |
- **Windows/Linux 用户**:推荐安装 Docker Desktop。 | |
- **macOS 用户**:除了 Docker Desktop 外,也可以考虑使用 [OrbStack](https://orbstack.dev/download) (一款高性能的 Docker Desktop 替代品)。 | |
- **下载地址**:[Docker 官方网站](https://www.docker.com/get-started) | |
- **安装步骤**:按照官方指引完成安装。 | |
### 1.2 获取配置文件 | |
下载部署所需的两个核心配置文件: | |
**[.env文件下载](https://github.com/beijixingxing/hajimi/blob/main/wiki/docker/.env)** | |
**[docker-compose.yaml文件下载](https://github.com/beijixingxing/hajimi/blob/main/wiki/docker/docker-compose.yaml)** | |
### 1.3 创建项目目录并放置配置文件 📂 | |
在您选择的位置创建一个专门用于部署 Hajimi 的文件夹,并将下载的 `.env` 和 `docker-compose.yaml` 文件放入该文件夹中。 | |
- **Mac/Linux**:在终端执行 `mkdir ~/hajimi-app && cd ~/hajimi-app` | |
- **Windows**: | |
- 在命令提示符执行 `mkdir C:\Users\<用户名>\hajimi-app && cd C:\Users\<用户名>\hajimi-app` (请将 `<用户名>` 替换为您的 Windows 用户名) | |
- 或在 PowerShell 执行 `mkdir $HOME\hajimi-app; cd $HOME\hajimi-app` | |
或者,您也可以直接在桌面或其他位置创建 `hajimi-app` 文件夹,然后将下载的两个文件移动进去。 | |
**重要提示**:后续的所有命令行操作,除非特别说明,都应在此 `hajimi-app` 文件夹内执行。 | |
### 1.4 通用配置步骤 ⚙️ | |
在启动服务之前,您需要根据自己的需求修改配置文件。请使用文本编辑器打开 `hajimi-app` 文件夹中的 `.env` 和 `docker-compose.yaml` 文件。 | |
#### 1.4.1 修改 .env 文件 | |
这是存放敏感信息和应用基本配置的地方。 | |
```dotenv | |
# --- 必填项 --- | |
# 设置你的 Gemini API 密钥,可以设置多个,用英文逗号隔开 | |
GEMINI_API_KEYS=key1,key2,key3 # <= 替换为你的真实密钥 | |
# 设置应用的登录密码 | |
PASSWORD=123 # <= 设置一个安全的密码,默认密码123,请务必修改! | |
# --- 可选项 (Vertex AI) --- | |
# 是否启用 Google Vertex AI (默认关闭) | |
ENABLE_VERTEX=false # <= 如需开启,改为 true | |
# 如果开启 Vertex AI,请填入完整的 Google Cloud 服务账号 JSON 密钥内容 | |
# 注意:整个 JSON 内容需要包含在英文单引号 ' ' 内部 | |
GOOGLE_CREDENTIALS_JSON='JSON 密钥内容' # <= 粘贴你的 JSON 密钥内容 | |
``` | |
**提示**:`.env` 文件中还包含更多高级配置项,您可以根据末尾的 “附录:参考环境变量详情” 按需调整。 | |
#### 1.4.2 按需修改 docker-compose.yaml 文件 | |
这个文件定义了 Docker 如何运行 Hajimi 服务。主要关注以下几点: | |
* **端口映射**:如果 `7860` 端口已被其他应用占用,您需要修改端口映射。 | |
* **网络代理**:如果您的部署环境无法直接访问 Google API (或其他所需外部服务),需要配置代理。 | |
* **数据持久化 (重要!)**:默认配置已启用数据持久化。 | |
* **时区**:默认配置为中国时区。 | |
```yaml | |
services: | |
hajimi-app: # 服务名,可自定义 | |
image: beijixingxing/hajimi:latest | |
container_name: hajimi-app # 固定容器名方便监控 | |
labels: | |
- "com.centurylinklabs.watchtower.enable=true" # 启用自动更新 | |
ports: | |
- "7860:7860" # 端口映射:冒号左边是宿主机端口(可改),右边是容器内端口(固定7860)。 | |
# 如果 7860 端口冲突,修改冒号左边的数字,例如 "17860:7860" | |
env_file: | |
- .env # 加载 .env 文件中的环境变量 | |
environment: | |
- TZ=Asia/Shanghai # 时区配置,默认中国时区。如需修改,例如:America/New_York | |
- ENABLE_STORAGE=true # 应用层面的数据持久化开关,配合 volumes 使用 | |
# --- 网络代理 (按需取消注释并修改) --- | |
# 如果需要 HTTP 代理: | |
# HTTP_PROXY: "http://your_proxy_address:port" # <= 例如 "http://127.0.0.1:7890" | |
# 如果需要 HTTPS 代理 (通常与 HTTP 代理相同): | |
# HTTPS_PROXY: "http://your_proxy_address:port" # <= 例如 "http://127.0.0.1:7890" | |
# 注意:在 Windows/Mac 的 Docker Desktop 环境下,若代理在宿主机上,可尝试使用 "host.docker.internal"作为地址, | |
# 例如: HTTP_PROXY: "http://host.docker.internal:7890" | |
# 在 Linux 服务器上,请直接填写代理服务器的 IP 地址和端口。 | |
volumes: # 数据持久化配置 | |
- ./settings:/hajimi/settings # 将容器内的 /hajimi/settings 目录映射到当前项目文件夹下的 settings 子目录。 | |
# 这会保存应用的所有重要配置和数据,即使容器更新或重启也不会丢失。 | |
# 首次启动后,您会在 hajimi-app 文件夹下看到一个新创建的 settings 文件夹。 | |
restart: unless-stopped # 容器退出时自动重启,除非是手动停止的。 | |
# 🆙 自动更新监控服务(默认每小时检查一次) | |
watchtower: | |
image: containrrr/watchtower | |
volumes: | |
- /var/run/docker.sock:/var/run/docker.sock # 必须的Docker连接配置 | |
environment: | |
- TZ=Asia/Shanghai # 时区配置 | |
- WATCHTOWER_LABEL_ENABLE=true # 只监控带有 "com.centurylinklabs.watchtower.enable=true" 标签的容器 | |
- WATCHTOWER_POLL_INTERVAL=3600 # 检查间隔秒数(3600秒 = 1小时) | |
- WATCHTOWER_CLEANUP=true # 更新后自动删除旧镜像 | |
restart: unless-stopped | |
``` | |
配置完成后,请保存文件。 | |
## 2. 选择部署方式并启动服务 ▶️ | |
根据您的环境选择相应的部署方式: | |
### 2.1 本地电脑部署 (Docker Desktop / OrbStack) | |
1. 打开终端 (Mac/Linux) 或命令提示符/PowerShell (Windows)。 | |
2. 进入项目目录:使用 `cd` 命令切换到您之前创建的 `hajimi-app` 文件夹。 | |
* **示例 (Mac/Linux)**:`cd ~/hajimi-app` | |
* **示例 (Windows CMD)**:`cd C:\Users\<用户名>\hajimi-app` | |
* **示例 (Windows PowerShell)**:`cd $HOME\hajimi-app` | |
3. 启动服务:执行以下命令以后台模式启动服务。 | |
```bash | |
docker compose up -d | |
``` | |
Docker 会自动拉取镜像并根据 `docker-compose.yaml` 和 `.env` 文件启动容器。 | |
### 2.2 远程服务器部署 (SSH) | |
1. 使用 SSH 工具(如 `ssh` 命令、PuTTY、Termius 等)连接到您的远程服务器。 | |
2. 创建并进入项目目录: | |
```bash | |
# 创建目录 (路径可自定义) 并进入该目录 | |
mkdir -p /path/to/your/hajimi-app && cd /path/to/your/hajimi-app | |
# 例如: mkdir -p /opt/hajimi-app && cd /opt/hajimi-app | |
``` | |
3. 直接下载配置文件: | |
```bash | |
# 下载 .env 文件模板 | |
wget https://raw.githubusercontent.com/beijixingxing/hajimi/main/wiki/docker/.env | |
# 下载 docker-compose.yaml 文件 | |
wget -O docker-compose.yaml https://raw.githubusercontent.com/beijixingxing/hajimi/main/wiki/docker/docker-compose.yaml | |
``` | |
或使用 `curl`: | |
```bash | |
curl -o .env https://raw.githubusercontent.com/beijixingxing/hajimi/main/wiki/docker/.env | |
curl -o docker-compose.yaml https://raw.githubusercontent.com/beijixingxing/hajimi/main/wiki/docker/docker-compose.yaml | |
``` | |
4. **重要:编辑配置文件** | |
使用文本编辑器(如 `nano` 或 `vim`)修改下载的 `.env` 文件和 `docker-compose.yaml` 文件。 | |
* **必须修改 `.env` 文件**: | |
```bash | |
nano .env | |
``` | |
至少需要修改 `GEMINI_API_KEYS` 和 `PASSWORD`。根据需要调整其他配置。 | |
* **按需修改 `docker-compose.yaml` 文件**(例如端口、代理): | |
```bash | |
nano docker-compose.yaml | |
``` | |
参考 “1.4.2 按需修改 docker-compose.yaml 文件” 部分的说明。 | |
5. 验证文件: | |
```bash | |
ls -l # 应看到 .env 和 docker-compose.yaml 两个文件 | |
cat .env # 检查 .env 配置文件内容是否已按需修改 | |
``` | |
6. 启动服务:在 SSH 终端中,确保您位于项目目录下,执行启动命令。 | |
```bash | |
docker compose up -d | |
``` | |
### 2.3 NAS 部署 (通过 Docker Compose UI) | |
注意:不同 NAS 品牌的 Docker UI(如群晖的 Container Manager, QNAP 的 Container Station)操作略有不同,以下为通用步骤。 | |
1. 通过 NAS 的文件管理工具(如 File Station)在 Docker 应用的数据存储区(通常是 `/volume1/docker/` 或类似路径)创建一个 `hajimi` 或 `hajimi-app` 文件夹。 | |
2. 将您在本地电脑上按照 “1.4 通用配置步骤” **修改好**的 `.env` 和 `docker-compose.yaml` 文件上传到 NAS 上刚创建的文件夹中。 | |
3. 打开 NAS 的 Docker 管理应用(如 Container Manager)。 | |
4. 寻找 “项目” (Project)、“应用” (Application) 或 “Compose” 相关的选项。 | |
5. 选择 “创建” (Create) 或 “导入” (Import)。 | |
6. 设置项目名称(如 `hajimi`),并选择已上传 `docker-compose.yaml` 文件所在的文件夹路径。 | |
7. 系统通常会自动识别 `docker-compose.yaml` 文件。确认配置无误后,点击 “创建”、“部署” 或 “运行”。 | |
8. NAS 的 Docker UI 会根据配置文件拉取镜像并启动容器。 | |
## 3. 访问与验证 ✅ | |
服务启动后,稍等片刻让应用完全启动。 | |
1. **本地访问**:打开浏览器,访问 `http://localhost:7860`(如果您修改了端口,请使用修改后的端口)。 | |
2. **服务器/NAS 访问**:打开浏览器,访问 `http://<服务器或NAS的IP地址>:7860`(请将 `<服务器或NAS的IP地址>` 替换为实际 IP,端口同样根据配置修改)。 | |
3. **API 端点**:应用的 API (兼容 OpenAI 格式) 可以在以下地址访问:`http://<访问地址>:7860/v1` | |
看到登录界面并能使用您在 `.env` 文件中设置的 `PASSWORD` 成功登录,即表示部署成功! | |
## 4. 常见问题与解决 (FAQ) ❓ | |
### 4.1 Q1: 启动时提示端口已被占用 (Port is already allocated) | |
- **原因**:`7860` 端口(或其他您配置的端口)已被系统上另一个程序使用。 | |
- **排查**: | |
- **Mac/Linux**:在终端运行 `sudo lsof -i :7860` | |
- **Windows**:在命令提示符或 PowerShell 运行 `netstat -ano | findstr "7860"` | |
- **解决方案**: | |
- 停止占用该端口的程序。 | |
- 或者,修改 `hajimi-app` 文件夹中 `docker-compose.yaml` 文件里的 `ports` 部分,将冒号左侧的 `7860` 改为其他未被占用的端口(如 `17860`),例如:`ports: - "17860:7860"`。保存后需要重新启动服务 (`docker compose down` 然后 `docker compose up -d`)。 | |
### 4.2 Q2: 应用无法连接外部服务 (如 Google API) | |
- **原因**:部署环境的网络无法直接访问所需服务,通常需要设置网络代理。 | |
- **解决方案**: | |
- **确认代理**:确保您有可用的 HTTP/HTTPS 代理服务器地址和端口。 | |
- **配置代理**:编辑 `hajimi-app` 文件夹中的 `docker-compose.yaml` 文件,在 `hajimi-app` 服务的 `environment` 部分取消 `HTTP_PROXY` 和 `HTTPS_PROXY` 的注释 (`#`),并填入您的代理地址。例如: | |
```yaml | |
environment: | |
# ... 其他环境变量 ... | |
HTTP_PROXY: "http://192.168.1.100:7890" | |
HTTPS_PROXY: "http://192.168.1.100:7890" | |
# 如果代理在宿主机上 (Docker Desktop for Win/Mac), 可尝试: | |
# HTTP_PROXY: "http://host.docker.internal:7890" | |
# HTTPS_PROXY: "http://host.docker.internal:7890" | |
``` | |
- **重启服务**:保存文件后,在项目目录下执行 `docker compose down` 然后 `docker compose up -d`。 | |
- **无需代理**:如果您的网络环境不需要代理,请确保 `HTTP_PROXY` 和 `HTTPS_PROXY` 配置被注释掉(前面有 `#`)或直接删除。 | |
## 5. 更新指南 🔄 | |
### 5.1 自动更新 (内置) | |
`docker-compose.yaml` 文件中已包含 Watchtower 服务,用于自动检测并更新 Hajimi 应用的 Docker 镜像。默认设置是每小时检查一次。如果检测到新版本,它会自动拉取并重启容器。 | |
### 5.2 手动更新 | |
如果您想立即更新到最新版本或禁用了自动更新,可以按以下步骤手动更新: | |
1. 进入项目目录:使用 `cd` 命令切换到包含 `docker-compose.yaml` 文件的 `hajimi-app` 目录。 | |
```bash | |
# 示例 (路径需替换为您的实际路径) | |
cd /path/to/your/hajimi-app | |
``` | |
2. 拉取最新镜像: | |
```bash | |
docker compose pull hajimi-app # 或者直接 docker compose pull,会拉取所有服务的最新镜像 | |
``` | |
这将只拉取 `hajimi-app` 服务的新镜像版本(如果存在)。 | |
3. 停止并重新创建容器: | |
```bash | |
# 停止当前运行的容器 | |
docker compose down | |
# 使用新镜像重新创建并启动容器 | |
docker compose up -d | |
``` | |
或者,更简洁的方式是直接执行 `docker compose up -d --pull`,Compose 会先尝试拉取新镜像,然后如果镜像有更新,会自动重新创建容器。 | |
4. **可选的强制清理命令(仅在遇到问题时使用)**: | |
```bash | |
# 警告:以下命令会停止并删除容器、网络。 --rmi all 会删除服务相关的镜像。 | |
# 请谨慎操作,并确保您了解其影响。 | |
# docker compose down --rmi all | |
# 然后重新拉取并启动 | |
# docker compose pull | |
# docker compose up -d | |
``` | |
**建议**:首次部署时,尽量使用默认配置(除了必要的 API 密钥和密码),确保服务能正常运行。稳定运行后,再根据需要调整端口、代理或其他高级配置。 | |
--- | |
## 附录:参考配置文件详情 | |
以下是 `.env` 和 `docker-compose.yaml` 文件的参考内容,其中包含更多可配置项的说明。在实际部署中,您主要通过修改 `hajimi-app` 目录下的这两个文件来进行配置。 | |
### A.1 参考环境变量详情 (.env 文件) | |
```dotenv | |
# --- 🌟 基础安全配置 --- | |
# 访问密码,用于访问服务的身份验证 (必填,请修改为强密码) | |
PASSWORD=123 | |
# Web UI修改设置密码,如果留空,则默认值为 PASSWORD 的值 | |
WEB_PASSWORD= | |
# --- ⏰ 时区配置 --- | |
# (此项通常在 docker-compose.yaml 中配置,此处列出供参考,但 .env 文件中的 TZ 不会被 Hajimi 应用直接使用) | |
# TZ=Asia/Shanghai | |
# --- 🤖 AI Studio核心配置 --- | |
# 用英文逗号分隔多个API KEY,可使用多个Gemini API密钥 (必填) | |
GEMINI_API_KEYS=key1,key2,key3 | |
# 每分钟最多请求次数,限制系统每分钟接收的请求数量 | |
MAX_REQUESTS_PER_MINUTE=30 | |
# 每天每个IP的请求上限,防止单个 IP 过度请求 | |
MAX_REQUESTS_PER_DAY_PER_IP=600 | |
# 假装实时传输,用于解决某些情况下客户端断开连接的问题 | |
FAKE_STREAMING=true | |
# 每个KEY每天最多用100次,限制单个 API 密钥在一天内的使用次数 | |
API_KEY_DAILY_LIMIT=100 | |
# 生成迷惑字符串,可在转发消息中添加随机字符串伪装消息,防止被检测 | |
RANDOM_STRING=true | |
# 迷惑字符串长度,随机字符串的长度 | |
RANDOM_STRING_LENGTH=5 | |
# 默认并发请求数,系统默认同时处理的请求数量 | |
CONCURRENT_REQUESTS=1 | |
# 请求失败时增加的并发请求数,请求失败后增加的并发处理数量 | |
INCREASE_CONCURRENT_ON_FAILURE=0 | |
# 允许的最大并发请求数,系统允许同时处理的最大请求数量 | |
MAX_CONCURRENT_REQUESTS=3 | |
# 是否启用联网模式,决定是否使用联网搜索功能 | |
SEARCH_MODE=false | |
# 联网模式提示词,在联网搜索时的提示信息 | |
SEARCH_PROMPT='(使用搜索工具联网搜索,需要在content中结合搜索内容)' | |
# 需要屏蔽的模型名称,多个模型用英文逗号分隔 | |
BLOCKED_MODELS= | |
# 空响应重试次数,当请求返回空响应时的重试次数 | |
MAX_EMPTY_RESPONSES=5 | |
# --- 📋 白名单配置 --- | |
# 模型白名单,仅允许列表中的模型通过,多个用英文逗号分隔 (留空则不限制) | |
WHITELIST_MODELS= | |
# 请求头User-Agent白名单模式,仅允许特定的User-Agent访问 (留空则不限制) | |
WHITELIST_USER_AGENT= | |
# --- 📝 缓存配置 --- | |
# 切换缓存计算方法,默认为 false (使用快速但不精确的缓存键),true 表示使用精确但稍慢的缓存键 | |
PRECISE_CACHE=false | |
# 📦 持久化配置(已集成在compose文件里) | |
# 持久化存储目录,默认为 /hajimi/settings/ | |
STORAGE_DIR=/hajimi/settings/ | |
# 是否启用持久化,默认为 false | |
ENABLE_STORAGE=false | |
# --- 🔑 Vertex高级配置 --- | |
# 是否启用vertex,决定是否使用Vertex AI服务,默认关闭 | |
ENABLE_VERTEX=false | |
# 填入完整的Google凭证JSON (base64编码或直接JSON字符串),用于访问Vertex AI服务的凭证 | |
# 如果直接使用JSON字符串,请确保其被英文单引号包裹且内部引号已转义,或考虑将其作为 Docker Secret 管理 | |
GOOGLE_CREDENTIALS_JSON='' | |
``` | |
### A.2 参考 docker-compose.yaml 文件内容 | |
(此内容已在教程主体部分的 "1.4.2 按需修改 docker-compose.yaml 文件" 中详细展示和解释,此处不再重复,请参考上文。) | |