docker部署springboot+vue项目环境安装及部署流程

后端项目打jar包修改及配置项

1、修改配置文件 application-prod.yml中的mysql配置和redis配置

2、切换Maven为生产模式

3、Maven打包

4、拿到打包后的jar 包

5、拿到jar包之后在Linux中使用

nohup java -jar jeecg-system-start-3.5.0.jar >catalina.out 2>&1 &

命令即可启动项目

前端项目打包及配置项

  1. 修改.env.production文件

2.进入前端项目根目录,执行编译命令

yarn install

yarn run build

前端项目根目录中的dist即是打包后的前端项目

将dist文件夹存放到nginx/html文件夹中

在nginx/conf/nginx.conf中配置:

server {# nginx监听端口

listen 8088;

server_name localhost2;

#前端打的dist资源存放目录

root html/dist;

#前端项目.env.production文件中的VUE_APP_API_BASE_URL

location /jeecg-boot/ {

#后台接口地址

proxy_pass http://127.0.0.1:8080/jeecg-boot;

proxy_redirect off;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

set $my_proxy_add_x_forwarded_for $proxy_add_x_forwarded_for;

if ($proxy_add_x_forwarded_for ~* "127.0.0.1"){

set $my_proxy_add_x_forwarded_for $remote_addr;

}

proxy_set_header X-Forwarded-For $my_proxy_add_x_forwarded_for;

}

location / {

try_files $uri $uri/ /index.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

此时访问ip:8088即可访问到前端项目

Linux安装nginx

创建一个目录存放nginx安装包

下载地址:http://nginx.org/en/download.html

下载命令:wget http://nginx.org/download/nginx-1.13.6.tar.gz

解压包 tar -xvf 包名,默认解压到当前文件夹。

先安装上依赖;

yum install gcc

yum install pcre-devel

yum install zlib zlib-devel

yum install openssl openssl-devel

cd到nginx目录

cd nginx-1.13.7 #切换目录

./configure #执行配置

make && make install #编译安装(默认安装在/usr/local/nginx)【make生成的才是真正的nginx】

然后

/usr/local/nginx/sbin/nginx -v #查看版本

cd /usr/local/nginx/sbin #cd到nginx的安装位置的sbin目录下

./nginx #启动nginx

访问此服务器的ip就可以看到welcome to nginx【如果不行的话防火墙开放80端口【还不行的话就是云服务器的安全组80端口没有开启】】

常用命令

./nginx #启动nginx

./nginx -t #测试配置文件

./nginx -s reload #重启Nginx

./nginx -s quit #停止nginx

./nginx -s stop #停止nginx

Linux安装java

在这个网址下载https://www.oracle.com/technetwork/java/javase,选择download,因为是CentOS 7.6,所以选择x64 Compressed Archive版本的安装包。

创建目录,解压:

mkdir /usr/java

tar zvxf jdk.tar.gz -C /usr/java

为了能在全局使用java命令,配置环境变量:

修改环境配置文件

vi /etc/profile

编辑配置文件,在里面添加如下三行

export JAVA_HOME=/usr/java/jdk1.8.0_271

export PATH=JAVA_HOME/bin:PATH

export CLASSPATH=.:JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/tools.jar

使环境变量生效

source /etc/profile

验证是否配置成功,查看java版本

java -version

Linux安装mysql

CentOS7已经不再支持MySQL,而是在内部集成了MariaDB,文件会有冲突,所以还要先卸载MariaDB才行。

列出所有被安装的rpm package

rpm -qa | grep mariadb

卸载(注意"版本号"根据当前系统显示的版本信息的为准)

rpm -e mariadb-libs-5.5.37-1.el7_0.x86_64

如果提示依赖检测失败可以强制卸载

rpm -e --nodeps mariadb-libs-5.5.37-1.el7_0.x86_64

安装依赖

yum install vim libaio net-tools

MySQL :: Download MySQL Community Server (Archived Versions)

从这个链接选一个合适的版本的mysql,下载RPM Bundle的包,CentOS系统就是Red Hat的社区发行版,内核是相同的,或者用通用版本(Generic)也可以。

下载bundle包,解压出文件上传至服务器,依次安装包中的所有rpm文件。

rpm -ivh mysql-community-common-8.0.13-1.el7.x86_64.rpm

如果出现"依赖检测失败"问题再后面添加 --force --nodeps强制安装

rpm -ivh mysql-community-common-8.0.13-1.el7.x86_64.rpm --force --nodeps

service mysql start // 启动MySQL

登录数据库两种方式,推荐第二种更方便

  • mysql -uroot -p密码 # 登录mysql
  • 使用Navicat登录mysql数据库

常见错误:QRTZ_LOCKS表明明存在于数据库但是却显示不存在,是因为数据库大小写敏感的原因

常用命令:

  • 切换数据库

Use MySQL

  • 列出所有的数据库/表

Show databases/tables

  • 建立数据库:

CREATE DATABASE 库名;

  • 删除数据库:

DROP DATABASE 库名;

  • 删除数据表:

DROP TABLE 表名;

  • 导入.sql文件命令:

USE 数据库名;

SOURCE mysql.sql;

Linux安装redis

1、下载地址:https://redis.io/download,下载最新稳定版本,下载下来的文件上传到需要安装的服务器的目录。

2、tar -xzvf redis-5.0.7.tar.gz 解压到当前目录

3、在redis-5.0.7目录,执行 make ,等待安装结束

4、进入 /redis-5.0.7/src 目录,执行: ./redis-server ,正常显示以下图像代表没问题

5、编辑环境变量配置文件: vim /etc/profile 按 i 进入编辑模式 光标移至最后一行 开始添加如下

export REDIS_HOME=/opt/softs/redis/redis-5.0.7/

export PATH=PATH:REDIS_HOME/src/

6、第一行是解压之后的redis 的目录。编辑完成之后按 ESC 输入 wq! 保存并退出

7、刷新配置信息: source /etc/profile

8、此时在任意目录下 都可以执行redis相关命令

修改密码:

1、打开redis.conf配置文件。该文件通常位于Redis服务器的安装目录下。

2、找到并取消注释(删除前面的 # 符号)以下行:

3、# requirepass foobared

4、将 foobared 替换为您想要设置的密码,例如:

requirepass <new_password>

5、保存并关闭配置文件,重新启动Redis服务。

Windows安装docker

使用 PowerShell 启用 Hyper-V

以管理员身份打开 PowerShell 控制台,运行以下命令:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

Docker下载地址Docker Desktop

Docker-desktop中自带docker-compose工具。

下载docker-desktop之后,一路 Next,点击 Finish 完成安装。

安装之后,可以打开 PowerShell 并运行以下命令检测是否运行成功:

docker run hello-world

在成功运行之后应该会出现以下信息:

如果启动中遇到因 WSL 2 导致地错误,先安装 WSL 2

Linux安装docker和docker-compose

apt-get install docker.io # Linux安装docker

docker -v # 查看版本号

安装docker-compose

docker中重要的是容器和镜像的概念,可以简单的将docker理解为共享操作系统的轻量虚拟机:

  • docker容器是一种隔离的运行环境,它是由docker镜像创建的一个运行实例。在docker容器中可以安装应用程序、运行服务,并能够提供运行时环境的隔离。
  • docker镜像是容器的基础,它是docker容器的静态模板,包含了运行一个docker容器所需的一切,包括系统工具、应用程序、配置文件等。

dockerfile文件和docker-compose.yml

dockerfile文件用于生成docker镜像

docker-compose文件用于编排镜像和容器运行。

dockerfile定义了单个容器的构建规则,它指导docker构建工具如何从基础镜像中创建一个特定的容器镜像。

docker-compose.yml定义了一组容器的编排规则,它描述了应用程序由哪些容器组成、它们之间的连接和通信方式,以及如何运行这些容器。

通常,docker-compose.yml文件中会引用一个或多个dockerfile,以便在构建多容器应用程序时使用这些docker镜像。

dockerfile文件示例

FROM anapsix/alpine-java:8_server-jre_unlimited

MAINTAINER jeecgos@163.com

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

WORKDIR /jeecg-boot

EXPOSE 8076

ADD ./target/jeecg-system-start-3.4.4.jar ./

CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start-3.4.4.jar

常用配置项:

FROM:基于此镜像构建新镜像

RUN:构建镜像过程中所运行的指令,每一个RUN执行后都会生成一个镜像层。整个镜像由多个镜像层组成。

WORKDIR:设置镜像生成的容器的工作目录,进入容器时会首先进入整个目录。

EXPOSE:暴露容器端口,可以将容器的端口映射到宿主机端口。

ADD :将打包后的文件加到镜像中,镜像运行为容器之后,同样会存在于容器中。

CMD:容器启动后默认执行的指令

以下是docker-compose.yml文件示例

version: '2'

services:

jeecg-boot-redis:

image: redis:5.0

ports:

  • 6379:6379

restart: always

hostname: jeecg-boot-redis

container_name: jeecg-boot-redis

jeecg-boot-system: # 指定服务名,一个项目为一个服务

build:

context: ./jeecg-module-system/jeecg-system-start

restart: on-failure

depends_on:

  • jeecg-boot-redis

container_name: jeecg-boot-system

image: jeecg-boot-system

hostname: jeecg-boot-system

ports:

  • 8080:8080

常用配置项

build:使用context基于上下文路径指定dockerfile文件

container_name:指定自定义容器的名称

depends_on:指定服务之间的依赖关系,解决服务启动先后顺序问题。

被依赖的服务会先启动

environment:设置环境变量。

expose:暴露指定端口,但不映射到宿主机,只被连接的服务访问。只能指定内部端口

image:指定要启动容器的镜像。

ports:端口映射:格式为宿主机端口:容器端口。访问宿主机的指定端口就可以访问容器运行在这个端口的服务。

docker常用命令

#启动docker服务

systemctl start docker

#查看docker服务状态

systemctl status docker

#查看本地所有镜像

docker images

#单个镜像删除,相当于:docker rmi redis:latest

docker rmi redis

#强制删除(针对基于镜像有运行的容器进程)

docker rmi -f redis

#启动一个或多个已经被停止的容器

docker start redis

#重启容器

docker restart redis

#查看正在运行的容器

docker ps

#查看所有的容器

docker ps -a

#停止一个运行中的容器

docker stop redis

#删除一个已停止的容器

docker rm redis

#删除一个运行中的容器

docker rm -f redis

#使用交互模式进入容器

docker exec -it redis bash

#查看容器日志

docker logs Redis

#在有docker-compose.yml文件的目录中运行此命令,启动整个docker-compose应用。

docker-compose up -d

#关闭docker-compose的单个服务

docker-compose stop 服务名

#启动docker-compose的单个服务

docker-compose start 服务名

docker部署项目流程

使用docker部署项目流程是:

  1. 按照1.1和1.2前后端打包流程打包前后端,在上述基础之上,将ip改为docker-compose.yml文件中的service名称。

2、使用dockerfile文件将前后端打的包增加到镜像中

3、使用docker-compose.yml文件管理镜像服务的启动。

4、将镜像移植到服务器上一键启动

以交通项目为例,部署控制中心前后端,mysql、redis总共四个服务。

首先查看dockerfile文件和docker-compose.yml文件

MySQL的dockerfile

FROM mysql:8.0.19

MAINTAINER jeecgos@163.com

ENV TZ=Asia/Shanghai

RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

COPY ./jeecgboot-hxz.sql /docker-entrypoint-initdb.d

COPY ./jeecg-simulator.sql /docker-entrypoint-initdb.d

COPY ./jeecg-agent.sql /docker-entrypoint-initdb.d

COPY ./xxl_job.sql /docker-entrypoint-initdb.d

Redis直接使用现有镜像

控制中心后端的dockerfile

FROM anapsix/alpine-java:8_server-jre_unlimited

MAINTAINER jeecgos@163.com

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

#RUN mkdir -p /jeecg-boot/config/jeecg/

WORKDIR /jeecg-boot

EXPOSE 8080

ADD ./target/jeecg-system-start-3.4.4.jar ./

CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar jeecg-system-start-3.4.4.jar

控制中心前端的dockerfile

FROM nginx

MAINTAINER jeecgos@163.com

VOLUME /tmp

ENV LANG en_US.UTF-8

RUN echo " gzip on; \

gzip_min_length 1k; \

gzip_comp_level 9; \

gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; \

gzip_vary on; \

gzip_disable "MSIE [1-6]\."; \

server { \

listen 81; \

location ^~ /jeecg-boot { \

proxy_pass http://jeecg-boot-system:8080/jeecg-boot/; \

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 81

docker-compose.yml

version: '2'

services:

#MySQL

jeecg-boot-mysql:

build:

context: ./db

environment:

MYSQL_ROOT_PASSWORD: HXL10242023

MYSQL_ROOT_HOST: '%'

TZ: Asia/Shanghai

restart: always

container_name: jeecg-boot-mysql

image: jeecg-boot-mysql

command:

--character-set-server=utf8mb4

--collation-server=utf8mb4_general_ci

--explicit_defaults_for_timestamp=true

--lower_case_table_names=1

--max_allowed_packet=128M

--default-authentication-plugin=caching_sha2_password

ports:

  • 3307:3306

#redis

jeecg-boot-redis:

image: redis:5.0

command: redis-server --tcp-keepalive 60 --requirepass HXL10242023

ports:

  • 6380:6379

restart: always

hostname: jeecg-boot-redis

container_name: jeecg-boot-redis

控制中心后端

jeecg-boot-system:

build:

context: ./jeecg-module-system/jeecg-system-start

restart: on-failure

depends_on:

  • jeecg-boot-mysql

  • jeecg-boot-redis

container_name: jeecg-boot-system

image: jeecg-boot-system

hostname: jeecg-boot-system

ports:

  • 8085:8080

#控制中心前端

jeecg-boot-nginx:

build:

context: ../ant-design-vue-jeecg-center

container_name: jeecg-boot-nginx

image: jeecg-boot-nginx

restart: always

ports:

  • 81:81

depends_on:

  • jeecg-boot-system

在docker-compose.yml文件所在的目录中打开命令行,执行"docker-compose up -d",创建镜像并运行为容器启动。

docker的移植性很强,可以在windows的开发环境下编译项目生成镜像,然后直接将镜像传递到Linux上运行为容器启动【同样使用docker-compose up -d】。

打包镜像命令:

docker save -o 压缩包名.tar 镜像名:镜像tag

解压镜像命令:

docker load -i 压缩包名.tar