From 4ca4990f89619d32aa848cf67ab6fd858e76a67d Mon Sep 17 00:00:00 2001 From: Sainan <63328889+Sainan@users.noreply.github.com> Date: Thu, 19 Jun 2025 04:23:10 -0700 Subject: [PATCH] chore(docker): use file-based config & precompile code in image (#2202) Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/2202 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com> --- Dockerfile | 50 +++--------------------------------- docker-compose.yml | 61 +++++++------------------------------------- docker-entrypoint.sh | 24 +++-------------- 3 files changed, 17 insertions(+), 118 deletions(-) diff --git a/Dockerfile b/Dockerfile index b5b957e7..ec346634 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,53 +1,11 @@ FROM node:24-alpine3.21 -ENV APP_MONGODB_URL=mongodb://mongodb:27017/openWF -ENV APP_MY_ADDRESS=localhost -ENV APP_HTTP_PORT=80 -ENV APP_HTTPS_PORT=443 -ENV APP_AUTO_CREATE_ACCOUNT=true -ENV APP_SKIP_TUTORIAL=false -ENV APP_SKIP_ALL_DIALOGUE=false -ENV APP_UNLOCK_ALL_SCANS=false -ENV APP_UNLOCK_ALL_MISSIONS=false -ENV APP_INFINITE_CREDITS=false -ENV APP_INFINITE_PLATINUM=false -ENV APP_INFINITE_ENDO=false -ENV APP_INFINITE_REGAL_AYA=false -ENV APP_INFINITE_HELMINTH_MATERIALS=false -ENV APP_CLAIMING_BLUEPRINT_REFUNDS_INGREDIENTS=false -ENV APP_DONT_SUBTRACT_VOIDTRACES=false -ENV APP_DONT_SUBTRACT_CONSUMABLES=false -ENV APP_UNLOCK_ALL_SHIP_FEATURES=false -ENV APP_UNLOCK_ALL_SHIP_DECORATIONS=false -ENV APP_UNLOCK_ALL_FLAVOUR_ITEMS=false -ENV APP_UNLOCK_ALL_SKINS=false -ENV APP_UNLOCK_ALL_CAPTURA_SCENES=false -ENV APP_UNIVERSAL_POLARITY_EVERYWHERE=false -ENV APP_UNLOCK_DOUBLE_CAPACITY_POTATOES_EVERYWHERE=false -ENV APP_UNLOCK_EXILUS_EVERYWHERE=false -ENV APP_UNLOCK_ARCANES_EVERYWHERE=false -ENV APP_NO_DAILY_FOCUS_LIMIT=false -ENV APP_NO_ARGON_CRYSTAL_DECAY=false -ENV APP_NO_MASTERY_RANK_UP_COOLDOWN=false -ENV APP_NO_VENDOR_PURCHASE_LIMITS=true -ENV APP_NO_DEATH_MARKS=false -ENV APP_NO_KIM_COOLDOWNS=false -ENV APP_SYNDICATE_MISSIONS_REPEATABLE=false -ENV APP_INSTANT_FINISH_RIVEN_CHALLENGE=false -ENV APP_INSTANT_RESOURCE_EXTRACTOR_DRONES=false -ENV APP_NO_RESOURCE_EXTRACTOR_DRONES_DAMAGE=false -ENV APP_SKIP_CLAN_KEY_CRAFTING=false -ENV APP_NO_DOJO_ROOM_BUILD_STAGE=false -ENV APP_NO_DECO_BUILD_STAGE=false -ENV APP_FAST_DOJO_ROOM_DESTRUCTION=false -ENV APP_NO_DOJO_RESEARCH_COSTS=false -ENV APP_NO_DOJO_RESEARCH_TIME=false -ENV APP_FAST_CLAN_ASCENSION=false -ENV APP_SPOOF_MASTERY_RANK=-1 - -RUN apk add --no-cache bash sed wget jq +RUN apk add --no-cache bash jq COPY . /app WORKDIR /app +RUN npm i --omit=dev +RUN npm run build + ENTRYPOINT ["/app/docker-entrypoint.sh"] diff --git a/docker-compose.yml b/docker-compose.yml index 544dec95..aa328756 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,62 +1,18 @@ services: spaceninjaserver: - # build: . - image: openwf/spaceninjaserver:latest - environment: - APP_MONGODB_URL: mongodb://openwfagent:spaceninjaserver@mongodb:27017/ - - # Following environment variables are set to default image values. - # Uncomment to edit. - - # APP_MY_ADDRESS: localhost - # APP_HTTP_PORT: 80 - # APP_HTTPS_PORT: 443 - # APP_AUTO_CREATE_ACCOUNT: true - # APP_SKIP_TUTORIAL: false - # APP_SKIP_ALL_DIALOGUE: false - # APP_UNLOCK_ALL_SCANS: false - # APP_UNLOCK_ALL_MISSIONS: false - # APP_INFINITE_CREDITS: false - # APP_INFINITE_PLATINUM: false - # APP_INFINITE_ENDO: false - # APP_INFINITE_REGAL_AYA: false - # APP_INFINITE_HELMINTH_MATERIALS: false - # APP_CLAIMING_BLUEPRINT_REFUNDS_INGREDIENTS: false - # APP_DONT_SUBTRACT_VOIDTRACES: false - # APP_DONT_SUBTRACT_CONSUMABLES: false - # APP_UNLOCK_ALL_SHIP_FEATURES: false - # APP_UNLOCK_ALL_SHIP_DECORATIONS: false - # APP_UNLOCK_ALL_FLAVOUR_ITEMS: false - # APP_UNLOCK_ALL_SKINS: false - # APP_UNLOCK_ALL_CAPTURA_SCENES: false - # APP_UNIVERSAL_POLARITY_EVERYWHERE: false - # APP_UNLOCK_DOUBLE_CAPACITY_POTATOES_EVERYWHERE: false - # APP_UNLOCK_EXILUS_EVERYWHERE: false - # APP_UNLOCK_ARCANES_EVERYWHERE: false - # APP_NO_DAILY_FOCUS_LIMIT: false - # APP_NO_ARGON_CRYSTAL_DECAY: false - # APP_NO_MASTERY_RANK_UP_COOLDOWN: false - # APP_NO_VENDOR_PURCHASE_LIMITS: true - # APP_NO_DEATH_MARKS: false - # APP_NO_KIM_COOLDOWNS: false - # APP_SYNDICATE_MISSIONS_REPEATABLE: false - # APP_INSTANT_FINISH_RIVEN_CHALLENGE: false - # APP_INSTANT_RESOURCE_EXTRACTOR_DRONES: false - # APP_NO_RESOURCE_EXTRACTOR_DRONES_DAMAGE: false - # APP_SKIP_CLAN_KEY_CRAFTING: false - # APP_NO_DOJO_ROOM_BUILD_STAGE: false - # APP_NO_DECO_BUILD_STAGE: false - # APP_FAST_DOJO_ROOM_DESTRUCTION: false - # APP_NO_DOJO_RESEARCH_COSTS: false - # APP_NO_DOJO_RESEARCH_TIME: false - # APP_FAST_CLAN_ASCENSION: false - # APP_SPOOF_MASTERY_RANK: -1 volumes: - - ./docker-data/static:/app/static/data + - ./docker-data/conf:/app/conf + - ./docker-data/static-data:/app/static/data - ./docker-data/logs:/app/logs ports: - 80:80 - 443:443 + + # Normally, the image is fetched from Docker Hub, but you can use the local Dockerfile by swapping the following two fields. + # Works best when using `docker-compose up --force-recreate --build`. + image: openwf/spaceninjaserver:latest + #build: . + depends_on: - mongodb mongodb: @@ -66,3 +22,4 @@ services: MONGO_INITDB_ROOT_PASSWORD: spaceninjaserver volumes: - ./docker-data/database:/data/db + command: mongod --quiet --logpath /dev/null diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 13e70c33..457173d9 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,24 +1,8 @@ #!/bin/bash set -e -# Set up the configuration file using environment variables. -echo '{ - "logger": { - "files": true, - "level": "trace", - "__valid_levels": "fatal, error, warn, info, http, debug, trace" - } -} -' > config.json +if [ ! -f conf/config.json ]; then + jq --arg value "mongodb://openwfagent:spaceninjaserver@mongodb:27017/" '.mongodbUrl = $value' /app/config.json.example > /app/conf/config.json +fi -for config in $(env | grep "APP_") -do - var=$(echo "${config}" | tr '[:upper:]' '[:lower:]' | sed 's/app_//g' | sed -E 's/_([a-z])/\U\1/g' | sed 's/=.*//g') - val=$(echo "${config}" | sed 's/.*=//g') - jq --arg variable "$var" --arg value "$val" '.[$variable] += try [$value|fromjson][] catch $value' config.json > config.tmp - mv config.tmp config.json -done - -npm i --omit=dev -npm run build -exec npm run start +exec npm run start conf/config.json