server.ci.Dockerfile
1 FROM node:24.14.0-alpine AS build 2 3 RUN mkdir -p /opt/lineage2ts 4 WORKDIR /opt/lineage2ts 5 6 COPY game-server game-server 7 COPY login-server login-server 8 COPY package.json package.json 9 COPY package-lock.json package-lock.json 10 COPY LICENSE LICENSE 11 COPY Readme.md Readme.md 12 COPY package/cleanNpmModules.sh cleanNpmModules.sh 13 14 # Assumption is for compiled JS files to already exist inside 7z archives from previous CI stages 15 COPY login-server-dist.7z login-server-dist.7z 16 COPY game-server-dist.7z game-server-dist.7z 17 18 RUN apk add python3 && ln -sf python3 /usr/bin/python 19 RUN apk add py3-pip 20 RUN apk add build-base 21 RUN apk add 7zip 22 23 # Required for pulling any git or https referenced modules in package.json 24 RUN apk add curl 25 RUN apk add git 26 27 WORKDIR /opt/lineage2ts 28 RUN cd game-server && 7z x ../game-server-dist.7z -y > ../null && rm -rf source && rm -f null 29 RUN cd login-server && 7z x ../login-server-dist.7z -y > ../null && rm -rf source && rm -f null 30 31 RUN rm -rf node_modules 32 RUN npm ci --omit=dev --workspace=login-server --workspace=game-server 33 34 RUN chmod +x cleanNpmModules.sh && sh cleanNpmModules.sh 35 36 RUN 7z a node_modules.7z node_modules 37 38 FROM node:24.14.0-alpine 39 40 RUN mkdir -p /opt/lineage2ts/game-server && mkdir -p /opt/lineage2ts/login-server 41 WORKDIR /opt/lineage2ts 42 43 COPY --from=build /opt/lineage2ts/game-server /opt/lineage2ts/game-server 44 COPY --from=build /opt/lineage2ts/login-server /opt/lineage2ts/login-server 45 COPY --from=build /opt/lineage2ts/node_modules.7z /opt/lineage2ts/node_modules.7z 46 47 # assets should already be present for us to copy from previous CI stages 48 COPY login.database /opt/lineage2ts/login-server/login.database 49 COPY game.database /opt/lineage2ts/game-server/game.database 50 COPY datapack.7z /opt/lineage2ts/game-server/datapack.7z 51 COPY geopack.7z /opt/lineage2ts/game-server/geopack.7z 52 53 COPY --from=build /opt/lineage2ts/package.json /opt/lineage2ts/package.json 54 COPY --from=build /opt/lineage2ts/package-lock.json /opt/lineage2ts/package-lock.json 55 COPY --from=build /opt/lineage2ts/LICENSE /opt/lineage2ts/LICENSE 56 COPY --from=build /opt/lineage2ts/Readme.md /opt/lineage2ts/Readme.md 57 58 COPY docker/server-entry.sh server-entry.sh 59 RUN chmod +x server-entry.sh 60 61 RUN apk add 7zip 62 63 LABEL name="Lineage2TS Game/Login servers" maintainer="MrTREX" version="latest" website="https://gitlab.com/MrTREX/lineage2ts" 64 65 EXPOSE 7777 2106 9999 9998 66 67 # Please note that login server variables are prefixed via: LS.<config>.<property> 68 # Please note that game server variables are prefixed via: GS.<config>.<property> 69 ENV GS.server.ExternalServerIP=127.0.0.1 70 ENV GS.server.ProxyIntegrationEnabled=False 71 72 ARG BUILD_HASH 73 ARG BUILD_INFO 74 75 ENV BUILD_HASH=$BUILD_HASH 76 ENV BUILD_INFO=$BUILD_INFO 77 78 # Pass Nodejs runtime parameters for login server via LS_NODE_OPTIONS 79 # ENV LS_NODE_OPTIONS=--expose-gc 80 81 # Pass Nodejs runtime parameters for game server via GS_NODE_OPTIONS 82 ENV GS_NODE_OPTIONS="--max_old_space_size=4096" 83 84 VOLUME ["/opt/lineage2ts/login-server", "/opt/lineage2ts/game-server"] 85 ENV NODE_ENV=production 86 87 CMD [ "/bin/sh", "server-entry.sh" ]