hexo部署到akash decloud 教程

hexo 是一款静态博客工具,不涉及到任何后端、数据库。

1、安装docker
参考文档:https://docs.docker.com/

2、docker-compose

docker-compose 并不是必须使用的,这里是为了更方便的管理我们的容器。

macos 下安装 docker 时自动就安装了 docker-compose,linux 则需要使用下面的命令手动安装一下。

1
2
$ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose

3、安装hexo初始化博客

使用 npm i -g hexo-cli 命令全局安装 hexo-cli,然后使用 hexo init blog 即可生成一个最简单的博客项目了。

然后在项目中新建一个 .npmrc 文件,将 registry=https://registry.npm.taobao.org 写入文件中,这个的作用是在安装依赖包将镜像源切换为国内的淘宝源。

此时可以执行 hexo s 命令后,在浏览器中访问 http://localhost:4000,就可以看到博客的页面了。

4、添加 Dockerfile 文件

这里需要理清楚思路的一点是,整个部署流程我们分为两个阶段,第一个阶段是生成静态文件,也就是使用 hexo g 命令生成 public 文件夹,此过程依赖 nodejs 环境,而第二个阶段则是启动 nginx。

两个阶段我们会使用 dockerfile 的多阶段构建来实现,第一个阶段的 nodejs 容器中生成的 public 文件夹会被拷贝到第二个阶段的 nginx 容器中使用,最终生成的是一个包含了博客静态资源和 nginx 的镜像。

Dockerfile 文件如下

1
2
3
4
5
6
7
8
9
10
11
# /Dockerfile
FROM node:8-alpine as builder
WORKDIR /project
COPY . /project/
RUN yarn \
&& yarn global add hexo-cli \
&& hexo g
FROM nginx:alpine
COPY --from=builder /project/public /usr/share/nginx/html
RUN apk add --no-cache bash

5、添加 docker-compose.yml 文件

其实不使用 docker-compose,直接 docker run 也是可以的,但是使用 docker-compose 更方便管理,也更加直观一点。

新建 docker-compose.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
# /docker-compose.yml
version: '3'
services:
app:
container_name: blog
build:
context: ./
dockerfile: ./ci/Dockerfile
ports:
- "8080:80"
restart: on-failure

上述文件中指定了 容器名字、Dockerfile 以及需要映射到宿主机的哪个 端口 上,可以根据自己的需求自行调整。

6、构建并运行容器

在项目目录下执行命令 docker-compse up —build -d,然后在浏览器中访问 https://localhost:8080,如果看到博客页面了,部署就大功告成啦。

7、上传镜像
需要注册账号,可参考(https://www.hangge.com/blog/cache/detail_2409.html)

8、部署到akash Decloud
deploy.yml如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
version: "2.0"
services:
web:
image: ovrclk/lunie-light #刚刚dockerhub上的镜像
expose:
- port: 8000 # 内部运行端口
as: 80 # 暴露出的端口
to:
- global: true
profiles:
compute:
web:
resources:
cpu:
units: 0.1
memory:
size: 512Mi
storage:
size: 512Mi
placement:
westcoast:
attributes:
organization: ovrclk.com
signedBy:
anyOf:
- "akash1vz375dkt0c60annyp6mkzeejfq0qpyevhseu05"
pricing:
web:
denom: uakt
amount: 1000
deployment:
web:
westcoast:
profile: web
count: 1

接下来可参考官方文档(https://docs.akash.network/v/master/guides/deploy)
至此博客已部署完成