服务器上只需要安装 Docker 即可,不需要Java环境!
CentOS/RHEL:
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker
Ubuntu/Debian:
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker
Docker版本检查:
docker --version
# 方式1: 使用scp
scp -r xingfutong-java/ user@your-server:/opt/
# 方式2: 使用rsync
rsync -avz xingfutong-java/ user@your-server:/opt/xingfutong-java/
# 方式3: 使用git
ssh user@your-server
cd /opt
git clone your-repo-url xingfutong-java
cd /opt/xingfutong-java
# 确保已经编译过(如果没有,在本地编译好再上传)
# 本地编译命令:javac -encoding UTF-8 -d bin -cp "lib/*" $(find src -name "*.java")
# 构建镜像
docker build -t sign-server:latest .
基础运行(使用代码中的默认配置):
docker run -d \
--name sm2-sign-server \
-p 8888:8888 \
--restart unless-stopped \
sign-server:latest
传入自定义私钥(通过环境变量):
docker run -d \
--name sm2-sign-server \
-p 8888:8888 \
-e SM2_PRIVATE_KEY="您的64位十六进制私钥" \
-e SLT_PUBLIC_KEY="您的130位十六进制公钥" \
-e REQ_ORG_NO="您的机构号" \
--restart unless-stopped \
sign-server:latest
使用配置文件:
# 创建配置文件
cat > config.properties << EOF
reqOrgNo=201811200001003
priKey=您的私钥
sltPubKey=您的公钥
EOF
# 运行容器并挂载配置文件
docker run -d \
--name sm2-sign-server \
-p 8888:8888 \
-v $(pwd)/config.properties:/app/config.properties:ro \
--restart unless-stopped \
sign-server:latest
cd /opt/xingfutong-java
# 构建并启动
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止
docker-compose down
# 重启
docker-compose restart
# 查看状态
docker-compose ps
docker ps
# 实时查看日志
docker logs -f sm2-sign-server
# 查看最近100行
docker logs --tail 100 sm2-sign-server
docker stop sm2-sign-server
docker start sm2-sign-server
docker restart sm2-sign-server
docker stop sm2-sign-server
docker rm sm2-sign-server
docker exec -it sm2-sign-server sh
cd /opt/xingfutong-java
# 停止旧容器
docker stop sm2-sign-server
docker rm sm2-sign-server
# 重新构建镜像
docker build -t sign-server:latest .
# 启动新容器
docker run -d \
--name sm2-sign-server \
-p 8888:8888 \
--restart unless-stopped \
sign-server:latest
cd /opt/xingfutong-java
# 重新构建并启动
docker-compose up -d --build
CentOS/RHEL (firewalld):
firewall-cmd --permanent --add-port=8888/tcp
firewall-cmd --reload
Ubuntu/Debian (ufw):
ufw allow 8888/tcp
ufw reload
iptables:
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
service iptables save
如果想使用其他端口(比如80):
# 使用Docker端口映射
docker run -d \
--name sm2-sign-server \
-p 80:8888 \
sign-server:latest
# 访问时使用: http://your-server/api/sign
# 健康检查
curl http://localhost:8888/api/health
# 或从外部访问
curl http://your-server-ip:8888/api/health
# 测试签名接口
curl -X POST http://localhost:8888/api/sign \
-H "Content-Type: application/json" \
-d '{
"data": {
"version": "1.0",
"txnType": "20250"
}
}'
# /etc/nginx/conf.d/sign-server.conf
server {
listen 80;
server_name sign.yourdomain.com;
location / {
proxy_pass http://localhost:8888;
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;
}
}
# 使用Let's Encrypt
apt install certbot python3-certbot-nginx
certbot --nginx -d sign.yourdomain.com
docker run -d \
--name sm2-sign-server \
-p 8888:8888 \
--memory="512m" \
--cpus="1.0" \
--restart unless-stopped \
sign-server:latest
# 限制日志大小
docker run -d \
--name sm2-sign-server \
-p 8888:8888 \
--log-opt max-size=10m \
--log-opt max-file=3 \
--restart unless-stopped \
sign-server:latest
修改Dockerfile添加健康检查:
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD wget --quiet --tries=1 --spider http://localhost:8888/api/health || exit 1
docker ps
# 状态列会显示健康状态
# 查看详细日志
docker logs sm2-sign-server
# 检查端口是否被占用
netstat -tlnp | grep 8888
# 检查容器是否运行
docker ps -a
# 检查防火墙
firewall-cmd --list-ports
# 导出镜像
docker save sign-server:latest > sign-server.tar
# 在其他服务器导入
docker load < sign-server.tar
使用Alpine Linux的JRE镜像(已使用),镜像大小仅约85MB。
创建 deploy.sh:
#!/bin/bash
echo "开始部署SM2签名服务..."
# 检查Docker
if ! command -v docker &> /dev/null; then
echo "错误: 未安装Docker,请先安装Docker"
exit 1
fi
# 停止旧容器
docker stop sm2-sign-server 2>/dev/null
docker rm sm2-sign-server 2>/dev/null
# 构建镜像
echo "构建Docker镜像..."
docker build -t sign-server:latest .
# 启动容器
echo "启动容器..."
docker run -d \
--name sm2-sign-server \
-p 8888:8888 \
--restart unless-stopped \
sign-server:latest
# 等待启动
sleep 3
# 健康检查
echo "检查服务状态..."
curl -s http://localhost:8888/api/health
echo ""
echo "部署完成!"
echo "访问地址: http://$(hostname -I | awk '{print $1}'):8888"
使用方法:
chmod +x deploy.sh
./deploy.sh
最简单的部署流程:
docker-compose up -d优势:
镜像大小: 约85MB(使用Alpine Linux)