侧边栏壁纸
  • 累计撰写 54 篇文章
  • 累计创建 31 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

OneBlog搭建全记录:‌从零开始到一键部署

nankle
2024-08-10 / 0 评论 / 0 点赞 / 41 阅读 / 12675 字
温馨提示:
本文最后更新于 2024-08-14,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

引言

为什么选择搭建个人博客

体验博客的功能,了解现有开源博客

学习部署过程,在解决问题中提升自己

练习使用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)

0

评论区