/ docker / server.ci.Dockerfile
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" ]