Caddy服务器（或称Caddy Web）实现不同域名访问同一个站点

> 这次我安装Joplin服务器是透过Caddy让我能够以https访问joplin.078919.xyz。如果下次在同一个服务器甚至同一个docker管理器中，如果我想新增一个服务，是不是也可以透过Caddy来实现https访问一个新的域名？如果可以要如何做？
>[Joplin 服务器最终版部署 SOP](:/23395d428f8a41c4839b8630838fec3c)
> 
**完全可以！而且这正是 Caddy 最强大的地方。**

Caddy 的角色就像是你们公司的**前台接待员**。

  * **目前：** 当有人问“我要找 Joplin”时，Caddy 把他带到 Joplin 办公室。
  * **未来：** 当有人问“我要找 博客 (Blog)”时，Caddy 就会把他带到 Blog 办公室。

所有的流量都共享同一个大门（端口 80 和 443），你**不需要**再去甲骨文云后台开放新的端口。

下面我为你制定一份\*\*“新增服务标准操作流程”\*\*，假设你想要新增一个简单的网页服务（比如一个简单的个人主页或 `whoami` 测试页），并且绑定新域名 `new.078919.xyz`。

-----

### 新增服务标准操作流程 (SOP)

#### 前置准备：域名解析

去你的域名服务商后台，增加一条 **A 记录**：

  * **主机记录 (Name):** `new` (或者你想用的任何前缀)
  * **记录值 (Target):** 填入和你 Joplin 那个域名一样的**服务器 IP 地址**。

-----

#### 第一步：修改 docker-compose.yml (添加新服务)

为了让 Caddy 能轻易找到新服务，最简单的方法是把新服务加到同一个 `docker-compose.yml` 文件里。

1.  进入目录：

    ```bash
    cd /home/ubuntu/joplin
    ```

2.  编辑文件：

    ```bash
    nano docker-compose.yml
    ```

3.  在 `services:` 下面增加你的新服务。
    *举例：我们增加一个叫 `my-website` 的简单网页服务。*

    ```yaml
    services:
      # ... 这里是你原本的 db ...
      # ... 这里是你原本的 app ...

      # === 這是新增的服务 ===
      my-website:
        image: nginxdemos/hello
        restart: unless-stopped
        # 注意：这里不需要写 ports 暴露端口，因为我们要走内网让 Caddy 转发
      # ====================

      # ... 这里是你原本的 caddy ...
    ```

    *(注意缩进要对齐，通常是2个空格)*

-----

#### 第二步：修改 Caddyfile (配置新域名)

告诉 Caddy，如果有流量访问 `new.078919.xyz`，就把它转发给 `my-website` 这个容器。

1.  编辑文件：

    ```bash
    nano Caddyfile
    ```

2.  在原本的 Joplin 配置**下面**，增加一段新的：

    ```text
    joplin.078919.xyz {
        reverse_proxy app:22300
    }

    # === 新增的规则 ===
    new.078919.xyz {
        reverse_proxy my-website:80
    }
    ```

    *(注意：`my-website` 必须和你在 docker-compose.yml 里写的 service 名字一致。`:80` 是这个新服务容器内部监听的端口，通常 Web 服务都是 80)*

-----

#### 第三步：应用更改

你不需要停止服务器，Docker Compose 足够聪明，它会检测到变化并只更新需要的部分。

1.  **让 Docker 启动新容器：**

    ```bash
    sudo docker compose up -d
    ```

    *系统会提示：`Container joplin-my-website-1 Started`，而 Joplin 和 Caddy 会显示 `Running` (保持不变)。*

2.  **让 Caddy 重新读取配置文件：**
    虽然 `up -d` 会重启 Caddy 容器让它读取配置，但为了保险，你可以强制它重载一下配置：

    ```bash
    sudo docker compose restart caddy
    ```

-----

#### 第四步：验证

打开浏览器访问 `https://new.078919.xyz`。

  * **Caddy 会自动帮你申请这个新域名的 SSL 证书（HTTPS）。**
  * 你应该能看到新服务的页面了。

### 总结

以后你要加任何服务（比如 WordPress, Nextcloud, 静态博客），逻辑都是一样的：

1.  **DNS：** 指向服务器 IP。
2.  **Compose：** 加一个 Service (不要映射端口到主机，只需内部暴露)。
3.  **Caddyfile：** 加一段 `域名 { reverse_proxy 服务名:端口 }`。
4.  **生效：** `docker compose up -d` 然后重启 Caddy。

这就是**反向代理**的魅力，一个入口，无限可能！

id: 33efe70982ec400189a7f500e55c4b4a
parent_id: c8972912af904d98b5610c325e3d5ad3
created_time: 2025-11-30T07:05:15.482Z
updated_time: 2025-11-30T07:12:17.604Z
is_conflict: 0
latitude: 25.03296940
longitude: 121.56541770
altitude: 0.0000
author: 
source_url: 
is_todo: 0
todo_due: 0
todo_completed: 0
source: joplin-desktop
source_application: net.cozic.joplin-desktop
application_data: 
order: 0
user_created_time: 2025-11-30T07:05:15.482Z
user_updated_time: 2025-11-30T07:12:17.604Z
encryption_cipher_text: 
encryption_applied: 0
markup_language: 1
is_shared: 0
share_id: 
conflict_original_id: 
master_key_id: 
user_data: 
deleted_time: 0
type_: 1