如果想要实现自动部署,可以借鉴另一篇文章:Jenkins+Gitlab实现自动部署
一、前端
1、nginx部署
1.1、前端打包
1.2、在nginx根目录下的nginx.conf文件里加入配置(附:在nginx.conf文件里加入的配置)
server {
listen 18082;
server_name localhost;
location / {
root /opt/zhsq/page/dist;
try_files $uri $uri/ @router;
index index.html index.htm;
}
location @router {
rewrite ^.*$ /index.html last;
}
error_page 500 502 503 504 /50.html;
location = /50x.html {
root html;
}
}
1.3、 将打包好的dist文件夹放入/opt/zhsq/page(此目录是刚刚在nginx.conf文件里配置的,可以自行更改)
1.4、执行重启nginx命令:nginx -s reload
2、docker部署
2.1、前端打包
2.2、将打包好的dist文件夹和Dockerfile文件放在一起(附:Dockerfile文件)
FROM nginx
VOLUME /tmp
ENV LANG en_US.UTF-8
ADD ./dist/ /usr/share/nginx/html/
EXPOSE 80
EXPOSE 443
2.3、执行打包镜像命令:docker build -t avue:1.0 .
2.4、执行运行容器命令:docker run -itd -p 7777:80 -v /mnt/:/mnt/ --name avue --restart unless-stopped avue:1.0
至此,前端部署完毕
二、后端
1、在父pom文件加入docker私有库配置(附:父pom文件)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springblade</groupId>
<artifactId>BladeX</artifactId>
<version>2.8.0.RELEASE</version>
<packaging>pom</packaging>
<properties>
<bladex.project.version>2.8.0.RELEASE</bladex.project.version>
<java.version>1.8</java.version>
<maven.plugin.version>3.8.1</maven.plugin.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<flowable.version>6.4.2</flowable.version>
<spring.boot.version>2.2.13.RELEASE</spring.boot.version>
<spring.cloud.version>Hoxton.SR10</spring.cloud.version>
<spring.platform.version>Cairo-SR8</spring.platform.version>
<docker.namespace>zhsq</docker.namespace>
<docker.repository.addr>61.144.207.236:17452</docker.repository.addr>
<docker.plugin.version>1.4.13</docker.plugin.version>
</properties>
<modules>
<module>blade-auth</module>
<module>blade-gateway</module>
<module>blade-ops</module>
<module>blade-service</module>
<module>blade-service-api</module>
<module>blade-common</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springblade.platform</groupId>
<artifactId>blade-bom</artifactId>
<version>${bladex.project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-common</artifactId>
<version>${bladex.project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>${spring.platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.name}</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<configuration>
<fork>true</fork>
<finalName>${project.build.finalName}</finalName>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${docker.plugin.version}</version>
<configuration>
<repository>${docker.repository.addr}/${docker.namespace}/${project.artifactId}</repository>
<tag>${project.version}</tag>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<skip>false</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<!--suppress UnresolvedMavenProperty -->
<copy overwrite="true"
tofile="${session.executionRootDirectory}/target/${project.artifactId}.jar"
file="${project.build.directory}/${project.artifactId}.jar" />
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>aliyun-repos</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>blade-release</id>
<name>Release Repository</name>
<url>http://nexus.bladex.vip/repository/maven-releases/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>aliyun-plugin</id>
<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
2、在每个需要构建的子服务pom文件下加入build配置(附:子服务pom文件)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>blade-service</artifactId>
<groupId>org.springblade</groupId>
<version>2.8.0.RELEASE</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>blade-system</artifactId>
<name>${project.artifactId}</name>
<version>${bladex.project.version}</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-core-boot</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-excel</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-starter-swagger</artifactId>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-system-api</artifactId>
<version>${bladex.project.version}</version>
</dependency>
<dependency>
<groupId>org.springblade</groupId>
<artifactId>blade-user-api</artifactId>
<version>${bladex.project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<configuration>
<repository>${docker.repository.addr}/${docker.namespace}/${project.artifactId}</repository>
<tag>${project.version}</tag>
<useMavenSettingsForAuth>true</useMavenSettingsForAuth>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<skip>false</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
3、 在每个需要构建的子服务根目录下加入Dockerfile文件(附:Dockerfile文件)
FROM adoptopenjdk/openjdk8-openj9:alpine-slim
MAINTAINER smallchill@163.com
RUN mkdir -p /blade/system
WORKDIR /blade/system
EXPOSE 8106
ADD ./target/blade-system.jar ./app.jar
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"]
CMD ["--spring.profiles.active=test"]
4、在项目根目录下加入docker-compose.yml(附:docker-compose.yml)
version: "3"
services:
bladegateway:
image: 61.144.207.236:17452/zhsq/blade-gateway:2.8.0.RELEASE
ports:
- "18080:80"
volumes:
- "/home/logs/zhsq:/logs"
environment:
PROFILE: test
bladeauth:
image: 61.144.207.236:17452/zhsq/blade-auth:2.8.0.RELEASE
ports:
- "18100:8100"
volumes:
- "/home/logs/zhsq:/logs"
environment:
PROFILE: test
XMS: 256M
XMX: 256M
bladesystem:
image: 61.144.207.236:17452/zhsq/blade-system:2.8.0.RELEASE
ports:
- "18106:8106"
volumes:
- "/home/logs/zhsq:/logs"
environment:
PROFILE: test
XMS: 256M
XMX: 256M
bladeuser:
image: 61.144.207.236:17452/zhsq/blade-user:2.8.0.RELEASE
ports:
- "18102:8102"
volumes:
- "/home/logs/zhsq:/logs"
environment:
PROFILE: test
XMS: 256M
XMX: 256M
bladeswagger:
image: 61.144.207.236:17452/zhsq/blade-swagger:2.8.0.RELEASE
ports:
- "28000:18000"
volumes:
- "/home/logs/zhsq:/logs"
environment:
PROFILE: test
XMS: 256M
XMX: 256M
6、所有服务都已经推送到docker私有库了,依次运行每个服务的docker镜像
7、每次推送完毕之后需要一个一个运行docker镜像,为了避免麻烦,写了一个启动脚本
(附:start.sh)
#!/bin/bash
docker stop `docker ps | grep zhsq | awk '{print $1}'`
docker rm `docker ps -a | grep zhsq | awk '{print $1}'`
docker rmi `docker images | grep zhsq | awk '{print $3}'`
cd /home/zhsq
docker-compose pull
docker-compose up -d
至此,后端部署完毕