AI全栈之路:Ubuntu云服务器部署Spring + Vue + MySql

article/2025/6/17 16:45:58

背景介绍

之前使用AI代码工具Trae基于Spring + Vue + MySql生成了一个输入要做事情AI自动生成待办任务列表的的小工具,效果如下:
在这里插入图片描述

本地跑通后正好有一台阿里云服务器和域名,准备把这个项目部署到云服务器实现远程访问,本文记录部署过程。

部署过程

云服务器配置

云服务器使用的是2 核 (vCPU)、2 GiB最基础库,不过跑一个简单服务也错错有余。安装的系统是Ubuntu 24.04 64位。

部署后端服务
安装mysql

后端服务采用了SpringBoot + MySql,首先安装MySql,这里通过 Ubuntu 官方仓库安装。
首先更新系统包列表​:sudo apt update
接着安装mysql服务器:sudo apt install mysql-server
接下来启动 MySQL 服务​:

sudo systemctl start mysql
sudo systemctl enable mysql  # 设置开机自启

最后通过sudo systemctl status mysql查看mysql服务状态。

安装完成后,运行安全脚本加固 MySQL:

sudo mysql_secure_installation

按提示操作:

  1. 设置 root 密码。
  2. 移除匿名用户。
  3. 禁止远程 root 登录。
  4. 删除测试数据库。
  5. 刷新权限表。

接下来创建我们项目的数据库:

CREATE DATABASE IF NOT EXISTS autotodo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
构建后端项目

后端项目采用springboot,通过maven构建,在pom.xml统计目录下执行:

mvn clean package -DskipTests

构建完成后会在target路径下生成对应Jar,我们直接运行jar包查看运行结果:

java -var autotodo-server-1.0.0-SNAPSHOT.jar

这样服务就启动起来了。

项目中我们使用了Flyway来进行数据库版本控制。在 Spring Boot 中,​​Flyway​​ 是一个轻量级的数据库版本控制工具,用于自动化管理和执行数据库迁移脚本(如创建表、修改字段、插入初始化数据等)。它通过跟踪已应用的数据库变更,确保不同环境(开发、测试、生产)的数据库结构一致。以下是 Flyway 的核心概念和在 Spring Boot 中的使用指南。

Flyway 核心机制​​
  1. ​迁移脚本 (Migrations)​​
    • Flyway 使用 ​​SQL 文件​​ 或 ​​Java 类​​ 定义数据库变更。
    • 脚本命名规则:V<版本号>__<描述>.sql(例如 V1__Create_user_table.sql)。
    • 版本号必须唯一且按顺序递增(如 V1, V2, V3.1)。
  2. ​​元数据表 (flyway_schema_history)​​
    • Flyway 自动创建此表,记录已执行的迁移脚本、校验和、执行时间等信息。
    • 每次应用启动时,Flyway 会检查未执行的脚本并自动执行。
  3. ​迁移类型​
类型描述示例文件名
​Versioned​常规结构变更(DDL/DML)V1__Create_table.sql
​Repeatable​可重复执行的脚本(如视图、存储过程)R__Update_view.sql
​Undo​回滚脚本(需商业版支持)U1__Drop_table.sql
Spring Boot 集成 Flyway​
  1. 添加依赖​​
    pom.xml 中引入 Flyway 依赖:
<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId>
</dependency>

这里项目中由于未指定版本遇到问题改为下面方式:

 <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>8.5.13</version></dependency><dependency><groupId>org.flywaydb</groupId><artifactId>flyway-mysql</artifactId><version>8.5.13</version></dependency>
  1. ​配置数据源和 Flyway​​
    application.propertiesapplication.yml 中配置:
# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456# Flyway 配置
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration  # 脚本存放路径
spring.flyway.baseline-on-migrate=true          # 初始化已有数据库
spring.flyway.validate-on-migrate=true          # 校验脚本是否被修改
  1. ​创建迁移脚本​
    src/main/resources/db/migration 目录下创建 SQL 文件:
src/main/resources/
└── db/└── migration/├── V1__Create_user_table.sql└── V2__Add_email_column.sql

这样不需要我们自己创建表,服务启动后就会自动帮我们创建表。

后台运行服务

我们通过java命令直接运行jar的方式会阻塞的控制台,如果控制台关闭,服务就停了,这里使用systemd(系统服务管理)​来创建守护进程,支持开机自启、日志监控和自动重启。
systemd特点​:

  • 适合长期运行的服务(如 Web 服务器)。
  • 需要 root 权限。

接下来我们创建服务文件:

sudo nano /etc/systemd/system/autotodo.service

接着写入配置:

[Unit]
Description=My Spring Boot Application
After=syslog.target[Service]
User=root
ExecStart=java -jar /root/code/AutoTodo/server/autotodo-server-1.0.0-SNAPSHOT.jar
Restart=on-failure
Environment=SPRING_PROFILES_ACTIVE=prod
WorkingDirectory=/root/code/AutoTodo/server[Install]
WantedBy=multi-user.target

最后启用并启动服务​:

sudo systemctl daemon-reload
sudo systemctl start autotodo    # 启动服务
sudo systemctl enable autotodo   # 开机自启

最后可以通过systemctl statue autoto查看服务运行情况:
在这里插入图片描述

部署前端项目
安装nginx

前端Vue打包后需要使用静态服务承接请求,这里使用Nginx。
在 Ubuntu 上安装 Nginx 的步骤如下:
​1. 更新系统包列表​​
sudo apt update
​2. 安装 Nginx​​
sudo apt install nginx
3. 验证安装​​
安装完成后,Nginx 会自动启动。检查服务状态:
sudo systemctl status nginx
正常输出应显示 active (running)
​4. 调整防火墙(可选)​​
如果启用了 UFW 防火墙,开放 HTTP(80)和 HTTPS(443)端口:
sudo ufw allow 'Nginx Full' # 允许 HTTP 和 HTTPS sudo ufw reload
​5. 测试访问​​
在浏览器中访问服务器的 IP 或域名:

http://your-server-ip

若看到 ​​“Welcome to nginx!”​​ 页面,表示安装成功。

  1. 管理 Nginx 服务​​
命令说明
sudo systemctl start nginx启动 Nginx
sudo systemctl stop nginx停止 Nginx
sudo systemctl restart nginx重启 Nginx
sudo systemctl reload nginx重新加载配置(不中断服务)
sudo systemctl enable nginx设置开机自启
  1. 配置文件说明​​
  • ​默认配置文件路径​:
/etc/nginx/nginx.conf          # 全局配置  
/etc/nginx/sites-available/*  # 虚拟主机配置   
/etc/nginx/sites-enabled/*     # 已启用的虚拟主机配置(符号链接)
  • ​默认静态文件目录​​:

    /var/www/html
    ​8. 基本配置示例​​
    ​(1) 托管静态网站​
    创建配置文件 /etc/nginx/sites-available/my-site

server {       listen 80;       server_name your-domain.com www.your-domain.com;          root /var/www/my-site;       index index.html;          location / {           try_files $uri $uri/ =404;       }          # 静态资源缓存       location ~* \.(css|js|png|jpg|svg)$ {           expires 1y;           add_header Cache-Control "public";       }   }

启用配置并重载 Nginx:

sudo ln -s /etc/nginx/sites-available/my-site /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx

​(2) 反向代理后端服务​
将请求转发到本地的 Spring Boot 应用(假设运行在 8080 端口):

server { listen 80; server_name api.your-domain.com; location / { 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; } }
​9. 启用 HTTPS(可选)​​
使用 Let’s Encrypt 免费 SSL 证书:
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d your-domain.com -d www.your-domain.com

证书会自动续期,无需手动操作。

构建打包前端项目

可以在项目中直接使用npm run dev来运行前端项目,当时要部署的话需要先构建打包后再部署,通过npm run build来打包构建,打包完成后输出到dist目录。

将打包好路径上传到/var/www/todo
在这里插入图片描述

接下来配置Nginx。

配置nginx服务

/etc/nginx/sites-available/下创建我们项目的配置文件todo.conf,输入内容如下:

server {listen 80;server_name todo.xxx.com;# 优先匹配静态资源location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {root /var/www/todo/frontend/dist;expires 1y;  # 缓存静态资源add_header Cache-Control "public";access_log off;}# 前端静态文件location / {root /var/www/todo/frontend/dist;index index.html;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;}# SSL配置 (需要证书)# listen 443 ssl;# ssl_certificate /path/to/cert.pem;# ssl_certificate_key /path/to/key.pem;# 性能优化gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;client_max_body_size 10m;

这里面配置了静态资源服务和后端server api方向代理接口,这样通过域名可以直接访问我们的页面了。
最开始由于少配了下面内容:

# 优先匹配静态资源location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {root /var/www/todo/frontend/dist;expires 1y;  # 缓存静态资源add_header Cache-Control "public";access_log off;}

导致打开页面是js文件无法被正确加载。

效果展示

最后放几个效果图:
首先登录:
在这里插入图片描述

等了完成可以输入我们要完成的事情:
在这里插入图片描述

输入内容等待服务端响应,服务端此时调用DeepSeek生成代办项:
在这里插入图片描述

生成结果后可以选中代办项进行保存:
在这里插入图片描述

保存后跳转到待办列表可以查看我们具体事项对应待办了:
在这里插入图片描述


http://www.hkcw.cn/article/ekjFTaQNeL.shtml

相关文章

IsaacLab最新2025教程-环境配置(IsaacSim 4.5.0/Ubuntu22.04) 原创

拖了几个月&#xff0c;终于录了一个安装视频在b站&#xff1a; IsaacLab最新2025教程-环境配置(IsaacSim 4.5.0/Ubuntu22.04) 原创_哔哩哔哩_bilibili IsaacLab的官方入门教程专栏会不断更新哈&#xff1a; IsaacLab教程2025_Calm_dw的博客-CSDN博客 Update 最近看大家的…

在Ubuntu22.04上部署ComfyUI

ComfyUI 是 一个基于节点流程的 Stable Diffusion 操作界面&#xff0c;可以通过流程&#xff0c;实现了更加精准的工作流定制和完善的可复现性。每一个模块都有特定的的功能&#xff0c;我们可以通过调整模块连接达到不同的出图效果&#xff0c;特点如下&#xff1a; 1.对显存…

[Linux]在Ubuntu中安装samba并且正确配置(详细)

一、我们为什么需要samba服务 samba是一种实现windows和linux包括macos文件共享的套件。它能让我们像访问自己的磁盘一样去访问别的系统的文件。可以看得出来这种一种快速并且高效的文件传输协议。看到这里&#xff0c;大家可能会有些疑问。向linux传输文件&#xff0c;我们可以…

基于VMware虚拟机的Ubuntu22.04系统安装和配置(新手保姆级教程)

文章目录 一、前期准备1. 硬件要求2. 软件下载2-1. 下载虚拟机运行软件 二、安装虚拟机三、创建 Ubuntu 系统虚拟机四、Ubuntu 系统安装过程的配置五、更换国内镜像源六、设置静态 IP七、安装常用软件1. 编译工具2. 代码管理工具3. 安装代码编辑软件&#xff08;VIM&#xff09…

媒体:复制“苏超”的精彩很难 “发明者是天才”获赞

6月3日,关于“发明苏超的是天才”的话题引起了广泛关注。媒体对此进行了分析,并表达了高度赞同。6月2日,“发明江苏足球联赛的人一定是个天才”这一话题冲上热搜。有人评论说:“今年端午的欢愉皆由苏超赋予,梗层出不穷,容我再畅快笑上一阵。”自5月10日开赛以来,“苏超”…

巴黎世家线上已下架4500元半身裙 设计争议再起

近日,奢侈品牌巴黎世家推出的一款售价4500元的女款半身裙在网上引发热议。不少网友吐槽该裙子造型与平角短裤极为相似,直呼“看不懂时尚”。据巴黎世家官网介绍,这款深蓝色弹力平纹针织半身裙亮相于2025秋季系列Look 50和Look 54。裙子采用弹力棉混纺平纹针织面料,为平角短…

乌军无人机奇袭俄领土有何影响 俄乌紧张局势升级

乌克兰国家安全局(SBU)出动117架无人机,对俄罗斯多个州的军事基地实施袭击,成功击中41架俄军战机。乌方称,俄罗斯主要机场中约34%的战略轰炸机遭到攻击,损失达到70亿美元。这一消息让外界感到震惊,尤其是袭击目标包括俄远东地区的机场。次日,乌克兰官员更新数据称,至少…

苏超出圈网友玩梗不断 足球与幽默齐飞

江苏省城市足球联赛首次举办,短短三轮比赛后,“苏超”的“含梗量”已经超标。这并非苏格兰足球超级联赛,而是由13个设区市各组一支队伍参与的赛事。截至6月1日,南通队暂列第一。场上是真比拼,场外则充满了网梗和段子。例如,无锡队客场挑战泰州队失利,有人调侃说是因为无…

多方回应男子拖拽女童进小巷 案件定性引争议

6月3日,湖南娄底市公安局娄星分局通报了一起事件。5月20日下午,嫌疑人刘某某(男,38岁)酒后行至娄底市娄星区涟滨中街附近,拖拽一名6岁女童进入居民区巷子,被居民及时制止并报警。警方迅速赶到现场将刘某某控制。经侦查,刘某某涉嫌寻衅滋事已被拘留,并将依法追究其刑事…

老头乐失控撞进餐馆 姐姐冷静救妹妹 姐姐反应神速获赞

6月2日12点48分,河南省周口市西华县某乡镇饭店内发生了一起意外。一位老人在饭店就餐结束后准备驾驶老年代步电动车离开,因操作不当,车辆冲破大门径直冲进店内。当时,饭店老板一岁多的孙女正在店内玩耍,就站在车辆行进路线上。眼看幼童就要被撞,她的姐姐迅速将妹妹抱起转…

科学家发现超级地球 或存类地生命 宜居带内新希望

人类是否是宇宙中唯一的智慧生命?是否存在另一颗像地球一样适合生命存在的行星?这些都是长久以来人们关心的宇宙谜题。中国科学院云南天文台牵头的国际研究团队在一颗类似太阳的恒星周围发现了一颗位于宜居带的超级地球Kepler-725c,其质量大约是地球的10倍。这颗超级地球围绕…

科学家发现一颗“超级地球” 位于宜居带或存生命

人类是否是宇宙中唯一的智慧生命?有没有另一颗像地球一样适合生命存在的行星?这些问题一直是人们关注的宇宙谜题。中国科学院云南天文台牵头的一个国际研究团队,在一颗类似太阳的恒星周围发现了一颗位于宜居带的超级地球Kepler-725c,其质量约为地球的10倍。这颗“超级地球”…

2岁女孩误吞3厘米竹签致腹痛 异物穿肠惊险万分

近两岁大的女孩添添突然腹痛不止,被送到医院检查后发现肚子里竟然有一根竹签,还穿透了肠管。5月27日,家住武汉的添添突发腹痛发热,家长最初以为是普通肠胃炎,在家观察了一天症状有所缓解。但父母仍不放心,便带添添来到湖北省妇幼保健院就诊。儿童普通外科副主任张伊凡听添…

校车与货车碰撞侧翻 22名小学生受伤 事故原因调查中

湖北省黄石市阳新县教育局通报,6月3日早晨,黄颡口镇发生一起交通事故。事故发生后,县委、县政府迅速成立工作组对事故进行核查处理。当天早晨6时50分许,鹿某某驾驶一辆重型自卸货车行驶至S203省道与X043县道交汇路口时,与明某某驾驶的校车发生碰撞,导致校车侧翻。事故造成…

泸州多人吃酒席后上吐下泻 疑似食物中毒引发关注

近日,有网友发布视频称,在四川泸州市威尼斯庄园参加6月1日的婚宴后,许多人出现拉肚子症状,疑似食物中毒。视频显示,酒店工作人员正在医院安抚就诊的食客,并表示会负责。该网友回复称,她和家人在吃完酒席后出现了上吐下泻、发热全身痛的症状,一家四口全部到医院就诊。据…

甘肃一地回应“严禁用自来水浇地” 确保居民生活用水

近日,甘肃省定西市临洮县东部引洮农村饮水管理所发布通知,严禁任何个人或单位使用自来水灌溉药苗、菜地。对违法违规行为,首次发现进行口头警告,再次发现则暂停自来水供水服务,擅自改变用水性质的将处以一千元以上至一万元以下罚款。6月3日,该管理所工作人员表示,这是人…

骑手离职后突发意外仍获10万救助 美团雪中送炭

近日,网上流传着一个既揪心又暖心的故事。山东潍坊一位33岁的骑手在送单期间突发意外,昏迷不醒,每天ICU的费用超过万元。由于急需治疗费用,家属经好心人提醒后,向已离职的美团平台申请大病关怀金,并很快获得批准。骑手的妻子在视频中表示,申请当晚就收到了5万元应急治疗…

乒超球员名单:张本美和加盟成都队 女团阵容大变脸

北京时间6月3日,2025赛季乒超联赛各队参赛名单公布,女团阵容变化较大。日本选手张本美和、平野美宇、木原美悠,以及韩国名将申裕斌都将出战乒超。山东鲁能女队由王曼昱、陈幸同、钱天一、徐奕组成;深圳大学队包括孙颖莎、蒯曼、覃予萱和平野美宇;上海龙腾队有杨屹韵、何卓…

济南男子网恋被骗近30万元 警方追回大部分款项

近日,济南市公安局市中区分局白马山派出所收到辖区小伙儿小谢及其家人送来的锦旗,感谢民警帮他挽回了因网恋被诈骗的近30万元。小谢二十多岁,因患有聋哑疾病,一直没有正式工作,也未能交往到合适的女朋友。几年前,他在一个网络游戏群里认识了一位心仪的女子,并以恋爱名义…

源雀 Scrm AI 开源版 + 客群群发 功能更新

1. 客群群发 基于企微可方 API 接口实现&#xff0c;支持文本&#xff0c;图片&#xff0c;图文链接等多种格式内容。 2. 功能优化 向量数据库 milvs sdk 初始化增加懒加载机制&#xff0c;等功能优化以及 bug 修复。 感谢您一直以来的支持与信任&#xff01;我们相信&#…