测试环境搭建流程

测试环境搭建流程

背景: 基于CentOS7.6, 部署一套SpringCloud开发的微服务,默认各种基础资源和中间件(GItLab,minio, Mysql,redis, rabbitMQ)已经存在

使用脚本 初始化 宿主机

os7init.sh

.sh os7init.sh <服务器名字>

0,基础准备

MySQL容器启动:

注意自定义配置文件 /home/mydata/mysql/conf/my.cnf

[mysqld]
max_connections=1000
sql-mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

docker run -p 3306:3306 --name mysql \
-v /home/mydata/mysql/db:/var/lib/mysql \
-v /home/mydata/mysql/conf:/etc/mysql/conf.d \
-v /home/mydata/mysql/log:/var/log/mysql \
-e MYSQL_ROOT_PASSWORD=Ewit@123 \
--restart=always \
-d mysql:8.0.27 --lower_case_table_names=1 --server-id=3306

Redis容器启动:

docker run -p 6379:6379 --name redis \
-v /home/mydata/redis/data:/data \
--restart=always \
-d redis:6.2.6 redis-server --appendonly yes

minio文件服务器:

docker run -p 9001:9001 -p 9000:9000 \
--net=host \
--name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=sip" \
-e "MINIO_SECRET_KEY=Ewit@123" \
-v /mydata/minio/data:/data \
-v /mydata/minio/config:/root/.minio \
minio/minio server \
/data --console-address ":9001" -address ":9000"

nacos:

docker run -d --name nacos -p 8848:8848 \
--env MODE=standalone \
--env JVM_XMS=256m \
--env JVM_XMX=256m \
--env JVM_XMN=128m \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=192.168.2.110 \
--env MYSQL_SERVICE_PORT=3306 \
--env MYSQL_SERVICE_DB_NAME=gz_cby_config \
--env MYSQL_SERVICE_USER=root \
--env MYSQL_SERVICE_PASSWORD=Ewit@123\
nacos/nacos-server:v2.1.1-slim

1,宿主机环境安装

下载可以从官网或者华为云镜像下载,包放置服务器/home目录

下载openJDK11 ,Maven3.6.3 NodeJs14.18.1

解压(解压后文件可以改名,如果改了名,后面路径记得修改)

tar -zxvf openjdk-11.0.2_linux-x64_bin.tar.gz

tar -zxvf apache-maven-3.6.3-bin.tar.gz

tar -zxvf node-v14.18.1-linux-x64.tar.gz

修改环境变量(环境变量是可以在全局使用bin下面的命令,可以也用软连接方式做)

  • 添加进系统环境变量

    vim /etc/profile
  • 文件内容追加

    # java
    export JAVA_HOME=/home/jdk-11.0.2
    export JRE_HOME=$JAVA_HOME/jre
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
    export PATH=$JAVA_HOME/bin:$PATH
    # maven
    export MAVEN_HOME=/home/apache-maven-3.6.3
    export PATH=$PATH:$MAVEN_HOME/bin
    # nodejs
    export NODEJS=/home/node-v14.18.1
    export PATH=$NODEJS/bin:$PATH
  • 环境变量生效

    source /etc/profile

2, 安装Docker环境

  • 安装yum-utils:

    yum install -y yum-utils device-mapper-persistent-data lvm2
  • 为yum源添加docker仓库位置:

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 安装docker:

    yum install docker-ce
  • 启动docker:

    systemctl start docker

2.1, 修改docker安装路径

停掉Docker服务:

systemctl stop docker

根据上面查到的路径,移动整个/var/lib/docker目录到数据盘的目的路径):

cp -arf /var/lib/docker /home/

修改配置默认路径

在EXECStart后面添加--data-root=/home/docker

vim /usr/lib/systemd/system/docker.service

# ExecStart=/usr/bin/dockerd --data-root=/home/docker

刷新配置,重启docker

systemctl daemon-reload
systemctl start docker

查看docker数据存储目录

docker info | grep "Docker Root Dir"

# Docker Root Dir: /home/docker

docker images 确认之前的镜像是否还在

通过上述方法完成迁移之后,在确认 Docker 能正常工作之后,删除原目录数据:

rm -rf /var/lib/docker

3,安装jenkins

本机安装jenkins 以便于实现CI/CD,打包仓库隔离,jenkins部署在docker中,不在容器内额外安装过多环境,可以挂载宿主机的 jdk maven nodejs等, 可以使用命令软连接,包装shell中可以执行命令

docker run -d -p 10000:8080 -p 10001:50000 \
-v /home/jenkins/jenkins_home:/var/jenkins_home \
-v /home/jdk-11.0.2:/usr/local/jdk \
-v /home/apache-maven-3.6.3:/usr/local/maven \
-v /home/node-v14.18.1:/usr/local/node \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /etc/localtime:/etc/localtime \
-u root \
--privileged=true \
--name jenkins jenkins/jenkins

建立软连接

ln -s /usr/local/jdk/bin/* /usr/local/bin/
ln -s /usr/local/maven/bin/* /usr/local/bin/
ln -s /usr/local/node/bin/* /usr/local/bin/

node如果配置私服,需要添加认证信息 vi ~/.npmrc

docker容器内如果没有vim命令 可以 自行安装

apt update

apt install vim

jenkins 部署完毕,初始化及使用方式配置过程,可以参考另外的笔记 https://duo-ge.gitee.io/p/jenkins/。

注意:初始化插件检测失败时可以后续手动安装必须插件,安装前进入配置页替换插件升级站点:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

4,部署nacos (如果和其他环境共用nacos,可以不装)

docker部署nacos,配置参数变量,单节点,指定mysql做配置数据持久化

数据库备份 cby_config.sql

docker run -d --name nacos -p 8848:8848 \
--env MODE=standalone \
--env JVM_XMS=256m \
--env JVM_XMX=256m \
--env JVM_XMN=128m \
--env SPRING_DATASOURCE_PLATFORM=mysql \
--env MYSQL_SERVICE_HOST=172.16.80.50 \
--env MYSQL_SERVICE_PORT=3306 \
--env MYSQL_SERVICE_DB_NAME=cby_config \
--env MYSQL_SERVICE_USER=root \
--env MYSQL_SERVICE_PASSWORD=Ewit@123\
nacos/nacos-server:v2.1.0-slim

5,Nginx安装(按需而定)

  • 下载Nginx的docker镜像:

    docker pull nginx
  • 先运行一次容器(为了拷贝配置文件):

    docker run -p 80:80 --name nginx \
    -v /mydata/nginx/html:/usr/share/nginx/html \
    -v /mydata/nginx/logs:/var/log/nginx \
    -d nginx
  • 将容器内的配置文件拷贝到指定目录:

    docker container cp nginx:/etc/nginx /mydata/nginx/
  • 修改文件名称:

    cd /mydata/nginx
    mv nginx conf
  • 终止并删除容器:

    docker stop nginx
    docker rm nginx
  • 使用如下命令启动Nginx服务:

    docker run -p 80:80 -p 443:443 -p 8080:8080 --name nginx \
    -v /mydata/nginx/html:/usr/share/nginx/html \
    -v /mydata/nginx/logs:/var/log/nginx \
    -v /mydata/nginx/conf:/etc/nginx \
    -d nginx

最终运行命令的端口映射根据需要增加,端口没有映射到宿主机,增加了配置文件也无法从外部访问

Docker部署这个nginx 这里基本是为了实现反向代理

所以补充配置文件在 /mydata/nginx/conf/conf.d里面就可以了, 案例如下:

server {
listen 80;

location / {
proxy_pass http://192.168.1.60:9009;
}
}

限制docker容器内存上限

1 启动容器时限制容器内存

docker run -m 4g --memory-swap -1

2 限制已启动容器的内存

docker stop containerId
docker update containerId -m 6g --memory-swap -1
docker start containerId

备注:命令详解

–memory 或 -m 限制容器的内存使用量(如10m,200m等)
–memory-swap # 限制内存和 Swap 的总和,不设置的话默认为–memory的两倍

如果只指定了 –memory 则 –memory-swap 默认为 –memory 的两倍
如果 –memory-swap 和 –memory 设置了相同值,则表示不使用 Swap
如果 –memory-swap 设置为 -1 则表示不对容器使用的 Swap 进行限制
如果设置了 –memory-swap 参数,则必须设置 –memory 参数
后期 update –memory 时数值不能超过 –memory-swap 的值,否则会报错 Memory limit should be smaller than already set memoryswap limit