前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用镜像部署 Hexo 静态页面

使用镜像部署 Hexo 静态页面

原创
作者头像
陈少文
修改于 2021-01-14 02:51:13
修改于 2021-01-14 02:51:13
1.7K00
代码可运行
举报
文章被收录于专栏:陈少文陈少文
运行总次数:0
代码可运行

1. 为什么采用镜像独立部署

  • 更好的 SEO

使用 Github Pages ,部署静态网站非常方便。一次配置,每次提交都可以自动部署更新。再加上 jsDelivr、Cloudflare 加速,在免费方案中,已经生产可用。

无奈的是,百度搜索引擎对 Github Pages 网站,收录极慢,甚至不收录。即使利用 Cloudflare 缓存,而 Cloudflare 与百度有合作;主动提交 sitemap ;每个页面添加 push 脚本,依然没有效果。Google、Bing 的收录量好很多,是百度的 4-5 倍。另一种方案是,采用 DNS 多线路解析,给百度爬虫一个专用的 IP 进行 SEO 优化,但是这样又得多部署一套服务。

采用独立主机部署对 SEO 更友好。

  • 更贴近云原生

物理机上,搭建环境的脚本兼容性差,服务也不易维护。云原生时代,当然首选容器,只需要将服务打包成镜像即可。

打包镜像的过程可以直接配置在 CI 中自动完成,而部署过程只是管理一个容器。

好用、易维护,这就是云原生。

2. 打包静态文件服务

Hexo、Jekyll、Hugo 这些静态页面框架,都是通过将 Markdown 渲染生成 Html 对外提供内容服务。在部署时,只需要一个 Nginx 转发静态文件。

2.2 添加 Dockerfile 文件

在项目的根目录添加文件 Dockerfile ,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM node:10 as builder
RUN npm install -g cnpm --registry=https://registry.npm.taobao.org && \
    cnpm i -g hexo-cli
ADD ./ /home
WORKDIR /home
RUN cnpm i && hexo g

FROM nginx:1.19
ADD ./conf/nginx/default.conf /etc/nginx/conf.d/
ADD ./conf/cert/* /etc/nginx/certs/
COPY --from=0 /home/public /var/www/

通过分阶段构建,可以有效减小镜像的大小。其中 ADD 指令的文件内容,下面会具体说明。

2.2 添加 Nginx 配置文件

在项目下添加如下三个文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tree -L 2 conf
conf
├── cert
│   ├── 1_www.chenshaowen.com_bundle.crt
│   └── 2_www.chenshaowen.com.key
└── nginx
    └── default.conf

2 directories, 3 files

其中 conf/nginx/default.conf 文件内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
    listen 80;
    server_name chenshaowen.com www.chenshaowen.com;
    server_tokens off;

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name chenshaowen.com www.chenshaowen.com;
    server_tokens off;

    ssl_certificate /etc/nginx/certs/1_www.chenshaowen.com_bundle.crt;
    ssl_certificate_key /etc/nginx/certs/2_www.chenshaowen.com.key;

    location / {
        root   /var/www;
        index  index.html;
    }

    error_page  404              /404.html;
}

这里将 Http 服务转发到 Https,将裸域名的访问转发到 www。

.crt.key 文件是域名的证书文件,很多云厂商都提供了免费的 Https 证书。这里推荐腾讯云的免费 Https 证书,验证简单、签发速度快,还提供下载。

3. Github Actions 自动编译镜像

3.1 新增 Makefile 文件

内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
build:
    docker build -f Dockerfile -t ghcr.io/shaowenchen/documents:latest .

install:
    yum install -y yum-utils
    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install  -y docker-ce-19.03.8-3.el7
    systemctl start docker
    systemctl enable docker
    yum install -y python3-pip
    pip3 install docker-compose

Makeffile 中定义了两个指令,build 用于构建镜像,而 install 用于在物理机上安装 Docker 运行环境。

3.2 定义 CI 编译推送流程

在项目的根目录增加文件 .github/workflows/build.yaml ,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name: build

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Build image
        run: make build

      - name: Login Registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GHCR_TOKEN }}

      - name: Push image
        run:
          docker push ghcr.io/shaowenchen/documents:latest

这里的 secrets.GHCR_TOKEN 需要在 https://github.com/settings/tokens/new 页面创建。

然后添加到项目的 Settings 中,设置为 GHCR_TOKEN 变量值。

4. 部署服务

在示例中,我使用的是 ghcr.io 镜像仓库,如果在国内的服务器上访问不够快,可以更换为阿里云镜像仓库。

将上面的配置提交之后,GitHub Actions 就会自动进行镜像构建和推送,如下图。

在个人主页的 Packages 中,可以看到镜像,如下图。

将镜像改为 Public 之后,就可以免登陆拉取了。下面使用 docker-compose 对服务进行部署。

docker-compose.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: "3"

services: 
  documents:
    restart: always
    container_name: documents
    image: ghcr.io/shaowenchen/documents:latest
    ports:
    - 80:80
    - 443:443

执行命令,启动服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker-compose up -d

更新服务时,先拉取镜像,然后停掉服务,再次拉起即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker-compose pull
docker-compose down
docker-compose up -d

由于只是一个 Nginx 提供静态文件服务,服务的启停都非常地快。

作者: Shaowen Chen

原文链接: https://www.chenshaowen.com/blog/deploy-static-server-by-docker-image.html

更多精彩内容,请关注公众号:问其
更多精彩内容,请关注公众号:问其

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何给 GitHub Actions 添加自己的 Runner 主机
在前面的文档中,我对 GitLab 提供的 CI 功能进行了实践,点击查看 。使用 GitLab 的好处是可以私有化部署、无限的私有仓库数量、CI 配置简单、能接入自建的 Runner 。但随着 GitHub 越来越开放,GitLab 的这些优势在逐步丧失。
陈少文
2020/12/04
8.7K0
如何给 GitHub Actions 添加自己的 Runner 主机
Gitlab+Jenkins+Docker+Harbor+K8s集群搭建CICD平台(持续集成部署Hexo博客Demo)
如果你讨厌一个人,你实际讨厌的是你自己的某些部分。我们自身没有的东西,是不会干扰到我们的。仁者见仁,智者见智。——德尔曼 黑塞《德米安》
山河已无恙
2023/03/02
2.5K0
Harbor 2.2.0 搭建与使用​
Harbor 本地安装支持在线和离线,另外也可以部署到 Kubernetes 中。这里采用本地在线安装方式。
叨叨软件测试
2021/06/16
1.3K0
Harbor 2.2.0 搭建与使用​
【玩转Lighthouse】Docker与Hexo博客的部署实战
之所以选用轻量应用服务器,是因为相比起云服务器CVM,轻量应用服务器更加精简便捷易用,创建轻量服务器时更有流行的开源软件打包镜像,实现一键完成应用的构建部署。对于我们这种低负载的个人以及中小企业来说,成本低,性价比更加适合。废话不多说,让我们直接开始吧。
用户1542270
2022/04/27
2.9K1
docker+Jenkins+nginx实现前端自动部署详细教程
阿里云双11大促买了个服务器玩一玩,买之前很激动,买了之后,emmmm我用它能干嘛
winty
2021/12/08
2.7K0
docker+Jenkins+nginx实现前端自动部署详细教程
GitHub Actions 自动构建镜像 并发布到 Docker Hub
当 docker-push-release.yml 触发运行时, docker-push-beta 并不会触发运行,(因此不用担心发布release时, 错误push两次)
yiyun
2022/04/01
2.4K0
GitHub Actions 自动构建镜像 并发布到 Docker Hub
hexo个人博客网站服务制作成镜像部署
本文基于制作-Nginx-1-21-6-免安装包文章的基础上,在腾讯云云服务器(CentOS系统)上基于镜像文件Dockerfile制作 hexo个人博客网站服务 镜像。
lqmeta
2022/02/13
1.1K0
Halo博客的部署和使用
Halo 是一个强大易用的开源建站工具,拥有丰富的主题模板和插件,帮助用户快速搭建属于自己的博客系统。
M.Talen
2024/05/22
7500
Halo博客的部署和使用
可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI
上一篇文章搭建了一个具有基础功能,权限认证、TLS 的私有仓库,但是Docker Registry 作为镜像仓库,连管理界面都没有,甚至连一些运维必备的功能都是缺失的,还有什么 Docker 镜像仓库管理工具呢? 这里有一个简单好用的企业级 Registry 服务器 - Harbor,推荐在生产环境上使用。 Harbor 简介 Harbor是VMware公司开源的企业级Docker Registry项目,其目标是帮助用户迅速搭建一个企业级的Docker registry服务。 它以Docker公司开源的re
程序员鹏磊
2018/02/09
2.5K0
可能是最详细的部署:Docker Registry企业级私有镜像仓库Harbor管理WEB UI
【前端部署第三篇】通过 docker 学习 nginx 配置,及基于 nginx 部署最简前端项目
大家好,我是山月,这是我最近新开的专栏:「前端部署系列」。包括 Docker、CICD 等内容,大纲图示如下:
山月
2022/05/23
1.3K0
【前端部署第三篇】通过 docker 学习 nginx 配置,及基于 nginx 部署最简前端项目
使用Docker Compose、Nginx、SSH和Github Actions实现前端自动化部署测试机
显然这个流程不仅繁琐,而且效率也不高,开发每次发布都要耗费很长的时间在部署构建上面。
前端森林
2021/11/12
1.2K0
Harbor镜像仓库(含clair镜像扫描) - 完整部署记录
Harbor环境部署的要求:系统版本在Centos7.5以上、内核版本在4.4X以上、ip_forward路由转发功能要打开。
洗尽了浮华
2020/11/24
1.9K0
Harbor镜像仓库(含clair镜像扫描) - 完整部署记录
自建 Docker 镜像摆脱 Docker pull 失败困境
这个项目是一个基于 Cloudflare Workers 的 Docker 镜像代理工具。它能够中转对 Docker 官方镜像仓库的请求,解决一些访问限制和加速访问的问题。
轩源
2024/09/29
1.5K0
一文说清docker及docker compose的应用和部署
本文视频版教程:一个视频说清docker及docker compose的应用和部署(https://cloud.tencent.com/developer/video/82177)
参谋带个长
2025/03/12
6430
如何劫持 docker.io 的镜像流量到私有仓库
原文 https://www.chenshaowen.com/blog/hijack-docker-io-req-to-private-repository.html
陈少文
2022/07/22
1.5K0
如何劫持 docker.io 的镜像流量到私有仓库
基于gitea+drone完成小团队的CI/CD
持续集成和构建的工具有很多,除了著名的 Jenkins,Travis,CircleCI,还有最近比较热门的 Github Action 和 Gitlab CI/CD。但是这些工具面对私人项目不是要收费就是占用大量服务器资源,作为个人开发者的私人项目如果想要使用并不友好。那么开源免费的 Drone CI 是个不错选择,它不但非常轻量,而且十分强大。并可以结合私有代码仓库自动编译、构建服务,几行脚本即可实现自动化部署。本文讲述 Drone CI 的具体实践,结合Gitea,怎么在 VPS 里从零开始搭建一个基于 Gitea + Drone CI 的持续集成系统。
mikelLam
2022/10/31
2.6K0
基于gitea+drone完成小团队的CI/CD
UMAMI隐私统计安装及配置
UMAMI使用nodejs编写,是一个用于替代Google Analytics等第三方统计平台,更专注于用户隐私保护的自建统计项目。
Laikee
2022/04/28
1.8K0
UMAMI隐私统计安装及配置
使用 Docker 让部署 Django 项目更加轻松
那么我们有没有办法,让本地开发环境和线上环境保持一致?这样我们在部署上线前,就可以在本地进行验证,只要验证没问题,我们就有 99% 的把握保证部署上线后也没有问题(1%保留给程序玄学)。
HelloGitHub
2021/05/14
1.5K0
Harbor docker 部署安装
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
小石头
2022/11/10
1.3K0
Harbor docker 部署安装
docker 及 docker-compose 的快速安装和简单使用
通过下面的一个脚本可以简单快速的创建一个镜像并运行起来 大概看下应该就可以大概明白镜像的基本使用了
易墨
2018/09/14
1.8K0
推荐阅读
相关推荐
如何给 GitHub Actions 添加自己的 Runner 主机
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验