88 lines
1.9 KiB
Docker
88 lines
1.9 KiB
Docker
# syntax=docker/dockerfile:1
|
|
|
|
ARG BASE_IMAGE=ubuntu:24.04
|
|
FROM ${BASE_IMAGE} AS builder
|
|
|
|
RUN apt update && apt install -y --no-install-recommends \
|
|
python3 \
|
|
git \
|
|
ca-certificates \
|
|
sudo \
|
|
make \
|
|
cmake \
|
|
g++ \
|
|
libasio-dev \
|
|
zlib1g-dev
|
|
|
|
# ---
|
|
|
|
FROM builder AS deps
|
|
|
|
ARG PHOSG_TARGET=master
|
|
ARG RESOURCE_DASM_TARGET=master
|
|
ARG BUILD_RESOURCE_DASM=true
|
|
|
|
RUN git clone --depth 1 -b ${PHOSG_TARGET} https://github.com/fuzziqersoftware/phosg.git && \
|
|
cd phosg && \
|
|
cmake . && \
|
|
make -j$(nproc) && \
|
|
sudo make install
|
|
|
|
RUN \
|
|
if [ "$BUILD_RESOURCE_DASM" = "true" ] ; then \
|
|
git clone --depth 1 -b ${RESOURCE_DASM_TARGET} https://github.com/fuzziqersoftware/resource_dasm.git && \
|
|
cd resource_dasm && \
|
|
cmake . && \
|
|
make -j$(nproc) && \
|
|
sudo make install \
|
|
; fi
|
|
|
|
# ---
|
|
|
|
FROM builder AS newserv
|
|
|
|
ARG BUILD_TYPE=Release
|
|
ARG BUILD_STRIP=true
|
|
|
|
WORKDIR /usr/src/newserv
|
|
COPY . .
|
|
COPY --from=deps /usr/local /usr/local
|
|
|
|
RUN cmake -B $PWD/build -DCMAKE_BUILD_TYPE=${BUILD_TYPE} && \
|
|
cmake --build $PWD/build --config ${BUILD_TYPE} -j $(nproc) && \
|
|
sudo make -C build install
|
|
|
|
RUN \
|
|
if [ "$BUILD_STRIP" = "true" ] ; then \
|
|
strip /usr/local/lib/*.a && \
|
|
strip /usr/local/bin/* \
|
|
; fi
|
|
|
|
# ---
|
|
|
|
FROM ${BASE_IMAGE} AS data
|
|
|
|
WORKDIR /newserv
|
|
COPY system/ ./system
|
|
RUN cp -f system/config.example.json system/config.json && \
|
|
sed -i 's/"ExternalAddress": "[^"]*"/"ExternalAddress": "0.0.0.0"/' system/config.json
|
|
|
|
# ---
|
|
|
|
FROM ${BASE_IMAGE} AS final
|
|
|
|
RUN apt update && apt install -y --no-install-recommends \
|
|
libasio-dev \
|
|
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/*
|
|
|
|
WORKDIR /newserv
|
|
COPY --from=data /newserv .
|
|
COPY --from=newserv /usr/local /usr/local
|
|
|
|
USER root
|
|
VOLUME /newserv/system
|
|
|
|
# does not allow receiving any signal at the moment, so force kill the app
|
|
STOPSIGNAL SIGKILL
|
|
CMD ["newserv"]
|