FROM ubuntu:22.04 AS builder # Set non-interactive mode ENV DEBIAN_FRONTEND=noninteractive # Install build dependencies RUN apt-get update && \ apt-get install -y --no-install-recommends \ ca-certificates \ gnupg \ software-properties-common \ git \ curl \ unzip \ build-essential # Add xmake repository and install xmake RUN add-apt-repository -y ppa:xmake-io/xmake && \ apt-get update && \ apt-get install -y --no-install-recommends xmake && \ xmake --version --root # Clean up to reduce image size RUN apt-get clean && \ rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* WORKDIR /src COPY . . # Build and copy only the binary, clean up build artifacts RUN xmake b -vy --root crossdesk_server && \ mkdir -p /output && \ cp build/linux/x86_64/release/crossdesk_server /output/ && \ rm -rf build .xmake FROM crossdesk/crossdesk-server-base:latest # Generate coturn certificates and set permissions in one layer RUN mkdir -p /opt/turnserver && \ cd /opt/turnserver && \ openssl genrsa -out turn_server_pkey.pem 2048 && \ openssl req -x509 -new -nodes \ -key turn_server_pkey.pem \ -sha256 -days 3650 \ -subj "/C=CN/ST=Beijing/L=Beijing/O=SelfSigned/OU=IT/CN=coturn.local" \ -out turn_server_cert.pem && \ chmod 600 /opt/turnserver/turn_server_pkey.pem # Copy files and set permissions in one layer COPY docker/start.sh /start.sh COPY docker/generate_certs.sh /docker/generate_certs.sh COPY --from=builder /output/crossdesk_server /crossdesk-server/crossdesk_server RUN chmod +x /start.sh /docker/generate_certs.sh /crossdesk-server/crossdesk_server ENTRYPOINT ["/start.sh"]