docker+Portainer容器化部署nacos+rouyi_cloud+SkyWalking+sentinel
RuoYi-Cloud是一款基于Spring Boot、Spring Cloud & Alibaba、Vue、Element的前后端分离微服务极速后台开发框架。
RuoYi-Cloud 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring Cloud & Alibaba、Vue、Element),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源。
系统模块
~~~
com.ruoyi
├── ruoyi-ui // 前端框架 [80]
├── ruoyi-gateway // 网关模块 [8080]
├── ruoyi-auth // 认证中心 [9200]
├── ruoyi-api // 接口模块
│ └── ruoyi-api-system // 系统接口
├── ruoyi-common // 通用模块
│ └── ruoyi-common-core // 核心模块
│ └── ruoyi-common-datascope // 权限范围
│ └── ruoyi-common-datasource // 多数据源
│ └── ruoyi-common-log // 日志记录
│ └── ruoyi-common-redis // 缓存服务
│ └── ruoyi-common-security // 安全模块
│ └── ruoyi-common-swagger // 系统接口
├── ruoyi-modules // 业务模块
│ └── ruoyi-system // 系统模块 [9201]
│ └── ruoyi-gen // 代码生成 [9202]
│ └── ruoyi-job // 定时任务 [9203]
│ └── ruoyi-file // 文件服务 [9300]
├── ruoyi-visual // 图形化管理模块
│ └── ruoyi-visual-monitor // 监控中心 [9100]
├──pom.xml // 公共依赖
环境部署
#1,准备工作
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Redis >= 3.0
Maven >= 3.0
Node >= 10
nacos >= 1.1.0 (ruoyi-cloud >= 3.0.0需要下载nacos >= 2.x.x版本)
sentinel >= 1.6.0
skywalking
Centos7.8 IP: 192.168.137.38
docker最新版本
Portainer UI
2,移除以前docker相关包
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3、配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
5、启动
systemctl enable docker --now
6、配置加速
这里额外添加了docker的生产环境核心配置cgroup
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
7,给docker安装个UI
dokcer安装好后,第一步,给docker安装个UI,避免命令出现审判疲劳,这里就安装6053537/portainer-ce的镜像,是汉化版本。
[root@centos-38 ~]# docker run -d --name portainerUI -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock 6053537/portainer-ce
通过此地址登陆: http://192.168.137.38:9000/
8,docker 部署安装nacos-docker。
容器如出现时间或时区不正常,可以在UI中部署时的环境中添加变量: TZ=Asia/Shanghai
[root@centos-38 ~]# yum install git -y
[root@centos-38 ~]# git clone https://github.com/nacos-group/nacos-docker.git
[root@centos-38 ~]# mv nacos-docker /opt/
[root@centos-38 ~]# cd /opt/nacos-docker/
这里使用 docker-compose来部署,只是有些nacos的有些配置文件要修改下。
这里需要使用ry-config的数据库,所以需要修改env/nacos-standlone-mysql.envs相关信息
[root@centos-38 nacos-docker]# cat env/nacos-standlone-mysql.env
PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=ry-config
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=root
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
最后可以部署docker容器:
[root@centos-38 ~]# docker-compose -f example/standalone-mysql-8.yaml up
到portainer中查看如下:
9,相关sql导入到mysql容器中。
下载ruoyi_cloud的相关mysql数据的sql,点击打开链接可以下载相关SQL文件。
这些数据库sql有给ruoyi使用的,还有给nacos使用,需要创建4个库,我这里就直接导入到nacos中的mysql中。
操作好后,可以登陆web页面 http://192.168.137.38:8848/nacos ,显示如下:
10,ruoyi_cloud的前端运行测试与打包。
我这里以vscode编辑器方法操作。
先在本地打包测试运行,再转到docker中运行。
# 进入项目目录
cd ruoyi-ui
# 安装依赖
npm install
# 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。
npm install --registry=https://registry.npm.taobao.org
# 本地开发 启动项目
npm run dev
建议使用Git
克隆,因为克隆的方式可以和RuoYi
随时保持更新同步。使用Git
命令克隆
git clone https://gitee.com/y_project/RuoYi-Cloud.git
在vscode中运行本地测试环境。提示如下:
打开浏览器,输入:(http://localhost:80 (opens new window)) 默认账户/密码 admin/admin123
)
因为本项目是前后端完全分离的,所以需要前后端都单独启动好,才能进行访问。
提示500异常,是因为后端的程序没有运行。
最后将UI的前端打包成静态文件 ,运行命令: npm run build:prod
如果web不是访问本机的接口或是上云平台k8s平台等,需要修改 UI项目的配置文件 vue.config.js。
将在中的 localhost修改成云平台的域名或是IP信息。
11,ruoyi_cloud后端模块修改配置文件与打包
ruoyi_cloud后端运行基础模块(启动没有先后顺序)
RuoYiGatewayApplication (网关模块 必须)
RuoYiAuthApplication (认证模块 必须)
RuoYiSystemApplication (系统模块 必须)
RuoYiMonitorApplication (监控中心 可选)
RuoYiGenApplication (代码生成 可选)
RuoYiJobApplication (定时任务 可选)
RuoYFileApplication (文件服务 可选)
12,docker中安装redis容器
打包ruoyi_cloud后端模块之前,先在docker中安装一个redis容器。
[root@centos-38 config]# pwd
/opt/redis/config
[root@centos-38 config]# cat redis.conf
bind 0.0.0.0
protected-mode no
daemonize no
databases 16
dir ./
appendonly yes
创建挂载的目录与相关的配置文件。
[root@centos-38 config]# docker run -p 6379:6379 --name redis -v /opt/redis/config/redis.conf:/etc/redis/redis.conf -v /opt/redis/data:/data -d redis:6.2.6 redis-server /etc/redis/redis.conf --appendonly yes
redis的容器配置好后,可以到容器中使用rediscli工具测试下。
13,下面开始对ruoyi_cloud的模块的配置文件进行修改并打包。
1),打包之前需要修改相关的配置文件中的nacos,redis,mysql,SkyWalking,sentinel与其它相连模块的IP与端口信息。
根据自己的情况修改。这里展示一个示例,ruoyi_cloud/ruoyi-gateway/src/main/resources/bootstrap.yaml如下:
# Tomcat
server:
port: 8080
# Spring
spring:
application:
# 应用名称
name: ruoyi-gateway
profiles:
# 环境配置
active: dev
main:
allow-bean-definition-overriding: true
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 192.168.137.38:8848
config:
# 配置中心地址
server-addr: 192.168.137.38:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
sentinel:
# 取消控制台懒加载
eager: true
transport:
# 控制台地址
dashboard: 192.168.137.38:8718
# nacos配置持久化
datasource:
ds1:
nacos:
server-addr: 192.168.137.38:8848
dataId: sentinel-ruoyi-gateway
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
2),修改完相关模块的配置文件后,进入ruoyi_cloud目录,使用命令:
mvn clean package
打包好所有模块成jar文件。
14,打包软件进行容器化部署。
再上docker进行容器化部署之前也要修改对应的nacos中的配置文件,这里不再说明。
[root@centos-38 opt]# cd ruoyi-cloud/
api-system/ auth/ bin/ docker/ gateway/ nginx/ ruoyi-system/ seata/ sql/
1),部署前端Web模块。这里直接到PortainerUI中部署,
容器名称: ry-web
容器镜像: nginx:1.12
容器端口: 80:80
挂载目录: /opt/ruoyi-cloud/nginx/config/nginx.conf -------> etc/nginx/nginx.conf
/usr/share/nginx/html -------> /opt/ruoyi-cloud/nginx/html/dist
nginx的配置文件内容如下:
[root@centos-38 conf]# cat nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.137.38:8080/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
使用图形化操作,很方面。
完成后,打开 http://192.168.137.38,可以看到登陆界面。
2),部署ruoyi-gateway相关模块的jar包,需要jdk8环境。
部署名称: ruoyi-gateway
容器镜像: openjdk:8-jdk
容器端口: 80
容器运行执行CMD命令: java -jar /opt/ruoyi-gateway.jar#可以根据自己情况修改。
容器工作目录: /opt #可以不填写。
容器运行用户: root #可以不填写。
容器挂载目录: /opt -----> /opt/ruoyi-cloud/gateway #将ruoyi-gateway.jar放到主机的 /opt/ruoyi-cloud/gateway目录下。
3),其它的ruoyi相关模块的jar包,使用一样方法进行部署,这里不再说明。
4),docker部署sentinel,需要jdk8环境。
部署名称:sentinel
容器镜像: openjdk:8-jdk
容器端口: 8718,8719
容器运行执行CMD命令: java -Dserver.port=8718 -Dcsp.sentinel.dashboard.server=localhost:8718 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.api.port=8719 -jar sentinel-dashboard-1.8.2.jar
容器工作目录: /opt #可以不填写。
容器运行用户: root #可以不填写。
容器挂载目录: /opt -----> /opt/ruoyi-cloud/sentinel #将sentinel-dashboard-1.8.2.jar放到主机的 /opt/ruoyi-cloud/sentinel目录下。
Sentinel
提供了一个可视化的操作平台,安装好之后,在浏览器中输入(http://localhost:8718 (opens new window))就可以访问了,默认的用户名和密码都是sentinel
效果如下图:
5),部署 SkyWalking 链路追踪容器。
1), 先下载两个容器镜像
docker pull apache/skywalking-oap-server:8.4.0-es6
docker pull apache/skywalking-ui
2), 部署容器,比较简单。
docker run --name oap -p 11800:11800 -p 12800:12800 -d apache/skywalking-oap-server:8.4.0-es6
docker run --name oap-ui -p 8008:8080 -d -e SW_OAP_ADDRESS=http://192.168.137.38:12800 apache/skywalking-ui
或是使用ES6存储数据,命令如下:
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "TZ=Asia/Shanghai" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" elasticsearch:6.8.3
docker run --name skywalking-oap --restart always -p 1234:1234 -p 11800:11800 -p 12800:12800 -d --link elasticsearch:elasticsearch -e "TZ=Asia/Shanghai" -e SW_STORAGE=elasticsearch -e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 apache/skywalking-oap-server:8.4.0-es6
docker run --name skywalking-ui -p 8008:8080 --link skywalking-oap:skywalking-oap -d -e SW_OAP_ADDRESS=skywalking-oap:12800 -e "TZ=Asia/Shanghai" apache/skywalking-ui:latest
UI的容器的对外服务端口这里修改成8008,避免与别的端口冲突。
3),给jar包应用添加追踪链路功能,
下面以之前的ruoyi-gateway.jar模块为例,只需要到java执行合计中添加:
-javaagent:/opt/skywalking-agent.jar -Dskywalking.agent.service_name=ruoyi-gateway -Dskywalking.collector.backend_service=192.168.137.38:11800
如下命令: java -javaagent:/opt/skywalking-agent.jar -Dskywalking.agent.service_name=ruoyi-gateway -Dskywalking.collector.backend_service=192.168.137.38:11800 -jar /opt/ruoyi-gateway.jar
最终效果如下图: