forked from wangbo/easyai
fix(security): 收紧默认部署暴露面
This commit is contained in:
@@ -19,6 +19,8 @@ DEPLOY_ACCESS=domain DEPLOY_DOMAIN=demo.example.com DEPLOY_HTTPS=false ./start.s
|
||||
DEPLOY_ACCESS=domain DEPLOY_DOMAIN=demo.example.com DEPLOY_HTTPS=true CERTBOT_EMAIL=ops@example.com ./start.sh
|
||||
```
|
||||
|
||||
Linux IP 模式会自动安装并配置 Nginx,浏览器统一访问 `http://IP`。公网只需放行 TCP 80;前端、API、WebSocket 和 ASG 分别通过 `/`、`/api`、`/socket.io`、`/asg-api` 反向代理,容器上游端口默认仅绑定 `127.0.0.1`。
|
||||
|
||||
常用变量:
|
||||
|
||||
| 变量 | 说明 |
|
||||
@@ -61,7 +63,7 @@ DEPLOY_ACCESS=domain DEPLOY_DOMAIN=demo.example.com DEPLOY_HTTPS=true CERTBOT_EM
|
||||
2. 来自可信代理的当前请求地址(仅当请求来源命中 `CONFIG_TRUSTED_PROXY` 时读取转发 Header)。
|
||||
3. 当前请求的直接 `Host`。
|
||||
|
||||
启动和升级脚本会在拉取镜像、重建服务之前校验并持久化 `CONFIG_PUBLIC_API_BASE_URL`:新 IP 部署使用 `http://IP:${SERVER_HTTP_PORT}`;域名部署中 `DEPLOY_HTTPS=false` 使用 `http/ws`,`DEPLOY_HTTPS=true` 使用 `https/wss`,API 路径均为 `/api`。旧环境缺少该配置时,会依次从绝对 `NUXT_PUBLIC_BASE_APIURL`、WebSocket origin、首个 `CONFIG_SECURITY_ORIGIN` 推导。已有合法值保持不变,非法或无法推导时脚本会终止并提示修复。
|
||||
启动和升级脚本会在拉取镜像、重建服务之前校验并持久化 `CONFIG_PUBLIC_API_BASE_URL`:新 IP 部署使用 `http://IP/api`;域名部署中 `DEPLOY_HTTPS=false` 使用 `http/ws`,`DEPLOY_HTTPS=true` 使用 `https/wss`。IP 与域名模式的浏览器接口路径统一为 `/api`、`/socket.io`、`/asg-api`,只由 Nginx 监听地址和公开协议决定 origin。旧环境缺少该配置时,会依次从绝对 `NUXT_PUBLIC_BASE_APIURL`、WebSocket origin、首个 `CONFIG_SECURITY_ORIGIN` 推导。已有合法值保持不变,非法或无法推导时脚本会终止并提示修复。
|
||||
|
||||
已有外部 TLS、手工代理、自定义公开端口或特殊路径时,可在执行脚本前设置高级覆盖:
|
||||
|
||||
@@ -477,32 +479,15 @@ curl https://<你的域名>/asg-api/health
|
||||
SANDBOX_SERVICE_BASE_URL= #脚本运行环境使用的服务地址,默认通过 Docker 内网访问 http://sandbox:8000,不需要配置
|
||||
```
|
||||
|
||||
> 安全默认值:Sandbox API 与 JupyterLab 不映射宿主机端口,Nginx 模板对 `/api/sandbox`、`/sandbox`、`/jupyterlab` 返回 404。不要在公网重新开放这些高权限入口。
|
||||
> 安全默认值:Sandbox API 与 JupyterLab 不映射宿主机端口,Nginx 模板对 `/api/sandbox`、`/sandbox`、`/jupyterlab` 返回 404。Sandbox 使用独立 Docker 网络,不能访问 MongoDB、Redis、RabbitMQ 与治理服务。不要在公网重新开放这些高权限入口,也不要把 Sandbox 接回主业务网络。
|
||||
|
||||
|
||||
### 2025.1.29
|
||||
|
||||
1. 优化日志管理功能,使用单独的容器和模块来进行管理,不占用主进程文件写入性能
|
||||
2. 更新步骤:
|
||||
- 本次`docker-compose.yml`新增dozzle容器,将`docker-compose.yml`文件更新到最新
|
||||
- 在nginx配置文件中(/etc/nginx/conf.d/easyai-proxy.conf)添加如下配置,具体添加位置参考`easyai-proxy.conf.sample`
|
||||
```nginx configuration
|
||||
location /logs-web/ {
|
||||
proxy_pass http://127.0.0.1:8080/logs-web/;
|
||||
proxy_redirect off;
|
||||
proxy_set_header X-Original-Prefix '/logs-web';
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header Host $host;
|
||||
}
|
||||
```
|
||||
3. 默认不启用密码(有风险⚠️,别人可以任意访问你的应用日志)。如果启用密码,取消`docker-compose.yml`中的`DOZZLE_AUTH_PROVIDER: simple`的注释,默认密码为`123456`,用户名为`admin`。
|
||||
4. 修改默认密码,使用下面的命令生成密码:(替换admin和密码为实际的用户名和密码)
|
||||
```bash
|
||||
docker run -it --rm registry.cn-shanghai.aliyuncs.com/easyaigc/dozzle:latest generate admin --password 密码
|
||||
```
|
||||
5. 用生成的密码填入/data/users.yml中的password,并保存后,密码即刻生效
|
||||
2. Dozzle 端口默认绑定 `127.0.0.1`,Nginx 对 `/logs-web` 返回 404,禁止把容器日志查看器直接代理到公网。
|
||||
3. 需要查看日志时,在受信任终端建立 SSH 隧道后访问本机端口,或直接使用 `docker logs`。不要依赖 Dozzle 的无认证模式或默认口令。
|
||||
4. 日志下载功能默认关闭,避免容器日志被批量导出。
|
||||
|
||||
|
||||
### 2025.12.27
|
||||
@@ -598,22 +583,16 @@ git clone --depth 1 https://git.51easyai.com/wangbo/easyai.git
|
||||
cd easyai
|
||||
```
|
||||
|
||||
2. 去掉所有文件后缀的.sample后缀,修改env中环境变量,将下面两个环境变量修改为你的服务器的公网ip,本地局域网方式使用局域网IP
|
||||
```bash
|
||||
NUXT_PUBLIC_BASE_APIURL=http://<你的服务器公网IP或者局域网地址>:3001
|
||||
NUXT_PUBLIC_BASE_SOCKETURL=ws://<你的服务器公网IP或者局域网地址>:3002
|
||||
SERVER_HTTP_BIND_IP=0.0.0.0
|
||||
```
|
||||
3. 开放服务器的3001、3002和3010端口
|
||||
4. [首次执行,后续无需重复执行]添加脚本的执行权限,命令:
|
||||
2. 在安全组或防火墙中仅开放 TCP 80 端口。脚本会自动生成 `.env` 和完整 Nginx 配置,接口统一走 `/api`、`/socket.io`、`/asg-api`。
|
||||
3. [首次执行,后续无需重复执行]添加脚本的执行权限,命令:
|
||||
```bash
|
||||
chmod +x start.sh
|
||||
```
|
||||
5. 执行start.sh脚本,即可自动安装依赖和启动EasyAI应用
|
||||
4. 执行start.sh脚本,选择 IP 模式并输入服务器公网 IP,即可自动安装依赖、启动 EasyAI 并配置 Nginx
|
||||
```bash
|
||||
./start.sh
|
||||
```
|
||||
6. 脚本运行完成无错误,并且提示`EasyAI应用启动成功`表示应用启动成功,打开浏览器输入服务器的公网ip:3010或者局域网IP:3010,即可访问EasyAI应用
|
||||
5. 脚本运行完成无错误后,打开浏览器访问 `http://服务器IP`。
|
||||
|
||||
## Windows 一键启动
|
||||
|
||||
|
||||
Reference in New Issue
Block a user