记一次完整的个人项目发布流程

371 阅读5分钟

前言

趁着这一波 AI 浪潮,大家多多少少都有尝试过开发一些小项目,或者用 AI 来优化项目代码。这篇文章主要是介绍如何结合 AI,实现将本地项目发布到服务器上运行。

项目介绍

项目功能

实现简单的文件检索功能,每个部门都可以维护一棵目录树,部门管理员可以管理文件,包括上传、删除、创建目录等,普通用户只能查看、下载文件。

权限控制如下:

项目架构

  1. 前后端分离,两个应用。
  2. 技术栈:
    1. 前端:vue3 + vite + pinia + element plus
    2. 服务端:Spring Boot 3.x + MySQL + Redis

发布准备

代码逻辑验证

项目在发布到服务器上前,至少需要保证本地是验证通过的,前端使用 npm 命令:

npm run dev

运行,服务端直接在 idea 运行 Spring Boot 启动类,页面如下

服务器

为了代码能够给所有人访问,首先得有个服务器,我使用的是阿里云丐版 ECS 云服务器,99 一年,续杯不加价,真香!

其他云服务厂商其实有更便宜的套餐,咱缺的是💰吗?看中的是服务(此处应该有广,手动狗头)。

操作系统选择的是Alibaba Cloud Linux 3.2104 LTS 64位,选择什么操作系统主要看个人习惯,部分指令在执行上有点差异。

环境搭建

OK,有了服务器之后,接下去就是看你自己想怎么折腾了。可以选择直接在服务器上安装所有必备软件,也可以使用容器化部署。按你举棋未定的时候,这不,AI 的作用来了。

我问 DeepSeek:

我买了个阿里云ecs服务器,想部署自己的应用,需要的组件有redis,mysql,jdk等等,是否有必要安装个docker,还是直接在服务器上安装redis,mysql。

DeepSeek 回答:

既然 DeepSeek 都这么说,直接无脑冲 Docker。

image.png

接下去就是在服务器上安装 Docker,在 Docker 中安装 Nginx、Redis、MySQL 了,详细的对话就不列出来了,这里直接贴实际验证通过的指令:

Docker 安装:

# 更新系统包索引
sudo yum update -y
 
# 安装Docker的依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
 
# 添加Docker仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
 
# 安装Docker CE(Community Edition)
sudo yum install -y docker-ce docker-ce-cli containerd.io
 
# 启动Docker服务
sudo systemctl start docker
 
# 设置Docker服务开机自启
sudo systemctl enable docker

# 检查Docker是否安装成功
docker --version

# 运行一个测试容器
sudo docker run hello-world


# 配置Docker镜像加速(可选)为提升拉取镜像的速度,可以配置镜像加速器。编辑/etc/docker/daemon.json文件,添加以下内容(以阿里云镜像加速器为例):
{
  "registry-mirrors": ["https://<your-aliyun-mirror>.mirror.aliyuncs.com"]
}

Nginx 安装:

docker run -d \
  --add-host=host.docker.internal:host-gateway \
  --name nginx \
  -p 80:80 \
  -v /data/nginx/html:/usr/share/nginx/html \
  -v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
  -v /data/nginx/conf.d:/etc/nginx/conf.d \
  -v /home/project/vue3/document-retrieval-vue3/dist:/usr/share/nginx/html/doc-retrieval \
  nginx

Nginx 的配置后续会提到。

MySQL 安装

docker pull mysql:5.7.42
docker run -d --name mysql5.7 \
  -v /data/mysql:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=xxxxxx \
  -p 3306:3306 \
  mysql:5.7.42

Redis 安装:

docker pull redis:6.2
docker run -d --name redis6.2 \
  -v /data/redis:/data \
  -p 6379:6379 \
  redis:6.2 \
  redis-server --requirepass "xxxxxx"

安装成功后,可以看下容器是否正常启动,看到如下输出,就基本没问题了。

然后在宿主机上安装JDK:

yum install java-17-openjdk-devel

# 查找JDK安装路径
sudo update-alternatives --config java
# 示例输出:java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.14.0.7-3.0.1.1.al8.x86_64/bin/java)

# 编辑环境变量文件(如~/.bashrc)
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.14.0.7-3.0.1.1.al8.x86_64' >> ~/.bashrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

按以上步骤准备工作就绪后,你的服务器现在整体配置如下:

这里建议如果不需要远程连接 Redis 和 MySQL 的话,可以在阿里云控制台把端口关闭,这样更安全。

代码准备

代码在不同环境,肯定有不同环境的配置,所以我问 cursor:

项目使用的是vue3和vite,帮我创建不同环境的配置文件,方便不同环境读取不同的环境变量。

cursor 直接帮你生成文件,你只要一键 apply 就行,不得不说,贴心!!!

image.png

这里就根据项目实际配置来,比如我自己的:

image.png 再执行:

npm run build:prod

就会在根目录下生成 dist 目录:

再把目录文件上传到服务器上:

scp -r dist/* root@服务器IP:文件路径

之后再对服务端项目打包,上传:

scp ./document-retrieval-bootstrap-1.0-SNAPSHOT.jar root@8.133.253.216:/home/project/backend/document-retrieval

我问 DeepSeek:

我现在有个jar包,我想使用nohub执行jar包的时候,传递参数,帮忙提供一个指令

DeepSeek 回答:

最终整理的指令如下:

nohup java -Xms128m -Xmx512m -Dspring.profiles.active=prod -Dlogging.config=classpath:logback-spring.xml -jar document-retrieval-bootstrap-1.0-SNAPSHOT.jar > /dev/null 2>./nohup.log &

接着就是 Nginx 配置,确保请求能顺利访问:

修改配置后记得重启,接着就是验证功能是否正常。浏览器输入:

http://8.133.253.216/doc-retrieval/#/login

能正常跳转到登录页,就没什么问题了。

总结

以上就是项目发布到服务器上的基本步骤,正常在公司里面肯定不是这么玩的,一般都会用 Jenkins 等持续集成工具。

实际体验下来发现 AI 真的是很好的编程助手,既能解决问题,也能给出很好的优化建议。现阶段,AI 还不是万能的,但 AI 的发展真的有点出乎意料。

如果本文对你有帮助,欢迎点赞、收藏+关注...