使用docker或java命令一键简单部署Java应用
记录下最近使用内网上的linux部署个中间层应用的脚本。
由于内网中有docker有用到docker swarm,则这个脚本是使用docker stack启动的应用。
当然,直接使用docker run或者使用docker compose方式启动也是可以的,不过,就需要手动调整下脚本内容了。
或者使用方式二中更简单的java -jar的方式启动
方式一:使用docker一键简单部署Java应用
创建脚本文件app-deploy.sh
- 注意事项
- 调整应用版本号
app_version
- 调整应用名称
JOB_NAME
- 手动上传jar包到./target目录下,且该目录下只需要一个jar包。
- 当然也可以使用git拉取代码后,使用maven打成jar包的方式一键启动(war包的话,需调整下Dockerfile文件)。
- 调整应用版本号
#!/bin/sh
export JOB_NAME='magpie-server'
old_version=`docker images | grep $JOB_NAME | awk '{print $2}' | head -n1`
# 版本号从0.01开始自增
export app_version=`awk 'BEGIN{printf "%.2f",('$old_version'+'0.01')}' `
echo "上一版本为: "$old_version", 当前版本为: "$app_version
# 创建零时与模板文件夹
mkdir -p ./temp/templates >/dev/null 2>&1
cd ./temp
# 编辑Dockerfile文件
tee Dockerfile <<-'EOF'
FROM eclipse-temurin:8-jre
WORKDIR /workdir
ADD ./target/*.jar app.jar
ENV SPRING_PROFILES_ACTIVE=prod
ENV SERVER_PORT=8080
ENV JAVA_OPTS="-Xms512m -Xmx512m"
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=$SPRING_PROFILES_ACTIVE -Dserver.port=$SERVER_PORT -jar app.jar
EXPOSE 8080
EOF
# 构建镜像
docker build --no-cache -t $JOB_NAME:$app_version .
# 删除空镜像
docker images | awk '{if($1=="<none>")print $3}' | xargs docker rmi &> /dev/null
# 创建模板文件夹
mkdir ./templates >/dev/null 2>&1
# 编辑stack yml文件
tee ./templates/$JOB_NAME.yml <<-'EOF'
version: '3.5'
services:
$JOB_NAME:
image: $JOB_NAME:${app_version}
environment:
TZ: "Asia/Shanghai"
ports:
- target: 8080
published: 18787
mode: host
# networks:
# - middleware
deploy:
replicas: 1
update_config:
parallelism: 1
restart_policy:
condition: on-failure
# 这里网络可以不创建,需要的话可以通过以下命令创建
# docker network create -d overlay --attachable middleware
# networks:
# middleware:
# external: true
EOF
# 通过模板填充模板变量,并写入到新文件中
envsubst '$JOB_NAME,$app_version' < ./templates/$JOB_NAME.yml > ./$JOB_NAME.yml
# 启动app
docker stack up -c $JOB_NAME.yml app --with-registry-auth
使用命令
sh app-deploy.sh
即可部署Java应用了
方式二:直接使用Java -jar启动
app-deploy-jar.sh
脚本配置
#!/bin/sh
APP_NAME='magpie-server'
SERVER_PORT=18787
# 杀进程
ps aux | grep $SERVER_PORT | awk '{print $2}' | xargs kill -9 >/dev/null 2>&1
# 创建零时与模板文件夹
mkdir -p ./temp/logs >/dev/null 2>&1
cd ./temp/
# 启动服务
SPRING_PROFILES_ACTIVE=prod
JAVA_OPTS="-Xms512m -Xmx512m"
nohup java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=$SPRING_PROFILES_ACTIVE -Dserver.port=$SERVER_PORT -jar ./target/$APP_NAME.jar>> ./logs/$APP_NAME.log 2>&1 &
# 开放端口
# firewall-cmd --zone=public --add-port=$SERVER_PORT/tcp
# firewall-cmd --reload
# 查看端口开放情况
# firewall-cmd --list-all
使用命令
sh app-deploy-jar.sh
即可部署Java应用了