---
title: 域名
description: 为您的 Docker Compose 应用程序配置域名。
---

在使用 Docker Compose 时，为服务添加域名是一个简单的过程。本指南将引导您完成为应用程序配置域名的必要步骤。

关键步骤：

1. 将服务添加到 `dokploy-network`。
2. 使用 Traefik 标签配置路由。

## 示例场景

让我们考虑一个包含三个组件的应用程序：前端、后端和数据库。我们将从一个基本的 Docker Compose 文件开始，然后通过域名配置对其进行增强。

```yaml
version: '3.8'

services:
  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    volumes:
      - ./frontend:/app
    ports:
      - "3000:3000"
    depends_on:
      - backend

  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    volumes:
      - ./backend:/app
    ports:
      - "5000:5000"
    environment:
      - DATABASE_URL=postgres://postgres:password@database:5432/mydatabase
    depends_on:
      - database

  database:
    image: postgres:13
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: mydatabase
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:
```

## 步骤 1：添加网络

首先，我们将 `dokploy-network` 添加到我们的服务中：

```yaml
version: '3.8'

services:
  frontend:
    # ...（之前的配置）
    networks:
      - dokploy-network

  backend:
    # ...（之前的配置）
    networks:
      - dokploy-network

  database:
    # ...（之前的配置）
    networks:
      - dokploy-network

volumes:
  db-data:

networks:
  dokploy-network:
    external: true
```

## 步骤 2：配置 Traefik 标签

现在，让我们添加 Traefik 标签以将域名路由到我们的服务。我们将专注于前端和后端服务：

{/* 必须添加这些标签：

1. `traefik.enable=true`
此标签告诉 Traefik 此服务应由 Traefik 路由。
2. `traefik.http.routers.<UNIQUE-RULE>.rule=Host('your-domain.dokploy.com')`
此标签告诉 Traefik 使用的域名是 `your-domain.dokploy.com`
3. `traefik.http.routers.<UNIQUE-RULE>.entrypoints=web`
此标签告诉 Traefik 该服务应通过 `http` 协议访问。
4. `traefik.http.services.<UNIQUE-RULE>.loadbalancer.server.port=3000`
此标签告诉 Traefik 使用的端口是 `3000`

注意：对于 loadbalancer.server.port，确保分配您服务所使用的端口。请注意，您无需像这样暴露端口：

注意：在 loadbalancer.server.port 确保分配您服务使用的端口，并且需要注意的是，您无需以这种方式暴露端口：

`'3000:3000'` 这是不正确的，您只需分配服务正在使用的端口，在这种情况下为 `3000`。

确保创建指向您的域名的 `A` 记录，这可以通过您的 DNS 提供商完成。*/}

```yaml
version: '3.8'

services:
  frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    volumes:
      - ./frontend:/app
    expose:
      - 3000
    depends_on:
      - backend
    networks:
      - dokploy-network
    labels:
      - traefik.enable=true
      - traefik.http.routers.frontend-app.rule=Host(`frontend.dokploy.com`)
      - traefik.http.routers.frontend-app.entrypoints=web
      - traefik.http.services.frontend-app.loadbalancer.server.port=3000

  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    volumes:
      - ./backend:/app
    expose:
      - 5000
    environment:
      - DATABASE_URL=postgres://postgres:password@database:5432/mydatabase
    depends_on:
      - database
    networks:
      - dokploy-network
    labels:
      - traefik.enable=true
      - traefik.http.routers.backend-app.rule=Host(`backend.dokploy.com`)
      - traefik.http.routers.backend-app.entrypoints=web
      - traefik.http.services.backend-app.loadbalancer.server.port=5000

  database:
    # ...（与之前相同）

volumes:
  db-data:

networks:
  dokploy-network:
    external: true
```

## 理解 Traefik 标签

1. `traefik.enable=true`   启用服务的 Traefik 路由。
2. `traefik.http.routers.<UNIQUE-RULE>.rule=Host('your-domain.dokploy.com')` 指定服务的域名。
3. `traefik.http.routers.<UNIQUE-RULE>.entrypoints=web`  将服务设置为可通过 HTTP 访问。
4. `traefik.http.services.<UNIQUE-RULE>.loadbalancer.server.port=3000` 指定服务内部使用的端口。

**注意**：将 `<UNIQUE-RULE>` 替换为每个服务的唯一标识符（例如，frontend-app、backend-app 等）。

## 重要考虑事项

1. **端口暴露**：使用 `expose` 而不是 `ports` 来暴露主机机器的端口。这确保端口不会暴露给主机机器。
2. **DNS 配置**：确保您在 DNS 提供商设置中创建指向您域名的 `A` 记录。
3. **HTTPS**：对于 HTTPS，您可以使用 Let's Encrypt 或其他 SSL/TLS 证书。

## 部署

有了这些配置，您现在可以使用 Docker Compose 部署您的应用程序。此设置应足以通过 Traefik 使用自定义域路由启动和运行您的服务。

## SSL 证书和进一步配置

如果您有关于何时使用 Let's Encrypt 或其他 SSL 证书选项的问题，您可以在以下资源中找到更详细的信息：

1. [证书](/docs/core/domain/certificates)
2. [Docker Compose 域名](/docs/core/domain/docker-compose-setup)
3. [Docker Compose 示例](/docs/core/docker-compose/example)

如果您有任何进一步的问题或需要帮助，请加入我们的 [Discord 服务器](https://discord.com/invite/2tBnJ3jDJc)，我们很乐意为您提供帮助。