From daff487a01d037daab31d982def85ae140b3eeaf Mon Sep 17 00:00:00 2001 From: wangbo Date: Wed, 7 May 2025 15:25:29 +0800 Subject: [PATCH] first commit --- .env | 68 +++++++++++++++ README.md | 74 ++++++++++++++++ cloudflare.ini | 4 + docker-compose.yml | 208 +++++++++++++++++++++++++++++++++++++++++++++ easyai-proxy.conf | 122 ++++++++++++++++++++++++++ https.sh | 59 +++++++++++++ redis.conf | 73 ++++++++++++++++ start.sh | 54 ++++++++++++ update.sh | 53 ++++++++++++ 9 files changed, 715 insertions(+) create mode 100644 .env create mode 100644 README.md create mode 100644 cloudflare.ini create mode 100644 docker-compose.yml create mode 100644 easyai-proxy.conf create mode 100644 https.sh create mode 100644 redis.conf create mode 100644 start.sh create mode 100644 update.sh diff --git a/.env b/.env new file mode 100644 index 0000000..71d4009 --- /dev/null +++ b/.env @@ -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/mcpserver,HTTP情况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 + + + + + + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..03071c5 --- /dev/null +++ b/README.md @@ -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应用启动成功`表示应用启动成功,打开浏览器输入服务器的公网ip:3010或者局域网IP:3010,即可访问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存储数据,提高性能,避免兼容性问题 +........ + +``` \ No newline at end of file diff --git a/cloudflare.ini b/cloudflare.ini new file mode 100644 index 0000000..223a936 --- /dev/null +++ b/cloudflare.ini @@ -0,0 +1,4 @@ +dns_cloudflare_api_token = zDJ9eoXw2JRbM0vAtodRsVHB0gefD3uSSvUNiPIm + +dns_aliyun_access_key = LTAI5tDuBHvRWStgacUNq6HP +dns_aliyun_access_key_secret = gLnQDxU6bruE2mlz4ajJnadNiiL4es \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..24f06f9 --- /dev/null +++ b/docker-compose.yml @@ -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 + + diff --git a/easyai-proxy.conf b/easyai-proxy.conf new file mode 100644 index 0000000..7d7a6a9 --- /dev/null +++ b/easyai-proxy.conf @@ -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 需要较长的超时时间,请自行调整 + } +} diff --git a/https.sh b/https.sh new file mode 100644 index 0000000..2c47d83 --- /dev/null +++ b/https.sh @@ -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 \ No newline at end of file diff --git a/redis.conf b/redis.conf new file mode 100644 index 0000000..a0d6a4f --- /dev/null +++ b/redis.conf @@ -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 +#默认为no,redis持久化,可以改为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 + + + diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..0a7231b --- /dev/null +++ b/start.sh @@ -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应用启动成功" + diff --git a/update.sh b/update.sh new file mode 100644 index 0000000..ed366d4 --- /dev/null +++ b/update.sh @@ -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应用更新成功"