我想问一下,怎么部署呢?我目前不是 Docker ,所以我想咨询单机下的部署问题。我目前还是拷了一个 tomcat 到服务器然后解压运行,将 spring 弄成 war 放进去。
但我知道部分朋友是直接打成 jar 包然后运行,这里我有个疑问,是用的哪个命令呢,java -jar 它显然会独占命令行窗口,其次怎样去管理这些已经跑起来的 jar 呢?是通过查端口号来进行 kill 吗?那这样岂不是每次发新包都要 kill 然后再 run 。
最后一个问题是,有没有办法在 IDE 里面直接部署到服务器呢? Docker 我知道有种方式可以,但我目前还是单机,故不考虑那种方式。
我这些问题的根源还是我对这些不熟,不敢动,先行谢谢大家了。
1
Imindzzz 2023-08-30 06:26:05 +08:00
nohup
|
2
tairan2006 2023-08-30 07:31:19 +08:00 via Android
Linux 的话 Systemd 就行
Windows 就 nssm |
3
Noita 2023-08-30 08:17:45 +08:00 via Android
linux screen
|
4
heeeeeem 2023-08-30 08:41:10 +08:00
1.nohup java -jar xxx.jar &
2.手动部署,需要每次 kill 3.idea 有云服务商的插件,可以上传包并执行命令 |
5
Bingchunmoli 2023-08-30 08:42:08 +08:00 via Android
screen ,nuhup 配合&,或者做成服务
|
6
unfrost 2023-08-30 08:47:44 +08:00
啊这,不管是 Linux 还是 Windows 都直接打成服务启动就好了,做成 jar 。Linux 做一个 System 文件 systemctl start/stop service_name ,就好了。Windows 的话 可以找一下 Git 上的打服务的工具 https://github.com/winsw/winsw ; IDE 直接部署服务器可以去了解一下 jenkins [但是这个一般是用于集成测试,实际生产环境应该都是手动部署的吧]
|
7
Ayanokouji 2023-08-30 09:08:54 +08:00
如果是 spring boot 的话,看官网吧 https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment
|
8
msaionyc 2023-08-30 09:09:15 +08:00
nohup
每次部署之前查服务进程 id 然后 kill 掉,再 java -jar 。 你可以把这套东西做成脚本,直接执行。包括拉代码,打包,部署的整套流程都可以在脚本里执行 |
9
nothingistrue 2023-08-30 09:34:27 +08:00
先学习一些 Linux 、Windows 上控制后台程序的简单知识。
|
10
mango88 2023-08-30 09:49:55 +08:00
supervisor
|
11
Oneice 2023-08-30 09:56:22 +08:00
通过 Maven 插件实现自动部署: https://gitee.com/dt_research_institute/deploy-helper
|
12
ljsh093 2023-08-30 09:58:57 +08:00
javaw -jar
|
13
imokkkk 2023-08-30 10:09:05 +08:00 2
run.sh
#!/bin/sh function runShell() { #set jvm heap size JVM_ARGS="-Xms256M -Xmx1g -XX:MetaspaceSize=128M -XX:MaxMetaspaceSize=256M" #打印 GC 日志 #JVM_ARGS=${JVM_ARGS}" -XX:+PrintGCDetails -Xloggc:jvm.log -XX:+PrintGCDateStamps " #when jvm oom, auto generate dump file JVM_ARGS=${JVM_ARGS}" -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=sdm_oom.hprof " #jasypt 加解密 JVM_ARGS=${JVM_ARGS}" -Djasypt.encryptor.password=deviskaifa " #JVM_ARGS=${JVM_ARGS}" -Djasypt.encryptor.algorithm=PBEWithMD5AndDES " ## 设置临时目录 TMP_DIR=./tmp if [ ! -d $TMP_DIR ];then mkdir $TMP_DIR else echo tmp dir $TMP_DIR exist fi TMP_DIR_ARG=" -Djava.io.tmpdir="${TMP_DIR} ##### 开启 jmx ,方便使用 JVisualVM 监控系统 # -Dcom.sun.management.jmxremote.port=1099 这个是配置远程 connection 的端口号的,要确定这个端口没有被占用 # -Dcom.sun.management.jmxremote.ssl=false 指定了 JMX 是否启用 ssl # -Dcom.sun.management.jmxremote.authenticate=false 指定了 JMX 是否启用鉴权(需要用户名,密码鉴权) # -Djava.rmi.server.hostname=192.168.1.54 这个是配置 server 的 IP 的 #JVM_ARGS=${JVM_ARGS}" -Djava.rmi.server.hostname=192.168.1.54 -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" ### remote debug 开启远程调试 ## -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 #JVM_ARGS=${JVM_ARGS}" -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 " # 获取启动 jar 包 JAR_NAME=`ls | grep jar` path=$(cd "$(dirname "$0")"; pwd) cd $path nohup java ${JVM_ARGS} ${TMP_DIR_ARG} -jar ${JAR_NAME} $1 $2 $3 $4 $5 $6 > /dev/null 2>error.log & echo $! > tpid echo Starting... echo please use tailf logs/*.log to check success or not. } if [ ! -f "tpid" ]; then runShell else tpid=$(cat "tpid") running=$(ps -ef |awk '{print $2}'|grep -w $tpid) if [ "$running" ]; then echo "Process(pid:$tpid) is already running." else runShell fi fi |
14
shanghai1943 2023-08-30 10:41:56 +08:00
可以看看 java service wrapper
|
15
sankooc 2023-08-30 13:42:34 +08:00
pm2
|
16
dog82 2023-08-30 15:18:04 +08:00
你得用 springboot 才能打可执行 jar 包哈
|
17
javak 2023-08-30 15:50:03 +08:00 via iPhone
200 块,我手把手教你
|
18
S4msara 2023-08-30 16:07:12 +08:00
1.打成 Jar 包的前提是使用了 Spring Boot ;
2.java -jar 独占命令行窗口可以使用 nohup java -jar xxx.jar > /dev/null 2>&1 &或者 nohup java -jar xxx.jar > log.out &,区别在于前者不将 console 日志输出到日志文件,后者输出; 3.ps -ef | grep java 查正在运行中的 Java 程序,如果 jar 包名称存在相同,则用端口查然后 kill -9 ; 4.如果不想每次都 kill 再 run ,可以自己写 shell 脚本,把发版流程( e.g. 上传新版本到发版目录>关闭运行中程序>拷贝并覆盖旧版本>运行程序)用脚本写好,手动的部分就只有上传新版本到发版目录和运行脚本了,或者可以使用 Jenkins ; 5.是否使用 Docker 与程序是否单机无关。 |
19
KevinBlandy 2023-08-30 16:39:15 +08:00
|
20
EscYezi 2023-08-31 01:22:07 +08:00 via iPhone
可以用 pm2 管理启动停止,比 systemd 简单不少
|
21
tgich 2023-08-31 10:47:41 +08:00
写一个 sh 脚本来启动 jar
|