archlinux使用podman部署halo

115

Archlinux使用podman部署Halo博客

为什么使用archlinux?

因为我无法仍受各种旧版本包的依赖与更新困难问题,使用arch可避免大部分此类问题.

安装podman

pacman -Syy
pacman -S podman podman-compose aardvark-dns
reboot

podman 与 podman-compose 平替 docker docker-compose, 使用方法基本一样, aardvark-dns 是因为目前安装podman时arch没有强制依赖这个软件包,但这个包是podman-compose多容器通信必要依赖相关issues,最后重启是因为arch的一些特性问题,需要重启才可以启动docker,podman容器类服务。

podman info 校验安装信息

建议非root用户(注1)运行容器,podman的优点就是无守护进程,支持非特权用户,安全性较高。

mkdir halo 
cd halo

vim docker-compose.yaml
:set paste //启用粘贴模式防止乱码与格式问题

// 因时效性问题这里不提供docker-compose.yaml内容, 请访问:
//https://docs.halo.run/getting-started/install/docker-compose
//获取最新官方提供源文件内容粘贴即可

:wq //保存并退出vim(请不要成为随机数生成器)

修改podman容器源列表以支持不加前缀拉取容器镜像,将以下文本追加到 /etc/containers/registries.conf文件末尾。

unqualified-search-registries = ["docker.io"]

[[registry]]
prefix = "docker.io"
location = "docker.io"

[[registry.mirror]]
location = "hub-mirror.c.163.com"

[[registry.mirror]]
location = "mirror.baidubce.com"

[[registry.mirror]]
location = "f1361db2.m.daocloud.io"

[[registry.mirror]]
location = "ustc-edu-cn.mirror.aliyuncs.com"

[[registry.mirror]]
location = "ghcr.io"

启动容器

podman-compose -up -d

访问8090或者使用nginx代理即可

注1: podman 有一个关于用户空间的特性问题,使用非root用户运行时不要通过su从root或其他用户切换过来运行,这样会有用户空间权限id等缓存问题直接使用非root用户登录ssh运行。

开机自启

Systemd 支持通过 --user 参数管理用户级别的后台程序,不过这存在一个问题,如果用户退出登录后,属于该用户的后台服务会被终止。如果希望用户退出后仍然保持服务的运行,可以使用 loginctl enable-linger username启用用户的逗留状态

--name为以容器名称代替id,不然服务文件名会特别长,--new是每次启动都重新创建容器而不是反复启动关闭同一个容器,-f 是将生成的服务文件内容输出为文件而不是打印在屏幕。

mkdir -p .config/systemd/user 
#用户的服务文件就在这个文件夹存放
podman generate systemd --name --new -f halo
podman generate systemd --name --new -f halodb
#生成服务container-halo.service文件,复制到上一部创建的文件夹里
systemctl --user enable container-halo.service
systemctl --user enable container-halodb.service
#设置开机自启

loginctl enable-linger podman
#设置用户podman的服务可以在退出后继续运行
reboot
#重启 稍等后访问页面看看

当同时设置了loginctl enable-lingersystemctl --user enable 之后,就算不是root用户也可以实现容器开机自启动,无需登录保持会话。