旧故-1 2024-04-13 15:08 采纳率: 0%
浏览 5

docker部署前后端分离项目

docker部署nginx和后端多服务,nginx代理的是网关8080端口,目前项目访问就404,
http://172.16.15.47:1889/api/blade-system/tenant/info?domain=http:%2F%2F172.16.15.47:1889 ,api接口路径
代理路径 http://172.16.15.47:8080/
proxy_pass http://172.16.15.47:8080/;

  • 写回答

7条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-13 15:08
    关注

    引自免费微信小程序:皆我百晓生

    首先,为了确保问题的准确解决,我们需要确认几个关键点:

    1. 你的Docker容器配置是否正确。
    2. Nginx配置文件中的location块设置是否恰当。

    这里我会提供一个基本的Nginx配置示例,用于将前端应用和后端API分离开。请根据实际情况调整这个配置。

    假设你的前端应用运行在80端口,而后端API运行在8080端口。首先,你需要为每个服务创建一个Dockerfile,并构建镜像。例如,对于前端应用(假设使用Node.js)的Dockerfile可能如下所示:

    # 使用官方Node.js基础镜像
    FROM node:14-alpine
    
    WORKDIR /app
    
    COPY package*.json ./
    RUN npm install
    
    COPY . .
    
    EXPOSE 80
    
    CMD ["npm", "start"]
    

    对于后端API(假设使用Java Spring Boot)的Dockerfile可能如下所示:

    # 使用官方Java基础镜像
    FROM openjdk:8-jdk-alpine
    
    ARG JAR_FILE=target/my-api.jar
    
    COPY ${JAR_FILE} app.jar
    
    ENTRYPOINT ["java","-jar","/app.jar"]
    

    接下来,为每个服务创建一个Docker-compose.yml文件,分别启动前端应用和后端API。

    version: '3'
    services:
      frontend:
        build: ./frontend
        ports:
          - "80:80"
    
      backend:
        build: ./backend
        ports:
          - "8080:8080"
    

    然后,在主机上创建一个名为nginx.conf的Nginx配置文件,内容如下:

    worker_processes auto;
    error_log /var/log/nginx/error.log warn;
    pid /var/run/nginx.pid;
    
    events {
        worker_connections 1024;
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  localhost;
    
            location / {
                root   /usr/share/nginx/html;  # 假设这是你的静态资源目录
                index  index.html index.htm;
                try_files $uri $uri/ /index.html;
            }
    
            location /api/ {
                proxy_pass http://localhost:8080/;  # 这里是后端API的地址
                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;
            }
        }
    }
    

    保存上述配置文件后,执行以下步骤来启动整个环境:

    1. 在前端应用目录下,运行docker-compose up -d来启动前端应用。
    2. 在后端API目录下,运行docker-compose up -d来启动后端API。
    3. 最后,在Nginx所在的主机目录下,启动Nginx:nginx -c nginx.conf

    现在你应该可以通过http://172.16.15.47/访问前端应用,而API请求应该通过http://172.16.15.47/api/blade-system/tenant/info?domain=http:%2F%2F172.16.15.47:1889被代理到后端服务。

    如果你仍然遇到问题,请检查日志文件(Nginx的日志位于/var/log/nginx/error.log),它可能会提供关于错误的更多细节。同时,请确保你的后端API确实监听了8080端口,并且可以响应来自Nginx的请求。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月13日

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路