akash decloud 上部署 hugo 博客教程
Hugo 是一款开源的由 Go 语言开发的静态网站生成器,很适合个人博客使用。优势是构建速度和运行速度很快,适合容器化运行。本博客网站就是基于 Hugo 所建。
快速入门
网站上的教程很多,可以参考官方入门 或者 如何用 hugo 搭建博客。
搭建完成后,本地输入 hugo server -D
,出现以下提示,打开 localhost:1313
能看到内容说明成功了。
Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
Web Server is available at //localhost:1313/ (bind address 127.0.0.1)
制作镜像
整个文件来源于 hugo 的 gitlab 页面,除了最后几行根据自己的需求进行了修改。
省略部分见 https://github.com/script-money/blog/blob/main/Dockerfile
# ……
# 上面省略了很多代码
ENV PORT=80
ENV BASEURL=
WORKDIR /src
COPY . .
CMD hugo --renderToDisk=true --baseUrl=${BASEURL} --watch=true --bind="0.0.0.0" --port ${PORT} server /src
ENV
是为了做一些自定义启动命令而设置。
COPY . .
是把本地的文章和主题拷贝进容器,但要排除public/
中打包后的静态文件,所以需要新建一个 .dockerignore
内容如下,记录的文件和文件夹就不会拷贝进容器中。
public/
.DS_Store
Dockerfile
相比用 Nginx 运行的 Uniswap,体积减少了 2/3。
然后根据之前的教程 Akash DeCloud 部署 Uniswap ,根据更新的日期来打 tag,并把镜像 push 到 dockerhub。
编写 SDL
参考之前的 web 应用的 SDL 编写。如果需要设置域名,需要添加accept
到特定的域名。用户就可以通过域名访问到服务。
SDL 中有特别改到的地方:
services:
web:
image: scriptmoney/blog:20201211
env:
- BASEURL=akash.script.money
expose:
- port: 80
as: 80
accept:
- akash.script.money
to:
- global: true
环境变量里设置了 BASEURL 是为了让 hugo 正确找到 css/js 文件路径。如果没有设置 BASEURL 会出现以下情况。
原因是 baseURL 设置的是 CNAME 的域名。
去域名供应商处,把域名的 CNAME 指向 akash 分配的地址:
等待一段时间,域名解析服务刷新后,用dig
命令就能看到已经正确指向了 akash 地址。
博客的 css 也就能正常加载了。
更新博客
先打包镜像 tag 换一下,推到仓库,用以下命令让 provider 重新部署。dseq 保持不变,如有必要,可更新下 DEPLOY_YML。
akash tx deployment update $DEPLOY_YML --dseq $DSEQ --from $KEY_NAME --owner $ACCOUNT_ADDRESS \
--node $AKASH_NODE --chain-id $AKASH_CHAIN_ID --fees 50000uakt
重新发送 manifest:
akash provider send-manifest $DEPLOY_YML --node $AKASH_NODE --dseq $DSEQ \
--oseq $OSEQ --gseq $GSEQ --owner $ACCOUNT_ADDRESS --provider $PROVIDER
就可以在地址不变情况下更新部署内容了。
整个更新流程可以脚本自动化,有兴趣的朋友可自己尝试。