Nginx + Docker Compose前后端分离部署到服务器过程记录

news2024/9/24 3:18:00

一、采用Nginx部署前端VUE(Vite)

1、修改配置文件vite.config.ts,将本地环境改为开发环境
在这里插入图片描述
注意base处只能是‘/’ 不能是 ‘./'!在这里插入图片描述

  1. 对项目进行打包

在当前目录的终端执行:npm run build

若报错如下:

error TS6504: File '/Users/xiaochen/IdeaProjects/ChatViewer-frontend/src/components/chat/HeadPortrait.vue.js' is a JavaScript file. Did you mean to enable the 'allowJs' option?
  The file is in the program because:
    Matched by include pattern 'src/**/*' in 'tsconfig.vitest.json'

error TS6504: File '/Users/xiaochen/IdeaProjects/ChatViewer-frontend/src/components/gpt/ConversationCard.vue.js' is a JavaScript file. Did you mean to enable the 'allowJs' option?
  The file is in the program because:
    Matched by include pattern 'src/**/*' in 'tsconfig.vitest.json'

则执行:npm run build-only
在当前项目的文件夹下可以看到dist文件夹,该文件夹里面的内容就是打包生成的。

3、将本地项目上传到服务器目录
将dist文件夹的文件上传到服务器前端项目所在的目录:/var/www/vue_app/(最好是统一在var/www目录下)

采用scp进行远程文件传输:scp 本地项目路径 服务器项目路径

scp -r /Users/xiaochen/IdeaProjects/ChatViewer-frontend/dist root@8.xxx.xxx.79:/var/www/vue_app/
  1. 安装nginx
//安装
sudo apt-get install nginx
//启动服务
sudo systemctl start nginx
//设置开机启动
sudo systemctl enable nginx
// 检查安装是否成功
sudo nginx -t

显示如下则表示安装成功!
在这里插入图片描述
5. 添加配置文件

在/etc/nginx/sites-available目录下创建一个新的文件,命名为vueapp, 然后编辑配置文件:

sudo nano /etc/nginx/sites-available/vueapp

参考设置如下:

server {
    listen 80;
    server_name 8.130.xxx.xxx(服务器ip);

    root /var/www/vue_app/dist(服务器前端项目目录);
    index index.html;

        #vue-router配置
    location / {
        try_files $uri $uri/ @router;
        index index.html;
    }
    location @router {
        rewrite ^.*$ /index.html last;
    }
    location ~ \.js$ {
        root /var/www/vue_app/dist;
        types { application/javascript js; }
        try_files $uri =404;
    }
    location ~ \.css$ {
        root /var/www/vue_app/dist;
        types { text/css css; }
        try_files $uri =404;
    }
    location /api/ {
        proxy_pass http://localhost:8088/;
        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;
    }

    error_page 404 /404.html;
    location = /404.html {
        internal;
    }
}

注意以下两个设置:

server_name 8.130.xxx.xxx(服务器ip);

root /var/www/vue_app/dist(服务器前端项目目录);

location /api/ 
	proxy_pass http://localhost:8088/;(后端项目服务接口)

重启nginx:
sudo systemctl reload nginx

访问8.130.xxx.xxx(服务器ip),如果显示成功则说明配置成功。

二、采用Docker compose 部署SpringBoot后端项目

  1. 打包项目
    采用Maven的打包方式,打包前面可以clean然后install再进行打包在这里插入图片描述
    打包后的文件在target目录下:
    在这里插入图片描述
  2. 上传jar包到服务器指定目录:/root/myapp
scp -r /Users/xiaochen/IdeaProjects/ChatViewer-main/ChatViewer-main/target/blog-0.0.1-SNAPSHOT.jar root@服务器ip/root/myapp
  1. 在服务器项目所在根目录/root/myapp编写Dockerfile文件,指明jdk版本、工作目录、暴露端口
# 使用 OpenJDK 17 作为基础镜像
FROM openjdk:17-jdk-slim

# 设置工作目录
WORKDIR /app

# 复制项目的 jar 文件到容器中
COPY target/your-app.jar /app/app.jar

# 暴露应用端口
EXPOSE 8088

# 启动应用
ENTRYPOINT ["java", "-jar", "/app/app.jar"]

  1. 在服务器项目所在根目录/root/myapp编写`docker-compose.yml 文件
    (我这里用到了MYSQL数据库、Redis、MinIO、RabbitMQ)
version: '3.3'

services:
  app:
    build: .
    container_name: springboot_app
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/blog
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=密码
      - SPRING_REDIS_HOST=redis
      - SPRING_REDIS_PORT=6379
      - SPRING_REDIS_PASSWORD=密码
      - RABBITMQ_HOST=rabbitmq
      - MINIO_ENDPOINT=http://minio:9000
      - MINIO_ACCESS_KEY=自己设定
      - MINIO_SECRET_KEY=自己设定
    depends_on:
      - db
      - redis
      - rabbitmq
      - minio

  db:
    image: mysql:8.0
    container_name: mysql_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456                 # 设置 root 用户的密码
      MYSQL_DATABASE: blog          # 创建的默认数据库
      MYSQL_USER: 自己设定                   # 创建的数据库用户
      MYSQL_PASSWORD: 自己设定       # 创建的数据库用户密码
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

  redis:
    image: redis:6.2
    container_name: redis_server
    restart: always
    ports:
      - "6379:6379"

  rabbitmq:
    image: rabbitmq:3-management
    container_name: rabbitmq_server
    restart: always
    ports:
      - "5672:5672"
      - "15672:15672" # RabbitMQ 管理控制台

  minio:
    image: minio/minio
    container_name: minio_server
    restart: always
    ports:
      - "9000:9000"
    environment:
      MINIO_ACCESS_KEY: 自己设定
      MINIO_SECRET_KEY: 自己设定
    command: server /data

volumes:
  db_data:

  1. 构建镜像启动服务
构建 Docker 镜像
docker-compose build
启动所有服务
docker-compose up -d

6、查看日志,检查后端是否正常启动

docker-compose logs -f app

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2074247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CORS错误

说明:记录一次CORS(跨域)错误,及解决方法。 场景 在vscode里面运行前端项目,idea中运行后端项目,登录时,访问接口,报CORS错误,如下: 解决 在后端项目的网关…

【PyQt6 应用程序】PyUIC使用加载可视化文件

使用uic模块可以方便地从Qt Designer设计的UI文件加载用户界面。这种方法使得设计和布局变得更加直观,并且可以将用户界面设计与程序逻辑分离。 本次展示如何使用PyQt6和uic模块来加载一个简单的UI文件。 文章目录 需要使用Qt Designer创建一个UI文件。Qt Designer是一个强大…

并行 parallel DOP 受 Resource Manager 限制

监控 Script select s.SID, s.SERIAL#, s.username ,rpd.plan, s.RESOURCE_CONSUMER_GROUP, rpd.PARALLEL_DEGREE_LIMIT_P1 from v$session s, DBA_RSRC_CONSUMER_GROUPS rcg, DBA_RSRC_PLAN_DIRECTIVES rpd , V$RSRC_CONSUMER_GROUP v…

甲方(北汽)渗透测试面试经验分享

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 所在城市&…

IDEA 2024.2.0.2 使用 Jrebel and XRebel 热部署

安装 激活 工具网站中url和邮箱复制进去 设置 允许项目自动构建 允许开发过程中自动部署

苍穹外卖项目DAY10

苍穹外卖项目DAY10 1、Spring Task 1.1、介绍 Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑 定位:定时任务框架 作用:定时自动执行某段Java代码 只要是需要定时处理的场景都可以使用Spring Task…

大数据技术之Flume 拓扑结构(4)

目录 Flume 拓扑结构 简单串联 (Simple Serial) 复制和多路复用 (Replication and Multiplexing) 负载均衡和故障转移 (Load Balancing and Failover) 聚合 (Aggregation) 示例配置 Flume 拓扑结构 Flume 支持多种拓扑结构来满足不同的数据收集和传输需求。以下是 Flume 中常…

复现ssrf漏洞

目录 一、pikachu靶场 1、靶场环境: 使用docker拉取: docker run -d -p 8765:80 8023/pikachu-expect:latest 2、使用dict 3、使用file读取文件 二、redis未授权访问 1、源码 2、使用bp探测端口 3、继续使用bp探测172.18.0.2的端口 4、使用go…

鸿蒙(API 12 Beta3版)【使用AVPlayer开发音频播放功能(C/C++)】音视播放与录制

使用AVPlayer可以实现端到端播放原始媒体资源,本开发指导将以完整地播放一首音乐作为示例,向开发者讲解AVPlayer音频播放相关功能。 播放的全流程包含:创建AVPlayer,设置播放资源,设置播放参数(音量/倍速/…

运用Archimate为 智慧文旅搭建 数字化架构体系【系统架构】

ArchiMate是一种用于企业架构建模的开放、独立且详细的语言,它提供了一套丰富的概念和关系来描述、分析和可视化企业架构的不同领域。以下是ArchiMate建模的一些关键功能: 多视图建模:ArchiMate定义了23个示例视图,分为四类&#…

python模块04-requests

1 requests模块发送请求 Requests是一个Python HTTP庫 相关参考资料: 文档:Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档 requests PyPI:requests PyPI requests源码:GitH0ub - psf/requests: A simple, yet elegant, …

封装车牌号码输入组件

<!-- Title: 国内车辆号牌号码输入组件Description: 国内车辆号牌号码输入组件&#xff0c;具体使用方法如下&#xff1a;<its-hphmInput v-model"form.hphm" :glbm"京A" :parentmessage.sync"hphm" onChange"provinceAbbreviationC…

基于R语言进行AMMI分析3

参考资料&#xff1a;https://cran.r-project.org/web/packages/agricolae/agricolae.pdf 1、plot()函数 本次介绍的是Agricolae包中的plot.AMMI()函数。此函数可以绘制AMMI双标图&#xff0c;也可以绘制三标图&#xff08;三个坐标轴&#xff0c;IPCA1&#xff0c;IPCA2&…

「C++系列」类/对象

文章目录 一、类1. 基本类的定义2. 类的访问控制3. 类的实例化4. 构造函数和析构函数5. 继承6. 类的使用 二、对象1. 创建对象2. 对象的生命周期3. 对象的内存4. 对象的操作5. 对象的复制6. 总结 三、应用案例1. 定义BankAccount类2. 分析 四、相关链接 一、类 C 类&#xff0…

【初阶数据结构】顺序表和链表算法题(下)

链表 2.链表2.4合并两个有序链表2.5链表分割2.6链表的回⽂结构2.7相交链表2.8环形链表I2.9 环形链表II2.10随机链表的复制 2.链表 2.4合并两个有序链表 思路 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ …

一键转换语言,探索四大在线翻译工具的魅力!

各种翻译工具不仅为个人用户提供了极大的便利&#xff0c;也为跨国企业、学术研究和文化交流提供了强有力的支持&#xff0c;接下来为大家推荐几款好用的翻译在线工具&#xff01; 福昕在线翻译 直达链接&#xff1a; https://fanyi.pdf365.cn/ 福昕在线翻译是一款功能强大…

分布式锁 redis与zookeeper

redis实现分布式锁 原理 基于redis命令setnx key value来实现分布式锁的功能&#xff0c;只有当key不存在时&#xff0c;setnx才可以设置成功并返回1&#xff0c;否则设置失败返回0。 方案1&#xff1a; 方案1存在的问题 假如在加锁成功&#xff0c;释放锁之前&#xff0c;…

面向对象08:什么是多态

本节内容视频链接&#xff1a;面向对象12&#xff1a;什么是多态_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p71&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 Java中的多态是面向对象编程的一个重要概念&#xff0c;‌它允许不同类型的对象对…

jenkins安装及介绍

Cl:持续集成 CD:持续部署 插件:丰富的插件&#xff0c;可以满足99%的需求&#xff0c;还可以二次开发插件来满足需求 Jenkins能干嘛 1.集成第三方工具的使用&#xff0c;jenkins是一个集大成者&#xff0c;它集成了1000多个插件&#xff0c;几乎把所有知名的工具都集成到ienkin…

职场达人必备:2024年PDF转PPT工具精选指南

PDF文件有卓越的兼容性和安全性&#xff0c;&#xff1b;而PPT则以其强大的演示能力。然而&#xff0c;在日常的工作与学习场景中&#xff0c;我们时常面临将PDF内容转化为PPT格式的需求&#xff0c;以便更好地进行展示与编辑。那么&#xff0c;究竟该如何高效地将PDF转换成PPT…