大家好,我是walker
一个从文科自学转行的程序员~
爱好编程,偶尔写写编程文章和生活
欢迎关注公众号【I am Walker】,回复“电子书”,就可以获得200多本编程相关电子书哈~
我的gitee:https://gitee.com/shen-chuhao/walker.git 里面很多技术案例!
步骤
1、确保安装好jdk、maven、git、docker环境
安装jdk1.8
https://blog.youkuaiyun.com/Think_and_work/article/details/122842622?spm=1001.2014.3001.5502
安装maven
https://blog.youkuaiyun.com/Think_and_work/article/details/122846319?spm=1001.2014.3001.5502
安装git
https://blog.youkuaiyun.com/Think_and_work/article/details/122858091?spm=1001.2014.3001.5501
安装docker和docker-compose
这里便自行去安装了,目前还未出教程,等后续再补上
可以参考一下
https://blog.youkuaiyun.com/qq_15076569/article/details/105734716
2、克隆项目
1、复制项目的地址
2、使用git clone
指令拉取项目
3、编写docker-compose
version: '3.1' # 1、定义docker-compose版本
# 2、服务
services:
# 3、服务名称,可以自己定义
web-11000:
container_name: web-11000 # 4、容器名称,可以自己定义
image: java:8 # 5、需要用到的镜像。 我使用的是jdk1.8 所以使用java:8
volumes: # 6、容器卷 绑定容器和虚拟机的路径
- ./:/opt
- ./logs:/logs
- /etc/localtime:/etc/localtime:ro
ports: # 7、端口映射
- 11000:11000
command: [ # 8、执行指令
'java',
'-Djava.security.egd=file:/dev/./urandom',
'-Duser.timezone=GMT+08', # 时区
'-jar','/opt/springboot-function-0.0.1-SNAPSHOT.jar', # 执行jar包命令
'--server.port=11000' #端口号,也可以不添加,在项目中添加
]
restart: always
使用-Djava.security.egd=file:/dev/./urandom’的原因
tomcat部署项目发现卡在Root WebApplicationContext : initialization completed in xxxms
1.整个过程没有报错,但是启动时间很长。
2.查阅资料发现由于tomcat启动时产生随机数导致jvm阻塞,可能是多次启动tomcat导致熵池被用空造成阻塞。
在apache-tomcat官方文档:如何让tomcat启动更快里面提到了一些启动时的优化项,其中一项是关于随机数生成时,采用“熵源”(entropy source)的策略。他提到tomcat7的session id的生成主要是通过java.security.SecureRandom生成随机数来实现的,随机数算法使用的是“SHA1PRANG”。
3.在sun/oracle的jdk里,这个算法的提供者在底层依赖到操作系统提供的随机数,在linux上,与之相关的是/dev/random和dev/urandom/
当熵池为空时,来自/dev/random的读取操作将被阻塞,直到熵池收集到足够的环境噪声数据。这么做的目的是成为一个密码安全的伪随机数发生器,熵池要有尽可能大的输出。对于生成高质量的加密密钥或者是需要长期保护的场景,一定要这么做。
参考资料:https://www.icode9.com/content-1-1184596.html
4、编写shell脚本
#!/bin/bash
current=$(date "+%Y%m%d%H%M%S") # 1、定义时间变量,主要用于记录历史jar包的时间
# 2、切换到存放项目的路径下
cd /opt/develop/git/walker-learn/springboot-function
# 3、拉取项目 这里根据自己的分支而定
git pull origin master
# 4、使用maven指令进行清除和打包
mvn clean package -D maven.test.skip=true
# 5、移动jar包,主要是将之前的版本的jar包保存下来,用于出现问题之后回退版本
mv /opt/develop/docker/springboot-function/springboot-function-0.0.1-SNAPSHOT.jar /opt/develop/docker/springboot-function/springboot-function-0.0.1-SNAPSHOT.jar.$current
# 6、复制maven打包成功后jar包到docker-compose.yml同个文件夹下
cp -f /opt/develop/git/walker-learn/springboot-function/target/springboot-function-0.0.1-SNAPSHOT.jar /opt/develop/docker/springboot-function
# 7、转移到docker-compose.yml的路径下
cd /opt/develop/docker/springboot-function
# 8、docker-compose重启 第一次启动还是需要使用docker-compose up -d 自行启动,第二次才可以使用shell脚本进行重启
docker-compose restart
- #!/bin/sh 是指此脚本使用/bin/sh来解释执行,**#!**是特殊的表示符,其后面跟的是此解释此脚本的shell的路径。
5、执行
使用./exec.sh
具体的文件看自己的命名,我使用的是exec.sh
若结果出现,则表示项目构建成功了
也可以查看日志查看结果
问题
bash: ./springboot-function.sh: /bin/bash^M: bad interpreter: No such file or directory
这里可能是格式的问题,我是因为在idea写的,写完直接把文件复制过去的。
这个方式不是很好,可以先在idea写,写完把文本内容复制过去,或者直接在linux上面写