当前位置:   article > 正文

部署java项目到linux服务器_java部署到linux服务器

java部署到linux服务器

部署前需要做到:

1、适用windows的子系统linux系统“wsl2” ,使用wsl2就无需在虚拟机中进行linux系统的安装,具体参考:WSL操作指南_wsl使用_天使手儿的博客-CSDN博客

2、在linux中创建docker服务,具体参考:Ubuntu Docker 安装 | 菜鸟教程

做完以上准备工作后,开始部署java项目,笔者做的是前后端代码在一起的javaweb项目,所以只部署好jar包就能够正常运行项目,无需再部署前端,所以这部分只有部署后端的步骤。

部署java项目:

1、创建自己的目录,在目录里编写Dockerfile配置文件,如下:

  1. FROM anapsix/alpine-java:8_server-jre_unlimited #基础镜像,一切根据基础镜像构建
  2. RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #镜像构建时被需要运行的命令
  3. RUN mkdir -p /app
  4. WORKDIR /app #镜像的挂载目录
  5. EXPOSE 8080 #暴露的端口
  6. ADD reggie_take_out-1.0-SNAPSHOT.jar ./ #会添加同目录下名叫reggie_take_out-1.0-SNAPSHOT.jar的文件 别忘了后头还有一个点,那个点就代表当前目录
  7. CMD sleep 30;java -Xms1024m -Xmx2048m -Djava.security.egd=file:/dev/./urandom -jar reggie_take_out-1.0-SNAPSHOT.jar #指定这个容器启动的时候要运行的命令

dockerfile 常用指令如下:

FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,名字+邮箱
RUN #镜像构建的时候被需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包,添加内容
WORKDIR #镜像的挂载目录
VOLUME #挂载的目录
EXPOST #保留端口配置
CMD #指定这个容器启动的时候要运行的命令,只有之后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量

2、在 Dockerfile 文件的存放目录下,执行构建动作。

编写如下命令:

docker build -t regiee_take_out:v5.0-dev .(冒号后指定版本)

或者可以将命令写入一个.sh脚本文件,之后执行脚本文件即可。

3、添加jar包到Dockerfile同目录中

执行命令:cp ~/../mnt/f/jar/*.jar ./

这句命令的含义是将~/../mnt/f/jar/*.jar目录下的jar包复制到当前目录./中,而~/../mnt/f/jar/*.jar目录对应的是本地windows系统F:jar/目录下的jar包,即~/../mnt/是linux目录 对应windows中f/jar/*.jar目录,将jar包放入F:jar/目录下即可同步到服务器上

4、镜像构建之后,开始构建容器

编写docker-compose.yml文件,如下:

  1. version: '3.0'
  2. services: # 可以指定多个服务
  3. regiee: #这个名字随便起 只要有意义
  4. restart: always # 自动开机启动
  5. image: regiee_take_out:v5.0-dev # 基于哪个镜像
  6. container_name: my_regiee_5.0 #容器名称
  7. ports: # 指定端口 可以是多个
  8. - 8888:8082

然后执行docker-compose up -d来启动容器,-d为后台运行

docker-compose down为关闭容器

5、执行docker logs -f 容器id 来查看日志是否启动成功

问题记录

1、每次重启电脑或者 WSL2 后,WSL2 子系统的 IP 地址就会发生改变,解决办法:

https://blog.csdn.net/manbu_cy/article/details/108476859

附上bat脚本:

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. ::先停掉可能在跑的wsl实例
  4. wsl --shutdown ubuntu
  5. ::重新拉起来,并且用root的身份,启动docker服务
  6. wsl -u root service docker start
  7. if !errorlevel! equ 0 (
  8. echo docker start success
  9. :: 看看我要的IP在不在
  10. wsl -u root ip addr | findstr "192.168.107.65" > nul
  11. if !errorlevel! equ 0 (
  12. echo wsl ip has set
  13. ) else (
  14. ::不在的话给安排上
  15. wsl -u root ip addr add 192.168.107.65/24 broadcast 192.168.107.0 dev eth0 label eth0:1
  16. echo set wsl ip success: 192.168.107.65
  17. )
  18. ::windows作为wsl的宿主,在wsl的固定IP的同一网段也给安排另外一个IP
  19. ipconfig | findstr "192.168.107.100" > nul
  20. if !errorlevel! equ 0 (
  21. echo windows ip has set
  22. ) else (
  23. netsh interface ip add address "vEthernet (WSL)" 192.168.107.100 255.255.255.0
  24. echo set windows ip success: 192.168.107.100
  25. )
  26. )
  27. pause

脚本创建完成后,记得一定要管理员运行!一定要管理员运行!一定要管理员运行!

我就是吃了一个这个大亏,在这个小问题上停滞了一天才解决。

2、容器中的项目数据无法持久化

方法一:

通过volume挂载进行 持久化到服务器,具体参考:

Docker——docker-volume原理_庄小焱的博客-CSDN博客_docker --volume

方法二:通过部署minio服务器进行图片的存储

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/282820
推荐阅读
相关标签
  

闽ICP备14008679号