引言
为什么选择搭建个人博客
体验博客的功能,了解现有开源博客
学习部署过程,在解决问题中提升自己
练习使用docker
为什么选择OneBlog
在gitee中看到,希望体验一下都有什么功能,介绍中后台功能很多
一、搭建前的准备
环境要求
本次在ubuntu22.4.0版本的linux中搭建,其中ubuntu是从vmware的虚拟机中创建的
ubuntu的下载
进入阿里云镜像下载页 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com)
找到相应的安装地址 oldubuntu-releases安装包下载_开源镜像站-阿里云 (aliyun.com)
选择需要的版本进行下载安装
二、OneBlog搭建步骤
说明:
为学习研究,本次安装采用的是docker安装,为学习dockerfile的使用,编排了脚本进行一键安装,由于是一个新的linux镜像,所需软件都是从头开始安装
大概过程为:
安装git
配置git参数
配置git密钥
拉取代码
安装maven
安装docker
编译代码并打jar包
编译docker镜像
启动docker项目
本次安装的所有文件:
需要提前创建好目录
DBlog是git代码存放目录
三、搭建过程中遇到的问题
问题1:gitee代码拉取问题
需要注册gitee并创建代码仓库,需要将密钥放入到gitee中
问题2:安装软件问题
安装docker和maven时可能遇到问题,根据提示解决
问题3:脚本执行权限问题
如果无法执行需要进行授权 chmod +x **
四、编写的代码片段
packageAndDeploy.sh 编译打包并执行发布
read -p '是否重新拉取代码?[y/n]' repeat
if [ "${repeat}" = "y" -o "${repeat}" = "Y" ];then
# 导航到本地仓库目录
cd ./DBlog
# 拉取最新代码
git pull origin master
cd ..
fi
read -p '是否重新执行 mvn package?[y/n]' repeat
if [ "${repeat}" = "y" -o "${repeat}" = "Y" ];then
cd ./DBlog
mvn -X clean package -Dmaven.test.skip=true
cd ..
STATUS=$?
if [[ $STATUS == 0 ]]; then
./deploy.sh
else
echoError "打包失败"
exit 1
fi
else
./deploy.sh
fi
deploy.sh 编译docker镜像并发布到docker上
ONEBLOG_DIR=${PWD}/DBlog
WORK_DIR=${PWD}
cd ${WORK_DIR}
echo "停止compose...."
docker-compose down
echo "停止完成...."
cd ${WORK_DIR}/blog-web
echo "开始删除blog-web>>>>"
docker rmi blog-web:latest
echo "编译blog-web..."
cp ${ONEBLOG_DIR}/blog-web/target/blog-web.jar ./
docker build -t blog-web .
cd ${WORK_DIR}/blog-admin
echo "开始删除blog-admin>>>>"
docker rmi blog-admin:latest
echo "编译blog-admin..."
cp ${ONEBLOG_DIR}/blog-admin/target/blog-admin.jar ./
docker build -t blog-admin .
cd ${ONEBLOG_DIR}/docs/docker/mysql/
echo "开始删除blog-mysql>>>>"
docker rmi blog-mysql:latest
echo "编译blog-mysql..."
docker build -t blog-mysql .
cd ${WORK_DIR}
echo "启动服务>>>>>>"
docker-compose up -d
.env 环境变量参数 - 来自原作者项目中
MYSQL_ROOT_HOST=%
# 默认的工作目录, 默认是 windows 盘符,如果运行到其他操作系统中时,注意修改该配置
ONEBLOG_APP_DIR=/home/liuxiaodong/oneblog/data
#git 目录
ONEBLOG_DIR=/home/liuxiaodong/oneblog/DBlog
# 对外暴露的端口
# redis
ONEBLOG_EXPORT_PORT_REDIS=63799
# mysql
ONEBLOG_EXPORT_PORT_MYSQL=33066
# blog-admin,默认为 8085
ONEBLOG_EXPORT_PORT_ADMIN=8085
# blog-web,默认为 8443
ONEBLOG_EXPORT_PORT_WEB=8443
# redis 配置
ONEBLOG_REDIS_DATABASE_INDEX=1
ONEBLOG_REDIS_HOST=blog-redis
ONEBLOG_REDIS_PORT=6379
# 建议修改为复制密码
ONEBLOG_REDIS_PASSWORD=password
# mysql 配置
ONEBLOG_DATASOURCE_HOST=blog-mysql
ONEBLOG_DATASOURCE_PORT=3306
ONEBLOG_DATASOURCE_DATABASE_NAME=dblog
ONEBLOG_DATASOURCE_USERNAME=root
# 建议修改为复制密码
ONEBLOG_DATASOURCE_PASSWORD=password
# email 配置
ONEBLOG_MAIL_HOST=
ONEBLOG_MAIL_PORT=465
ONEBLOG_MAIL_USERNAME=
ONEBLOG_MAIL_PASSWORD=
# oneblog 自定义配置
# 是否启用 kaptcha 验证码
ONEBLOG_APP_ENABLE_KAPTCHA=false
# 是否启用自动校验友情链接的功能
# 请选择打开,一旦打开,每晚凌晨12点会自动检查友联,对于不包含本站链接的网站实行自动封禁
# 目前暂时没实现白名单的功能
ONEBLOG_APP_ENABLE_CHECK_LINK=false
# 启用后,项目在启动时会打印数据库(Mysql和Redis)链接信息(包含密码)
ONEBLOG_APP_ENABLE_PRINT_CONFIG=true
# 是否启用 redis 切面缓存。
# 优先级高于 {@link com.zyd.blog.business.annotation.RedisCache#enable()} 注解的配置
# 开发环境建议关闭,线上环境建议打开
ONEBLOG_ENABLE_REDIS_CACHE=true
Dockerfile blog-amdin
# 环境版本
FROM openjdk:8u212-jre
MAINTAINER lxddemm@163.com
# JVM调优参数等额外参数
ENV PARAMS ""
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 指定容器端口
EXPOSE 8085
# 添加本地 JAR 到容器内
COPY blog-admin.jar .
# 容器启动后执行的命令
ENTRYPOINT ["java", "-jar","blog-admin.jar" , "-Djava.security.egd=file:/dev/./urandom","$PARAMS"]
Dockerfile blog-web
# 环境版本
FROM openjdk:8u212-jre
MAINTAINER lxddemm@163.com
# JVM调优参数等额外参数
ENV PARAMS ""
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 指定容器端口
EXPOSE 8085
# 添加本地 JAR 到容器内
COPY blog-web.jar .
# 容器启动后执行的命令
ENTRYPOINT ["java", "-jar","blog-web.jar" , "-Djava.security.egd=file:/dev/./urandom","$PARAMS"]
nginx配置
server {
listen 80;
# listen [::]:80;
server_name nas.nankle.top;
location / {
proxy_pass http://192.168.31.54:8443; # 本地程序代理
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
docker-compose.yml docker项目文件
# 通过本地编译的形式运行
# 可以随时修改源代码后 repackage 然后重新构建本地镜像
version: '3.3'
services:
# Redis
blog-redis:
image: redis
restart: always
container_name: blog-redis
hostname: blog-redis
command: redis-server --appendonly yes --requirepass ${ONEBLOG_REDIS_PASSWORD} --bind blog-redis
ports:
- 63799:6379
volumes:
- ${ONEBLOG_APP_DIR}/redis/:/data/
healthcheck:
test: [ "CMD", "redis-cli" ]
timeout: 20s
retries: 10
networks:
- oneblog
blog-nginx:
image: nginx
container_name: blog-nginx
ports:
- "80:80"
- "443:443"
volumes:
- ${ONEBLOG_APP_DIR}/nginx/nginx.conf:/etc/nginx/nginx.conf
- ${ONEBLOG_APP_DIR}/nginx/html:/etc/nginx/html
- ${ONEBLOG_APP_DIR}/nginx/log:/var/log/nginx
- ${ONEBLOG_APP_DIR}/nginx/cert:/etc/nginx/cert
- ${ONEBLOG_APP_DIR}/nginx/conf.d:/etc/nginx/conf.d
restart: always
networks:
- oneblog
# MySQL
blog-mysql:
image: blog-mysql
#build: ${ONEBLOG_DIR}/docs/docker/mysql
environment:
MYSQL_ROOT_PASSWORD: ${ONEBLOG_DATASOURCE_PASSWORD}
TZ: Asia/Shanghai
restart: always
container_name: blog-mysql
hostname: blog-mysql
volumes:
- ${ONEBLOG_APP_DIR}/mysql:/var/lib/mysql
ports:
- 33066:3306
command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
healthcheck:
test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
timeout: 20s
retries: 10
networks:
- oneblog
# admin 服务
blog-admin:
image: blog-admin
#build: ../../blog-admin
restart: always
container_name: blog-admin
hostname: blog-admin
env_file:
- .env
volumes:
- ${ONEBLOG_APP_DIR}:/var/tmp/oneblog
depends_on:
blog-redis:
condition: service_healthy
blog-mysql:
condition: service_healthy
links:
- blog-redis
- blog-mysql
ports:
- 8085:8085
networks:
- oneblog
# admin 服务
blog-web:
image: blog-web
#build: ../../blog-web
restart: always
container_name: blog-web
hostname: blog-web
env_file:
- .env
volumes:
- ${ONEBLOG_APP_DIR}:/var/tmp/oneblog
depends_on:
blog-redis:
condition: service_healthy
blog-mysql:
condition: service_healthy
links:
- blog-redis
- blog-mysql
ports:
- 8443:8443
networks:
- oneblog
networks:
oneblog:
driver: bridge
五、一键部署脚本分享
start.sh 主脚本
echo "开始更新软件包>>>>>>>>>"
sudo apt update
echo "开始安装git>>>>>>>>>"
sudo apt install git
echo "配置git参数>>>>>>>>>"
git config --global user.name 'nankle'
git config --global user.email 'lxddemm@163.com'
echo "生成git密钥>>>>>>>>>"
ssh-keygen -t rsa -C"lxddemm@163.com"
echo "查看生成的密钥信息>>>>>>>>>"
gedit ~/.ssh/id_rsa.pub
echo "将密钥放到gitee中>>>>>>>>>"
read -n 1 -s
pwd
echo "开始拉取项目代码>>>>>>>>>"
git clone https://gitee.com/nankle/DBlog.git
echo "拉取代码完成>>>>>>>>>"
echo "开始安装maven>>>>>>>>>"
sudo apt install maven
mvn -version
echo "开始安装docker>>>>>>>>>"
sudo apt install docker.io
echo "启动docker>>>>>>>>>"
sudo systemctl start docker
echo "设置docker开机自启动>>>>>>>>>"
sudo systemctl enable docker
echo "开始安装curl>>>>>>>>>"
sudo apt install curl
echo "开始安装/docker-compose>>>>>>>>>"
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
echo "开始配置docker镜像源>>>>>>>>>"
echo '{"registry-mirrors": ["https://docker.m.daocloud.io"]}' | sudo tee /etc/docker/daemon.json
# 重新加载Docker配置
echo "重启docker>>>>>>>>>"
sudo systemctl daemon-reload
sudo systemctl restart docker
echo "执行编译并发布docker>>>>>>>>>"
./packageAndDeploy.sh
脚本使用说明与注意事项:
安装时直接在住目录执行
./start.sh
git仓库需要修改成自己的
.env中的变量需要提前修改
六、总结
oneblog是一个很容易搭建的博客,原作者也对项目进行了docker的适配,部署过程中很少遇到问题
希望本文章可以帮助到大家,都能尝试搭建自己的个人博客
附录
官方网站:OneBlog (zhyd.me)
评论区