Sign inSign up

fireblade004/nightingale-server

By fireblade004

•Updated 12 months ago

Docker image to self-host a dedicated server for the game Nightingale

Image
Web servers
0

4.9K

fireblade004/nightingale-server repository overview

⁠Nightingale Server

Nightingale

Release Docker Pulls Docker Stars Image Size

This is a Docker container that automatically downloads and runs the Nightingale⁠ dedicated server.

⁠WARNING: EXPERIMENTAL:

This container is currently in experimental state, you may experience issues including complete loss of saved-data. At present it is expected that any users be familiar with Docker⁠, SteamCMD⁠, and the basics of shell scripting and server administration. If you experience any issues, you are welcome to report them although they are curently unlikely to be actioned if they do not contain sufficient details to easily identify the root cause.

⁠Credit/license

This container is built on top of the Ubuntu-based SteamCMD container⁠ and was developed using wolveix's Satisfactory Server container⁠ as a template. The code to build this container is licensed under the MIT license like the Satisfactory and SteamCMD containers it was modified/based from. License information for Ubuntu is available here⁠. SteamCMD⁠ itself is property of Valve Corporation and subject to their terms. Nightingale⁠ Server is property of Inflexion Games⁠ and subject to their terms. Users are responsible for ensuring they abide by all terms of software used.

⁠Setup

The official documentation of the server⁠ does not appear to indicate the memory requirements of the server. An abritrary warning threshold has been set to warn in the log on startup if the memory available is below 8 GB. This will be updated if official recommendations are once a consenus is found for require memory. You may experiment with adjusting the container's defined --memory restriction depending on available resources on your host and the

You'll need to bind a local directory to the Docker container's /config directory. This directory will hold the following directories:

  • /gamefiles - this is for the game's files. They're stored outside the container to avoid needing to redownload 11GB+ every time you want to rebuild the container
  • /logs - this holds Steam's logs, and contains a pointer to Nightingale's logs (empties on startup unless LOG=true)

It is also recommended that you bind a local directory to the container's /config/gamefiles/NWX/Saved directory, as this is where the Nightingale Server stores persistent information (saved data). Binding this separately allows for ease of backing up the savedata separately from the entire install.

Before running the server image, you should find your user ID that will be running the container. This isn't necessary in most cases, but it's good to find out regardless. If you're seeing permission denied errors, then this is probably why. Find your ID in Linux by running the id command. Then grab the user ID (usually something like 1000) and pass it into the -e PGID=1000 and -e PUID=1000 environment variables.

Run the Nightingale server image like this (this is one command, make sure to copy all of it):

docker run \
--detach \
--name=nightingale-server \
--hostname nightingale-server \
--restart unless-stopped \
--volume ./nightingale-server:/config \
--volume ./savedata:/config/gamefiles/NWX/Saved \
--env MAXPLAYERS=4 \
--env PGID=1000 \
--env PUID=1000 \
--env CONNECTIONPASSWORD=\<password\> \
--memory-reservation=4G \
--memory 8G \
--publish 7777:7777/tcp \
--publish 7777:7777/udp \
fireblade004/nightingale-server:latest
Explanation of the command
  • --detach -> Starts the container detached from your terminal
    If you want to see the logs replace it with --sig-proxy=false
  • --name -> Gives the container a unqiue name
  • --hostname -> Changes the hostname of the container
  • --restart unless-stopped -> Automatically restarts the container unless the container was manually stopped
  • --volume -> Binds the Nightingale config folder to the folder you specified Allows you to easily access your savegames
  • For the environment (--env) variables please see here⁠
  • NOTE: The CONNECTIONPASSWORD variable is optional, but strongly recommended, as omitting it makes the server open for anyone
  • --memory-reservation=4G -> Reserves 4GB RAM from the host for the container's use
  • --memory 8G -> Restricts the container to 8GB RAM
  • --publish -> Specifies the ports that the container exposes
⁠Docker Compose

If you're using Docker Compose⁠:

services:
  nightingale-server:
    container_name: 'nightingale-server'
    hostname: 'nightingale-server'
    image: 'fireblade004/nightingale-server:latest'
    ports:
      - '7777:7777/tcp'
      - '7777:7777/udp'
    volumes:
      - './nightingale-server:/config'
      - './savedata:/config/gamefiles/NWX/Saved'
    environment:
      - MAXPLAYERS=4
      - PGID=1000
      - PUID=1000
      - CONNECTIONPASSWORD=<password>
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 8G
        reservations:
          memory: 4G
⁠Updating

The game automatically updates when the container is started or restarted (unless you set SKIPUPDATE=true).

To update the container image itself:

⁠Docker Run
docker pull fireblade004/nightingale-server:latest
docker stop nightingale-server
docker rm nightingale-server
docker run ...
⁠Docker Compose
docker compose pull
docker compose up -d

⁠Environment Variables

ParameterDefaultFunction
DEBUGfalsefor debugging the server
CONNECTIONPASSWORDset the password for connecting to the server
ADMINPASSWORDset the password for admin access to the server
STARTINGDIFFICULTYeasy, medium, hard, extremeset the starting difficulty of the realm in use
ENABLECHEATSfalseenable cheats on the server
LOGfalseset true to disable Nightingale log pruning
MAXPLAYERS4set the player limit for your server
MULTIHOME::set the server's listening interface (usually not needed)
PGID1000set the group ID of the user the server will run as
PUID1000set the user ID of the user the server will run as
SERVERGAMEPORT7777set the game's server port
SKIPUPDATEfalseavoid updating the game on container start/restart
TIMEOUT30set client timeout (in seconds)

⁠Running as Non-Root User

By default, the container runs with root privileges but executes Nightingale under 1000:1000. If your host's user and group IDs are 1000:1000, you can run the entire container as non-root using Docker's --user directive. For different user/group IDs, you'll need to clone and rebuild the image with your specific UID/GID:

⁠Building Non-Root Image
  1. Clone the repository:
git clone https://github.com/fireblade004/nightingale-server.git
  1. Create a docker-compose.yml file with your desired UID/GID as build args (note that the PUID and PGID environment variables will no longer be needed):
services:
  nightingale-server:
    container_name: 'nightingale-server'
    hostname: 'nightingale-server'
    build:
      context: .
      args:
        UID: 1001  # Your desired UID
        GID: 1001  # Your desired GID
    user: "1001:1001"  # Must match UID:GID above
    ports:
      - '7777:7777/tcp'
      - '7777:7777/udp'
    volumes:
      - './nightingale-server:/config'
      - './savedata:/config/gamefiles/NWX/Saved'
    environment:
      - MAXPLAYERS=4
      - STEAMBETA=false
    restart: unless-stopped
    deploy:
      resources:
        limits:
          memory: 8G
        reservations:
          memory: 4G
  1. Build and run the container:
docker compose up -d

⁠Known Issues

  • The container is run as root by default. You can provide your own user and group using Docker's --user directive; however, if your proposed user and group aren't 1000:1000, you'll need to rebuild the image (as outlined above).

Tag summary

Content type

Image

Digest

sha256:53fb0dd48…

Size

298.3 MB

Last updated

12 months ago

docker pull fireblade004/nightingale-server