SD06_前后端分离项目部署流程(采用Nginx)
本文档详细描述了如何在Ubuntu 20.04服务器上从零开始部署Tlias前后端分离系统。Tlias系统由Spring Boot后端(tlias-web-management)和Vue前端(vue-tlias-management)组成。
目录
- 环境准备
- 安装MySQL数据库
- 部署后端项目
- 部署前端项目
- 配置Nginx
- 系统访问
- 常见问题
环境准备
首先,我们需要在Ubuntu 20.04服务器上安装必要的环境和工具。
更新系统
# 更新软件包列表
sudo apt update# 升级已安装的软件包
sudo apt upgrade -y
安装基础工具
# 安装常用工具
sudo apt install -y curl wget vim git unzip net-tools
安装MySQL数据库
Tlias系统使用MySQL作为数据库,需要安装MySQL 8.0以上版本。
# 安装MySQL 8.0
sudo apt install -y mysql-server# 启动MySQL服务
sudo systemctl start mysql# 设置MySQL开机自启
sudo systemctl enable mysql# 检查MySQL状态
sudo systemctl status mysql
配置MySQL
# 登录MySQL(Ubuntu 20.04默认不需要密码)
sudo mysql# 在MySQL命令行中执行以下命令:
# 1. 设置root用户密码(替换'your_password'为你想设置的密码)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';# 2. 刷新权限
FLUSH PRIVILEGES;# 3. 创建tlias数据库
CREATE DATABASE tlias DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 3.5. 导入数据库
mysql -u root-p tlias < 路径/tlias.sql# 4. 退出MySQL
EXIT;
安装Java 17
后端项目使用Java 17运行,需要安装Java 17环境。
# 安装Java 17
sudo apt install -y openjdk-17-jdk# 验证Java版本
java -version
部署后端项目
安装Maven
Maven用于构建后端项目。
# 安装Maven
sudo apt install -y maven# 验证Maven版本
mvn -version
上传并打包后端项目
假设后端项目源码已经上传到服务器的/home/ubuntu/tlias-web-management目录下。
# 进入后端项目目录
cd /home/ubuntu/tlias-web-management# 使用Maven打包项目(跳过测试)
mvn clean package -DskipTests
配置后端项目
在部署前,需要修改配置文件以适应服务器环境。
# 创建配置目录
mkdir -p /opt/tlias/config# 编辑配置文件
sudo vim /opt/tlias/config/application.yml
配置文件内容如下:
spring:application:name: tlias-web-management#配置数据库的连接信息datasource:url: jdbc:mysql://localhost:3306/tliasdriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123456servlet:multipart:#最大单个文件大小max-file-size: 10MB#最大请求大小(包括所有文件和表单数据)max-request-size: 100MB#Mybatis的相关配置
mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl#开启驼峰命名映射开关map-underscore-to-camel-case: true#配置事务管理日志级别
logging:level:org.springframework.jdbc.support.JdbcTransactionManager: debugserver:port: 8080#阿里云OSS(如果使用,需要替换为实际的配置)
aliyun:oss:endpoint: https://oss-cn-beijing.aliyuncs.combucketName: your-bucket-nameregion: cn-beijing
运行后端项目
接下来,使用systemd
管理后端服务,实现开机自启和状态监控。
# 复制打包好的jar文件到指定目录
sudo mkdir -p /opt/tlias/app
sudo cp target/tlias-web-management-0.0.1-SNAPSHOT.jar /opt/tlias/app/tlias-web-management.jar# 创建systemd服务配置文件
sudo vim /etc/systemd/system/tlias-backend.service
服务配置文件内容:
[Unit]
Description=Tlias Backend Service
After=network.target mysql.service[Service]
Type=simple
User=root
ExecStart=/usr/bin/java -jar /opt/tlias/app/tlias-web-management.jar --spring.config.location=/opt/tlias/config/application.yml
Restart=always
RestartSec=10[Install]
WantedBy=multi-user.target
启动服务:
# 重新加载systemd配置
sudo systemctl daemon-reload# 启动服务
sudo systemctl start tlias-backend# 设置开机自启
sudo systemctl enable tlias-backend# 查看服务状态
sudo systemctl status tlias-backend# 查看服务日志
sudo journalctl -u tlias-backend -f
部署前端项目
安装Node.js和npm
前端项目基于Vue.js开发,需要Node.js环境。
# 安装Node.js和npm
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs# 验证Node.js和npm版本
node -v
npm -v
安装Nginx
Nginx用于部署静态前端文件并提供Web服务。
# 安装Nginx
sudo apt install -y nginx# 启动Nginx
sudo systemctl start nginx# 设置开机自启
sudo systemctl enable nginx# 检查Nginx状态
sudo systemctl status nginx
构建前端项目
假设前端项目源码已经上传到服务器的/home/ubuntu/vue-tlias-management目录下。
# 进入前端项目目录
cd /home/ubuntu/vue-tlias-management# 安装依赖
npm install# 修改API基础路径配置文件(根据实际情况调整)
vim src/api/request.js # 确保API路径指向后端服务地址# 构建生产环境代码
npm run build
配置Nginx
部署前端静态文件
# 创建前端部署目录
sudo mkdir -p /var/www/tlias# 复制构建好的前端文件到Nginx目录
sudo cp -r dist/* /var/www/tlias/
配置Nginx虚拟主机
# 创建Nginx配置文件
sudo vim /etc/nginx/sites-available/tlias
配置文件内容:
server {listen 80;server_name _; # 可以替换为你的域名root /var/www/tlias;index index.html;# 前端静态文件location / {try_files $uri $uri/ /index.html;}# 代理后端API请求location /api/ {proxy_pass http://localhost:8080/;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;}
}
启用配置:
# 创建符号链接启用配置
sudo ln -s /etc/nginx/sites-available/tlias /etc/nginx/sites-enabled/# 测试Nginx配置
sudo nginx -t# 重新加载Nginx配置
sudo systemctl reload nginx
系统访问
完成上述步骤后,可以通过服务器IP或域名访问系统:
http://服务器IP
如果配置了域名并解析到服务器IP,则可以通过域名访问:
http://你的域名
常见问题
如果你是第一次NGINX,建议删掉NGINX可能导致冲突的默认配置:
sudo rm /etc/nginx/sites-enabled/default
1. 后端服务无法启动
检查以下几点:
- Java版本是否正确(需要Java 17)
- MySQL服务是否正常运行
- 配置文件中的数据库连接信息是否正确
- 查看日志定位具体错误:
sudo journalctl -u tlias-backend -f
2. 前端访问报错
检查以下几点:
- Nginx配置是否正确
- 前端API基础路径配置是否与Nginx代理匹配
- 浏览器控制台是否有报错信息
- Nginx错误日志:
sudo tail -f /var/log/nginx/error.log
3. 数据库连接失败
检查以下几点:
- MySQL服务状态:
sudo systemctl status mysql
- 数据库用户名密码是否正确
- MySQL是否允许本地连接:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
4. 文件上传失败
如果系统使用阿里云OSS存储文件,需要确保:
- 阿里云OSS配置正确
- 网络连接通畅
- 权限配置无误
安全加固建议
部署完成后,建议进行以下安全加固:
- 配置防火墙,只开放必要端口(如80、443)
- 使用HTTPS加密通信(配置SSL证书)
- 定期更新系统和应用软件
- 配置数据库备份策略
相关文章:
SD06_前后端分离项目部署流程(采用Nginx)
本文档详细描述了如何在Ubuntu 20.04服务器上从零开始部署Tlias前后端分离系统。Tlias系统由Spring Boot后端(tlias-web-management)和Vue前端(vue-tlias-management)组成。 目录 环境准备安装MySQL数据库部署后端项目部署前端项…...
【kubernetes】通过Sealos 命令行工具一键部署k8s集群
一、前言 1、sealos安装k8s集群官网:K8s > Quick-start > Deploy-kubernetes | Sealos Docs 2、本文安装的k8s版本为v1.28.9 3、以下是一些基本的安装要求: 每个集群节点应该有不同的主机名。主机名不要带下划线。所有节点的时间需要同步。需要…...

《Go小技巧易错点100例》第三十二篇
本期分享: 1.sync.Map的原理和使用方式 2.实现有序的Map sync.Map的原理和使用方式 sync.Map的底层结构是通过读写分离和无锁读设计实现高并发安全: 1)双存储结构: 包含原子化的 read(只读缓存,无锁快…...
怎么判断是不是公网IP?如何查看自己本地路由器是内网ip还是公网?
在网络世界中,IP 地址如同每台设备的 “门牌号”,起着至关重要的标识作用。而 IP 地址又分为公网 IP 和私网 IP,准确判断一个 IP 属于哪一类,对于网络管理、网络应用开发以及理解网络架构等都有着重要意义。接下来,我们…...
【上位机——MFC】单文档和多文档视图架构
单文档视图架构 特点:只能管理一个文档(只有一个文档类对象) #include <afxwin.h> #include "resource.h"//文档类 class CMyDoc :public CDocument {DECLARE_DYNCREATE(CMyDoc) //支持动态创建机制 }; IMPLEMENT_DYNCREATE(CMyDoc,CDocument) //…...

需求分析阶段测试工程师主要做哪些事情
在软件测试需求分析阶段,主要围绕确定测试范围、明确测试目标、细化测试内容等方面开展工作,为后续测试计划的制定、测试用例的设计以及测试执行提供清晰、准确的依据。以下是该阶段具体要做的事情: 1. 需求收集与整理 收集需求文档&#x…...
Web 实时通信技术:WebSocket 与 Server-Sent Events (SSE) 深入解析
一、WebSocket: (一)WebSocket 是什么? WebSocket 是一种网络通信协议,它提供了一种在单个 TCP 连接上进行全双工通信的方式。与传统的 HTTP 请求 - 响应模型不同,WebSocket 允许服务器和客户端在连接建立…...

项目模拟实现消息队列第二天
消息应答的模式 1.自动应答: 消费者把这个消息取走了,就算是应答了(相当于没有应答) 2.手动应答: basicAck方法属于手动应答(消费者需要主动调用这个api进行应答) 小结 1.需要实现生产者,broker server,消费者这三个部分的 2.针对生产者和消费…...

5.Redission
5.1 前文锁问题 基于 setnx 实现的分布式锁存在下面的问题: 重入问题:重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中,可重入锁的意义在于防止死锁,比如 HashTable 这样的代码中,他的方法都是使用 sync…...
c#数据结构 线性表篇 非常用线性集合总结
本人能力有限,使用了一些Ai的结论,如有不足还请斧正 目录 1.HashSet <> Dictionary 2.SortedSet <>提供升序方法的List 3.ArrayList<>List 4.BitArray <> Bit[] array 5.StringCollection <>List 6.StringDictionary<>Dictionary 1…...

dify 部署后docker 配置文件修改
1:修改 复制 ./dify/docker/.env.example ./dify/docker/.env 添加一下内容 # 启用自定义模型 CUSTOM_MODEL_ENABLEDtrue# 将OLLAMA_API_BASE_URL 改为宿主机的物理ip OLLAMA_API_BASE_URLhttp://192.168.72.8:11434# vllm 的 OPENAI的兼容 API 地址 CUSTOM_MODE…...

数据结构——排序(万字解说)初阶数据结构完
目录 1.排序 2.实现常见的排序算法 2.1 直接插入排序 编辑 2.2 希尔排序 2.3 直接选择排序 2.4 堆排序 2.5 冒泡排序 2.6 快速排序 2.6.1 递归版本 2.6.1.1 hoare版本 2.6.1.2 挖坑法 2.6.1.3 lomuto前后指针 2.6.1.4 时间复杂度 2.6.2 非递归版本 2.7 归并排序…...
SQLite3介绍与常用语句汇总
SQLite3简介 SQLite3是一款轻量级的、基于文件的开源关系型数据库引擎,由 D. Richard Hipp 于 2000 年首次发布。它遵循 SQL 标准,但与传统的数据库系统不同,SQLite 并不运行在独立的服务器进程中,而是作为一个嵌入式数据库引擎直…...

快速入门深度学习系列(3)----神经网络
本文只针对图进行解释重要内容 这就是入门所需要掌握的大部分内容 对于不懂的名词或概念 你可以及时去查 对于层数 标在上面 对于该层的第几个元素 标在下面 输入层算作第0层 对于第一层的w b 参数 维度如下w:4*3 b:4*1 这个叫做神经元 比如对于第一层的神经元 这里说的很…...

在线工具源码_字典查询_汉语词典_成语查询_择吉黄历等255个工具数百万数据 养站神器,安装教程
在线工具源码_字典查询_汉语词典_成语查询_择吉黄历等255个工具数百万数据 养站神器,安装教程 资源宝分享:https://www.httple.net/154301.html 一次性打包涵盖200个常用工具!无论是日常的图片处理、文件格式转换,还是实用的时间…...
ORB-SLAM3和VINS-MONO的对比
直接给总结,整体上orbslam3(仅考虑带imu)在初始化阶段是松耦合,localmap和全局地图优化是紧耦合。而vins mono则是全程紧耦合。然后两者最大的区别就在于vins mono其实没有对地图点进行优化,为了轻量化,它一…...
大数据处理利器:Hadoop 入门指南
一、Hadoop 是什么?—— 分布式计算的基石 在大数据时代,处理海量数据需要强大的技术支撑,Hadoop 应运而生。Apache Hadoop 是一个开源的分布式计算框架,致力于为大规模数据集提供可靠、可扩展的分布式处理能力。其核心设计理念是…...
Docker容器网络架构深度解析与技术实践指南——基于Linux内核特性的企业级容器网络实现
第1章 容器网络基础架构 1 Linux网络命名空间实现原理 1.1内核级隔离机制深度解析 1.1.1进程隔离的底层实现 通过clone()系统调用创建新进程时,设置CLONE_NEWNET标志位将触发内核执行以下操作: 内核源码示例(linux-6.8.0/kernel/fork.c&a…...
基于Kubernetes的Apache Pulsar云原生架构解析与集群部署指南(下)
文章目录 k8s安装部署Pulsar集群前期准备版本要求 安装 Pulsar Helm chart管理pulsarClustersBrokersTopic k8s安装部署Pulsar集群 前期准备 版本要求 Kubernetes 集群,版本 1.14 或更高版本Helm v3(3.0.2 或更高版本)数据持久化ÿ…...
IoTDB端边云同步技术的五大常见场景及简便使用方式
IoTDB端边云同步技术提供了一种高效、可靠的数据同步解决方案,通过简洁灵活的SQL操作和直观的配置方式,实现了数据在端、边、云之间的无缝流动。以下是IoTDB端边云同步的五大常见场景及其简便的使用方式。 一、基础数据同步 基础数据同步包括全量数据同…...

Linux 阻塞和非阻塞 I/O 简明指南
目录 声明 1. 阻塞和非阻塞简介 2. 等待队列 2.1 等待队列头 2.2 等待队列项 2.3 将队列项添加/移除等待队列头 2.4 等待唤醒 2.5 等待事件 3. 轮询 3.1 select函数 3.2 poll函数 3.3 epoll函数 4. Linux 驱动下的 poll 操作函数 声明 本博客所记录的关于正点原子…...
libtorch配置指南(包含Windows和Linux)
libtorch libtorch是pytorch的c库,提供了用于深度学习和张量计算的功能,允许开发者在c环境中使用pytorch的核心功能。特别是当一些pt模型无法转换到ncnn、mnn等模型时(ncnn、mnn可能还不支持某些层),可以在libtorch直…...

Java开发经验——阿里巴巴编码规范经验总结2
摘要 这篇文章是关于Java开发中阿里巴巴编码规范的经验总结。它强调了避免使用Apache BeanUtils进行属性复制,因为它效率低下且类型转换不安全。推荐使用Spring BeanUtils、Hutool BeanUtil、MapStruct或手动赋值等替代方案。文章还指出不应在视图模板中加入复杂逻…...

机器人手臂“听不懂“指令?Ethercat转PROFINET网关妙解通信僵局
机器人手臂"听不懂"指令?Ethercat转PROFINET网关妙解产线通信僵局 协作机器人(如KUKA iiWA)使用EtherCAT控制,与Profinet主站(如西门子840D CNC)同步动作。 客户反馈:基于Profinet…...

深度学习 CNN
CNN 简介 什么是 CNN? 卷积神经网络(Convolutional Neural Network)是专为处理网格数据(如图像)设计的神经网络。核心组件: 卷积层 :提取局部特征(如边缘、纹理)通过卷…...
GrassRoot备份项目
Windows服务项目 Grass.cs using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http.Headers; using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Time…...
iOS开发架构——MVC、MVP和MVVM对比
文章目录 前言MVC(Model - View - Controller)MVP(Model - View - Presenter)MVVM(Model - View - ViewModel) 前言 在 iOS 开发中,MVC、MVVM、和 MVP 是常见的三种架构模式,它们主…...
typecho中的Widget设计文档
组成系统的最基本元素 什么是Widget Widget是组成Typecho的最基本元素,除了已经抽象出来的类库外,其它几乎所有的功能都会通过Widget来完成。在实践中我们发现,在博客这种小型但很灵活的系统中实施一些大型框架的思想是不合适的,…...

MySQL索引原理以及SQL优化(二)
目录 1. 索引与约束 1.1 索引是什么 1.2 索引的目的 1.3 索引分类 1.3.1 数据结构 1.3.2 物理存储 1.3.3 列属性 1.3.4 列的个数 1.4 主键的选择 1.5 索引使用场景 1.6 索引的底层实现 1.6.1 索引存储 1.6.2 页 1.6.3 B 树 1.6.4 B 树层高问题 1.6.5 自增 id 1.7 innod…...

MATLAB中矩阵和数组的区别
文章目录 前言环境配置1. 数据结构本质2. 运算规则(1)基本运算(2)特殊运算 3. 函数与操作4. 高维支持5. 创建方式 前言 在 MATLAB 中,矩阵(Matrix) 和 数组(Array) 的概…...