栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

从0到1,宝塔面板+Docker+MySQL搭建Halo博客

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从0到1,宝塔面板+Docker+MySQL搭建Halo博客

写在开头的话:今天是公元2022年的第一天,是2022年起始。所以想在今天写第一篇博客,希望2022年能够有崭新的开始、美好的过程和完美的结束。过去我也弄过不少类型的博客,但是无一例外都没有坚持下来。2022年的第一天给自己定一个小目标,希望多阅读好书,多交益友和多写博客(每周至少一篇吧(~ ̄▽ ̄)~ )。

Halo博客搭建主要参考:

  • Halo官方文档

  • 视频教程:如何用服务器优雅地搭建一个博客—Hello,Halo!

根据官方文档,Halo主要有两种搭建方式:

  1. 直接在Linux环境下搭建

    可参考文档:

    Linux 部署 Halo 博客

    在Linux服务器部署Halo博客系统及配置HTTPS

    Halo博客Linux_CentOS7从零搭建部署

    用Halo在自己服务器搭建一个个人博客

  2. 使用Docker搭建

    本文是基于宝塔面板+Docker+MySQL快速搭建Halo博客。

一、服务器和域名 服务器

服务器选购可以考虑阿里云和腾讯云,年底阿里云和腾讯云有活动,根据需求进行选择。

阿里云小站

阿里云新用户规则:

  • “同一用户”,是指根据不同阿里云账号在注册、登录、使用中的关联信息,阿里云判断其实际为同一用户。关联信息举例:同一手机号、同一邮箱、同一证件等。

  • “同人账号”,是指同一用户拥有多个阿里云账号的,各个账号之间互为同人账号。

  • “新用户”,是指在阿里云官网没有收费云产品购买记录的阿里云会员用户。新用户在进行首次云产品购买行为时,也被称为“首购用户”,首购用户不包含老用户注册的新阿里云账号 。

我购买的是阿里云2核4G的计算型服务器,使用新注册的号活动优惠力度很大,注意新注册号的必须是在阿里云上没有注册过的身份证、邮箱和手机号等。而且我打算长期写博客,所以一次性就购买了3年。

买完服务器之后需要开放一些软件(如宝塔面板 8888端口)的端口,我的服务器最后开放端口如下(开放端口也可以在配置软件的过程中操作,下图是一个参考):

域名

域名我也是在阿里的万网上购买,域名购买好之后还要备案,备案过程花费几天审核,具体的操作步骤这里就不记录了。

如果你已经有了阿里云账号A,并且A当中已经注册了域名。现在你又注册一个新的阿里云账号B,阿里云账号之间转让域名是很方便的,可以直接从A将域名转让给B。教程:阿里云域名可以转给别人吗?当然可以!

域名解析

阿里云的域名解析很简单,可以参考 如何在阿里云中进行域名解析

  1. 在控制台左侧列表-域名:


2. 我这里添加了二级域名解析,目的打算访问 blog.starstone.top 来访问博客。

二、安装Halo 1.安装宝塔面板

新手建站入门教程—宝塔面板的安装与使用

宝塔Linux面板安装教程 - 2021年12月28日更新 - 7.8.0正式版

宝塔面板安装要求:

安装要求:
内存:512M以上,推荐768M以上(纯面板约占系统60M内存)
硬盘:300M以上可用硬盘空间(纯面板约占20M磁盘空间)
系统:CentOS 7.1+ (Ubuntu16.04+.、Debian9.0+),确保是干净的操作系统,没有安装过其它环境带的Apache/Nginx/php/MySQL/pgsql/gitlab/java(已有环境不可安装)
架构:x86_64(主流服务器均是此架构),ARM不完整兼容(面板环境安装慢,部分软件可能安装不上)

以上提到了是干净的操作系统,所以买好服务器之后可以直接安装宝塔面板了。

我的服务器是阿里云服务器,所以还需要在阿里云控制台配好安全组,开放端口。阿里云打开宝塔端口

Centos安装命令:

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

宝塔面板安装成功后,会显示账户、密码和访问地址,我们可以在浏览器上输入相应信息打开宝塔面板。

进入宝塔面板之后,可能需要注册宝塔账号才能进行下一步安装,我们在宝塔官网注册登入之后进入到安装界面:


常用的LNMP及LAMP,区别就是前者使用的是Nginx引擎,后者是用的Apache引擎。这里直接使用推荐的LNMP。

  1. Nginx:选择最新版本。

  2. MySQL:选5.7就可以,不要选MySQL8.0,因为可能会有兼容问题。

  3. FTP:如果云服务器就一个人使用不必安装,后面可以直接使用SFTP登录FTP。

  4. PHP:建议选择7.3+,不要超过PHP8.0(原因同MYSQL)。

  5. phpMyadmin:选择最新版本。

安装方式这里根据自身实际的情况选择,如果当前环境为生产环境,请使用(编译安装),确保后期程序运行的稳定性,(极速安装)主要用体验和测试使用,正式情况下请避免使用(极速安装),如果不需要这些套件也可以在面板左侧功能栏选择《软件管理》,在当前列表自行选择安装程序。选择一键安装后,在面板的左上角,会自动显示任务的数量,点击后进入任务列表。

我的选择是:LNMP+编译安装。

2.安装Docker

centos安装Docker官方文档

使用ssh工具连接阿里云服务器

  1. 更新yum

    yum update
    
  2. 设置repository

    sudo yum install -y yum-utils
    
    sudo yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo
    
  3. 安装 Docker 引擎

    sudo yum install docker-ce docker-ce-cli containerd.io
    

    这里能验证指纹是否匹配060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35,如果匹配,则接受下一步安装。

  4. 通过运行 hello-world 映像验证 Docker Engine 是否已正确安装。

    sudo docker run hello-world
    
3.Docker安装Halo

官方文档-使用 Docker 部署 Halo

按照官方文档步骤,使用ssh工具和Docker部署Halo

  1. 创建工作目录

    mkdir ~/.halo && cd ~/.halo
    
  2. 下载示例配置文件到工作目录

    wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
    
  3. 编辑配置文件,配置数据库或者端口等,如需配置请参考配置参考

    vim application.yaml
    

    Halo默认是H2数据库,但是我之前在宝塔面板安装过MySQL,所以我使用MySQL数据库。

    application.yaml中注释掉H2数据库配置:

    spring:
      datasource: 
        driver-class-name: org.h2.Driver
        url: jdbc:h2:file:~/.halo/db/halo
        username: admin
        password: 123456
      h2:
        console:
          settings:
            web-allow-others: false
          path: /h2-console
          enabled: false
    

    application.yaml中取消Mysql相关注释:

    # 这里需要更改为MySQL用户名和密码
    spring:
      datasource: 
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
        username: root
        password: 123456
    

    Halo的MySQL数据库要求:

    1. 版本:5.7 +
    2. 字符集(Character Set):utf8mb4
    3. 排序规则(Collate):utf8mb4_bin
    4. 存储引擎:InnoDB

    创建MySQL数据库halodb的两种方式:

    (1)我们在创建数据库halodb采用下面的命令:

    create database halodb character set utf8mb4 collate utf8mb4_bin;
    

    (2)我们也可以直接在宝塔面板上创建数据库halodb:




到此,halodb创建成功。

  1. 拉取最新的 Halo 镜像

    docker pull halohub/halo:1.4.16
    
  2. 创建容器

    这一步骤和官方文档有所不同。Halo默认使用H2数据库,如果使用H2数据库,则按照官方文档步骤。

    docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.16
    
    • -it: 开启输入功能并连接伪终端

    • -d: 后台运行容器

    • –name: 为容器指定一个名称

    • -p: 端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置。

    • -v: 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。

    • –restart: 建议设置为 unless-stopped,在 Docker 启动的时候自动启动 Halo 容器。

    如果使用MySQL数据库,我们需要更改容器的网络配置。

    从零部署halo博客

    Docker默认的网络模式是bridge,因此默认容器内无法访问本地127.0.0.1

    docker run -it -d --net host --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.4.16
    

    - -net,指定容器的网络配置:

    • - -net=bridge 这个是默认值,连接到默认的网桥。

    • - -net=host 容器使用本地主机的网络,它拥有完全的本地主机接口访问权限

    • - -net=container:NAME_or_ID 让 Docker 使用其他容器的网路,共享IP和PORT等网络资源,两者进程可以直接通过 lo 环回接口通信

    • - -net=none 容器使用自己的网络,但是不进行网络配置,之后用户可以自行配置

    官方论坛上更多关于MySQL的问题:[MySQL相关问题](https://bbs.halo.run/?q=docker mysql)

  3. 打开 http://ip:端口号 即可看到安装引导界面(不要往下安装了!!!)。

    端口号默认8090,这里需要在云服务器和宝塔面板上都开放这个端口。

    官方文档有提示:

    **如果需要配置域名访问,建议先配置好反向代理以及域名解析再进行初始化。**如果通过 http://ip:端口号 的形式无法访问,请到服务器厂商后台将运行的端口号添加到安全组,如果服务器使用了 Linux 面板,请检查此 Linux 面板是否有还有安全组配置,需要同样将端口号添加到安全组。

接下来去配置反向代理和域名解析,再初始化Halo。

4.配置反向代理(先配置反向代理再初始化Halo)

官方文档-与宝塔面板配合使用

官方文档介绍了如何使用宝塔面板配置反向代理,按照其步骤:

  1. 点击左侧的 网站 菜单项,点击 添加站点 按钮。

需要填写的表单信息如下:

  • 域名:填写您已经解析到当前服务器公网 IP 的域名。
  • PHP版本:纯静态

填写完成之后点击提交按钮即可。

2. 设置 SSL

  • 第一步:可选择 宝塔 SSL 或者 Let's Encrypt 进行证书申请。
  • 第二步:需要开启右上角的 强制 HTTPS。


3. 修改配置文件

网上很多人直接配置反向代理,这里并不推荐。


我采用的方式是在配置文件中配置:


3. (1) 在server节点中修改:

#未修改的配置文件中
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log /dev/null;
        access_log /dev/null;
    }
    
    location ~ .*.(js|css)?$
    {
        expires      12h;
        error_log /dev/null;
        access_log /dev/null; 
    }
    
# 替代为
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        proxy_pass http://halo;
        expires      30d;
        error_log /dev/null;
        access_log off;
    }
    
    location ~ .*.(js|css)?$
    {
        proxy_pass http://halo;
        expires      12h;
        error_log /dev/null;
        access_log off; 
    }
    
    location / {
        proxy_pass http://halo;
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

(2) 在根节点添加:

upstream halo {
    server 127.0.0.1:8090;
}
# 其中的 8090 为 Halo 的运行端口,请按需修改。

(3) 完整配置文件示例(仅包含关键部分):

upstream halo {
    server 127.0.0.1:8090;
}
server
{
    ...
    
    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        proxy_pass http://halo;
        expires      30d;
        error_log /dev/null;
        access_log off;
    }
    
    location ~ .*.(js|css)?$
    {
        proxy_pass http://halo;
        expires      12h;
        error_log /dev/null;
        access_log off; 
    }
    
    location / {
        proxy_pass http://halo;
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    ...
}
5.Halo初始化

在反向代理完成后可以访问 网站地址:8090,如 blog.starstone.top:8090 进行初始化。


需要设置管理员的账号、邮箱、密码等,然后重新登录进一步进入到后台界面。

三、Halo简单使用 设置主题

访问网址 域名:8090/admin (默认) 登录到管理界面



服务器开机自启动Docker
systemctl enable docker

Halo博客简单搭建完成了,Halo的其他功能我也在慢慢了解中~~完结撒花❀❀❀

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/694957.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号