Docker安装Halo博客&配置swap虚拟内存

Halo相关链接

官网:https://halo.run
文档:https://docs.halo.run
社区:https://bbs.halo.run
主题仓库:https://halo.run/themes.html
开源地址:https://github.com/halo-dev/halo

之前都是使用Hexo博客系统的,聊聊为什么改用Halo博客系统了。

Halo相比于Hexo博客的优缺点:

优点:

  • Halo有后端,可以在线修改,可以在不同设备上进行修改发布;而Hexo则不行,它必须修改源文件,再重新编译发布
  • Halo配置更简单,有后台配置中心,而Hexo则全部依赖于自己修改配置文件。如果需要修改主题的话Halo几乎都不需要变动,而Hexo可能设计较大变动,因此对于喜欢经常更换主题的同学推荐Halo。
  • Halo是基于Java开发,而我本人也主要搞Java开发,碰到问题了更好解决。

缺点:

  • Halo是需要后台服务的,因此更依赖于硬件资源,我购买的服务器是1GB内存的,好几次都把服务器搞挂了,内存撑爆了。
  • 页面加载速度Halo也比Hexo慢很多,因为Hexo是纯静态网站。

我现在的方案:

https://ysfun.github.io 域名用来部署Hexo博客

https://www.ysfun.cn 域名用来部署Halo博客

两个博客系统同步更新!!!

1. 安装Docker

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。

1. 设置仓库

安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

1
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

使用以下命令来设置稳定的仓库。

  • 使用官方源地址(比较慢)
1
2
3
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
  • 阿里云
1
2
3
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 清华大学
1
2
3
sudo yum-config-manager \
--add-repo \
https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

2. 安装 Docker Engine-Community

安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:

  1. 列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。
1
2
3
4
5
6
yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
  1. 通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1。
1
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

3. 启动/卸载Docker

启动Docker

1
sudo systemctl start docker

卸载Docker

1
yum remove docker-ce

2. 使用Docker安装Halo

参考官方文档:使用 Docker 部署 Halo

使用docker安装halo

1
docker pull halohub/halo:1.5.3

创建容器,启动halo

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

INFO
注意:此命令默认使用自带的 H2 Database 数据库。如需使用 MySQL,请参考:使用 Docker 部署 Halo 和 MySQL

-it: 开启输入功能并连接伪终端
-d: 后台运行容器
–name: 为容器指定一个名称
-p: 端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置。
-v: 工作目录映射。形式为:-v 宿主机路径:/root/.halo,后者不能修改。
–restart: 建议设置为 unless-stopped,在 Docker 启动的时候自动启动 Halo 容器。
打开 http://ip:端口号 即可看到安装引导界面。

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

3. 增加虚拟内存(Swap)

如果服务器内存不够,可使用swap增加虚拟内存

1、使用 “ swapon -s “ 命令可以检查系统是否已经配置过swap,如果该命令没有返回出结果,则代表该系统尚未配置过swap。

或者用 “ free ”命令查看,如果看到如下

Swap: 0 0 0

这一行的话,也可以说明目前没有配置过swap

通常,我们建立一个单独的分区作为swap。然而有时候由于硬件或软件的限制,新建分区的方式无法实现,这种情况下就可以建立一个swap文件来实现同样的功能,我当然是通过建立swap文件来解决啦

步骤

  1. bs=1024 单位数据块(block)同时读入/输出的块字节大小为1024个字节即1KB

    count=4194304 表示swap的大小分配为4G,计算方法:1024 * 1024 * 4

1
dd if=/dev/zero of=/var/swapfile bs=1024 count=4194304
  1. 格式化并转换为swap分区
1
mkswap /var/swapfile
  1. 修改下权限
1
chmod 600 /var/swapfile
  1. 挂载并激活分区
1
swapon /var/swapfile

操作完毕后可使用free命令查看

注意到上面Swap内存used为0,说明并没有使用swap内存,因此还需配置swapness参数。

设置swap不是说全部swap就可以用了,还是要设置参数才可以提供swap使用率的。 https://blog.csdn.net/weixin_43279032/article/details/111469024 swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。linux的基本默认设置为60,具体如下: cat /proc/sys/vm/swappiness 也就是说,您的内存在使用到100-60=40%的时候,就开始出现有交换分区的使用。 操作系统层面,要尽可能使用内存,对该参数进行调整。 临时调整的方法如下,调成10: sysctl vm.swappiness=10 要想永久调整的话,需要将在/etc/sysctl.conf修改,加上: cat /etc/sysctl.conf vm.swappiness=10

  1. 查看swappiness的值
1
2
3
4
5
cat /proc/sys/vm/swappiness

sysctl vm.swappiness

0 # 说明不会使用swap空间
  1. 修改/etc/sysctl.conf文件中的vm.swappiness的值
1
vm.swappiness = 60
  1. 手动使配置的参数生效,执行以下命令
1
sysctl -p
  1. 再次查看swappiness的值

可以看到swappiness参数配置成功

  1. 查看swap内存使用情况

可以发现已经在使用swap内存了!