Caddy + wordpress

结构:

1
请求 -> DNS -> VPS -> Caddy接管80以及443,根据域名反向代理 -> wordpress服务

wordpress服务构成:
wordpress + mysql

需求:
可以参考王哥的分享

  • 一个域名
  • 一个云服务器、VPS等

tips:
出于备案的要求,域名服务商和服务器需要都在境内,国内的服务器如果不备案,是会被各种拦截下来无法提供web服务的。
如果你的域名和服务器都在境外,那是可以不备案的。

  • 安装Docker

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    curl -fsSL https://get.docker.com | sudo sh -s -- --mirror Aliyun
    sudo usermod -aG docker $USER
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m"
    },
    "storage-driver": "overlay2",
    "registry-mirrors": ["https://t9ab0rkd.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl enable docker.service
    sudo systemctl restart docker
  • 安装docker-compose

    1
    2
    sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
  • 安装Caddy

    1
    2
    3
    git clone git@git.meideng.net:linnan/my-caddy.git
    cd my-caddy
    docker-compose up -d
  • 域名提供商修改DNS配置,增加一条A记录

Caddyfile示例:

1
2
3
blog.linnan.me {
respond "Hello, world!"
}
  • 安装workpress

    1
    2
    3
    mkdir wordpress && cd wordpress
    touch docker-compose.yml && vi docker-compose.yml
    docker-compose up -d

    docker-compose.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
    version: "3.9"

    services:
    db:
    image: mysql:5.7
    volumes:
    - db_data:/var/lib/mysql
    restart: always
    environment:
    MYSQL_ROOT_PASSWORD: somewordpress
    MYSQL_DATABASE: wordpress
    MYSQL_USER: wordpress
    MYSQL_PASSWORD: wordpress

    wordpress:
    depends_on:
    - db
    image: wordpress:latest
    volumes:
    - wordpress_data:/var/www/html
    ports:
    - "8000:80"
    restart: always
    environment:
    WORDPRESS_DB_HOST: db:3306
    WORDPRESS_DB_USER: wordpress
    WORDPRESS_DB_PASSWORD: wordpress
    WORDPRESS_DB_NAME: wordpress
    volumes:
    db_data: {}
    wordpress_data: {}
  • 将Caddy的服务代理到wordpress暴露的端口
    Caddyfile示例:

    1
    2
    3
    4
    5
    blog.linnan.me {
    route * {
    reverse_proxy 127.0.0.1:8000
    }
    }

Github pages + hexo

  • 先创建一个自己github page

  • deploy 部署

    • 从头开始:
      • 安装hexo工具
      • 生成文件夹
        1
        2
        3
        $ hexo init <folder>
        $ cd <folder>
        $ npm install
      • 修改_config.yml配置,站名等
      • 修改_config.yml配置,post_asset_folder: true
      • 新增两个依赖
        1
        2
        npm install hexo-deployer-git --save
        npm hexo-asset-image-for-hexo5 --save
      • npx hexo server启动本地调试
      • 编写一篇博客
        1
        npx hexo new <title>
      • Deploy发布
        • 修改_config.yml文件
          1
          2
          3
          4
          5
          deploy:
          type: ''
          type: git
          repo: git@github.com:cafedeflore/cafedeflore.github.io.git
          branch: gh-pages
        • 执行
          1
          npx hexo clean && npx hexo deploy
    • clone现有的这个git仓库,修改一些配置,然后进行使用
  • github action部署

    • 先创建一个private的仓库my-blog,用来保存原始内容,并触发actions

    • 生成一对秘钥:

      1
      ssh-keygen -t rsa -b 4096 -C "Hexo Deploy Key" -f github-deploy-key -N ""

      这会在当前目录生成两个文件:

      github-deploy-key —— 私钥
      github-deploy-key.pub —— 公钥
      我们把私钥放到我们存放 my-blog 原始文件的代码仓库里面,用于触发 Actions 时使用。
      把公钥放到 GitHub Pages 对应的代码仓库Deploy key里面,用于 my-blog 部署时的写入工作。

  • 自定义域名解析

    • 去域名服务商的DNS新增一条CNAME指向 username.github.io
    • 去username.github.io的Setting -> Pages新增自定义域名,github会在项目目录维护一个CNAME文件
    • 在hexo的source目录下也维护同样内容的一个文件,确保我们打包出来的有这个CNAME

两种方案的对比

- 自建Wordpress Github Page
搭建费用成本 VPS服务器,即使非常低配,几百RMB/年 几乎为0
可访问性 取决于服务器位置,如果是国内服务器+备案,应该没有问题 依赖于github
运维难度 可能遇到服务器性能问题等等 搭建好后几乎为0
编写体验 富文本编辑器,应该也有相关md支持,理论上只要有能上网的设备就能写 编写在本地,可以在vscode可视化编辑
更新延迟 发布即可见 有分钟级别的延迟
更新方式 动态 静态
数据 存储在mysql里,看mysql的容灾能力 git维护,相对不容易丢数据,也不存在备份的问题
域名 可以关联自己的域名,没有的话只能通过ip访问 可以关联自己的域名,没有的话可以通过github的域名访问
https 需要自己搞,当然用caddy成本也很低 github帮你搞,无需操心
扩展性 wordpress很多年了,生态应该还是很完善 hexo也有很多主题插件,前端同学还能自己开发插件

其他