SD06_前后端分离项目部署流程(采用Nginx)

news2025/5/12 19:42:46

本文档详细描述了如何在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/tlias
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
  servlet:
    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: debug

server:
  port: 8080

#阿里云OSS(如果使用,需要替换为实际的配置)
aliyun:
  oss:
    endpoint: https://oss-cn-beijing.aliyuncs.com
    bucketName: your-bucket-name
    region: 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配置正确
  • 网络连接通畅
  • 权限配置无误

安全加固建议

部署完成后,建议进行以下安全加固:

  1. 配置防火墙,只开放必要端口(如80、443)
  2. 使用HTTPS加密通信(配置SSL证书)
  3. 定期更新系统和应用软件
  4. 配置数据库备份策略

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

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

相关文章

《Go小技巧易错点100例》第三十二篇

本期分享&#xff1a; 1.sync.Map的原理和使用方式 2.实现有序的Map sync.Map的原理和使用方式 sync.Map的底层结构是通过读写分离和无锁读设计实现高并发安全&#xff1a; 1&#xff09;双存储结构&#xff1a; 包含原子化的 read&#xff08;只读缓存&#xff0c;无锁快…

需求分析阶段测试工程师主要做哪些事情

在软件测试需求分析阶段&#xff0c;主要围绕确定测试范围、明确测试目标、细化测试内容等方面开展工作&#xff0c;为后续测试计划的制定、测试用例的设计以及测试执行提供清晰、准确的依据。以下是该阶段具体要做的事情&#xff1a; 1. 需求收集与整理 收集需求文档&#x…

项目模拟实现消息队列第二天

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

5.Redission

5.1 前文锁问题 基于 setnx 实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如 HashTable 这样的代码中&#xff0c;他的方法都是使用 sync…

dify 部署后docker 配置文件修改

1&#xff1a;修改 复制 ./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 归并排序…

快速入门深度学习系列(3)----神经网络

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

在线工具源码_字典查询_汉语词典_成语查询_择吉黄历等255个工具数百万数据 养站神器,安装教程

在线工具源码_字典查询_汉语词典_成语查询_择吉黄历等255个工具数百万数据 养站神器&#xff0c;安装教程 资源宝分享&#xff1a;https://www.httple.net/154301.html 一次性打包涵盖200个常用工具&#xff01;无论是日常的图片处理、文件格式转换&#xff0c;还是实用的时间…

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 操作函数 声明 本博客所记录的关于正点原子…

Java开发经验——阿里巴巴编码规范经验总结2

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

机器人手臂“听不懂“指令?Ethercat转PROFINET网关妙解通信僵局

机器人手臂"听不懂"指令&#xff1f;Ethercat转PROFINET网关妙解产线通信僵局 协作机器人&#xff08;如KUKA iiWA&#xff09;使用EtherCAT控制&#xff0c;与Profinet主站&#xff08;如西门子840D CNC&#xff09;同步动作。 客户反馈&#xff1a;基于Profinet…

深度学习 CNN

CNN 简介 什么是 CNN&#xff1f; 卷积神经网络&#xff08;Convolutional Neural Network&#xff09;是专为处理网格数据&#xff08;如图像&#xff09;设计的神经网络。核心组件&#xff1a; 卷积层 &#xff1a;提取局部特征&#xff08;如边缘、纹理&#xff09;通过卷…

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. 运算规则&#xff08;1&#xff09;基本运算&#xff08;2&#xff09;特殊运算 3. 函数与操作4. 高维支持5. 创建方式 前言 在 MATLAB 中&#xff0c;矩阵&#xff08;Matrix&#xff09; 和 数组&#xff08;Array&#xff09; 的概…

Desfire Ev1\Ev2\Ev3卡DES\3K3DES\AES加解密读写C#示例源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1bYhsS9c&ftt&id917152255720 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using S…

MySQL核心内容【完结】

MySQL核心内容 文章目录 MySQL核心内容1.MySQL核心内容目录2.MySQL知识面扩展3.MySQL安装4.MySQL配置目录介绍Mysql配置远程ip连接 5.MySQL基础1.MySQL数据类型1.数值类型2.字符串类型3.日期和时间类型4.enum和set 2.MySQL运算符1.算数运算符2.逻辑运算符3.比较运算符 3.MySQL完…

C++类和对象进阶 —— 与数据结构的结合

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 […

Django之账号登录及权限管理

账号登录及权限管理 目录 1.登录功能 2.退出登录 3.权限管理 4.代码展示合集 这篇文章, 会讲到如何实现账号登录。账号就是我们上一篇文章写的账号管理功能, 就使用那里面已经创建好的账号。这一次登录, 我们分为三种角色, 分别是员工, 领导, 管理员。不同的角色, 登录进去…

EXCEL中嵌入其他表格等文件

在EXCEL中嵌入其他表格 先放链接&#xff1a;https://jingyan.baidu.com/article/295430f11708c34d7e00509a.html 步骤如下&#xff1a; 1、打开一个需要嵌入新表格的excel表。 2、切换至“插入”菜单中&#xff0c;单击选择“对象”。 3、如下图所示&#xff0c;会弹出“对象…

21. LangChain金融领域:合同审查与风险预警自动化

引言&#xff1a;当AI成为24小时不眠的法律顾问 2025年某商业银行的智能合同系统&#xff0c;将百万级合同审查时间从平均3周缩短至9分钟&#xff0c;风险条款识别准确率达98.7%。本文将基于LangChain的金融法律框架&#xff0c;详解如何构建合规、精准、可追溯的智能风控体系…