Install Nakama with Docker Compose #

Docker is the quickest way to download and start developing with Nakama. By using Docker you are able to:

  • Install to a pristine environment
  • Easily install and run the CockroachDB or PostgreSQL database for Nakama
  • Take snapshots, remove, and re-install Nakama without affecting your primary operating system
  • Enjoy a quick and simplified installation experience regardless of your OS

Following this guide, you will use Docker Compose to quickly and easily define all the necessary services and run your local development instance of Nakama.

Prerequisites #

Before proceeding ensure that you have installed Docker Desktop.

Linux Users
Docker Desktop is only available for Mac and Windows. You must install Docker Engine and Docker Compose individually for your distribution.

Running Nakama #

  1. Start by creating a directory where your Nakama server will sit, for example Desktop/nakama.
  2. In this folder create a docker-compose.yml file and open it using your preferred text editor.
  3. Heroic Labs provides two YML files for use: using either CockroachDB or PostgreSQL as the database.

docker-compose-cockroach.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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:

Copy and paste the contents of your preferred option into your docker-compose.yml file.

Windows Users
You must edit the nakama:volumes: entry in your docker-compose.yml file so that it looks like the following: /c/Users/<username>/projects/docker:/nakama/data.
  1. Open a Terminal window and navigate to your Nakama directory. For example:
1
cd desktop/nakama
  1. To pull all required images and start your application, run the following:
1
docker compose up
  1. Congratulations! Your Nakama server is now up and running, available at 127.0.0.1:7350.

Nakama containers running
Nakama containers running

Use the Open in Visual Studio Code button (or that for your IDE) to edit your docker-compose.yml file directly.

Nakama Console #

You can also access the Nakama Console by navigating your browser to 127.0.0.1:7351.

When prompted to login, the default credentials are admin for username and password for password. These can be changed via configuration file or command-line flags.

Nakama console
Nakama console

Docker Configuration #

Want to learn more on how you can further configure your Docker container? Check our Docker configuration page.

Server Configuration #

If you want to further configure and customize your Nakama Server, check this overview on how to provide a custom configuration for your Nakama server, and all available configuration properties.

Next steps #

With your Nakama server now up and running with the desired configuration, you can get started with your preferred client SDK.

Related Pages