跳到主要内容

应用部署

本节介绍如何在服务器上部署 Aristotle 服务。

1. 环境准备

部署前,请确保服务器已安装以下软件:

  • Java 17: 用于运行应用。
  • Maven: 用于构建项目(如果需要在服务器上构建)。
  • Docker & Docker Compose: 用于容器化部署(推荐)。
备注

我们假设服务器环境为 Ubuntu 22.04+。关于 Java 和 Maven 的安装,请参考 本地开发环境设置 中的步骤。

2. 构建与打包

首先,克隆代码仓库并执行 Maven 打包命令。你需要提供数据库相关的环境变量来完成打包。

# 1. 克隆仓库
git clone git@github.com:Doom9527/aristotle-webservice.git
cd aristotle-webservice

# 2. 设置数据库环境变量 (用于运行测试,如果跳过测试则非必须)
export NEO4J_URI=YOUR_NEO4J_URI
export NEO4J_USERNAME=YOUR_NEO4J_USERNAME
export NEO4J_PASSWORD=YOUR_NEO4J_PASSWORD
export NEO4J_DATABASE=YOUR_NEO4J_DATABASE

# 3. 执行打包
# -Dmaven.test.skip=true 会跳过单元测试,加快打包速度
mvn clean package -Dmaven.test.skip=true

命令成功后,你会在 target/ 目录下找到 Aristotle-1.0-SNAPSHOT.jar 文件。

3. 部署方式

我们提供两种推荐的部署方式。

方式一:Java Jar 包直接运行

这是最基础的部署方式。

java -jar target/Aristotle-1.0-SNAPSHOT.jar

配置管理:

你可以通过在命令前追加环境变量来覆盖 application.yaml 中的默认配置。

# 覆盖数据库配置和服务器端口
export SPRING_DATA_NEO4J_URI=bolt://prod-neo4j:7687
export SPRING_DATA_NEO4J_USERNAME=prod_user
export SPRING_DATA_NEO4J_PASSWORD=prod_password
export SERVER_PORT=8080

java -jar target/Aristotle-1.0-SNAPSHOT.jar
环境变量命名

注意 Spring Boot 官方推荐的环境变量格式,例如 spring.data.neo4j.uri 对应的环境变量是 SPRING_DATA_NEO4J_URI

方式二:使用 Docker Compose 部署 (推荐)

这是在生产环境中推荐的部署方式,能够方便地管理应用和其依赖(如 Neo4j 数据库)。

项目根目录下的 docker-compose.ymlDockerfile 已经为您准备好了一切。

# 在项目根目录下执行
# -d 参数表示在后台运行
docker-compose up -d --build

--build 参数会强制重新构建镜像,确保使用的是最新的代码。

配置管理:

直接修改 docker-compose.yml 文件中的 environment 部分,即可完成服务配置。

4. 服务访问

服务启动后:

  • 应用端口: 默认为 8080
  • API 文档: 访问 http://<服务器IP>:8080/doc.html 查看 OpenAPI (Swagger) 文档。
  • 健康检查: 访问 http://<服务器IP>:8080/actuator/health 查看应用健康状态。

5. 故障排查

问题:启动时报 "Failed to execute CommandLineRunner" 或 "constraint" 相关错误

Caused by: org.neo4j.driver.exceptions.DatabaseException: Unable to create Constraint ...

原因: 服务在首次启动时会自动在 Neo4j 数据库中创建唯一性约束。如果你的数据库中已经存在不符合约束的数据(例如,两个用户节点有相同的 oidcid),则会创建失败并报错。

解决方案: 建议清空数据库中的数据,然后重启服务。