主题
一、环境信息
- 数据库/中间件环境信息
名称 | 版本 | IP地址 | 备注 |
---|---|---|---|
Nginx | 1.28.0 | 172.22.33.213 | docker部署 |
Mysql | 8.0.36 | 172.22.33.213 | docker部署 |
Redis | 7.4.3 | 172.22.33.213 | docker部署 |
Jenkins | 2.504.2 | 172.22.33.201 | docker部署 |
Gitlab-ce | 17.1.1 | 172.22.33.203 | RPM包部署 |
sonarqube-community | 25.4.0.105899 | 172.22.33.207 | docker部署 |
- 服务器信息
服务器名称(机器配置) | IP地址 | 操作系统 | 备注 |
---|---|---|---|
web前端+中间件 (8c16g200g) | 172.22.33.213 | OpenEuler 22.03 LTS SP4 | Docker20.10.24,Docker-compose2.10.2 |
后端微服务01 (8c16g100g) | 172.22.33.214 | OpenEuler 22.03 LTS SP4 | JDK17 |
后端微服务02 (8c16g100g) | 172.22.33.215 | OpenEuler 22.03 LTS SP4 | JDK17 |
二、环境部署
2.1 基础环境搭建
WARNING
基础环境 依赖docker 和 docker-compose 组件, 安装教程可参考: https://doc.srebro.cn/zh/home/openeuler/docker
2.1.1 部署Nginx
bash
mkdir -p /home/application/nginx/{conf,dist}
bash
cat > /home/application/nginx/conf/pig-ui.conf <<'EOF'
# 定义七层负载均衡上游服务组
upstream backend {
server 172.22.33.214:9999;
server 172.22.33.215:9999;
}
server {
listen 80;
server_name localhost;
# Gzip 压缩配置
gzip on;
gzip_static on;
gzip_min_length 1k;
gzip_comp_level 4;
gzip_proxied any;
gzip_types text/plain text/xml text/css;
gzip_vary on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
# 前端资源路径
root /data/;
location ^~/api/ {
proxy_pass http://backend/; # 引用上游服务组
proxy_connect_timeout 60s;
proxy_read_timeout 120s;
proxy_send_timeout 120s;
# 代理头信息(保持原有配置)
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header from "";
}
# 敏感路径屏蔽
location ~* ^/(actuator|swagger-ui|v3/api-docs|swagger-resources|webjars|doc.html) {
return 403;
}
}
EOF
yaml
cat > /home/application/nginx/docker-compose.yaml <<'EOF'
services:
nginx:
image: docker.cnb.cool/srebro/docker-images-chrom/nginx:1.28.0
#image: nginx:1.28.0
container_name: nginx
restart: always
ports:
- "80:80"
volumes:
- /home/application/nginx/conf/pig-ui.conf:/etc/nginx/conf.d/default.conf # 挂载自定义配置文件
- /home/application/nginx/dist:/data # 挂载数据目录
networks:
- srebro
networks:
srebro:
driver: bridge # 指定网桥模式
EOF
bash
docker-compose up -d
# 查看容器运行状态
docker logs -f nginx
- 查看容器运行状态
2.1.2 部署Mysql
bash
mkdir -p /home/application/mysql/data
yaml
cat > /home/application/mysql/docker-compose.yaml <<'EOF'
services:
mysql:
restart: always
#image: mysql:8.0.38
image: docker.cnb.cool/srebro/docker-images-chrom/mysql:8.0.38
container_name: mysql
networks:
- srebro
volumes:
- /home/application/mysql/data:/var/lib/mysql # 挂载数据目录
- /etc/localtime:/etc/localtime:ro
environment:
MYSQL_ROOT_PASSWORD: "srebro"
TZ: 'Asia/Shanghai'
ports:
- 3306:3306
command: --explicit_defaults_for_timestamp=true
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-u", "root", "-psrebro"]
interval: 30s
timeout: 10s
retries: 3
networks:
srebro:
driver: bridge # 指定网桥模式
EOF
bash
docker-compose up -d
# 查看容器运行状态
docker logs -f mysql
- 查看容器运行状态
2.1.3 部署Redis
bash
mkdir -p /home/application/redis/{data,logs}
yaml
cat > /home/application/redis/docker-compose.yaml <<'EOF'
services:
redis:
image: docker.cnb.cool/srebro/docker-images/redis:7.4.3
container_name: redis
networks:
- srebro
restart: always
command: redis-server --requirepass srebro --port 6379 --appendonly yes --dbfilename dump.rd --dir /data --timeout 0 --save 900 1 --save 300 10 --save 60 10000 ##设置redis密码
environment:
TZ: 'Asia/Shanghai'
volumes:
- /home/application/redis/data:/data
- /home/application/redis/logs:/logs
- /etc/localtime:/etc/localtime:ro
ports:
- 6379:6379
healthcheck:
test: ["CMD", "redis-cli", "-h", "127.0.0.1", "-p", "6379", "-a", "srebro", "ping"] ##设置redis密码
interval: 30s
retries: 3
start_period: 30s
timeout: 10s
networks:
srebro:
driver: bridge
EOF
bash
docker-compose up -d
# 查看容器运行状态
docker logs -f redis
- 查看容器运行状态
2.1.4 部署JDK17
bash
# 安装openjdk17
wget https://mirrors.nju.edu.cn/openjdk/17.0.2/openjdk-17.0.2_linux-x64_bin.tar.gz
# 解压jdk17
tar -zxvf openjdk-17.0.2_linux-x64_bin.tar.gz -C /home/application/
# 删除压缩包
rm -rf openjdk-17.0.2_linux-x64_bin.tar.gz
# 配置环境变量
cat >> /etc/profile << 'EOF'
export JAVA_HOME=/home/application/jdk-17.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
EOF
source /etc/profile
# 验证jdk
java -version
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
bash
# 安装openjdk17
wget https://mirrors.nju.edu.cn/openjdk/17.0.2/openjdk-17.0.2_linux-x64_bin.tar.gz
# 解压jdk17
tar -zxvf openjdk-17.0.2_linux-x64_bin.tar.gz -C /home/application/
# 删除压缩包
rm -rf openjdk-17.0.2_linux-x64_bin.tar.gz
# 配置环境变量
cat >> /etc/profile << 'EOF'
export JAVA_HOME=/home/application/jdk-17.0.2
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
EOF
source /etc/profile
# 验证jdk
java -version
openjdk version "17.0.2" 2022-01-18
OpenJDK Runtime Environment (build 17.0.2+8-86)
OpenJDK 64-Bit Server VM (build 17.0.2+8-86, mixed mode, sharing)
2.1.5 部署其他环境
Details
- Jenkins 安装请参考前面的内容 https://opforge.srebro.cn/cicd/02.html#_3-3-3-基于docker-容器部署方式
- Gitlab-ce 安装请参考前面的内容 https://opforge.srebro.cn/cicd/05.html#_1-3-使用rpm包方式安装gitlab-ce
- sonarqube-community 安装请参考前面的内容 https://opforge.srebro.cn/cicd/07.html#_1-1-2-安装配置-基于docker部署sonaqube
2.2 部署前准备
2.2.1 准备源码包并上传gitlab
- 下载pig-ui前端代码
bash
git clone https://gitee.com/log4j/pig-ui.git
- gitlab创建前端项目
- 上传前端代码到gitlab
- 下载pig后端代码
bash
git clone https://gitee.com/log4j/pig.git
- gitlab创建后端项目
代码库地址: http://code.srebro.cn/opforge/cicd-demo-pig-backend.git
- 上传后端代码到gitlab
2.2.2 初始化数据库
TIP
支持的数据库版本: mysql5.7.8+(支持8) 默认字符集: utf8mb4
默认排序规则: utf8mb4_general_ci
数据库SQL文件在 后端pig代码根目录下db 目录
bash
-- 业务核心数据库
source db/pig.sql;
-- nacos配置数据库
source db/pig_config.sql;
2.2.3 修改 Nacos 数据库源地址
找到后端代码根目录下
pig-register/src/main/resources/application.properties
,修改数据库连接信息
yaml
db.url.0=jdbc:mysql://${MYSQL_HOST:172.22.33.213}:${MYSQL_PORT:3306}/${MYSQL_DB:pig_config}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
db.user=root
db.password=srebro