最近在一台 OVH VPS 上重新规划个人博客环境,希望搭建一个稳定、安全、方便扩展的 Docker 化博客系统。

最终采用:

  • Debian
  • Docker Compose
  • Nginx Proxy Manager
  • Typecho
  • MariaDB
  • Docker 网络隔离

本文记录整个搭建过程。


一、服务器环境

服务器配置:

  • CPU:Intel Core i7-7700K
  • 内存:32GB
  • 硬盘:双 SSD
  • 带宽:1Gbps
  • 系统:Debian

服务器用途:

  • 个人博客
  • 图床
  • 邮件服务
  • 其他 Web 服务

因此采用服务隔离的 Docker 架构。


二、整体架构

最终架构:

            Internet
                |
                |
             HTTPS 443
                |
                |
    Nginx Proxy Manager
         (反向代理)
                |
         Docker proxy 网络
                |
          +-------------+
          |             |
      Typecho        其他服务
          |
    database 网络
          |
      MariaDB

设计原则:

  • 只开放必要公网端口
  • 应用不直接暴露公网
  • 数据库只允许内部访问
  • 使用 Docker 网络通信

三、Nginx Proxy Manager 部署

Nginx Proxy Manager 负责:

  • 域名转发
  • HTTPS SSL 证书
  • 反向代理
  • Web 服务入口

目录:

/opt/docker/nginx-proxy-manager

docker-compose:

services:
  npm:
    image: jc21/nginx-proxy-manager:2.15.1
    container_name: nginx-proxy-manager
    restart: always

    ports:
      - "80:80"
      - "443:443"
      - "127.0.0.1:81:81"

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

    networks:
      - proxy

networks:
  proxy:
    external: true

四、为什么关闭 81 公网访问?

Nginx Proxy Manager 默认:

0.0.0.0:81

代表:任何人都可以访问后台。

修改为:

127.0.0.1:81:81

之后:

公网
 |
 X
 |
 81 关闭

本机
 |
 127.0.0.1:81
 |
 NPM 后台

如果需要远程管理,使用 SSH 隧道:

ssh -L 8081:127.0.0.1:81 alice@服务器IP -p 22222

浏览器访问:

http://127.0.0.1:8081

五、创建 Docker 公共网络

创建:

docker network create proxy

作用:让不同 Docker Compose 项目之间通信。

例如:

proxy
├── nginx-proxy-manager
└── typecho

external 网络作用

配置:

networks:
  proxy:
    external: true

表示:Docker Compose 使用已经存在的网络,不会重新创建。

这样 NPM 可以直接访问:

typecho:80

六、部署 Typecho

使用镜像:

joyqi/typecho:1.3.0-php8.2-apache

该镜像包含:

  • Typecho
  • Apache
  • PHP 8.2

目录:

/opt/docker/typecho

docker-compose:

services:

  mariadb:
    image: mariadb:11
    container_name: typecho-db
    restart: always

    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: typecho
      MYSQL_USER: typecho
      MYSQL_PASSWORD: your_password

    volumes:
      - ./mysql:/var/lib/mysql

    networks:
      - database


  typecho:
    image: joyqi/typecho:1.3.0-php8.2-apache
    container_name: typecho
    restart: always

    depends_on:
      - mariadb

    environment:
      TYPECHO_SITE_URL: https://blog.example.com

      TYPECHO_DB_ADAPTER: Pdo_Mysql
      TYPECHO_DB_HOST: mariadb
      TYPECHO_DB_PORT: 3306
      TYPECHO_DB_USER: typecho
      TYPECHO_DB_PASSWORD: your_password
      TYPECHO_DB_DATABASE: typecho

    volumes:
      - ./typecho:/app/usr

    networks:
      - proxy
      - database

networks:

  proxy:
    external: true

  database:

七、为什么 Typecho 没有 ports?

传统方式:

ports:
  - "8080:80"

访问方式:

服务器IP:8080

但是现在架构是:

用户
 |
 443
 |
 Nginx Proxy Manager
 |
 Docker 内部网络
 |
 Typecho

所以 Typecho 不需要 ports: 配置。

最终:

  • 公网:80443
  • 内部:Typecho:80MariaDB:3306

八、MariaDB 数据库隔离

MariaDB 只加入 database 网络。

结构:

Typecho
   |
 database
   |
 MariaDB

数据库不会暴露公网,不会开放 3306 端口。


九、启动服务

检查配置:

docker compose config

启动:

docker compose up -d

查看:

docker ps

最终运行的容器:

  • nginx-proxy-manager
  • typecho
  • typecho-db

十、测试 Docker 网络

进入 NPM 容器:

docker exec -it nginx-proxy-manager bash

测试:

curl http://typecho

返回 302 Redirect,说明:

NPM
 |
 proxy 网络
 |
 Typecho

通信正常。


十一、NPM 配置博客域名

添加 Proxy Host:

  • Domain Namesblog.example.com
  • Forward Schemehttp
  • Forward Hostnametypecho
  • Forward Port80

SSL 配置:

  • 开启 Force SSL
  • 开启 HTTP/2 Support
  • 申请 Let's Encrypt 证书

访问 https://blog.example.com 即可进入 Typecho 安装页面。

数据库配置:

  • 数据库地址mariadb
  • 数据库名typecho
  • 用户名typecho
  • 密码:设置的 MYSQL_PASSWORD

十二、最终端口规划

公网开放:

端口用途
22222SSH
80HTTP
443HTTPS

关闭:

端口用途
81NPM 后台
3306MariaDB
8080Typecho

十三、最终架构总结

当前服务器结构:

Docker
│
├── nginx-proxy-manager
│       |
│       ├── 80
│       ├── 443
│       └── 127.0.0.1:81
│
├── typecho
│       |
│       └── Apache + PHP
│
└── typecho-db
        |
        └── MariaDB

特点:

  • ✅ 服务隔离
  • ✅ 数据持久化
  • ✅ HTTPS 自动管理
  • ✅ 数据库不暴露公网
  • ✅ 后续扩展方便

未来可以继续增加:

proxy 网络:

├── Typecho
├── MinIO 图床
├── Uptime Kuma 监控
└── 其他 Web 服务

database 网络:

├── MariaDB
├── Redis
└── PostgreSQL

这套 Docker 架构可以作为个人服务器长期运行的基础环境。

标签: none

添加新评论

  • 上一篇: 没有了
  • 下一篇: 没有了