Spaces:
Running
Running
File size: 17,498 Bytes
d0dd276 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 |
# 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 文件" 中详细展示和解释,此处不再重复,请参考上文。)
|