Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge to main #225

Merged
merged 17 commits into from
Dec 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,13 @@ WEBSERVICES_PASSWORD=

# Logging
LOG_LEVEL=3

# Discord logging
DISCORD_LOG_ENABLED=YES
DISCORD_LOG_LEVEL=2
DISCORD_WEBHOOK_URL=
DISCORD_EMBED_IMAGES=
DISCORD_EMBED_TITLE=
DISCORD_EMBED_TITLE_URL=
DISCORD_EMBED_TITLE_ICON_URL=
DISCORD_TAGGED_USERS=
36 changes: 36 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Creates a runnable environment with a dedicated server and trakman
FROM node:lts-alpine
# setup directory
RUN mkdir -p /app/server
WORKDIR /app/server
# copy useful trakman files and entrypoint command
COPY ./config ./trakmanbk/config
COPY ./plugins ./trakmanbk/plugins
COPY ./src ./trakmanbk/src
COPY ./Plugins.ts ./package.json ./tsconfig.json ./CHANGELOG.md ./trakmanbk/
COPY --chmod=0755 ./docker_run.sh ./docker_run.sh
# download dedicated server and remove unnecessary files
RUN wget -O serv.zip http://files2.trackmaniaforever.com/TrackmaniaServer_2011-02-21.zip && \
unzip serv.zip && \
rm -r serv.zip CommandLine.html ListCallbacks.html ListMethods.html \
Readme_Dedicated.html RemoteControlExamples TrackmaniaServer.exe manialink_dedicatedserver.txt
# get trakman dependencies and build
WORKDIR /app/server/trakmanbk
RUN npm i typescript@latest && \
npm run build
WORKDIR /app/server
# backup important files to prevent them being deleted by mounting the volume
# and install xml editing tool for server config
RUN mv GameData/Config/dedicated_cfg.txt dedicated_cfg.txt.bk && \
mkdir -p Tracksbk/MatchSettings && \
mkdir -p Tracksbk/Campaigns/Nations && \
mv GameData/Tracks/MatchSettings/Nations/NationsBlue.txt Tracksbk/MatchSettings/MatchSettings.txt && \
mv GameData/Tracks/Campaigns/Nations/Blue Tracksbk/Campaigns/Nations/ && \
apk add xmlstarlet
# expose volumes
VOLUME /app/server/GameData/Config
VOLUME /app/server/GameData/Tracks
VOLUME /app/server/trakman
VOLUME /root/.pm2/logs

CMD /app/server/docker_run.sh
2 changes: 1 addition & 1 deletion config/Config.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ export default {
* Used in nickname to login translation in commands. 0.15 is default value */
nicknameToLoginMinimumDifferenceBetweenMatches: 0.15,
/** Current controller version */
version: "1.4.1",
version: "1.4.2",
/** Controller repository link */
repo: "github.com/lythx/trakman",
}
79 changes: 79 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
version: "3.0"

services:
trakman:
image: trakman
container_name: trakman-server
restart: unless-stopped
volumes:
- ./tmf-config:/app/server/GameData/Config
- ./tracks:/app/server/GameData/Tracks
- ./trakman:/app/server/trakman
- ./logs:/root/.pm2/logs
environment:
# Dedicated server config
SERVER_IP: 127.0.0.1
SERVER_PORT: 5000
SUPER_ADMIN_NAME: "SuperAdmin"
SUPER_ADMIN_PASSWORD: ""
SERVER_ACC_LOGIN: ""
SERVER_ACC_PASSWORD: ""
SERVER_ACC_KEY: ""
SERVER_NAME: "Docker Trakman Server"
SERVER_PASSWORD: ""
SERVER_NET_PORT: 2350
SERVER_P2P_PORT: 3450
# Database config - preconfigured for included database
DB_USER: "trakman"
DB_PASSWORD: "trakman"
DB_NAME: "trakman"
DB_IP: "trakman-db"
DB_PORT: 5432
# Controller config
OWNER_LOGIN: ""
# Dedimania
# This is either server password or playerpage community code
DEDIMANIA_PASSWORD: ""
# Freezone
# Received on 'freezone:servers' manialink in-game
FREEZONE_PASSWORD: ""
# Webservices
WEBSERVICES_LOGIN: ""
WEBSERVICES_PASSWORD: ""
# Logging
LOG_LEVEL: 3
DISCORD_LOG_ENABLED: "NO"
DISCORD_LOG_LEVEL: 2
DISCORD_WEBHOOK_URL: ""
DISCORD_EMBED_IMAGES: ""
DISCORD_EMBED_TITLE: ""
DISCORD_EMBED_TITLE_URL: ""
DISCORD_EMBED_TITLE_ICON_URL: ""
DISCORD_TAGGED_USERS: ""
ports: # Don't forget to change the ports
# if you already have another server running
# **The ports MUST match** because of the way the server works
- "2350:2350/tcp"
- "2350:2350/udp"
- "3450:3450/tcp"
- "3450:3450/udp"
depends_on:
trakman-db:
condition: service_started

# Remove everything below if you already have a database
trakman-db:
image: postgres:16-alpine
restart: unless-stopped
volumes:
- ./db:/data/postgres
environment:
POSTGRES_USER: "trakman"
POSTGRES_PASSWORD: "trakman"
PGDATA: /data/postgres
POSTGRES_DB: "trakman"
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U trakman -d postgres" ]
interval: 30s
timeout: 10s
retries: 5
45 changes: 45 additions & 0 deletions docker_run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/bin/sh
# Do **NOT** run this script locally,
# it is meant to only be used in the provided docker environment.

# create and copy dedicated config
if find /app/server/GameData/Config -mindepth 1 -maxdepth 1 | read; then
echo 'Server config exists, skipping initial setup.'
rm dedicated_cfg.txt.bk
else
echo 'Setting up server...'
# cool and ugly xml replacement
xml ed -L -u "/dedicated/authorization_levels/level[name='SuperAdmin']/password" -v "$SUPER_ADMIN_PASSWORD" dedicated_cfg.txt.bk
xml ed -L -u "/dedicated/authorization_levels/level[name='SuperAdmin']/name" -v "$SUPER_ADMIN_NAME" dedicated_cfg.txt.bk
ADMIN_PASS=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c"${1:-32}";echo;)
xml ed -L -u "/dedicated/authorization_levels/level[name='Admin']/password" -v "$ADMIN_PASS" dedicated_cfg.txt.bk
xml ed -L -u "/dedicated/masterserver_account/login" -v "$SERVER_ACC_LOGIN" dedicated_cfg.txt.bk
xml ed -L -u "/dedicated/masterserver_account/password" -v "$SERVER_ACC_PASSWORD" dedicated_cfg.txt.bk
xml ed -L -u "/dedicated/masterserver_account/validation_key" -v "$SERVER_ACC_KEY" dedicated_cfg.txt.bk
xml ed -L -u "/dedicated/server_options/name" -v "$SERVER_NAME" dedicated_cfg.txt.bk
xml ed -L -u "/dedicated/server_options/password" -v "$SERVER_PASSWORD" dedicated_cfg.txt.bk
xml ed -L -u "/dedicated/system_config/server_port" -v "$SERVER_NET_PORT" dedicated_cfg.txt.bk
xml ed -L -u "/dedicated/system_config/server_p2p_port" -v "$SERVER_P2P_PORT" dedicated_cfg.txt.bk
xml ed -L -u "/dedicated/system_config/xmlrpc_port" -v "$SERVER_PORT" dedicated_cfg.txt.bk
mv /app/server/dedicated_cfg.txt.bk /app/server/GameData/Config/dedicated_cfg.txt
fi
# copy over default tracks
if find /app/server/GameData/Tracks -mindepth 1 -maxdepth 1 | read; then
echo 'Tracks exist, skipping initial setup.'
rm -r Tracksbk
else
echo 'Setting up tracks...'
mv /app/server/Tracksbk/* /app/server/GameData/Tracks/
fi
# copy over trakman directory
if find /app/server/trakman -mindepth 1 -maxdepth 1 | read; then
echo 'Trakman exists, skipping initial setup.'
rm -r trakmanbk
else
echo 'Setting up trakman...'
mv /app/server/trakmanbk/* /app/server/trakman/
fi
# build and actually run everything
/app/server/TrackmaniaServer /game_settings=MatchSettings/MatchSettings.txt /dedicated_cfg=dedicated_cfg.txt
npm run build --prefix /app/server/trakman
npm run daemon --prefix /app/server/trakman
Loading