diff --git a/api/erp-api/Dockerfile b/api/erp-api/Dockerfile new file mode 100644 index 00000000..e290e49c --- /dev/null +++ b/api/erp-api/Dockerfile @@ -0,0 +1,7 @@ +FROM openjdk:17-jdk-slim + +WORKDIR /app + +COPY ./target/erp-api-2.12.0.jar erp-api.jar + +CMD ["java", "-Duser.timezone=Asia/Shanghai", "-jar", "erp-api.jar"] \ No newline at end of file diff --git a/api/gateway/Dockerfile b/api/gateway/Dockerfile index 85ae2683..33cb50ce 100644 --- a/api/gateway/Dockerfile +++ b/api/gateway/Dockerfile @@ -2,6 +2,6 @@ FROM openjdk:17-jdk-slim WORKDIR /app -COPY ./target/gateway-1.0.0.jar gateway.jar +COPY ./target/gateway-2.12.0.jar gateway.jar CMD ["java", "-Duser.timezone=Asia/Shanghai", "-jar", "gateway.jar"] \ No newline at end of file diff --git a/api/oms-api/Dockerfile b/api/oms-api/Dockerfile new file mode 100644 index 00000000..fc4e0a87 --- /dev/null +++ b/api/oms-api/Dockerfile @@ -0,0 +1,7 @@ +FROM openjdk:17-jdk-slim + +WORKDIR /app + +COPY ./target/oms-api-2.12.0.jar sys-api.jar + +CMD ["java", "-Duser.timezone=Asia/Shanghai", "-jar", "oms-api.jar"] \ No newline at end of file diff --git a/api/sys-api/Dockerfile b/api/sys-api/Dockerfile new file mode 100644 index 00000000..0a0a42fa --- /dev/null +++ b/api/sys-api/Dockerfile @@ -0,0 +1,7 @@ +FROM openjdk:17-jdk-slim + +WORKDIR /app + +COPY ./target/sys-api-2.12.0.jar sys-api.jar + +CMD ["java", "-Duser.timezone=Asia/Shanghai", "-jar", "sys-api.jar"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..02007200 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,136 @@ +version: '3.8' + +services: + redis: + image: redis:7 + container_name: redis + ports: + - "6379:6379" # 映射6379端口 + command: ["redis-server"] # 允许所有IP访问 + volumes: + - redis_data:/data + restart: always + networks: + - my-network + + nacos: + image: nacos/nacos-server:v2.3.2 + container_name: nacos + environment: + MODE: standalone # 单机模式 + NACOS_AUTH_ENABLED: "false" # 禁用认证 + ports: + - "8848:8848" + - "9848:9848" + restart: always + volumes: + - nacos_data:/home/nacos/data + networks: + - my-network # 自定义网络 + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/ns/operator/servers"] + interval: 10s + retries: 5 + start_period: 20s + timeout: 5s + + gateway: + image: crpi-km68smz26eegv27m.cn-shenzhen.personal.cr.aliyuncs.com/qihang-open/gateway + container_name: qihangerp-gateway + environment: + SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: "nacos:8848" + SPRING_CLOUD_NACOS_DISCOVERY_USERNAME: "nacos" + SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD: "nacos" + ports: + - "8088:8088" + depends_on: + - redis + - nacos + restart: always + networks: + - my-network + + sys-api: + image: crpi-km68smz26eegv27m.cn-shenzhen.personal.cr.aliyuncs.com/qihang-open/sys-api + container_name: qihangerp-sys-api + environment: + SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: "nacos:8848" + SPRING_CLOUD_NACOS_DISCOVERY_USERNAME: "nacos" + SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD: "nacos" + SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: "nacos:8848" + SPRING_CLOUD_NACOS_CONFIG_USERNAME: "nacos" + SPRING_CLOUD_NACOS_CONFIG_PASSWORD: "nacos" + spring.data.redis.host: "redis" + spring.data.redis.port: 6379 + spring.data.redis.password: "" + spring.profiles.active: dev + depends_on: + - redis + - nacos + restart: always + networks: + - my-network + + oms-api: + image: crpi-km68smz26eegv27m.cn-shenzhen.personal.cr.aliyuncs.com/qihang-open/oms-api + container_name: qihangerp-oms-api + environment: + SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: "nacos:8848" + SPRING_CLOUD_NACOS_DISCOVERY_USERNAME: "nacos" + SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD: "nacos" + SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: "nacos:8848" + SPRING_CLOUD_NACOS_CONFIG_USERNAME: "nacos" + SPRING_CLOUD_NACOS_CONFIG_PASSWORD: "nacos" + spring.data.redis.host: "redis" + spring.data.redis.port: 6379 + spring.data.redis.password: "" + spring.profiles.active: dev + depends_on: + - redis + - nacos + restart: always + networks: + - my-network + + erp-api: + image: crpi-km68smz26eegv27m.cn-shenzhen.personal.cr.aliyuncs.com/qihang-open/erp-api + container_name: qihangerp-erp-api + environment: + SPRING_CLOUD_NACOS_DISCOVERY_SERVER-ADDR: "nacos:8848" + SPRING_CLOUD_NACOS_DISCOVERY_USERNAME: "nacos" + SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD: "nacos" + SPRING_CLOUD_NACOS_CONFIG_SERVER-ADDR: "nacos:8848" + SPRING_CLOUD_NACOS_CONFIG_USERNAME: "nacos" + SPRING_CLOUD_NACOS_CONFIG_PASSWORD: "nacos" + spring.data.redis.host: "redis" + spring.data.redis.port: 6379 + spring.data.redis.password: "" + spring.profiles.active: dev + depends_on: + - redis + - nacos + restart: always + networks: + - my-network + + vue: + image: crpi-km68smz26eegv27m.cn-shenzhen.personal.cr.aliyuncs.com/qihang-open/vue-erp + container_name: qihangerp-vue + ports: + - "80:80" # 映射88端口 + - "443:443" # 映射88端口 +# volumes: +# - /opt/qihangerp/nginx/dist:/usr/share/nginx/html # HTML 文件目录 +# - /opt/qihangerp/nginx/nginx_conf/nginx:/etc/nginx # Nginx 配置目录 +# - /opt/qihangerp/nginx/nginx_logs:/var/log/nginx # Nginx 日志目录 + networks: + - my-network # 使用 my-network 网络 + restart: always # 容器崩溃后自动重启 + + +volumes: + redis_data: # 定义持久化数据卷 + nacos_data: +networks: + my-network: + driver: bridge \ No newline at end of file diff --git a/docs/知识星球.jpg b/docs/知识星球.jpg deleted file mode 100644 index a479f558..00000000 Binary files a/docs/知识星球.jpg and /dev/null differ diff --git a/vue/Dockerfile b/vue/Dockerfile new file mode 100644 index 00000000..7714bcbf --- /dev/null +++ b/vue/Dockerfile @@ -0,0 +1,18 @@ +# 使用官方 Nginx 镜像作为基础镜像 +FROM nginx:alpine +# COPY ./cert /etc/nginx/cert + +# 删除默认的 Nginx 配置文件 +RUN rm /etc/nginx/conf.d/default.conf + +# 将自定义的 nginx.conf 配置文件复制到容器中的 Nginx 配置目录 +COPY ./nginx.conf /etc/nginx/nginx.conf + +# 将 Vue 项目的构建文件复制到 Nginx 的 html 目录 +COPY ./dist /usr/share/nginx/html + +# 暴露容器的端口(80 是 Nginx 默认的 HTTP 端口) +EXPOSE 88 + +# 启动 Nginx 服务 +CMD ["nginx", "-g", "daemon off;"] diff --git a/vue/nginx.conf b/vue/nginx.conf new file mode 100644 index 00000000..0a68eb40 --- /dev/null +++ b/vue/nginx.conf @@ -0,0 +1,91 @@ +worker_processes 1; + +events { + worker_connections 1024; +} + +http { + include mime.types; # 引入 MIME 类型 + default_type application/octet-stream; # 默认 MIME 类型 + + server { + listen 80; + server_name erp.benshutech.com; + + # 设置 Vue 应用的静态文件路径 + root /usr/share/nginx/html; + index index.html; + + # 默认 location 配置 + location / { + try_files $uri $uri/ /index.html; + } + + # 处理 /prod-api/ 的代理请求 + location /prod-api/ { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header REMOTE-HOST $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # --- 新增 SSE 关键配置 --- + proxy_http_version 1.1; # 必须使用 HTTP/1.1 + proxy_buffering off; # 关闭缓冲,确保数据实时发送 + proxy_read_timeout 1800s; # 增加读取超时时间 (例如 30 分钟) + proxy_send_timeout 1800s; # 增加发送超时时间 (例如 30 分钟) + proxy_connect_timeout 60s; # 连接超时时间 + # --- 结束新增 --- + + #proxy_pass http://10.0.2.22:8088/; + proxy_pass http://172.17.62.227:8088/; + } + + } + + server { + listen 443 ssl; + server_name erp.benshutech.com; + + #charset koi8-r; + + #access_log logs/host.access.log main;/opt/cert + + ssl_certificate /etc/nginx/cert/benshutech.com.pem; + ssl_certificate_key /etc/nginx/cert/benshutech.com.key; + ssl_session_timeout 5m; + ssl_ciphers HIGH:!aNULL:!MD5; + ssl_prefer_server_ciphers on; + + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + + # 处理 /prod-api/ 的代理请求 + location /prod-api/ { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header REMOTE-HOST $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + # --- 新增 SSE 关键配置 --- + proxy_http_version 1.1; # 必须使用 HTTP/1.1 + proxy_buffering off; # 关闭缓冲,确保数据实时发送 + proxy_read_timeout 1800s; # 增加读取超时时间 (例如 30 分钟) + proxy_send_timeout 1800s; # 增加发送超时时间 (例如 30 分钟) + proxy_connect_timeout 60s; # 连接超时时间 + # --- 结束新增 --- + proxy_pass http://172.17.62.227:8088/; + } + + #error_page 404 /404.html; + + # redirect server error pages to the static page /50x.html + # + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root html; + } + + } +} +