准备环境
在开始部署服务之前,需要准备好必要的环境和工具。
- 服务器:确保服务器已安装操作系统,并且能够访问互联网。
- 依赖工具:安装必要的依赖工具,如 Docker、Git 等。
服务器要求
- 操作系统:建议使用 Ubuntu 20.04 LTS 或 CentOS 8。
- CPU:至少 2 核。
- 内存:至少 4GB。
- 存储:至少 50GB 可用空间。
数据库构建
服务端需要初始化数据库表,在源码的 /doc/sql/ 目录下,现已经适配 mysql、达梦V8、oracle、Postgre SQL、SQL Server:
- /doc/sql/snail_job_dm8.sql
- /doc/sql/snail_job_mysql.sql
- /doc/sql/snail_job_oracle.sql
- /doc/sql/snail_job_postgre.sql
- /doc/sql/snail_job_sqlserver.sql
数据库自动化构建
🌈特别说明
为了让小伙伴快速搭建测试数据库环境, SnailJob提供了docker compose
的数据库构建支持,如果不熟悉 docker 的小伙伴, 可以参考本文档的数据库默认连接信息
构建本地相应的数据库环境,或者修改application.yml
文件的spring.data
的jdbc
信息。
docker compose 快速构建数据库环境
要求 docker 支持 docker compose v2
cd ./doc/docker
## 启动 mysql
docker compose up -d mysql
## 启动 mariadb
docker compose up -d mariadb
## 启动 postgres
docker compose up -d postgres
## 启动 oracle
docker compose up -d oracle
## 启动 sqlserver
docker compose up -d sqlserver
docker compose exec sqlserver bash /tmp/create_schema.sh
## 下载达梦安装包
wget https://download.dameng.com/eco/dm8/dm8_20240613_x86_rh6_64_rq_ent_8.1.3.140_pack5.tar
## 加载达梦镜像
docker load -i dm8_20240613_x86_rh6_64_rq_ent_8.1.3.140_pack5.tar
## 启动
docker compose up -d dm8
## 执行数据库脚本
docker compose exec dm8 bash -c 'exec /opt/dmdbms/bin/disql SYSDBA/SYSDBA001 \`/tmp/schema.sql'
数据库默认连接信息
数据库类型 | 端口 | 数据库(Schema) | 用户名 | 密码 | 其他 |
---|---|---|---|---|---|
MySQL | 3306 | snail_job | root | root | |
MariaDB | 3308 | snail_job | root | root | |
Postgres | 5432 | snail_job | root | root | |
Oracle | 1521 | snail_job | snail_job | SnailJob | 容器名称: XEPDB1 |
MS SQL Server | 1433 | snail_job | sa | SnailJob@24 |
获取代码
通过 Git 从版本控制系统中获取最新的项目代码。
git clone https://gitee.com/aizuda/snail-job.git
cd project
git clone https://github.com/aizuda/snail-job.git
cd project
配置环境
数据源配置
# 配置数据源
spring:
datasource:
name: snail_job
url: jdbc:mysql://localhost:3306/snail_job?useSSL=false&characterEncoding=utf8&useUnicode=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
#....其他配置信息....
# 配置数据源
spring:
datasource:
name: snail_job
url: jdbc:mariadb://localhost:3308/snail_job
username: root
password: root
driver-class-name: org.mariadb.jdbc.Driver
#....其他配置信息....
# 配置数据源
spring:
datasource:
name: snail_job
url: jdbc:postgresql://localhost:5432/snail_job
username: postgres
password: root
driver-class-name: org.postgresql.Driver
#....其他配置信息....
# 配置数据源
spring:
datasource:
name: snail_job
url: jdbc:sqlserver://localhost:1433;DatabaseName=snail_job;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
username: SA
password: EasyRetry@24
driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
#....其他配置信息....
# 配置数据源
spring:
datasource:
name: snail_job
url: jdbc:oracle:thin:@//localhost:1521/XEPDB1
username: snail_job
password: EasyRetry
driver-class-name: oracle.jdbc.OracleDriver
#....其他配置信息....
系统参数配置
根据项目需求配置环境变量和其他必要的设置。 详情配置 see: 服务端配置
启动服务
源码部署
- maven 打包镜像
maven clean install
- 启动
java -jar snail-job-server-exec.jar
Docker容器部署
🌈特别说明
自定义配置如下:
自定义运行参数: docker run opensnail/snail-job java -XX:+UseZGC -jar app.jar --server.port=8081
使用 env: docker run -e SERVER_PORT=8081 opensnail/snail-job
配置项参考文件:/snail-job-server/src/main/resources/application.yml
正式发布版 点击查看最新版本号
docker run \
-e SPRING_DATASOURCE_USERNAME=root \
-e SPRING_DATASOURCE_PASSWORD=root \
-e SPRING_DATASOURCE_URL='jdbc:mysql://ip:port/snail_job?useSSL=false&characterEncoding=utf8&useUnicode=true' \
-e SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.mysql.cj.jdbc.Driver \
-p 8080:8080 \
-p 17888:17888 \
--name snail-job-server-mysql \
-d opensnail/snail-job:{Latest Version}
docker run \
-e SPRING_DATASOURCE_USERNAME=root \
-e SPRING_DATASOURCE_PASSWORD=root \
-e SPRING_DATASOURCE_URL='jdbc:mariadb://IP:3307/snail_job' \
-e SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.mariadb.jdbc.Driver \
-p 8080:8080 \
-p 17888:17888 \
--name snail-job-server-mariadb \
-d opensnail/snail-job:{Latest Version}
docker run \
-e SPRING_DATASOURCE_USERNAME=postgres \
-e SPRING_DATASOURCE_PASSWORD=root \
-e SPRING_DATASOURCE_URL='jdbc:postgresql://IP:5432/snail_job' \
-e SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.postgresql.Driver \
-p 8080:8080 \
-p 17888:17888 \
--name snail-job-server-mariadb \
-d opensnail/snail-job:{Latest Version}
docker run \
-e SPRING_DATASOURCE_USERNAME=SA \
-e SPRING_DATASOURCE_PASSWORD=SnailJob@24 \
-e SPRING_DATASOURCE_URL='jdbc:sqlserver://IP:1433;DatabaseName=snail_job;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true' \
-e SPRING_DATASOURCE_DRIVER_CLASS_NAME=com.microsoft.sqlserver.jdbc.SQLServerDriver \
-p 8080:8080 \
-p 17888:17888 \
--name snail-job-server-sqlserver \
-d opensnail/snail-job:{Latest Version}
docker run \
-e SPRING_DATASOURCE_USERNAME=snail_job \
-e SPRING_DATASOURCE_PASSWORD=SnailJob \
-e SPRING_DATASOURCE_URL='jdbc:oracle:thin:@//IP:1521/XEPDB1' \
-e SPRING_DATASOURCE_DRIVER_CLASS_NAME=oracle.jdbc.OracleDriver \
-p 8080:8080 \
-p 17888:17888 \
--name snail-job-server-oracle \
-d opensnail/snail-job:{Latest Version}
高可用部署
需要配置业务侧和netty端口的代理,配置完成后正常启动各节点的服务即可,代理配置如下:
业务侧代理:
server {
listen 端口;
server_name localhost;
location /snail-job/ {
proxy_ignore_client_abort on;
proxy_http_version 1.1;
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_pass http://snail-job-server/snail-job/;
}
}
upstream snail-job-server {
server 服务端节点一IP:业务端口 weight=5 max_fails=2 fail_timeout=3s;
server 服务端节点二IP:业务端口 weight=5 max_fails=2 fail_timeout=3s;
…节点n…
}
netty通信代理:
server {
listen netty端口;
server_name localhost;
location / {
proxy_ignore_client_abort on;
proxy_http_version 1.1;
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_pass http://snail-job-server-comm/;
}
}
upstream snail-job-server-comm {
server 服务端节点一IP:netty端口 weight=5 max_fails=2 fail_timeout=3s;
server 服务端节点二IP:netty端口 weight=5 max_fails=2 fail_timeout=3s;
…节点n…
}
验证部署
确保服务正常运行,进行基本的功能测试。
测试 API 接口 使用 curl 或 Postman 进行 API 测试,确保服务响应正确。
http://localhost:8000/snail-job
用户名: admin
密码: admin
问题一:无法连接数据库 检查数据库连接字符串是否正确,并确保数据库服务正在运行。
问题二:服务启动失败 查看 Docker 容器日志,检查错误信息并进行排查。