一键版
实战:一键部署全网最美博客ruyu-blog(简洁、唯美、丝滑)-v2-2024.8.17(测试成功)(一键版)
目录
[toc]
版权声明
本着开源共享、共同学习的精神:
本文是在 博主Ruyu 文章:《Ruyu-Blog 博客项目部署文档》https://www.kuailemao.xyz/article/48 基础上增加了自己实践过程的一些细节,转载无需和我联系,但请注明文章来源。如果侵权之处,请联系博主进行删除,谢谢~
强烈推荐:
博主Ruyu :
Ruyu-Blog开源博客gitee地址:https://gitee.com/kuailemao/ruyu-blog
Ruyu-Blog开源博客网站地址:https://www.kuailemao.xyz/
效果
博客介绍
基于 SpringBoot3 + Vue3 + TypeScript+ Mysql + Redis + RabbitMQ + SpringSecurity 的前后台个人博客系统。
==项目特点==
- 前端参考了众多优秀博客大佬设计,页面美观,响应式布局
- 后台管理基于 Antdv Pro 后台通用框架二次开发
- 前后端分离,Docker Compose 一键部署
- 采用 RABC 权限模型,使用 SpringSecurity 进行权限管理
- 支持动态权限修改、动态菜单和路由
- 文章、分类、标签、时间轴、树洞、留言板、聊天、友链等模块
- 站长介绍、公告、电子时钟、随机文章、每日鸡汤、网站资讯
- 支持代码高亮、图片预览、黑夜模式、点赞、收藏、评论等功能
- 评论支持在线预览、Markdown、表情包
- 发送友链申请、通过等自动发送邮件提醒
- 接入第三方 gitee、github登录,减少注册成本
- 文章编辑使用 Markdown 编辑器
- 实现日志管理(操作、登录),服务监控、用户、菜单、角色、权限管理
- 使用 自己搭建 minio 进行图片存储(避免了使用第三方对象存储被刷流量问题)😍
- 使用 Spring Aop + Redis 对接口进行了限流处理(每分钟),后端使用 JSR 303 对参数校验,使用 Spring Aop + RabbitMQ 对后台操作日志处理
- 采用 Restful 风格的 API,注释完善,后端代码使用了大量 stream 流编程方式,代码非常美观
- ……
==技术介绍==
前台前端(博客): Vue3 + Pinia + Vue Router + TypeScript + Axios + Element Plus + Echarts……
后台启动(管理): Vue3 + Pinia + Vue Router + TypeScript + Axios + Antdv Pro + Ant Design Vue……
后端: JDK17 + SpringBoot3 + SpringSecurity + Mysql + Redis + Quartz + RabbitMQ + Minio + Mybatis-Plus + Nginx + Docker……
其他: Gitee、Github 第三方登录
适用版本
ruyu-blog release >=1.4.0
前提:
前提: 1台centos7.x机器纯净系统(最小化或者桌面版都行,不要安装其他软件!!!)(云服务器和本地虚机都行,推荐虚机部署成功后,再部署到云服务器)(测试前记得做好快照) 能上外网(nat模式) 配置要>=2c 4g
我的环境是在win10的vmwareworkstaion上一台centos7.6 1810虚机,ip为192.168.1.102
建议:
次一键部署全网最美博客ruyu-blog,是在原文档基础上写的,可用于快速部署1套ruyu-blog,让小白体验下这款博客的魅力。
为了全面了解该博客的框架,强烈建议后续再手动部署一遍。
建议小白在一台纯净centos7.x上执行博客部署脚本。(因为涉及到当前机器是否存在各软件老环境脚本检查编写,暂未提供,后续会优化次安装脚本。)
注意:
博客具体源码,请从作者git仓库获取。
Ruyu-Blog开源博客gitee地址:https://gitee.com/kuailemao/ruyu-blog
如何获取一键部署脚本 🐱🚀
基于版权原因,想要获取ruyu-blog一键部署脚本,请进q群获取脚本,部署过程遇到的问题,也可在群里交流。😘
q群:
本地文件位置:
ruyu-blog-install-v1-2024.8.6.sh
ruyu-blog-install-v2-2024.8.18.sh ##本次,测试成功
更新内容
- 将本地1.1G大的附件包穿到oss供大家快速下载;(将本地镜像上传阿里云仓库供大家获取)
- 一条命令即可完成ruyu-blog的部署(不再下载很大的附件包了)
- 优化shell命令;(使用了函数等)
1、部署方法
从oss拉取脚本:
#直接执行如下命令可完成安装ruyu-blog博客的部署
curl -O http://47.100.215.163:6080/public/code/ruyu-blog-install-v2.sh ; sh -x ruyu-blog-install-v2.sh > >(tee /root/ruyu-blog-all.log) 2> >(tee /root/ruyu-blog-error.log >&2)
##输入自己当前服务器的ip,然后坐等部署成功,整个时间预计在12min左右。
本地执行脚本:
#直接执行如下命令可完成安装ruyu-blog博客的部署
sh -x ruyu-blog-install-v2.sh > >(tee /root/ruyuy-blog-all.log) 2> >(tee /root/ruyuy-blog-error.log >&2)
##输入自己当前服务器的ip,然后坐等部署成功,整个时间预计在10min左右。(下载镜像、pnpm下载依赖比较耗时,耐心等待即可……)
测试过程:
- 准备1台测试机器
- 执行脚本
curl -O http://47.100.215.163:6080/public/code/ruyu-blog-install-v2.sh ; sh -x ruyu-blog-install-v2.sh > >(tee /root/ruyuy-blog-all.log) 2> >(tee /root/ruyuy-blog-error.log >&2)
- 执行结束
2、测试效果
完美,测试成功:😘
前台后端:ADMIN/123456
待优化
- pnpm构建时下载依赖包很耗时,需优化;
- shell判断当前环境代码需优化;
其它相关
基础环境软件:
ruyu-blog-install-v2.sh
(2024.8.17更新)
#!/bin/bash
# 由用户输入当前机器的IP地址
read -p "请输入当前机器的IP地址: " new_ip_address
echo "开始执行ruyu-blog安装脚本……:"
#配置颜色
RED="\E[1;31m"
GREEN="\E[1;32m"
END="\E[0m"
pull_softwares(){
###########################################################步骤1:从oss拉取基础环境包########################################################
echo -e $RED "###########################################################步骤1:从oss拉取基础环境包########################################################" $END
sleep 2
cd /root
curl -O https://bucket-hg.oss-cn-shanghai.aliyuncs.com/code/ruyu-blog-install-softwares.zip
unzip ruyu-blog-install-softwares.zip
cd /root/
curl -O https://bucket-hg.oss-cn-shanghai.aliyuncs.com/code/apache-maven-3.9.8-bin.tar.gz
curl -O https://bucket-hg.oss-cn-shanghai.aliyuncs.com/code/jdk-17_linux-x64_bin.rpm
curl -O https://bucket-hg.oss-cn-shanghai.aliyuncs.com/code/node-v16.20.2-linux-x64.tar.xz
curl -O https://bucket-hg.oss-cn-shanghai.aliyuncs.com/code/ruyu-blog-v1.4.2.zip
curl -O https://bucket-hg.oss-cn-shanghai.aliyuncs.com/code/docker-compose-linux-x86_64
curl -O https://bucket-hg.oss-cn-shanghai.aliyuncs.com/code/maven-repo.tar.gz
##解压ruyu-blog源码及sql
cd ~
unzip ruyu-blog-v1.4.2.zip
mv ruyu-blog-v1.4.2 ruyu-blog
cd ruyu-blog/sql
mv "blog(部署).sql" blog.sql
cp blog.sql ~
}
install_env(){
###########################################################步骤2:安装基础环境########################################################
echo -e $RED "###########################################################步骤2:安装基础环境########################################################" $END
sleep 2
echo "############配置ruyu-blog开发基础环境##############"
##docker部署
#初始环境
systemctl stop firewalld
systemctl disable firewalld
systemctl stop NetworkManager
systemctl disable NetworkManager
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
cd /etc/yum.repos.d/
mkdir backup-$(date +%F)
mv * backup-$(date +%F)
curl -O http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache fast
yum install -y net-tools vim lrzsz wget epel-release
##部署docker
yum install -y yum-utils device-mapper-persistent-data lvm2 --disablerepo=epel
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install -y docker-ce-19.03.9 docker-ce-cli-19.03.9 containerd.io
mkdir -p /etc/docker
# 先将一个空的 JSON 对象写入 /etc/docker/daemon.json,确保文件存在并且是一个有效的 JSON 文件
echo '{}' | tee /etc/docker/daemon.json > /dev/null
tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn"
]
}
EOF
sysctl -w net.ipv4.ip_forward=1
systemctl daemon-reload
systemctl restart docker
docker version
cd ~
#######################################楚河汉界#################################################
##docker-compose部署
#(1)配置
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
#添加执行权限
chmod +x /usr/local/bin/docker-compose
#(2)验证
docker-compose --version
#######################################楚河汉界#################################################
##安装nodejs
#(2)解压并配置PATH
cd ~
tar -xf node-v16.20.2-linux-x64.tar.xz -C /usr/local/
mv /usr/local/node-v16.20.2-linux-x64 /usr/local/nodejs
echo 'export PATH=/usr/local/nodejs/bin:$PATH' | tee -a /etc/profile > /dev/null
source /etc/profile
#(3)验证
node -v
npm -v
#######################################楚河汉界#################################################
#设置npm和pnpm均为国内源
npm config set registry https://mirrors.huaweicloud.com/repository/npm/
##安装pnpm
npm install -g pnpm@8.12.0
pnpm config set registry https://mirrors.huaweicloud.com/repository/npm/
pnpm --version
#######################################楚河汉界#################################################
##安装jdk
cd ~
rpm -ivh jdk-17_linux-x64_bin.rpm
java -version
#######################################楚河汉界#################################################
##安装maven
cd ~
tar xf apache-maven-3.9.8-bin.tar.gz -C /usr/local/
tee -a /etc/profile <<EOF
export M2_HOME=/usr/local/apache-maven-3.9.8
export PATH=\$M2_HOME/bin:\$PATH
EOF
source /etc/profile
#说明;
#追加 (`-a`)
rm -rf /usr/local/apache-maven-3.9.8/conf/settings.xml
cp /root/settings.xml /usr/local/apache-maven-3.9.8/conf/
mvn -v
tar -xzvf maven-repo.tar.gz
mv root/.m2 ~
#######################################楚河汉界#################################################
##安装python3
sudo yum -y install python3 --disablerepo=epel
export PYTHON=$(which python3)
pnpm config set python $(which python3)
python3 --version
#######################################楚河汉界#################################################
##申请第三方登录、申请邮件发送--后续再说。
####从阿里云下载本次所需镜像并重新打tag(可以极大提高镜像下载速度)
docker pull registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/minio
docker tag registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/minio minio/minio
docker pull registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/rabbitmq
docker tag registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/rabbitmq rabbitmq
docker pull registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/netease_cloud_music_api
docker tag registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/netease_cloud_music_api binaryify/netease_cloud_music_api
docker pull registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/redis:7.2.3
docker tag registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/redis:7.2.3 redis:7.2.3
docker pull registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/openjdk:17
docker tag registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/openjdk:17 openjdk:17
docker pull registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/mysql:8.0
docker tag registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/mysql:8.0 mysql:8.0
docker pull registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/nginx
docker tag registry.cn-hangzhou.aliyuncs.com/onedayxyy-public/nginx nginx
###########################################################启动后端运行环境########################################################
mkdir -p /data/mysql/data
mkdir -p /data/mysql/conf
tee /data/mysql/docker-compose.yml <<EOF
version: '3'
services:
mysql:
image: mysql:8.0
container_name: mysql
volumes:
- /data/mysql/data:/var/lib/mysql
- /data/mysql/conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: 123456
TZ: Asia/Shanghai
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
EOF
cd /data/mysql
docker-compose up -d
docker ps
sleep 10
#拷贝sql到mysql的blog数据库
cd /root
docker cp blog.sql mysql:/
docker cp init-db.sh mysql:/
docker exec mysql bash -c "
cd /
bash init-db.sh
"
docker restart mysql
sleep 10
docker exec mysql bash -c "
cd /
bash init-db.sh
"
docker restart mysql
#######################################楚河汉界#################################################
echo "############启动redis容器##############"
#创建挂载目录
mkdir -p /data/redis
tee /data/redis/docker-compose.yml <<EOF
version: '3'
services:
redis:
image: redis:7.2.3
container_name: redis
restart: always
ports:
- 6379:6379
volumes:
- /data/redis/redis.conf:/etc/redis/redis.conf
- /data/redis/data:/data
- /data/redis/logs:/logs
command: ["redis-server","/etc/redis/redis.conf"]
EOF
tee /data/redis/redis.conf <<EOF
protected-mode no
port 6379
timeout 0
#rdb配置
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /data
appendonly yes
appendfsync everysec
#设置你的redis密码
requirepass 123456
EOF
cd /data/redis
docker-compose up -d
docker ps
cd ~
#######################################楚河汉界#################################################
echo "############启动rabbit容器##############"
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq
docker exec rabbit /bin/bash -c "
rabbitmq-plugins enable rabbitmq_management
cd /etc/rabbitmq/conf.d/
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
"
docker restart rabbit
docker ps
cd ~
#######################################楚河汉界#################################################
echo "############启动music容器##############"
docker run -p 3000:3000 --name netease_cloud_music_api -d binaryify/netease_cloud_music_api
docker ps
cd ~
#######################################楚河汉界#################################################
echo "############启动minio容器##############"
tar xf minio.tar.gz -C /data/
cd /data/minio
docker-compose up -d
docker ps
cd ~
}
deploy_instance(){
###########################################################步骤3:部署服务########################################################
echo -e $RED "###########################################################步骤3:部署服务########################################################" $END
sleep 2
##拷贝3个核心文件
cd ~
rm -rf /root/ruyu-blog/blog-backend/src/main/resources/application.yml
rm -rf /root/ruyu-blog/blog-frontend/kuailemao-blog/default.conf
rm -rf /root/ruyu-blog/blog-frontend/kuailemao-admin/default.conf
cp application.yml /root/ruyu-blog/blog-backend/src/main/resources
cp default-qt.conf /root/ruyu-blog/blog-frontend/kuailemao-blog/default.conf
cp default-ht.conf /root/ruyu-blog/blog-frontend/kuailemao-admin/default.conf
echo "开始替换Ip……"
echo $new_ip_address
sed -i "s/192.168.1.101/$new_ip_address/g" /root/ruyu-blog/blog-backend/src/main/resources/application.yml
sed -i "s/192.168.1.101/$new_ip_address/g" /root/ruyu-blog/blog-frontend/kuailemao-blog/default.conf
sed -i "s/192.168.1.101/$new_ip_address/g" /root/ruyu-blog/blog-frontend/kuailemao-admin/default.conf
echo "IP地址已替换完成。"
##修改前台后台 .env 数据:
#这个是v1.4.2需要单独配置的部分
tee /root/ruyu-blog/blog-frontend/kuailemao-admin/.env.production <<EOF
# 生产环境
# 后端地址
VITE_APP_BASE_URL=http://$new_ip_address
# 代理前缀
VITE_APP_BASE_API=/api
# 前台域名地址
VITE_APP_DOMAIN_NAME_FRONT=
# 名称
VITE_GLOB_APP_TITLE=""
# 是否显示侧边配置按钮
VITE_APP_PROD=true
EOF
#######################################楚河汉界#################################################
echo "############构建镜像并启动服务##############"
##部署后端
cd /root/ruyu-blog/blog-backend
mvn clean
mvn clean package
#重新覆盖下Dockerfile:
tee Dockerfile <<EOF
# 使用官方的OpenJDK 17镜像作为基础镜像
FROM openjdk:17
# 设置工作目录
WORKDIR /app
# 复制项目的jar文件到容器中
COPY target/blog-backend-0.0.1-SNAPSHOT.jar /app/app.jar
# 暴露应用运行的端口
EXPOSE 8088
# 运行Spring Boot应用
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
EOF
#删除老容器和老镜像
docker rm -f ruyu-blog-hd
docker rmi -f ruyu-blog-hd
#构建新镜像和启动新容器
docker build . -t ruyu-blog-hd
docker run --name ruyu-blog-hd -d -p 8088:8088 ruyu-blog-hd
docker ps
##部署前端前台
cd /root/ruyu-blog/blog-frontend/kuailemao-blog/
rm -rf dist
pnpm install
pnpm build
#删除老容器和老镜像
docker rm -f blog-qt
docker rmi -f blog-qt
#构建新镜像和启动新容器
docker build . -t blog-qt
docker run --name blog-qt -d -p 80:80 blog-qt
docker ps
##
##部署前端后台
cd /root/ruyu-blog/blog-frontend/kuailemao-admin/
rm -rf dist
pnpm install
pnpm uninstall husky
pnpm install husky
pnpm build
#删除老容器和老镜像
docker rm -f blog-ht
docker rmi -f blog-ht
#构建新镜像和启动新容器
docker build . -t blog-ht
docker run --name blog-ht -d -p 81:81 blog-ht
docker ps
echo -e $RED "###########################################################ruyu-blog部署结束########################################################" $END
}
pull_softwares
install_env
deploy_instance
注意
ruyu-blog v1.4.x版本相对之前版本部署,有区别得2点如下:
区别1:后端application.yml文件里新增部分代码(已解决)
vim /root/ruyu-blog/blog-backend/src/main/resources/application.yml
……
##自己本次配置
mail:
link:
apply:
# 邮箱审核友链回调地址(如果不开启)apply-notice 则无需在意该配置,随便填写即可
redirect-uri: http://192.168.1.102:8088/link/email/apply
# 是否开启文章邮箱评论提醒
article-email-notice: true
# 是否开启文章邮箱回复提醒
article-reply-notice: false
# 是否开启留言邮箱评论提醒
message-email-notice: false
# 是否开启新的留言提醒
message-new-notice: true
# 是否开启留言回复提醒
message-reply-notice: true
# 是否开启友链申请提醒(可以在邮箱中通过友链)
apply-notice: true
# 是否开启友链审核通知提醒对方
pass-notice: true
mail:
link:
apply:
# 邮箱审核友链回调地址
redirect-uri: http://192.168.1.102:8088/link/email/apply
不添加这部分代码的话,起后端时会报如下错误的:
区别2:前台后端admin的.env里要配置下(登陆报错&无法上传背景图片问题)(已解决)
==问题1:登陆报错问题:==
自己升级到v1.4.2后,后台登陆报错……
其他小伙伴也遇到这个问题哦……
blog配置对比:
1.3.0
1.4.2
admin配置对比:
自己的ruyu-blog admin再配置:(自己的这里填102 ip就好)
cd /root/ruyu-blog/blog-frontend/kuailemao-admin/
vim .env.production
# 生产环境
# 后端地址
VITE_APP_BASE_URL=http://192.168.1.100:8088
# 代理前缀
VITE_APP_BASE_API=/api
# 前台域名地址
VITE_APP_DOMAIN_NAME_FRONT=
# 名称
VITE_GLOB_APP_TITLE=""
# 是否显示侧边配置按钮
VITE_APP_PROD=true
##构建镜像
#重新构建dist
cd /root/ruyu-blog/blog-frontend/kuailemao-admin/
rm -rf dist
pnpm install
pnpm uninstall husky
pnpm install husky
pnpm build
#删除老容器和老镜像
docker rm -f blog-ht
#docker rmi -f blog-ht
#构建新镜像和启动新容器
docker build . -t blog-ht-v1.4.1-v2-2024.8.16
docker run --name blog-ht -d -p 81:81 blog-ht-v1.4.1-v2-2024.8.16
docker ps
按这个配置后,就能正常登录到后台了。
==问题2:无法上传背景图片问题==
我的报错现象:
- 之前这个修复过,本次代码也一致的哦
- 热心同学1(已解决,大佬)🎉
- 自己当前配置
- 开始测试
vim .env.production
- 重新构建,再测试
#重新构建dist
cd /root/ruyu-blog/blog-frontend/kuailemao-admin/
rm -rf dist
pnpm install
pnpm uninstall husky
pnpm install husky
pnpm build
#删除老容器
docker rm -f blog-ht
#构建新镜像和启动新容器
docker build . -t blog-ht-v1.4.2-2024.8.17-no1
docker run --name blog-ht -d -p 81:81 blog-ht-v1.4.2-2024.8.17-no1
docker ps
cd ~
##
- 清空浏览器缓存后,再次测试
哇哦,欧克了,感谢大佬。😍😍
bug3:关于我页面无法正常显示头像(待解决)
问题现象:about页面无法显示头像。。。
我浏览器无法打开该图片:
https://image.kuailemao.xyz/blog/websiteInfo/avatar/7fee5695-a0c9-4a39-9b05-f2940474adfb.jpg
但是群里其他小伙伴有的浏览器可以打开图片,(虚机不行),我的手机也能打开图片。
gpt:
待群主修复。自己网站部分,自己是可以配置前端的。(这里仅作记录)
关于我
我的博客主旨:
- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!
🍀 微信二维码
x2675263825 (舍得), qq:2675263825。
🍀 微信公众号
《云原生架构师实战》
🍀 个人主页:
🍀 知识库:
🍀 博客:
🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
🍀 知乎
https://www.zhihu.com/people/foryouone
往期推荐
玩转Typora+Docusuaurus+起始页
交流群:(欢迎小伙伴一起探讨有趣的IT技术,来完成一些漂亮的项目)
我的开源项目:
https://wiki.onedayxyy.cn/docs/OpenSource
- typora皮肤
https://wiki.onedayxyy.cn/docs/typora
- 起始页
- 知识库
- 博客
- 家庭相册
最后
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!