从零部署halo博客

2023-11-05

从零部署halo博客

此教程是使用宝塔+docker+mysql搭建个人博客,使用H2可上halo官网教程查阅

准备工作

  • 一台云服务器
  • 一个域名(国内服务器需要备案,备案要很久,最好提前)
  • 域名实名,申请SSL证书
  • 域名解析

安装宝塔面板

安装前注意系统必须为没装过其它环境如Apache/Nginx/php/MySQL的新系统,以下使用centos系统安装宝塔面板

  • 执行安装命令
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安装成功后会给你面板地址和管理员账号和密码,注意要在服务器后台安全组或是防火墙中打开8888端口

面板登录进去后会让你一键部署环境(LNMP或LAMP,推荐LNMP)
安装方式编译安装比极速安装更加稳定,但安装时间需要1到2小时,极速安装10多分钟,时间充裕推荐编译安装

  • halo官方要求mysql数据库需要5.7+,8.0需要6RAM以上,推荐就5.7。php和phpmyadmin选最新,其他随意

这里我进行编译安装时面板卡死了一次,任务列表是空的,服务器满载,cpu使用率低,重登也是特别卡和慢,这时候就别等了,这里我重启服务器后,问题解决,编译安装正常继续运行

安装Docker管理器

  • 在宝塔面板的软件商店中直接安装即可

下载并修改halo配置文件

  • 创建并进入工作目录
mkdir ~/.halo || cd ~/.halo
  • 下载示例配置文件到工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
  • 根据需要编辑配置文件,配置数据库或者端口等
vim application.yaml

使用mysql本地数据库的配置图
application.yaml配置图

  • 默认是使用的H2数据库
  • 使用mysql数据库则将H2配置打上注释,将mysql配置注释放开
  • 修改username和password为mysql的账号和密码,密码在宝塔数据库界面可查看
  • 若在容器中使用数据库,则需要将127.0.0.1换成数据库的容器名,端口为容器内部端口 例:将127.0.0.1:3306换成blog_mysql:3306
  • 以下根据个人需求配置:
    port为halo博客运行的端口
    admin-path为后台管理的根路径
    cache是设置缓存数据的保存方式
    compression设置是否开启压缩,用Nginx等反向代理服务器时通常会默认开启

下面根据个人 选择一种进行配置

①直接使用本地数据库

  • 进入msyql
mysql -u root -p
  • 创建halodb数据库
create database halodb character set utf8mb4 collate utf8mb4_bin;

注意这里官方要求字符集为utf8mb4,排序规则为utf8mb4_bin

  • 拉取最新的 Halo 镜像
docker pull halohub/halo

从 1.4.3 开始,Docker 镜像已经转移到 halohub 组织,不再是 ruibaby/halo

  • 创建halo容器并使用本地数据库
docker run -itd --net host --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=always halohub/halo

参数说明:

  • -i, 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用
  • -t, 分配一个伪tty,一般与 -i 连用
  • -d,在后台运行容器,并且打印容器id
  • - -name,容器名
  • - -net,指定容器的网络配置
    - -net=bridge 这个是默认值,连接到默认的网桥。
    - -net=host 容器使用本地主机的网络,它拥有完全的本地主机接口访问权限
    - -net=container:NAME_or_ID 让 Docker 使用其他容器的网路,共享IP和PORT等网络资源,两者进程可以直接通过 lo 环回接口通信
    - -net=none 容器使用自己的网络,但是不进行网络配置,之后用户可以自行配置
  • -p, 容器内部端口绑定到指定的主机端口,主机端口:容器端口
  • -v, 挂载目录,这里是将主机的目录~/.halo挂载到容器的目录/root/.halo上
  • - -restart=always,当docker重启时,容器自动启动

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

②利用容器间的关联使用容器中的数据库

  • 拉取mysql5.7镜像
docker pull mysql:5.7
  • 创建并启动mysql容器
docker run --name blog_mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=****** -d mysql:5.7
  • - -name,容器名
  • -e 设置环境变量,MYSQL_ROOT_PASSWORD为数据库密码,自行修改,用户名默认root
  • 这里因为我主机已有mysql,所以映射端口到3307,这个自行决定
  • 进入容器
docker exec -it blog_mysql /bin/bash
  • 进入mysql并创建halo必要数据库halodb,注意字符集和排序规则
mysql -u root -p
create database halodb character set utf8mb4 collate utf8mb4_bin;
  • 拉取最新的 Halo 镜像
docker pull halohub/halo
  • 创建halo容器并使其关联数据库容器
docker run -itd --name halo --link blog_mysql -p 8090:8090 -v ~/.halo:/root/.halo --restart=always halohub/halo

参数说明:

  • -i, 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用
  • -t, 分配一个伪tty,一般与 -i 连用
  • -d,在后台运行容器,并且打印容器id
  • - -name,容器名
  • - -link,指定容器间的关联
  • -p, 容器内部端口绑定到指定的主机端口,主机端口:容器端口
  • -v, 挂载目录,这里是将主机的目录~/.halo挂载到容器的目录/root/.halo上
  • - -restart=always,当docker重启时,容器自动启动

PS:如果要使用外部数据库管理工具远程管理mysql,则需要用户开启远程登录功能

Grant all privileges on *.* to 'root'@'%' identified by ‘password’with grant option;
flush privileges;      刷新权限

*. * 为 数据库.表 ,root为用户,%代表所有主机 ,password处填写用户密码

以下为注意事项!!!

创建并启动halo容器后,会有20s左右的初始化建表时间,初始化后在数据库halodb当中能看见自动创建的表,若没有表,请检查问题
Halo工作目录的绝对路径为 ~/.halo,这个工作目录是固定的,Halo容器运行后里面通常包含下列目录或文件:
db:存放 H2 Database 的物理文件,如果您使用 MySQL 数据库,那么不会存在这个目录
templates/themes:里面包含用户所下载的主题
static:相当于网站的根目录
logs:运行日志目录
application.yaml:配置文件

放行端口80 443 8090!!!
云服务器防火墙和宝塔的防火墙两边都要放行!!!

到这里我们就可以以http://ip:8090的方式访问halo安装程序了
可以先配置好域名访问和SSL再进行安装

配置域名访问、SSL,使用 Nginx 进行反向代理

  • 安装 Nginx
    之前安装LNMP时已安装
  • 编辑配置文件

官方是下载模板再进行配置,这里使用全局

vim /www/server/nginx/conf/nginx.conf

在http的括号内加入以下代码:

server {
    listen 80;
    server_name baidu.com www.baidu.com; #域名
    rewrite ^(.*)$ https://$host$1 permanent;
 
    client_max_body_size 1024m;
}
server {
    listen 443 ssl;
 
    server_name baidu.com www.baidu.com; #域名
 
    ssl_certificate /usr/local/xxxxxx.pem; #证书地址
    ssl_certificate_key /usr/local/xxxxxxx.key; #证书地址
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
 
    location / {
        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;
 
        proxy_pass http://127.0.0.1:8090/; #halo进入端口
    }
}
  • 修改域名
  • 用ftp将证书文件放到云服务器中,配置好证书地址,第一个证书后缀不一定是pem
  • rewrite ^(.*)$ https://$host$1 permanent;是强制跳转http到https
  • 修改后需要重载Nginx
在宝塔中重启Nginx    或    nginx -s reload    

到这里,就可以使用域名访问网站了!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从零部署halo博客 的相关文章

  • 使用 Python 将阿拉伯语或任何从右到左书写系统的字符串打印到 Linux 终端

    非常简单的例子是 city print city 我期望输出是 但实际上输出是相反的字符串 字母看起来有点不同 因为它们有开始 中间和结束形式 我无法将其粘贴到此处 因为复制粘贴会再次更正字符串的顺序 如何在 Linux 终端上正确打印阿拉
  • MySQL 中的断言

    我有一个针对大型数据库运行的 SQL 脚本 我想在开始时提出几个简单的查询 作为健全性检查 有没有办法在MySQL中写断言 或者任何类型的 选择 如果它与该值不匹配 则中止整个脚本 一些疯狂的代码 要点是 SET可能会引发 mysql 变量
  • PDO fetch() 失败时会抛出异常吗?

    有没有方法PDO语句 fetch http php net manual en pdostatement fetch php如果 PDO 错误报告系统设置为抛出异常 则在失败时抛出异常 例如 如果我设置 PDO ATTR ERRMODE g
  • 执行许多插入重复键更新错误:未使用所有参数

    所以我一直在尝试使用 python 2 7 15 使用 mysql connector 执行此查询 但由于某种原因 它似乎不起作用并且总是返回错误 并非所有参数都被使用 表更新有一个主键 即 ID 这是我尝试运行此 SQL 的查询 sql
  • Linux 上的“软/硬 nofile”是什么意思

    当我尝试在RedHat EL5上安装软件时 我得到了错误 软 硬nofile的期望值是4096 而默认值是1024 我设法增加了这个数字 但我不知道参数是什么 他们指的是软链接和硬链接吗 我改变的方法是 a 修改 etc security
  • MySQL 触发器和 SUM()

    我有两张桌子 学生桌和家庭桌 在学生中 我有列 st venue 和total venue 家里我有收入 Total Revenue 是学生 st 收入与家庭收入之和 其中 family id student student id stud
  • 在 MySQL 中分割逗号分隔值

    我正在尝试将字符串中以逗号分隔的 值拆分为多列 样本数据 COL1 COL2 COL3 000002 000003 000042 09 31 51 007 004 007 预期输出 Pno Cno Sno 000002 09 007 000
  • 更改Docker容器中的mysql密码

    我如何更改 docker 容器中的 root 密码 因为一旦我停止 mysql 服务 容器就会自动停止 我应该停止 mysql 容器并部署一个新容器吗 您可以使用正在运行的容器更改它docker exec session https doc
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7
  • 在 MySQL 中将行转置为列

    如何在 MySQL 查询中将行转换为列 您可以将行变成a列与GROUP CONCAT 但您无法以任何自动方式转置整个结果集 您可以编写手动生成每一列的查询 也可以在应用程序中执行此操作 以下是有关编写复杂查询来模拟转置的教程 http ww
  • 使用 .htaccess 启用 PHP 短标签

    我在自己的 Centos 服务器上设置了 Apache 并具有多个虚拟 Web 服务器 并且我希望仅为位于以下位置的其中一个 Web 服务器启用 PHP 短标记 var www ostickets html 我可以通过添加成功启用短标签sh
  • 使用MySQL计算单个表中借方和贷方的余额

    下面的 MySQL 表包含带有关联金额的借方或贷方 操作 如何选择具有非零 余额 的所有 CLIENT ID 我尝试将表连接到自身以计算所有借方和贷方总额 但有些东西无法正常工作 CLIENT ID ACTION TYPE ACTION A
  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • 为什么我的代码在编译用于分析 (-pg) 时在多线程下运行比在单线程下运行慢?

    我正在写一个光线追踪器 最近 我在程序中添加了线程 以利用 i5 四核上的附加内核 奇怪的是 应用程序的调试版本现在运行速度变慢 但优化后的构建运行速度比添加线程之前更快 我将 g pg 标志传递给 gcc 以进行调试构建 并将 O3 标志
  • pq:无法调整共享内存段的大小。设备上没有剩余空间

    我在仪表板上有许多面板 数量约为 6 个 用于显示数据点图表 对 PostgreSQL 数据库的 Dockerized 实例进行查询 直到最近 面板都工作正常 有些面板停止工作并报告如下错误 pq 无法将共享内存段 PostgreSQL 2
  • “./somescript.sh”和“. ./somescript.sh”有什么区别

    今天我按照一些说明在 Linux 中安装软件 有一个需要首先运行的脚本 它设置一些环境变量 指令告诉我执行 setup sh 但是我执行时犯了一个错误 setup sh 所以环境没有设置 最后我注意到了这一点并继续进行 我想知道这两种调用脚
  • 如何使用 PHP 从 MySQL 检索特定值?

    好吧 我已经厌倦了 过去一周我花了大部分空闲时间试图解决这个问题 我知道 SQL 中的查询已更改 但我无法弄清楚 我能找到的所有其他帖子似乎都已经过时了 如果有人能帮助我 我将非常感激 我想做的就是使用手动输入数据库的唯一 密码 来检索行的
  • 导入错误:没有名为 google.auth 的模块

    当我尝试导入时firebase admin in python 2 7我收到错误 导入错误 没有名为 google auth 的模块 这是Docker文件 https github com ammaratef45 Attendance bl
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul

随机推荐

  • 在Ubuntu20.04安装单节点ClickHouse22.8.4并解决DB::NetException: Connection refused NETWORK_ERROR导致无法远程访问的问题

    在Ubuntu20 04安装单节点ClickHouse22 8 4并解决DB NetException Connection refused 192 168 88 22 9000 NETWORK ERROR 导致无法远程访问的问题 前言 参
  • git将项目的其他分支合并到自己的分支

    步骤1 查看本地的所有分支 如果有即将合并的分支 则跳到 步骤3 git checkout 他人的分支名 git branch 步骤2 查看所有分支 确定即将合并的分支名 git branch a 步骤3 检出即将合并的分支到你的本地 gi
  • js中的class类

    js中的class类 函数声明和类声明之间的一个重要区别是函数声明会提升 类声明不会 需要先进行声明 再去访问 否则会报错 var father new Father 我是爸爸 class Father constructor name t
  • 跑路了,去东北国企干软件测试一个月的感触

    前言 不知不觉入职新公司快一个月了 突然心血来潮想跟大家唠唠 在新公司上班的感受 有好有坏 喜忧参半吧 工作环境 我新入职的公司是哈尔滨的一家国企下的二级子公司 新成立的研发公司 目前还处于蓬勃发展的阶段 业务水准也算的上是不错了 目前人数
  • 笔记本计算机硬盘如何分盘,笔记本电脑怎样分盘_笔记本电脑如何自己分盘-win7之家...

    在购买笔记本电脑之后 很多用户没有考虑清楚就随便将磁盘分盘 之后发现磁盘不够用 所以就想要重新分盘 不过许多小伙伴可能还不知道笔记本电脑怎样分盘吧 方法并不难 我们可以进入到计算机的管理中进行操作 这就给大家讲述一下笔记本电脑自己分盘的详细
  • 秦朝的军功制度

    作者 李四郎 链接 https www zhihu com question 35082355 answer 126247488 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 二十级爵位可以按实际地位和待遇
  • 计算机视觉(十一):目标检测算法:R-CNN、Fast R-CNN、Faster R-CNN

    1 引言 在计算机视觉的发展中 我们的任务也越来越复杂 对于一张图像 我们不仅要实现对于目标的分类问题 还要准确的定位目标所在图片的位置 这个就是目标检测技术 在基于深度学习的目标检测技术中 就不得不提到最著名的三个算法了 R CNN Fa
  • 解决XML中符号解析问题

    当在xml中使用大于号 gt 小于号 lt 等字符时 会影响xml的解析 1 使用转义字符 lt lt 小于号 gt gt 大于号 amp 和 apos 单引号 quot 双引号 2 使用 被这个标记所包含的内容将表示为纯文本 比如表示文本
  • LeetCode 第7天 动态规划 (子序列问题 二)编辑距离 python

    以下题目来来源 力扣 LeetCode 链接 https leetcode cn problems uncrossed lines 著作权归领扣网络所有 商业转载请联系官方授权 非商业转载请注明出处 1035 不相交的线 在两条独立的水平线
  • redis主从同步 主机down

    redis主机设置了密码 将master和slave的密码配置相同 然后将slave的配置文件中的masterauth属性进行填写 将master的密码写上去即可使用命令slaveof或者在配置文件中 replicaof对master进行指
  • 一步一步教你Pycharm的配置Python环境

    1 点开你的pycharm 创建一个python文件 很多人学习python 不知道从何学起 很多人学习python 掌握了基本语法过后 不知道在哪里寻找案例上手 很多已经做案例的人 却不知道如何去学习更加高深的知识 那么针对这三类人 我给
  • LSTM与Bi-LSTM的时间序列预测(负荷预测)——附代码

    目录 摘要 1 电力负荷预测 2 滑动窗输入结构的构建 3 LSTM 4 Bi LSTM 5 程序运行结果 6 本文Matlab代码实现 摘要 本文使用LSTM和Bi LSTM 以电力负荷预测为例对比了两者的预测性能 其中将电力负荷构造为滑
  • Ubuntu下系统CPU/内存/GPU/硬盘监控查看指令

    1 实时监控CPU及内存的 Htop监控 安装 sudo apt get install htop 启动htop htop Ubuntu默认监控器 Win A打开所有APP 搜索System Monitor System Monitor如下
  • STM32 第18讲 基本定时器(简介/计数模式/寄存器/溢出时间计算方法/实验)

    文章目录 基本定时器简介 基本定时器框图 计数模式及溢出条件 递增计数模式 递减计数模式 中间对齐计数模式 相关寄存器 控制寄存器1 TIMx CR1 DMA 中断使能寄存器 TIMx DIER 状态寄存器 TIMx SR 计数器寄存器 T
  • 【中文分词系列】 8. 更好的新词发现算法

    如果依次阅读该系列文章的读者 就会发现这个系列共提供了两种从0到1的无监督分词方案 第一种就是 中文分词系列 2 基于切分的新词发现 利用相邻字凝固度 互信息 来做构建词库 有了词库 就可以用词典法分词 另外一种是 中文分词系列 5 基于语
  • 一行代码去掉Devexpress弹窗

    使用的是 net hook方法 使用代码 using System using System Windows Forms namespace AlexDevexpressToolTest static class Program
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 用隐私换便利还是花钱护隐私?个人信息安全问题再度引发关注

    随着互联网的快速发展和大数据时代的到来 个人信息安全问题日益成为社会关注的焦点 最近一则关于某高校毕业生窃取学校内网数据并收集学生个人隐私信息的新闻再度引起了人们对于个人信息泄露的担忧 在享受便捷和高效的互联网生活的同时 我们是否需要用隐私
  • C# IEnumerator/IEnumerable

    迭代器模式 与 C IEnumerator IEnumerable Jul 21 2018 编程 阅读 迭代器模式 与 C IEnumerator IEnumerable Part1 迭代器模式 与 接口 IEnumerable IEnum
  • 从零部署halo博客

    centos docker halo搭建个人博客 从零部署halo博客 准备工作 安装宝塔面板 安装Docker管理器 下载并修改halo配置文件 直接使用本地数据库 利用容器间的关联使用容器中的数据库 以下为注意事项 配置域名访问 SSL