Dokploy

NodeLink

NodeLink is a lightweight Lavalink-compatible audio server built in Node.js for Discord music bots and real-time audio systems.

NodeLink logo

Configuration

version: "3.8"

services:
  nodelink:
    image: performanc/nodelink:3.8.0
    restart: unless-stopped
    expose:
      - "2333"
    environment:
      NODELINK_SERVER_HOST: 0.0.0.0
      NODELINK_SERVER_PORT: "2333"
      NODELINK_SERVER_PASSWORD: ${NODELINK_SERVER_PASSWORD}
      NODELINK_LOGGING_LEVEL: ${NODELINK_LOGGING_LEVEL}
      NODELINK_LOGGING_FILE_ENABLED: ${NODELINK_LOGGING_FILE_ENABLED}
      NODELINK_SOURCES_LOCAL_ENABLED: ${NODELINK_SOURCES_LOCAL_ENABLED}
      NODELINK_SOURCES_LOCAL_BASEPATH: /app/local-music/
      NODELINK_METRICS_ENABLED: ${NODELINK_METRICS_ENABLED}
    volumes:
      - nodelink-cache:/app/.cache
      - nodelink-local-music:/app/local-music
      - nodelink-logs:/app/logs
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "node -e \"fetch('http://127.0.0.1:2333/version',{headers:{authorization:process.env.NODELINK_SERVER_PASSWORD||''}}).then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))\"",
        ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

volumes:
  nodelink-cache:
  nodelink-local-music:
  nodelink-logs:
[variables]
main_domain = "${domain}"
server_password = "${password:32}"
logging_level = "info"
file_logging_enabled = "false"
local_source_enabled = "false"
metrics_enabled = "false"

[[config.domains]]
serviceName = "nodelink"
port = 2333
host = "${main_domain}"
path = "/"

[[config.mounts]]
filePath = "README.md"
content = """# NodeLink

This template deploys NodeLink, a Lavalink-compatible audio server for Discord music bots and real-time audio systems.

## Connection

Use the deployed domain as your NodeLink/Lavalink server URL:

- Host: `https://${main_domain}`
- Port: `443` when connecting through the Dokploy domain
- Password: the generated `server_password` value

NodeLink exposes the `/version`, `/v4/stats`, and Lavalink-compatible WebSocket/API endpoints through the same domain.

## Local Music

The template creates a persistent `nodelink-local-music` volume mounted at `/app/local-music`. Set `local_source_enabled` to `true` before deployment if you want NodeLink to resolve `file:///app/local-music/...` tracks.

## Metrics

Set `metrics_enabled` to `true` to expose Prometheus metrics at `/v4/metrics`. Keep this disabled unless your deployment is protected and monitored.
"""

[config.env]
NODELINK_SERVER_PASSWORD = "${server_password}"
NODELINK_LOGGING_LEVEL = "${logging_level}"
NODELINK_LOGGING_FILE_ENABLED = "${file_logging_enabled}"
NODELINK_SOURCES_LOCAL_ENABLED = "${local_source_enabled}"
NODELINK_METRICS_ENABLED = "${metrics_enabled}"

Base64

To import this template in Dokploy: create a Compose service → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcblxuc2VydmljZXM6XG4gIG5vZGVsaW5rOlxuICAgIGltYWdlOiBwZXJmb3JtYW5jL25vZGVsaW5rOjMuOC4wXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBleHBvc2U6XG4gICAgICAtIFwiMjMzM1wiXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICBOT0RFTElOS19TRVJWRVJfSE9TVDogMC4wLjAuMFxuICAgICAgTk9ERUxJTktfU0VSVkVSX1BPUlQ6IFwiMjMzM1wiXG4gICAgICBOT0RFTElOS19TRVJWRVJfUEFTU1dPUkQ6ICR7Tk9ERUxJTktfU0VSVkVSX1BBU1NXT1JEfVxuICAgICAgTk9ERUxJTktfTE9HR0lOR19MRVZFTDogJHtOT0RFTElOS19MT0dHSU5HX0xFVkVMfVxuICAgICAgTk9ERUxJTktfTE9HR0lOR19GSUxFX0VOQUJMRUQ6ICR7Tk9ERUxJTktfTE9HR0lOR19GSUxFX0VOQUJMRUR9XG4gICAgICBOT0RFTElOS19TT1VSQ0VTX0xPQ0FMX0VOQUJMRUQ6ICR7Tk9ERUxJTktfU09VUkNFU19MT0NBTF9FTkFCTEVEfVxuICAgICAgTk9ERUxJTktfU09VUkNFU19MT0NBTF9CQVNFUEFUSDogL2FwcC9sb2NhbC1tdXNpYy9cbiAgICAgIE5PREVMSU5LX01FVFJJQ1NfRU5BQkxFRDogJHtOT0RFTElOS19NRVRSSUNTX0VOQUJMRUR9XG4gICAgdm9sdW1lczpcbiAgICAgIC0gbm9kZWxpbmstY2FjaGU6L2FwcC8uY2FjaGVcbiAgICAgIC0gbm9kZWxpbmstbG9jYWwtbXVzaWM6L2FwcC9sb2NhbC1tdXNpY1xuICAgICAgLSBub2RlbGluay1sb2dzOi9hcHAvbG9nc1xuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDpcbiAgICAgICAgW1xuICAgICAgICAgIFwiQ01ELVNIRUxMXCIsXG4gICAgICAgICAgXCJub2RlIC1lIFxcXCJmZXRjaCgnaHR0cDovLzEyNy4wLjAuMToyMzMzL3ZlcnNpb24nLHtoZWFkZXJzOnthdXRob3JpemF0aW9uOnByb2Nlc3MuZW52Lk5PREVMSU5LX1NFUlZFUl9QQVNTV09SRHx8Jyd9fSkudGhlbihyPT5wcm9jZXNzLmV4aXQoci5vaz8wOjEpKS5jYXRjaCgoKT0+cHJvY2Vzcy5leGl0KDEpKVxcXCJcIixcbiAgICAgICAgXVxuICAgICAgaW50ZXJ2YWw6IDMwc1xuICAgICAgdGltZW91dDogMTBzXG4gICAgICByZXRyaWVzOiAzXG4gICAgICBzdGFydF9wZXJpb2Q6IDQwc1xuXG52b2x1bWVzOlxuICBub2RlbGluay1jYWNoZTpcbiAgbm9kZWxpbmstbG9jYWwtbXVzaWM6XG4gIG5vZGVsaW5rLWxvZ3M6XG4iLAogICJjb25maWciOiAiW3ZhcmlhYmxlc11cbm1haW5fZG9tYWluID0gXCIke2RvbWFpbn1cIlxuc2VydmVyX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkOjMyfVwiXG5sb2dnaW5nX2xldmVsID0gXCJpbmZvXCJcbmZpbGVfbG9nZ2luZ19lbmFibGVkID0gXCJmYWxzZVwiXG5sb2NhbF9zb3VyY2VfZW5hYmxlZCA9IFwiZmFsc2VcIlxubWV0cmljc19lbmFibGVkID0gXCJmYWxzZVwiXG5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcIm5vZGVsaW5rXCJcbnBvcnQgPSAyMzMzXG5ob3N0ID0gXCIke21haW5fZG9tYWlufVwiXG5wYXRoID0gXCIvXCJcblxuW1tjb25maWcubW91bnRzXV1cbmZpbGVQYXRoID0gXCJSRUFETUUubWRcIlxuY29udGVudCA9IFwiXCJcIiMgTm9kZUxpbmtcblxuVGhpcyB0ZW1wbGF0ZSBkZXBsb3lzIE5vZGVMaW5rLCBhIExhdmFsaW5rLWNvbXBhdGlibGUgYXVkaW8gc2VydmVyIGZvciBEaXNjb3JkIG11c2ljIGJvdHMgYW5kIHJlYWwtdGltZSBhdWRpbyBzeXN0ZW1zLlxuXG4jIyBDb25uZWN0aW9uXG5cblVzZSB0aGUgZGVwbG95ZWQgZG9tYWluIGFzIHlvdXIgTm9kZUxpbmsvTGF2YWxpbmsgc2VydmVyIFVSTDpcblxuLSBIb3N0OiBgaHR0cHM6Ly8ke21haW5fZG9tYWlufWBcbi0gUG9ydDogYDQ0M2Agd2hlbiBjb25uZWN0aW5nIHRocm91Z2ggdGhlIERva3Bsb3kgZG9tYWluXG4tIFBhc3N3b3JkOiB0aGUgZ2VuZXJhdGVkIGBzZXJ2ZXJfcGFzc3dvcmRgIHZhbHVlXG5cbk5vZGVMaW5rIGV4cG9zZXMgdGhlIGAvdmVyc2lvbmAsIGAvdjQvc3RhdHNgLCBhbmQgTGF2YWxpbmstY29tcGF0aWJsZSBXZWJTb2NrZXQvQVBJIGVuZHBvaW50cyB0aHJvdWdoIHRoZSBzYW1lIGRvbWFpbi5cblxuIyMgTG9jYWwgTXVzaWNcblxuVGhlIHRlbXBsYXRlIGNyZWF0ZXMgYSBwZXJzaXN0ZW50IGBub2RlbGluay1sb2NhbC1tdXNpY2Agdm9sdW1lIG1vdW50ZWQgYXQgYC9hcHAvbG9jYWwtbXVzaWNgLiBTZXQgYGxvY2FsX3NvdXJjZV9lbmFibGVkYCB0byBgdHJ1ZWAgYmVmb3JlIGRlcGxveW1lbnQgaWYgeW91IHdhbnQgTm9kZUxpbmsgdG8gcmVzb2x2ZSBgZmlsZTovLy9hcHAvbG9jYWwtbXVzaWMvLi4uYCB0cmFja3MuXG5cbiMjIE1ldHJpY3NcblxuU2V0IGBtZXRyaWNzX2VuYWJsZWRgIHRvIGB0cnVlYCB0byBleHBvc2UgUHJvbWV0aGV1cyBtZXRyaWNzIGF0IGAvdjQvbWV0cmljc2AuIEtlZXAgdGhpcyBkaXNhYmxlZCB1bmxlc3MgeW91ciBkZXBsb3ltZW50IGlzIHByb3RlY3RlZCBhbmQgbW9uaXRvcmVkLlxuXCJcIlwiXG5cbltjb25maWcuZW52XVxuTk9ERUxJTktfU0VSVkVSX1BBU1NXT1JEID0gXCIke3NlcnZlcl9wYXNzd29yZH1cIlxuTk9ERUxJTktfTE9HR0lOR19MRVZFTCA9IFwiJHtsb2dnaW5nX2xldmVsfVwiXG5OT0RFTElOS19MT0dHSU5HX0ZJTEVfRU5BQkxFRCA9IFwiJHtmaWxlX2xvZ2dpbmdfZW5hYmxlZH1cIlxuTk9ERUxJTktfU09VUkNFU19MT0NBTF9FTkFCTEVEID0gXCIke2xvY2FsX3NvdXJjZV9lbmFibGVkfVwiXG5OT0RFTElOS19NRVRSSUNTX0VOQUJMRUQgPSBcIiR7bWV0cmljc19lbmFibGVkfVwiXG4iCn0=

Tags

audio, discord, lavalink, music


Version: 3.8.0

On this page