1、不使用docker
? 1. 檢查并安裝 Java 環境
檢查 Java 是否已安裝:
java -version
?
? 2. 上傳 Java 項目 JAR 文件
可以創建一個server文件夾,然后上傳目錄?
查看當前目錄
?然后創建目錄上傳jar包
? 3. 啟動 Java 服務?
java -jar hywl-server.jar
這個命令會 阻塞當前終端,關閉終端后服務會終止?
? 4. 后臺啟動 Java 服務??
nohup java -jar hywl-server.jar > app.log 2>&1 &
nohup java -jar -Dspring.profiles.active=dev hywl-server.jar > app.log 2>&1 &
tail -f app.log
停止服務:
通過 ps
命令查找并終止進程
ps -ef | grep hywl-server.jar
?PID 是
5007
,然后執行:
kill -9 5007
補充:
信號數字 信號名稱 作用 1 SIGHUP 掛起信號,重新加載配置 2 SIGINT 中斷(Ctrl + C) 9 SIGKILL 強制終止進程 15 SIGTERM 終止進程(默認信號) 18 SIGCONT 繼續運行停止的進程 19 SIGSTOP 暫停進程 ?
? 5.腳本后臺啟動 Java 服務??
啟動腳本:
vi start.sh
#!/bin/bash# 項目名稱(JAR文件名稱)
APP_NAME="hywl-server.jar"# JVM 參數(可根據需要調整)
JAVA_OPTS="-Xms512m -Xmx1024m -Dspring.profiles.active=dev"# 日志文件路徑
LOG_FILE="app.log"# 檢查進程是否已啟動
PID=$(pgrep -f "$APP_NAME")if [ -n "$PID" ]; thenecho "服務已啟動,PID: $PID"exit 0
fi# 啟動服務
echo "啟動服務: $APP_NAME"
nohup java -jar $JAVA_OPTS $APP_NAME > $LOG_FILE 2>&1 &# 獲取新的PID
PID=$(pgrep -f "$APP_NAME")
echo "服務啟動成功,PID: $PID"
echo "日志文件:$LOG_FILE"
然后設置腳本權限
chmod +x start.sh
最后啟動服務
./start.sh
再編寫一個停止腳本 stop.sh
:?
vi stop.sh
#!/bin/bash# 項目名稱(JAR文件名稱)
APP_NAME="hywl-server.jar"# 獲取PID
PID=$(pgrep -f "$APP_NAME")if [ -z "$PID" ]; thenecho "服務未運行"exit 0
fi# 停止服務
echo "停止服務,PID: $PID"
kill -9 $PIDecho "服務已停止"
chmod +x stop.sh
再編寫一個 restart.sh
:
vi restart.sh
#!/bin/bash./stop.sh
sleep 2
./start.sh
chmod +x restart.sh
?? 6.腳本后臺啟動 Java 服務?(plus)
#!/bin/bash
set -eDATE=$(date +%Y%m%d%H%M)
# 基礎路徑(絕對路徑)
BASE_PATH=/root/service
# 服務名稱。同時約定部署服務的 jar 包名字也為它。
SERVER_NAME=hywl-server
# 環境
PROFILES_ACTIVE=dev# heapError 存放路徑
HEAP_ERROR_PATH=$BASE_PATH/heapError
# JVM 參數
JAVA_OPS="-Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$HEAP_ERROR_PATH"# SkyWalking Agent 配置
#export SW_AGENT_NAME=$SERVER_NAME
#export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.0.84:11800
#export SW_GRPC_LOG_SERVER_HOST=192.168.0.84
#export SW_AGENT_TRACE_IGNORE_PATH="Redisson/PING,/actuator/**,/admin/**"
#export JAVA_AGENT=-javaagent:/work/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar# 停止:優雅關閉之前已經啟動的服務
function stop() {echo "[stop] 開始停止 $BASE_PATH/$SERVER_NAME"PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')# 如果 Java 服務啟動中,則進行關閉if [ -n "$PID" ]; then# 正常關閉echo "[stop] $BASE_PATH/$SERVER_NAME 運行中,開始 kill [$PID]"kill -15 $PID# 等待最大 120 秒,直到關閉完成。for ((i = 0; i < 120; i++))dosleep 1PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')if [ -n "$PID" ]; thenecho -e ".\c"elseecho '[stop] 停止 $BASE_PATH/$SERVER_NAME 成功'breakfidone# 如果正常關閉失敗,那么進行強制 kill -9 進行關閉if [ -n "$PID" ]; thenecho "[stop] $BASE_PATH/$SERVER_NAME 失敗,強制 kill -9 $PID"kill -9 $PIDfi# 如果 Java 服務未啟動,則無需關閉elseecho "[stop] $BASE_PATH/$SERVER_NAME 未啟動,無需停止"fi
}# 啟動:啟動后端項目
function start() {# 開啟啟動前,打印啟動參數echo "[start] 開始啟動 $BASE_PATH/$SERVER_NAME"echo "[start] JAVA_OPS: $JAVA_OPS"echo "[start] JAVA_AGENT: $JAVA_AGENT"echo "[start] PROFILES: $PROFILES_ACTIVE"# 開始啟動nohup java -server $JAVA_OPS $JAVA_AGENT -jar $BASE_PATH/$SERVER_NAME.jar --spring.profiles.active=$PROFILES_ACTIVE > nohup.out 2>&1 &echo "[start] 啟動 $BASE_PATH/$SERVER_NAME 完成"
}# 部署
function deploy() {cd $BASE_PATH# 第一步:停止 Java 服務stop# 第二步:啟動 Java 服務start
}deploy
?一般修改
?
?
啟動:
tail -f nohup.out
注意:這里是stop還是啟動,所以
ps -ef | grep hywl-server.jar | grep -v grep
kill -15 12345
?
2、使用docker
02Docker(mysql、nginx)-CSDN博客
首寫編寫一個Dockerfile文件
## AdoptOpenJDK 停止發布 OpenJDK 二進制,而 Eclipse Temurin 是它的延伸,提供更好的穩定性FROM m.daocloud.io/docker.io/eclipse-temurin:8-jre## 創建目錄,并使用它作為工作目錄
RUN mkdir -p /hywl-server
WORKDIR /hywl-server
## 將后端項目的 Jar 文件,復制到鏡像中
COPY hywl-server.jar app.jar## 設置 TZ 時區
## 設置 JAVA_OPTS 環境變量,可通過 docker run -e "JAVA_OPTS=" 進行覆蓋
ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m" BASE_PATH="/hywl-server"## 暴露后端項目的 48080 端口
EXPOSE 48080## 啟動后端項目
ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -Dapp.home=${BASE_PATH} -jar app.jar
然后如下:
執行
docker build -t hywl-server .
制作完鏡像后需要啟動容器:
新建 Shell 腳本?deploy.sh
,使用 Docker 啟動后端項目。編寫內容如下:
#!/bin/bash
set -e## 第一步:刪除可能啟動的老 hywl-server 容器
echo "開始刪除 hywl-server 容器"
docker stop hywl-server || true
docker rm hywl-server || true
echo "完成刪除 hywl-server 容器"## 第二步:啟動新的 hywl-server 容器 \
echo "開始啟動 hywl-server 容器"
docker run -d \
--name hywl-server \
-p 48080:48080 \
-e "SPRING_PROFILES_ACTIVE=dev" \
-v /opt/service/mall-docker/logs:/hywl-server/logs/ \
hywl-server
echo "正在啟動 hywl-server 容器中,需要等待 60 秒左右"
執行
sh deploy.sh
docker logs -f hywl-server
-f
是 docker logs
命令中的一個選項,表示 --follow
(跟隨/實時輸出日志)。?
日志也掛載了:
快速構建:
?第一次構建后
1、然后下次代碼更新先打包上傳
2、然后構建鏡像
docker build -t hywl-server .
3、然后?
sh deploy.sh
4、實時查看日志
docker logs -f hywl-server
5、我們也可以直接進入容器查看:
docker exec -it hywl-server /bin/sh
docker exec -it hywl-server ls /bin
?
?
exit
?
或者?
CTRL + P + Q
然后停止容器:
docker stop
然后重啟:
?
sh deploy.sh