first commit

This commit is contained in:
wangbo 2025-05-07 15:25:29 +08:00
commit daff487a01
9 changed files with 715 additions and 0 deletions

68
.env Normal file
View File

@ -0,0 +1,68 @@
#############################################
#1、如下配置需要根据实际情况进行配置
##############################################
# 默认服务器地址本地不需要更改云服务需要修改为云端IP并放行对应端口 TODO
NUXT_PUBLIC_BASE_APIURL=http://127.0.0.1:3001
#域名访问使用如下配置,使用/api进行转发并配置nginx代理/api至3001端口
#NUXT_PUBLIC_BASE_APIURL=/api
# 默认的服务器websocket地址本地不需要更改云服务需要修改为云端IP并放行对应端口 TODO
NUXT_PUBLIC_BASE_SOCKETURL=ws://127.0.0.1:3002
#域名访问使用如下配置,配置为/,并代理/socket.io请求到3002端口
#NUXT_PUBLIC_BASE_SOCKETURL=wss://yourwebsite.com/socket.io
# MCP服务器地址
# 使用说明本地或者局域网环境为127.0.0.1:3012 ,局域网环境为局域网IP:3012域名的情况下需要注释点下方的配置
NUXT_PUBLIC_BASE_MCPSOCKETSERVER=ws://127.0.0.1:3012
# 域名访问情况下取消下方的配置,并将NUXT_PUBLIC_BASE_MCPSOCKETSERVER配置为wss://yourwebsite.com/mcpserverHTTP情况ws,https情况下为wss开头
#NUXT_PUBLIC_BASE_MCPSOCKETSERVER=wss://yourwebsite.com/mcpserver
#############################################
#2、以下部分可保持默认如果没有端口冲突生产环境可修改密码
##############################################
#comfyAI-web 前端应用暴露端口访问地址ip:3010访问初始化管理员账号admin,密码123456
WEB_PORT=3010
#REDIS暴露端口
REDIS_PORT=
#MONGO 暴露端口和用户名密码
MONGO_PORT=
MONGO_INITDB_ROOT_USERNAME=username
MONGO_INITDB_ROOT_PASSWORD=password
#ONEAPI 服务暴露端口配置大语言模型初始用户名为root密码为123456
ONEAPI_PORT=3000
#MYSQL暴露端口和初始化密码
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD=6XhxkP7HKi2jymtG
MYSQL_USER=onepai
MYSQL_USER_PASSWORD=2XYupjhIXz7x
#comfy-server后端web服务暴露端口
SERVER_HTTP_PORT=3001
SERVER_WS_PORT=3002
CONFIG_WS_MCP_PORT=3012
#watchtower 监听端口,自动更新容器
WATCHTOWER_PORT=8089
PORTAINER_PORT=8090
PORTAINER_HTTPS_PORT=8091
#网络代理
CONFIG_PROXY_URL=
#版本
VERSION=latest
#日志与调试
LOG_LEVEL=log,error,warn,debug
#Token过期时间单位秒
CONFIG_TOKEN_EXPIRE=1800
CONFIG_JWT_SECRET='this is a very secret secret'
#EasyAI design tools
HTTP_PORT_EASYAI_DESIGN=3008

74
README.md Normal file
View File

@ -0,0 +1,74 @@
## Linux/Ubuntu 一键启动
start.sh 脚本用于服务器一键安装启动EasyAI应用
### 首次安装部署步骤并使用服务器公网IP进行访问
1. 修改env中环境变量将下面两个环境变量修改为你的服务器的公网ip本地局域网方式使用局域网IP
```bash
NUXT_PUBLIC_BASE_APIURL=http://<你的服务器公网IP或者局域网地址>:3001
NUXT_PUBLIC_BASE_SOCKETURL=ws://<你的服务器公网IP或者局域网地址>:3002
```
2. 开放服务器的3000、3001、3002和3010端口
3. [首次执行,后续无需重复执行]添加脚本的执行权限,命令:
```bash
chmod +x start.sh
```
4. 执行start.sh脚本即可自动安装依赖和启动EasyAI应用
```bash
./start.sh
```
5. 脚本运行完成无错误,并且提示`EasyAI应用启动成功`表示应用启动成功打开浏览器输入服务器的公网ip3010或者局域网IP3010即可访问EasyAI应用
### 启用HTTPS
1. [更改为你的域名]修改easyai-proxy.conf中域名51easyai.com为你的域名
2. [修改.env文件]修改如下两个环境变量为如下的对应的值
```bash
NUXT_PUBLIC_BASE_APIURL=/api
NUXT_PUBLIC_BASE_SOCKETURL=wss://<你的域名>/socket.io
```
3. [首次执行,后续无需重复执行]添加执行权限,命令:
```bash
chmod +x https.sh
```
4. 启用HTTPS
```bash
./https.sh
```
### 更新升级
1. [首次执行,后续无需重复执行]添加执行权限,命令:
```bash
chmod +x update.sh
```
2.执行更新
```bash
./update.sh
```
升级记录:
2025.3.11
1. 增加了redis的配置文件提升了生产环境的稳定性
1. 升级了mongoDB的数据挂载方式使用volume挂载避免跨平台的一些数据挂载问题
2. .env增加了版本日志和token参数的配置
### 重要!!!!!!!!老用户必看!!!!!!!!!!!!!!
此版本docker-compose修改了mongo数据库的挂载方式老用户升级务必备份数据
老用户备份好数据后如果要保留原有数据需要将volumes里第一行的# 去掉,将下面的一行(- mongo_data:/data/db )前面加上#注释掉!
```bash
mongo:
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/mongo-aliyun:latest
#省略内容
........
volumes:
# - /usr/local/mongo/data:/data/db # 挂载本地数据
- mongo_data:/data/db # 使用docker volume存储数据提高性能避免兼容性问题
........
```

4
cloudflare.ini Normal file
View File

@ -0,0 +1,4 @@
dns_cloudflare_api_token = zDJ9eoXw2JRbM0vAtodRsVHB0gefD3uSSvUNiPIm
dns_aliyun_access_key = LTAI5tDuBHvRWStgacUNq6HP
dns_aliyun_access_key_secret = gLnQDxU6bruE2mlz4ajJnadNiiL4es

208
docker-compose.yml Normal file
View File

@ -0,0 +1,208 @@
# 非 host 版本, 容器内部使用桥接通信
# (各项参数均有详细的说明,理论情况下保持默认即可运行)
#version: '3'
services:
comfyAI-web:
container_name: comfyAI-web
#更新修改冒号后面的版本号
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/one-ai:${VERSION}
#端口冲突时只需要修改前面的端口比如修改为3011:3010
labels:
- "com.centurylinklabs.watchtower.enable=true"
ports:
- "${WEB_PORT}:3010"
read_only: true
networks:
comfyai:
ipv4_address: 172.21.0.8
depends_on:
- comfy-server
restart: always
environment:
# 默认服务器地址本地不需要更改云服务需要修改为云端IP并放行对应端口
- NUXT_PUBLIC_BASE_APIURL=${NUXT_PUBLIC_BASE_APIURL}
#增加服务端渲染配置,保持默认即可,不需要修改!
- NUXT_PUBLIC_BASE_SSRURL=http://172.21.0.6:3001
# 默认的服务器websocket地址本地不需要更改云服务需要修改为云端IP并放行对应端口
- NUXT_PUBLIC_BASE_SOCKETURL=${NUXT_PUBLIC_BASE_SOCKETURL}
#MCP server 地址
- NUXT_PUBLIC_BASE_MCPSOCKETSERVER=${NUXT_PUBLIC_BASE_MCPSOCKETSERVER}
# 日志大小设置,避免日志文件过大
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
comfy-server:
container_name: comfy-server
# 阿里云镜像地址
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/comfy-server:${VERSION} # 阿里云
labels:
- "com.centurylinklabs.watchtower.enable=true"
ports:
- "${SERVER_HTTP_PORT}:3001" #http端口
- "${SERVER_WS_PORT}:3002" #websocket端口
- "${CONFIG_WS_MCP_PORT}:3012"
read_only: true
networks:
comfyai:
ipv4_address: 172.21.0.6
depends_on:
- mongo
- redis
restart: always
environment:
# MongoDB配置用户管理不会配置的话保持默认即可
- CONFIG_DB_MONGO_URI=mongodb://172.21.0.3:27017
- CONFIG_DB_MONGO_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- CONFIG_DB_MONGO_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
# Redis配置队列缓存不会配置的话保持默认即可
- CONFIG_COMFYUI_QUENE_REDIS_HOST=172.21.0.4
- CONFIG_COMFYUI_QUENE_REDIS_PORT=6379
- CONFIG_COMFYUI_QUENE_REDIS_PASSWORD=
#One API 路径,自动注册大模型账号
- CONFIG_ONEAPIURL=http://172.21.0.5:3000
#日志与调试
- LOG_LEVEL=${LOG_LEVEL}
#Token过期时间单位秒
- CONFIG_TOKEN_EXPIRE=${CONFIG_TOKEN_EXPIRE}
- CONFIG_JWT_SECRET=${CONFIG_JWT_SECRET}
# 代理服务器
- CONFIG_PROXY_URL=${CONFIG_PROXY_URL}
# 日志大小设置,避免日志文件过大
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
# 使用大语言模型的后端接口
new-api:
# image: calciumion/new-api:latest # 原版镜像地址
image: registry.cn-shanghai.aliyuncs.com/easyaigc/new-api:latest #阿里云中转加速
container_name: new-api
restart: always
command: --log-dir /app/logs
ports:
- "${ONEAPI_PORT}:3000"
networks:
comfyai:
ipv4_address: 172.21.0.5
volumes:
- newapi_data:/data
- ./new-api-logs:/app/logs
environment:
- SQL_DSN=${MYSQL_USER}:${MYSQL_USER_PASSWORD}@tcp(172.21.0.7:3306)/new-api # 指向mysql服务
- REDIS_CONN_STRING=redis://redis
- TZ=Asia/Shanghai
# - SESSION_SECRET=random_string # 多机部署时设置,必须修改这个随机字符串!!!!!!!
# - NODE_TYPE=slave # 多机部署的从节点取消注释
# - SYNC_FREQUENCY=60 # 如需定期同步数据库,取消注释
# - FRONTEND_BASE_URL=https://your-domain.com # 多机部署带前端URL时取消注释
depends_on:
- redis
- new-api-db
healthcheck:
test: [ "CMD-SHELL", "wget -q -O - http://localhost:${ONEAPI_PORT}/api/status | grep -o '\"success\":\\s*true' | awk -F: '{print $$2}'" ]
interval: 30s
timeout: 10s
retries: 3
new-api-db:
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/mysql-aliyun:latest # one-hub mysql镜像地址
restart: always
container_name: mysql
volumes:
- newapi_db_mysql_data:/var/lib/mysql # 挂载目录,持久化存储
ports:
- "${MYSQL_PORT}:3306"
networks:
comfyai:
ipv4_address: 172.21.0.7
environment:
TZ: Asia/Shanghai # 设置时区
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}" # 设置 root 用户的密码
MYSQL_USER: ${MYSQL_USER} # 创建专用用户
MYSQL_PASSWORD: "${MYSQL_USER_PASSWORD}" # 设置专用用户密码
MYSQL_DATABASE: new-api # 自动创建数据库
mongo:
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/mongo-aliyun:latest
# image: registry.cn-shanghai.aliyuncs.com/comfy-ai/mongo-aliyun:4.4
container_name: mongo
restart: unless-stopped
privileged: true
# 生产环境建议不要暴露
ports:
- ${MONGO_PORT+${MONGO_PORT}:27017}
networks:
comfyai:
ipv4_address: 172.21.0.3
environment:
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
- MONGO_INITDB_ROOT_USERNAME=${MONGO_INITDB_ROOT_USERNAME}
- MONGO_INITDB_ROOT_PASSWORD=${MONGO_INITDB_ROOT_PASSWORD}
volumes:
# - /usr/local/mongo/data:/data/db
- mongo_data:/data/db # 使用docker volume存储数据提高性能避免兼容性问题
healthcheck:
test: ["CMD", "bash", "-c", "echo > /dev/tcp/localhost/${MONGO_PORT}"]
interval: 30s
retries: 3
timeout: 10s
start_period: 60s
redis:
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/redis-aliyun:latest
container_name: redis
restart: always
volumes:
- ./redis.conf:/etc/redis/redis.conf # 挂载本地 redis.conf
command: [ "redis-server", "/etc/redis/redis.conf" ] # 让 Redis 读取配置文件
# ports:
# - ${REDIS_PORT+${REDIS_PORT}:6379}
read_only: true
networks:
comfyai:
ipv4_address: 172.21.0.4
watchtower:
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/watchtower-aliyun:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --debug --http-api-update
restart: always
environment:
- WATCHTOWER_HTTP_API_TOKEN=sk-ofJoA4atj9dki6AvDtI1qwxdcejjDQ
labels:
- "com.centurylinklabs.watchtower.enable=false"
# ports:
# - "${WATCHTOWER_PORT}:8080"
read_only: true
networks:
comfyai:
ipv4_address: 172.21.0.9
portainer:
image: registry.cn-shanghai.aliyuncs.com/comfy-ai/portainer-ce:2.21.5
container_name: portainer
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
networks:
comfyai:
ipv4_address: 172.21.0.11
# ports:
# - "${PORTAINER_PORT}:9000"
# - "${PORTAINER_HTTPS_PORT}:9443"
read_only: true
volumes:
newapi_data:
newapi_db_mysql_data:
mongo_data:
portainer_data:
networks:
comfyai:
driver: bridge
ipam:
config:
- subnet: 172.21.0.0/16
gateway: 172.21.0.1

122
easyai-proxy.conf Normal file
View File

@ -0,0 +1,122 @@
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# www 域名重定向
server {
listen 80;
listen [::]:80;
server_name www.51easyai.com;
# 添加 HSTS 策略
add_header Strict-Transport-Security "max-age=31536000" always;
# ssl 版本控制
ssl_protocols TLSv1.2 TLSv1.3; # 只启用 TLS 1.2 和 TLS 1.3
# 用于 certbot 验证的配置
location /.well-known/acme-challenge/ {
root /var/www/certbot;
try_files $uri =404;
}
# 更严格的重定向规则
location / {
return 301 https://51easyai.com$request_uri;
}
}
server {
listen 80;
listen [::]:80;
server_name 51easyai.com;
# 手动添加 SSL 配置如果不使用certbot续签证书可以在这里手动配置证书
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
# ssl_certificate /path/to/cert.pem;
# ssl_certificate_key /path/to/key.pem;
# ssl 版本控制
ssl_protocols TLSv1.2 TLSv1.3; # 只启用 TLS 1.2 和 TLS 1.3
# 通用安全头部
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
# 用于 certbot 验证的配置
location /.well-known/acme-challenge/ {
root /var/www/certbot;
try_files $uri =404;
}
location / {
proxy_pass http://127.0.0.1:3010/;
proxy_redirect off; # 修改重定向处理
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;
}
location /api/{
proxy_pass http://127.0.0.1:3001/;
proxy_read_timeout 600s; #绘画任务一般持续时间较长,可以适当增加超时时间
client_max_body_size 100M;
proxy_redirect off; # 修改重定向处理
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;
}
location /socket.io {
proxy_pass http://127.0.0.1:3002;
proxy_read_timeout 300s;
proxy_set_header Host $host;
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_buffering off; # 对于 WebSocket 连接禁用缓冲
}
location /mcpserver {
proxy_pass http://127.0.0.1:3012;
proxy_read_timeout 300s;
proxy_set_header Host $host;
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_buffering off; # 对于 WebSocket 连接禁用缓冲
}
}
# chatapi 大语言模型转发子域名配置
server {
listen 80;
listen [::]:80;
server_name chatapi.51easyai.com;
# 用于 certbot 验证的配置
location /.well-known/acme-challenge/ {
root /var/www/certbot;
try_files $uri =404;
}
location / {
client_max_body_size 64m;
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:3000; # 请根据实际情况修改你的端口
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_read_timeout 300s; # GPT-4 需要较长的超时时间,请自行调整
}
}

59
https.sh Normal file
View File

@ -0,0 +1,59 @@
# 检查 Nginx 是否已安装
if command -v nginx &> /dev/null; then
echo "✅ Nginx 已安装,跳过安装步骤"
else
echo "🚀 安装 Nginx"
apt install -y nginx
fi
# 检查 Certbot 是否已安装
if command -v certbot &> /dev/null; then
echo "✅ Certbot 已安装,跳过安装步骤"
else
echo "🚀 安装 Certbot"
sudo apt install -y certbot
sudo apt install -y python3-certbot-nginx
fi
echo "🚀 复制当前目录的配置文件到nginx配置文件目录"
cp -r ./easyai-proxy.conf /etc/nginx/conf.d/
echo "🚀 重载nginx"
sudo nginx -s reload
# 停止 Nginx 服务以释放 80 端口
sudo nginx -s stop
echo "🚀 使用certbot 自动配置证书"
# 从 Nginx 配置文件中提取所有域名
DOMAINS=$(find /etc/nginx/conf.d/ -name "easyai-proxy.conf" -type f -exec grep "server_name" {} \; | \
grep -v "#" | \
awk '{for(i=2;i<=NF;i++) if($i!=";") print $i}' | \
sed 's/;//g' | \
sort -u | \
tr '\n' ' ')
if [ -n "$DOMAINS" ]; then
# 停止 Nginx 服务
echo "停止 Nginx 服务..."
sudo nginx -s stop
# 构建域名参数字符串
DOMAIN_ARGS=""
for domain in $DOMAINS; do
DOMAIN_ARGS="$DOMAIN_ARGS -d $domain"
done
# 使用 certbot --nginx 插件安装证书
sudo certbot --nginx \
--non-interactive \
--agree-tos \
--email wangbo@51easyai.com \
--rsa-key-size 2048 \
--preferred-challenges http \
--force-renewal \
$DOMAIN_ARGS
# 启动 Nginx 服务
echo "启动 Nginx 服务..."
sudo nginx
fi

73
redis.conf Normal file
View File

@ -0,0 +1,73 @@
# Redis服务器配置
# 绑定IP地址
#解除本地限制 注释bind 127.0.0.1
#bind 127.0.0.1
# 服务器端口号
port 6379
#配置密码,不要可以删掉
# 设置当前数据库不是任何数据库的从库
replicaof no one
#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式Redis以守护进程方式运行,默认为no改为yes意为以守护进程方式启动可后台运行除非kill进程改为yes会使配置文件方式启动redis失败如果后面redis启动失败就将这个注释掉
daemonize no
#当Redis以守护进程方式运行时Redis默认会把pid写入/var/run/redis.pid文件可以通过pidfile指定(自定义)
#pidfile /data/dockerData/redis/run/redis6379.pid
#默认为noredis持久化可以改为yes
appendonly yes
#当客户端闲置多长时间后关闭连接如果指定为0表示关闭该功能 # 增加到300秒或设为0禁用
timeout 300
# 服务器系统默认配置参数影响 Redis 的应用
maxclients 10000
# 减少到60秒更快检测连接问题
tcp-keepalive 60
#指定在多长时间内有多少次更新操作就将数据同步到数据文件可以多个条件配合分别表示900秒15分钟内有1个更改300秒5分钟内有10个更改以及60秒内有10000个更改
save 900 1
save 300 10
save 60 10000
# 按需求调整 Redis 线程数
tcp-backlog 511
# 设置Redis副本实例是否为只读模式
# no副本实例可以进行写操作这在某些场景下可以分担主实例的压力但需要谨慎使用以避免数据不一致
replica-read-only no
# 设置Redis最大内存达到时的数据淘汰策略
# noeviction当内存达到最大限制时Redis不会自动删除任何键这可能导致进一步的操作失败直到手动干预 # 当内存不足时,删除最近最少使用的键
maxmemory-policy noeviction
# 设置数据库数量这里设置为16个数据库
databases 16
# 启用 AOF, AOF常规配置
appendonly yes
# 改为由操作系统决定何时同步减少I/O压力
appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 慢查询阈值
slowlog-log-slower-than 10000
slowlog-max-len 128
# 以系统日志的方式输出日志
# syslog-enabled yes
#指定日志记录级别Redis总共支持四个级别debug、verbose、notice、warning默认为verbose
# loglevel verbose
# 日志输出文件默认为stdout也可以指定文件路径
# logfile stdout
# 日志文件
#logfile /var/log/redis/redis-server.log
# 系统内存调优参数
# 按需求设置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

54
start.sh Normal file
View File

@ -0,0 +1,54 @@
#!/bin/bash
set -e # 发生错误时终止脚本执行
echo "==========================="
echo "🚀 开始自动安装 Docker 和 Docker Compose"
echo "==========================="
# 检查 Docker 是否已安装
if command -v docker &> /dev/null; then
echo "✅ Docker 已安装,跳过安装步骤"
else
# 原有的 Docker 安装步骤
echo "📦 安装依赖..."
sudo apt update -y
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
echo "🔑 添加 Docker GPG 密钥..."
curl -fsSL https://mirrors.nwafu.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
echo "🌍 添加 Docker 源..."
sudo add-apt-repository -y "deb [arch=amd64] https://mirrors.nwafu.edu.cn/docker-ce/linux/ubuntu/ $(lsb_release -cs) stable"
sudo apt-get update -y
echo "🐳 安装 Docker..."
sudo apt-get install -y docker.io
echo "✅ 启动并设置 Docker 开机自启..."
sudo systemctl enable docker
sudo systemctl start docker
fi
# 检查 Docker Compose 是否已安装
if command -v docker-compose &> /dev/null; then
echo "✅ Docker Compose 已安装,跳过安装步骤"
else
echo "⚙️ 安装 Docker Compose..."
sudo mv ./docker-compose-linux-x86_64 /usr/bin/docker-compose
#设置权限
chmod +x /usr/bin/docker-compose
fi
echo "📌 Docker 运行状态:"
sudo systemctl status docker --no-pager || true
echo "📌 Docker Compose 版本:"
docker-compose -v
echo "🎉 Docker 和 Docker Compose 已就绪!"
echo "🚀 启动EasyAI"
sudo docker-compose pull && sudo docker-compose up -d
echo "🎉EasyAI应用启动成功"

53
update.sh Normal file
View File

@ -0,0 +1,53 @@
#!/bin/bash
set -e # 发生错误时终止脚本执行
echo "==========================="
echo "🚀 开始自动安装 Docker 和 Docker Compose"
echo "==========================="
# 检查 Docker 是否已安装
if command -v docker &> /dev/null; then
echo "✅ Docker 已安装,跳过安装步骤"
else
# 原有的 Docker 安装步骤
echo "📦 安装依赖..."
sudo apt update -y
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
echo "🔑 添加 Docker GPG 密钥..."
curl -fsSL https://mirrors.nwafu.edu.cn生成注释ker-ce/linux/ubuntu/gpg | sudo apt-key add -
echo "🌍 添加 Docker 源..."
sudo add-apt-repository -y "deb [arch=amd64] https://mirrors.nwafu.edu.cn生成注释ker-ce/linux/ubuntu/ $(lsb_release -cs) stable"
sudo apt-get update -y
echo "🐳 安装 Docker..."
sudo apt-get install -y docker.io
echo "✅ 启动并设置 Docker 开机自启..."
sudo systemctl enable docker
sudo systemctl start docker
fi
# 检查 Docker Compose 是否已安装
if command -v docker-compose &> /dev/null; then
echo "✅ Docker Compose 已安装,跳过安装步骤"
else
echo "⚙️ 安装 Docker Compose..."
sudo mv ./docker-compose-linux-x86_64 /usr/bin/docker-compose
#设置权限
chmod +x /usr/bin/docker-compose
fi
echo "📌 Docker 运行状态:"
sudo systemctl status docker --no-pager || true
echo "📌 Docker Compose 版本:"
docker-compose -v
echo "🎉 Docker 和 Docker Compose 已就绪!"
echo "🚀 重新启动EasyAI"
sudo docker-compose pull && sudo docker-compose up -d
echo "🎉EasyAI应用更新成功"