内网服务器离线docker打包部署上线(含前后端)

本次上线内容包含前端vue 和 后端 springboot 项目,通过docker打包环境,并且因为服务器内部无法联网,所以所有docker操作如打包,下载等,都使用下载离线包来完成,包括mysql 和 redis 配置 其中包含了对于docker 网络访问内容的补充,作为一次记录

一、部署环境

mysql 和 redis

准备docker-compose 环境

因为本次部署环境中没有docker-compose文件,需要去阿里镜像下载可执行文件:
阿里镜像: 阿里镜像https://mirrors.aliyun.com
把docker-compose 放到 /usr/local/bin 下,
并修改名称为docker-compose, 给予可执行权限,

chmod  775 /usr/local/bin/docker-compose

成功后通过查看安装环境信息

docker-compose --version

编写docker-compose.yml 文件

version: '3.3'
services:
  mysql:
    container_name: mysql
    restart: always
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      # 挂挂载配置文件
      - ./mysql/conf:/etc/mysql/conf.d
      # 挂载日志
      - ./mysql/logs:/logs
      # 挂载数据
      - ./mysql/data:/var/lib/mysql
    command:
      --innodb-buffer-pool-size=80M
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      '--default-time-zone=+8:00'
      --lower-case-table-names=1
      --explicit_defaults_for_timestamp=true
      --max_allowed_packet=128M
    environment:
      # root 密码
      MYSQL_ROOT_PASSWORD: admin123
  redis:
    image: redis:5.0.10
    container_name: redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      #指定挂载目录
      - ./redis/redis.conf:/usr/local/etc/redis/redis.conf:rw
      - ./redis/data:/data:rw
    command: /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf "

执行 docker-compose up -d

将文件中配置的信息生成镜像,并生成环境容器;

进入mysql 内部并初始化数据库信息

1、复制文件到mysql容器内部

cp ./init.sql mysql:/var/lib/mysql

2、进入mysql 容器内部

docker exec -it mysql /bin/bash

3、进入mysql数据库

mysql -u root -p admin123

4、创建mysql 数据库

create database test;

5、执行初始化sql文件

use test;
source /var/lib/mysql/init.sql

二、部署后端项目

编写dockerflie

back为后端项目名称,下同

# 设置本镜像需要使用的基础镜像
FROM kdvolder/jdk8  
# 把jar包添加到镜像中
ADD back.jar /back.jar
# 镜像暴露的端口
EXPOSE 8050
RUN bash -c 'touch /back.jar'
# 容器启动命令
ENTRYPOINT ["java","-jar","/back.jar"]

导出镜像

docker build -t back-pro:1.0.0 .
docker save back-pro:1.0.0 > back-pro.tar

把tar文件放到服务器指定文件夹后,执行指令生成 back-pro:1.0.1的镜像

docker load -i back-pro.tar;

指定镜像名称,启动容器

docker run -d --restart=always --name back -p 8050:8080 back-pro:1.0.1

查看容器启动日志

docker logs -f --tail=1000 back

linux中模拟访问测试接口,get方法,无参数

curl http://127.0.0.1:8050/back/test

三、部署前端项目

编写dockerflie

front-web为前端项目名称,下同

FROM nginx
VOLUME /OSdata/docker/nginx
ENV LANG en_US.UTF-8
RUN echo "server {  \
                      listen       8051; \
                      location ^~ /back { \
                      proxy_pass              http://127.0.0.1:8050/back/; \
                      proxy_set_header        Host jeecg-boot-system; \
                      proxy_set_header        X-Real-IP \$remote_addr; \
                      proxy_set_header        X-Forwarded-For \$proxy_add_x_forwarded_for; \
                  } \
                  #解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \
                  location / { \
                     root   /var/www/html/; \
                      index  index.html index.htm; \
                      if (!-e \$request_filename) { \
                          rewrite ^(.*)\$ /index.html?s=\$1 last; \
                          break; \
                      } \
                  } \
                  access_log  /var/log/nginx/access.log ; \
              }  " > /etc/nginx/conf.d/default.conf \
    &&  mkdir  -p  /var/www \
    &&  mkdir -p /var/www/html
ADD dist/ /var/www/html/
EXPOSE 8051

导出镜像

docker build -t front-web-pro:1.0.0 .
docker save front-web-pro:1.0.0 > front-web-pro.tar

把tar文件放到服务器指定文件夹后,执行指令生成 front-web-pro:1.0.1的镜像

docker load -i front-web-pro.tar;

指定镜像名称,启动容器

docker run -d --restart=always --name front-web -p 8051:8051 front-web-pro

linux中模拟访问测试接口,get方法,无参数

curl http://127.0.0.1:8051

四、遇到问题

1、镜像包tar保存后,docker load 出来的镜像没有仓库名称和标签,使用docker tag打日志

docker tag 镜像id front-web:1.0.0

2、服务器中某些端口可能被防火墙屏蔽,使用命令查看可用端口

netstat -tuln

3、docker中的数据库访问方式,需要通过docker分配的ip来设置

ip addr

一开始通过127.0.0.1访问数据库失败,通过上面指令知道docker的ip为:172.17.0.2,修改项目中访问数据库的ip为:172.17.0.2:3306/test,此处问题参考以下文章: 宿主机项目连接docker容器内的mysql

五、后续优化点

1、通过修改后端 dockerfile 的jar 文件配置方式,挂载一个地址可以实现更新jar项目,无需每次频繁打包镜像

2、把docker 的ip加入nginx 管理,实现统一的访问路径

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您提供一个详细教程来帮助您部署Vue+SpringBoot前后端分离项目到云服务器上使用Docker。 首先,确保您已经完成以下准备工作: - 注册一个云服务提供商的账号,并创建一个云服务器实例。 - 在本地环境中安装了Docker,并熟悉Docker的基本操作。 - 本地已经安装了Node.js和npm,以及Vue CLI和Java开发环境。 以下是详细的步骤: 1. 登录到云服务器: 使用SSH工具连接到您的云服务器。例如,使用命令行工具执行以下命令: ``` ssh username@server_ip_address ``` 2. 安装Docker: 根据您的云服务器的操作系统,选择对应的安装方式进行Docker安装。以下是一些常见操作系统的安装命令: - Ubuntu: ``` sudo apt-get update sudo apt-get install docker.io ``` - CentOS: ``` sudo yum update sudo yum install docker ``` 3. 验证Docker安装是否成功: 执行以下命令来验证Docker是否已经成功安装: ``` docker version ``` 4. 构建Vue项目: 在本地开发环境中,使用Vue CLI创建Vue项目,并进行开发和测试。确保项目可以正常运行。 ``` vue create myproject cd myproject npm run serve ``` 5. 打包Vue项目: 在Vue项目根目录下执行以下命令,将Vue项目打包成静态文件。 ``` npm run build ``` 6. 创建SpringBoot项目: 使用Spring Initializr创建SpringBoot项目,并进行开发和测试。确保项目可以正常运行。 - 访问Spring Initializr网站:https://start.spring.io/ - 选择项目的基本设置,如使用的编程语言、构建工具、Spring Boot版本等。 - 添加所需的依赖项,如Spring Web、Spring Data JPA等。 - 点击"Generate"按钮下载生成的SpringBoot项目压缩包。 - 解压缩项目压缩包,并使用您喜欢的集成开发环境(IDE)打开项目。 7. 创建Dockerfile: 在SpringBoot项目的根目录下创建一个名为`Dockerfile`的文件,用于定义Docker镜像的构建步骤。在`Dockerfile`中添加以下内容: ``` FROM openjdk:8-jdk-alpine VOLUME /tmp ADD target/myproject.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"] ``` 8. 构建Docker镜像: 在SpringBoot项目的根目录下执行以下命令,构建Docker镜像: ``` docker build -t myproject . ``` 9. 运行Docker容器: 执行以下命令,在Docker中运行SpringBoot项目的Docker容器: ``` docker run -d -p 80:8080 myproject ``` 10. 访问应用: 使用浏览器访问您的云服务器的公网IP地址,即可查看部署好的前后端分离项目。 希望这个详细教程能够帮助您成功部署Vue+SpringBoot前后端分离项目到云服务器上使用Docker。如果您有任何问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值