记录一次(钉钉-第三方企业应用)项目部署和搭建

架构图

alt

首先准备好钱!!!!!!!!

一共准备了4台ECS服务器,1台RDS(mysql版,钉钉平台必须5.6 OR 5.7),1台RDS(redis版)2个EIP弹性ip,1个SLB负载均衡(钉钉平台实例必须是CLB,别买ALB),1个NAT网关(实例必须是公网NAT)(以上全部为阿里云全家桶)

流量出口

首先开通NAT并且绑定一条EIP(弹性ip),然后和其中2台服务器做绑定(应为业务需要4台服务器只有2台会连接外网) alt 按照此图操作之后,图中api1和api2就可以在阿里云后台远程连接去访问外网了,交换机是为了把买的这些云服务组在一个内网环境下

alt

ping一下百度,发现是通了

alt

此时相当于流量的出口做好了,但是还缺流量入口,包括如果想要远程SSH连接到我们的服务器去部署项目就必须要有入口,那么就是如之前架构图所示EIP+SLB组成入口了

流量入口

如图,这是绑定之后的样子,绑定前先去搞一个EIP,新的EIP最后面显示不是解除绑定,而是绑定,然后选择好自己已经开通的SLB实例绑定即可 alt

添加同一vpc(内网环境下)的服务器的端口到SLB下,多台服务器都是支持的,如图显示正常,就可以***H方式尝试远程连接到服务器了 alt

远程连接尝试(成功!!!!) alt

安装docker

阿里ECS服务器系统是Debian11,所以网上找了此系统安装Docker的教程,这里就直接抄一下别人的心血了

卸载旧版本
$ sudo apt-get remove docker docker-engine docker.io containerd runc
安装软件包以允许 apt 通过 HTTPS 使用存储库
$ sudo apt-get update 
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
添加 Docker 的官方 GPG 密钥:
$  curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
添加源
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装docker
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
启动 docker
$ sudo systemctl start docker
设置开机启动 docker
$ sudo systemctl enable docker
使用阿里云ACR的加速服务
$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://e4vaaqhb.mirror.aliyuncs.com"]
}
EOF
重启 docker

重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。

$ sudo systemctl daemon-reload 
$ sudo systemctl restart docker
将当前用户加入 docker 用户组

需要将当前用户加入 docker 用户组,否则进行相关操作会提示没有权限,也不建议使用 root 身份来操作docker

sudo usermod -aG docker $USER && newgrp docker
Docker安装完成!!!!!!!!

安装OpenJdk8

我这里安装的是jre8,想要安装什么去docker官网可以找https://hub.docker.com/

拉取镜像(alpine轻量的jre环境,优点就是,占用空间小)
docker pull openjdk:8-jre-alpine
查看已存在镜像
docker images
删除镜像命令
dokcer rmi ${IMAGE ID} or ${REPOSITORY}:${TAG}
启动容器并映射宿主机文件夹以及配置
docker run -d -p 8899:8899 --name ${name} --restart=always(一直启动) --privileged=true(最高权限) -v ${/宿主机/jar/包外部路径}:${内部路径自定义/随便写/会自动/创建对应/路径}  -e TZ="Asia/Shanghai"(设置时区) openjdk:8-jre-alpine java -jar /home/data/api/api.jar(启动jar包,要用容器内路径) --spring-config-location=/home/data/api/application.properties(设置外部配置文件,用容器内路径)
查看运行中容器
docker ps -a(-a//可以查看已经退出的容器)
重启容器
docker restart ${name}
停止容器
docker stop ${name}
删除容器命令
docker rm ${容器id}
查看项目启动之后的控制台日志
docker logs --tail 100 -f ${容器名称}

安装nginx

拉取nginx
docker pull nginx:stable-alpine
按照端口映射端口,文件夹映射文件夹的操作,将nginx配置文件,前端页面静态js文件夹,日志文件做映射处理
docker pull nginx:stable-alpine
docker run -d -p 80:80 -p 443:443 //端口映射
  --name nginx //容器名
  --restart=always //自启
  --privileged=true //最高权限
  -v /home/data/html/dingClient:/home/data/html/dingClient //前端静态页
  -v /home/data/nginx/conf/conf.d:/etc/nginx/conf.d        //配置文件子文件
  -v /home/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf//配置文件主 文件
  -v /home/data/nginx/logs:/home/data/nginx/logs           //日志文件
  -e TZ="Asia/Shanghai" //时区设置
    nginx:stable-alpine 
    /* 复制的时候记得不要换行,空格即可 */

遇到的一些坑

    1. application.properties配置文件问题,映射的配置文件不生效,验证方法:设置外部配置文件和内部的配置文件端口不一样,看看启动日志的端口是哪个,确定spring-config-location配置是否生效(最后没有解决此问题,就在pom.xml使用了一种新的打包方式)
<build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
        <plugins>
            <!-- 指定启动类,将依赖打成外部jar包 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件 -->
                        <addMavenDescriptor>false</addMavenDescriptor>
                        <manifest>
                            <!-- 是否要把第三方jar加入到类构建路径 -->
                            <addClasspath>true</addClasspath>
                            <!-- 外部依赖jar包的最终位置 -->
                            <classpathPrefix>lib/</classpathPrefix>
                            <!-- 项目启动类 -->
                            <mainClass>vip.natty.${你的主类}</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <!--拷贝依赖到jar外面的lib目录-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-lib</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>target/lib</outputDirectory>
                            <excludeTransitive>false</excludeTransitive>
                            <stripVersion>false</stripVersion>
                            <includeScope>compile</includeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!--指定配置文件,将resources打成外部resource-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <configuration>
                    <archive>
                        <!-- 指定配置文件目录,这样jar运行时会去找到同目录下的resources文件夹下查找 -->
                        <manifestEntries>
                            <Class-Path>resources/</Class-Path>
                        </manifestEntries>
                    </archive>
                    <!-- 打包时忽略的文件(也就是不打进jar包里的文件) -->
                    <excludes>
                        <exclude>*.properties</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <!-- 拷贝资源文件 外面的resource目录-->
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <!-- 资源文件输出目录 -->
                            <outputDirectory>${project.build.directory}/resources</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/resources</directory>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

alt 将这3个文件放入linux容器这样配置文件就只有一份且可以在外部宿主机中修改 alt

记住此时修改容器映射规则

    1. 开发环境下存在配置问题不影响的,在打包部署之后就会产生(例如MapperScan中之前写的是..* 项目运行没有任何问题,开发环境就出问题了,一直报找不到Mapper的错误,排查了很久才找到最简单的注解写错) alt
  • 3.切记做docker映射之后例如jdk使用java -jar 启动命令的时候路径是容器内部路径,其他也是同理
全部评论
spring.config.additional-location
点赞 回复 分享
发布于 2023-07-17 17:51 浙江

相关推荐

评论
1
2
分享

创作者周榜

更多
牛客网
牛客企业服务