Anye
Anye
发布于 2025-07-11 / 24 阅读
0
0

降本增效!上云真香!

腾讯云轻量应用服务器部署个人博客全指南:一站式 Docker Compose 搭建 Caddy、Halo、Certimate、Watchtower 与 Bing 壁纸 API。

前言

又好久没写博客了,毕业了事情比较多,而且因为经济上的原因,托管服务器的经济压力较大,托管后操作起来没有云服务器方便,同时大量的配置空闲,比较浪费。本着降本增效的原则,再加上最近 EdgeOne 大火,所以又上云了。

本文将详细介绍如何在腾讯云服务器上购买2C2G3M的云服务器,并使用 Docker Compose 运行 Caddy、Halo、Certimate、Watchtower、bing-wallpaper-api,最终搭建起一个功能完善的个人博客网站。

简介

对于个人博客而言,2核2G3M的配置是一个非常经济且性能足够的选择。它能够满足日常访问需求,同时避免了资源浪费。腾讯云作为国内领先的云服务提供商,其稳定性和网络质量都有保障。

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 docker-compose.yml 文件,我们可以轻松地配置、启动和管理所有服务,大大简化了部署和维护的复杂度。

⚠️ 注意

阅读本文你只需要:有手就行😜

准备工作

相信再看这篇教程的,你肯定有自己的服务器,可以点击 这里 直达教程,如果没有可以点击 https://curl.qcloud.com/Tkb1BeLp获取更多优惠!

为什么选择腾讯云轻量应用服务器?

LH(Lighthouse)相较于CVM,具有更简单灵活的创建以及服务面板,对于博客这样的轻量需求能够更好的适配。

对比项 轻量应用服务器 传统VPS 虚拟主机 云服务器CVM
适用场景 中小企业、开发者、轻量级应用(博客、小程序、测试环境等) 需要完整服务器权限的中小型项目 仅支持基础建站功能 中大型企业、高并发/复杂架构场景(视频处理、AI训练等)
资源管理 套餐式整体售卖(计算+存储+网络),性价比高 独立分配资源,需自行组合 共享底层资源,无独立管理权限 灵活选配各资源,按需计费
应用部署 支持一键部署应用模板(如 WordPress、LAMP) 需手动安装环境 仅支持预装环境建站 需完全手动配置
网络配置 自动创建网络,简化操作 需手动配置网络 无独立网络配置权限 需管理 VPC、安全组等复杂配置
功能支持 完整生命周期管理 + 防火墙 + 监控 基础管理功能 仅 FTP 文件管理 支持高阶功能(如弹性伸缩、GPU 等)
安全防护 默认免费提供 DDoS 防护和主机安全 需自行部署安全措施 依赖服务商基础防护 支持自定义高级安全策略

腾讯云轻量应用服务器购买指南

  1. 登录腾讯云官网:访问 http://cloud.tencent.com 并登录您的账号。如果没有账号,请先注册。

  1. 进入购买页面:点击 https://curl.qcloud.com/Tkb1BeLp选择一块适合你配置的服务器下单购买。

  2. 设置登录方式:选择“密码登录”或“SSH密钥登录”,并设置好密码或绑定密钥。

  3. 确认订单并支付:核对所有配置信息,确认无误后提交订单并完成支付。

搭建个人博客服务

接下来,我们将使用 Docker Compose 搭建各个服务。

Docker 及 Docker Compose 安装配置

购买并登录到您的腾讯云服务器后,我们需要安装 Docker 和 Docker Compose。以下是详细步骤:

  1. 更新系统软件包

sudo apt update && sudo apt upgrade -y
  1. 安装 Docker

点击查看安装即配置 docker:

https://www.anye.xyz/archives/SoizHNTd#docker

Watchtower 配置

Watchtower 可以帮助我们自动更新 Docker 容器镜像。在 docker-compose.yml 中添加 Watchtower 服务:

services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 3600 --cleanup

说明

  • container_name: watchtower:指定容器名称为 watchtower

  • containrrr/watchtower:使用 Watchtower 官方镜像。

  • volumes/var/run/docker.sock:/var/run/docker.sock:将 Docker Socket 挂载到容器内,以便 Watchtower 可以与 Docker Daemon 通信,监控和更新其他容器。

  • command: --cleanup --interval 3600

    • --cleanup:更新后自动清理旧的镜像。

    • --interval 3600:每 3600 秒(1 小时)检查一次更新。您可以根据需要调整检查间隔。

CAW 代理加速

参考下面的教程获取 token:

https://www.anye.xyz/archives/VbiODlkV

docker-compose.yml 中添加 CAW 代理:

services:
  cdm:
    container_name: caw
    image: docker.cnb.cool/anyexyz/tools/cnb-accelerates-web:latest
    network_mode: bridge
    ports:
      - 172.17.0.1:3128:3128
    environment:
      - CNB_TOKEN=xxxxxxxxxxxxxxx
      - CNB_REPO=Anyexyz/Temp/runtime

说明:

  • container_name: caw:指定容器名称为 caw,便于在 Docker CLI 中识别和操作该容器。

  • image: docker.cnb.cool/anyexyz/tools/cnb-accelerates-web:latest:使用来自 docker.cnb.cool 镜像仓库的加速代理服务镜像,适用于访问加速。

  • ports::将宿主机的 172.17.0.1:3128 端口映射到容器的 3128 端口,用于提供代理服务。

Docker Mirror 加速

https://www.anye.xyz/archives/VbiODlkV

Certimate 配置

Certimate 是一个自动化 SSL 证书管理工具。在 docker-compose.yml 中添加 Certimate 服务:

services:
  certimate:
    container_name: certimate
    image: certimate/certimate:latest
    ports:
      - 127.0.0.1:8091:8090
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./data:/app/pb_data
    environment:
      - http_proxy=http://172.17.0.1:3128
      - https_proxy=http://172.17.0.1:3128

说明

  • certimate/certimate:latest:使用最新版 Certimate 镜像。

  • container_name: certimate:指定容器名称为 certimate

  • ports:将容器的 8090 端口映射到主机的 8091 端口。您可以根据需要调整主机端口。

  • .data:/app/data:将 Certimate 的数据目录持久化到本地的 certimate_data 文件夹。

  • 添加环境变量以使用 caw 提供的代理。

Caddy 配置

Caddy 将作为我们的反向代理服务器,负责处理 HTTPS 证书和流量转发。在 docker-compose.yml 中添加 Caddy 服务:

services:
  caddy:
    container_name: caddy
    image: caddy:latest
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./conf:/etc/caddy
      - ./site:/srv
      - ../ssl:/ssl:ro

同时,创建 Caddyfile 文件:

https://anye.xyz {
        tls /ssl/anye.xyz/cert.crt /ssl/anye.xyz/cert.key
        redir https://www.anye.xyz{uri} permanent
}

https://www.anye.xyz {
        tls /ssl/anye.xyz/cert.crt /ssl/anye.xyz/cert.key
        handle_path /bg-image* {
                reverse_proxy http://172.17.0.1:9000
        }
        reverse_proxy http://172.17.0.1:8090
}

说明

  • caddy:latest:使用最新版 Caddy 镜像。

  • ports:映射 80 和 443 端口,用于 HTTP 和 HTTPS 访问。

Halo 配置

Halo 是本站使用的开源博客系统。在 docker-compose.yml 中添加 Halo 服务:

https://docs.halo.run/getting-started/install/docker-compose
services:
  halo:
    container_name: halo
    image: registry.fit2cloud.com/halo/halo-pro:2
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - ./halo2:/root/.halo2
    ports:
      - "172.17.0.1:8090:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    restart: on-failure:5
    environment:
      - JVM_OPTS=-Xmx512m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:postgresql://halodb/halo
      - --spring.r2dbc.username=halo
      - --spring.r2dbc.password=openpostgresql
      - --spring.sql.init.platform=postgresql
      - --halo.external-url=https://www.anye.xyz/
  halodb:
    image: postgres:15.4
    restart: on-failure:3
    networks:
      halo_network:
    volumes:
      - ./db:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      - POSTGRES_PASSWORD=openpostgresql
      - POSTGRES_USER=halo
      - POSTGRES_DB=halo
      - PGUSER=halo

networks:
  halo_network:

bing-wallpaper-api 配置

bing-wallpaper-api 提供 Bing 每日壁纸的 API 接口。在 docker-compose.yml 中添加 bing-wallpaper-api 服务:

services:
  bing-wallpaper-api:
    container_name: bing-wallpaper-api
    image: docker.cnb.cool/anyexyz/bing-wallpaper-api:latest
    ports:
      - 172.17.0.1:9000:9000
    restart: unless-stopped

说明

  • docker.cnb.cool/Anyexyz/bing-wallpaper-api:latest:使用 bing-wallpaper-api 镜像。

  • container_name: bing-wallpaper-api:指定容器名称为 bing-wallpaper-api

  • ports:将容器的 9000 端口映射到主机的 9000 端口。这是 bing-wallpaper-api 的默认访问端口。

各组件协同工作

现在,我们已经配置了所有必要的服务。它们将协同工作,共同搭建您的个人博客网站:

  1. Caddy:作为反向代理服务器,监听 80 和 443 端口。当用户访问您的域名时,Caddy 会根据 Caddyfile 中的配置,将请求转发到 Halo 或 bing-wallpaper-api 服务。

  2. Halo:博客系统本身,运行在 Docker 容器中,并通过 Caddy 暴露到公网。

  3. Certimate:证书管理工具,可以帮助您自动化管理和续期 SSL 证书。虽然 Caddy 已经内置了自动证书管理功能,但 Certimate 可以提供更灵活的证书管理方案,例如支持更多的 DNS 提供商,或者用于管理其他服务的证书。

  4. Watchtower:监控所有 Docker 容器的镜像更新。一旦发现有新版本,它会自动拉取最新镜像并重启相应的容器,确保您的服务始终保持最新状态。

  5. bing-wallpaper-api:提供 Bing 每日壁纸的 API 接口,您可以将其集成到您的博客中,例如作为背景图片或提供壁纸下载功能。

启动所有服务

在各应用目录下,运行以下命令启动服务:

docker-compose up -d

如果所有服务都正常运行,您现在应该可以通过您的域名访问 Halo 博客了。首次访问 Halo,您需要进行初始化设置。

总结

通过本文的指引,您应该已经成功在腾讯云服务器上搭建了一个基于 Docker Compose 的个人博客网站,集成了 Caddy 进行反向代理和 SSL 证书管理,Halo 作为博客系统,Certimate 进行更灵活的证书管理,Watchtower 自动化更新容器,以及 bing-wallpaper-api 提供额外的功能。

这种部署方式不仅充分利用了云服务器的资源,实现了“降本增效”的目标,还通过 Docker Compose 极大地简化了服务的部署和管理。希望这篇博文能帮助您轻松拥有自己的个人博客,并享受技术带来的乐趣!

如果您在搭建过程中遇到任何问题,欢迎在评论区留言交流。


评论