# Docker Compose

**URL:** https://heroiclabs.com/docs/zh/nakama/getting-started/install/docker/
**Summary:** 参见通过Docker运行Nakama的前提条件和安装过程。

---


# 使用 Docker Compose 安装 Nakama

[Docker](https://www.docker.com/)是下载并使用 Nakama 开始开发的最快捷的方式。通过使用 Docker，您可以：

- 安装到原始环境
- 轻松为 Nakama 安装和运行[CockroachDB](https://www.cockroachlabs.com/)或[PostgreSQL](https://www.postgresql.org/)数据库
- 在不影响主操作系统的情况下，拍摄快照、删除和重新安装 Nakama
- 无论使用哪种操作系统，都能享受快速简单的安装体验

参照本指南，您将使用[Docker Compose](https://docs.docker.com/compose/)快速轻松定义所有必要的服务并运行您的本地 Nakama 开发实例。

## 前提条件

继续之前，确保您已安装[Docker Desktop](https://docs.docker.com/get-docker/)。

{{< note "important" "Linux Users" >}}
Docker Desktop 仅适用于 Mac 和 Windows。您必须为您的发行版单独安装[Docker Engine](https://docs.docker.com/engine/install/)和[Docker Compose](https://docs.docker.com/compose/install/)。
{{< / note >}}

## 正在运行 Nakama

1. 首先为您 Nakama 服务器创建所在目录，例如：`Desktop/nakama`。
2. 在该文件夹中创建一个`docker-compose.yml`文件，并使用首选文本编辑器将其打开。
3. Heroic Labs 提供了两个 YML 文件供使用：将[CockroachDB](https://github.com/heroiclabs/nakama/blob/master/docker-compose.yml)或[PostgreSQL](https://github.com/heroiclabs/nakama/blob/master/docker-compose-postgres.yml)用作数据库。

**docker-compose.yml**

```yaml
version: "3"
services:
  cockroachdb:
    image: cockroachdb/cockroach:latest-v23.1
    command: start-single-node --insecure --store=attrs=ssd,path=/var/lib/cockroach/
    restart: "no"
    volumes:
      - data:/var/lib/cockroach
    expose:
      - "8080"
      - "26257"
    ports:
      - "26257:26257"
      - "8080:8080"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health?ready=1"]
      interval: 3s
      timeout: 3s
      retries: 5
  nakama:
    image: registry.heroiclabs.com/heroiclabs/nakama:3.22.0
    entrypoint:
      - "/bin/sh"
      - "-ecx"
      - >
        /nakama/nakama migrate up --database.address root@cockroachdb:26257 &&
        exec /nakama/nakama --name nakama1 --database.address root@cockroachdb:26257 --logger.level DEBUG --session.token_expiry_sec 7200 --metrics.prometheus_port 9100
    restart: "no"
    links:
      - "cockroachdb:db"
    depends_on:
      cockroachdb:
        condition: service_healthy
      prometheus:
        condition: service_started
    volumes:
      - ./:/nakama/data
    expose:
      - "7349"
      - "7350"
      - "7351"
      - "9100"
    ports:
      - "7349:7349"
      - "7350:7350"
      - "7351:7351"
    healthcheck:
      test: ["CMD", "/nakama/nakama", "healthcheck"]
      interval: 10s
      timeout: 5s
      retries: 5
  prometheus:
    image: prom/prometheus
    entrypoint: /bin/sh -c
    command: |
      'sh -s <<EOF
        cat > ./prometheus.yml <<EON
      global:
        scrape_interval:     15s
        evaluation_interval: 15s

      scrape_configs:
        - job_name: prometheus
          static_configs:
          - targets: ['localhost:9090']

        - job_name: nakama
          metrics_path: /
          static_configs:
          - targets: ['nakama:9100']
      EON
      prometheus --config.file=./prometheus.yml
      EOF'
    ports:
      - "9090:9090"
volumes:
  data:
```

**docker-compose-postgres.yml**

```yaml
version: "3"
services:
  postgres:
    container_name: postgres
    image: postgres:12.2-alpine
    environment:
      - POSTGRES_DB=nakama
      - POSTGRES_PASSWORD=localdb
    volumes:
      - data:/var/lib/postgresql/data
    expose:
      - "8080"
      - "5432"
    ports:
      - "5432:5432"
      - "8080:8080"
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "postgres", "-d", "nakama"]
      interval: 3s
      timeout: 3s
      retries: 5
  nakama:
    container_name: nakama
    image: registry.heroiclabs.com/heroiclabs/nakama:3.22.0
    entrypoint:
      - "/bin/sh"
      - "-ecx"
      - >
        /nakama/nakama migrate up --database.address postgres:localdb@postgres:5432/nakama &&
        exec /nakama/nakama --name nakama1 --database.address postgres:localdb@postgres:5432/nakama --logger.level DEBUG --session.token_expiry_sec 7200
    restart: always
    links:
      - "postgres:db"
    depends_on:
      postgres:
        condition: service_healthy
    volumes:
      - ./:/nakama/data
    expose:
      - "7349"
      - "7350"
      - "7351"
    ports:
      - "7349:7349"
      - "7350:7350"
      - "7351:7351"
    healthcheck:
      test: ["CMD", "/nakama/nakama", "healthcheck"]
      interval: 10s
      timeout: 5s
      retries: 5
volumes:
  data:
```

将您的首选项的内容复制并粘贴到您的`docker-compose.yml`文件中。

{{< note "important" "Windows Users" >}}
您必须编辑`docker-compose.yml`文件中的`nakama:volumes:`条目，使其呈现如下：`/c/Users/<username>/projects/docker:/nakama/data`.
{{< / note >}}

4. 打开终端窗口并导航到您的 Nakama 目录。例如：

```sh
cd desktop/nakama
```

5. 要提取所有必需的图像并启动您的应用程序，请运行以下内容：

```sh
docker compose up
```

6. 祝贺！您的 Nakama 服务器现在已启动并正在运行，可在`127.0.0.1:7350`上找到。

![Nakama容器正在运行](images/docker-nakama-run.png)

使用**“在 Visual Studio 代码中打开”**按钮（或 IDE 的按钮）直接编辑您的`docker-compose.yml`文件。

## Nakama 控制台

您也可以通过将浏览器导航到[127.0.0.1:7351](http://127.0.0.1:7351)来访问 Nakama 控制台：

提示登录时，默认凭据为`admin:password` 。可以通过配置文件或命令行标志更改这些凭据。

## 配置文件

您可为您的 Nakama 服务器自定义许多[配置选项](../../configuration/)。您可以为您想要设置的所有配置创建 YML 文件，并将这个文件传递到您的 Docker 容器中。

首先您需要为 Docker 提供一个本地存储卷。

1. 使用首选文本编辑器打开您的`docker-compose.yml`文件。
2. 编辑`nakama:volumes:`条目以指定所需的卷。例如，要在我们上面使用的`desktop/nakama`目录中创建一个`/data`文件夹，在 Docker 容器中的`nakama/data`上可用，如下所示：

```yaml
volumes:
  - ./data:/nakama/data
```

3. 保存更改的文件并重新启动您的 Docker 容器，使更改生效。从您的终端：

```sh
docker compose restart
```

4. 接下来，创建您的自定义配置文件，例如`my-config.yml`，并将其放在上述 Docker 可用的`/data`文件夹中。

**my-config.yml**

```yaml
name: nakama-node-1
data_dir: "./data/"

logger:
  stdout: false
  level: "warn"
  file: "/nakama/data/logfile.log"

console:
  port: 7351
  username: "my_user"
  password: "my_password"
```

5. 再次打开您的`docker-compose.yml`文件，这一次编辑`nakama:entrypoint`条目以添加指向您的配置文件的`--config`标志。如下所示：

```yaml
nakama:
  entrypoint:
    - "/bin/sh"
    - "-ecx"
    - >
      /nakama/nakama migrate up --database.address root@cockroachdb:26257 &&
      /nakama/nakama --config /nakama/data/my-config.yml
```

6. 保存更改的文件并重新启动您的 Docker 容器，使更改生效。从您的终端：

```sh
docker compose restart
```

## 后续步骤

现在您的 Nakama 服务器已经启动并运行了所需的配置，您可以使用首选的客户端 SDK 开始进行操作。
