mirror of
https://gitlab.com/veilid/veilid.git
synced 2025-08-04 04:34:25 -04:00

- Create multi-stage Docker build for veilid-server - Configure container to run as non-root veilid user - Implement proper permissions for all filesystem paths - Add veilid-cli for server management and healthchecks - Configure container volumes for data persistence - Add network port mappings for TCP/UDP communications - Implement healthcheck using veilid-cli nodeid command
90 lines
No EOL
3.8 KiB
Text
90 lines
No EOL
3.8 KiB
Text
FROM docker.io/library/rust:1.81.0-bullseye as builder
|
|
|
|
# Install build dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
build-essential \
|
|
libssl-dev \
|
|
pkg-config \
|
|
cmake \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Set up working directory and copy everything
|
|
WORKDIR /veilid
|
|
COPY . .
|
|
|
|
# Build veilid-server and veilid-cli
|
|
RUN cargo build --release --bin veilid-server && \
|
|
cargo build --release --bin veilid-cli
|
|
|
|
# Create a minimal runtime image
|
|
FROM debian:bullseye-slim
|
|
|
|
# Install runtime dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
ca-certificates \
|
|
libssl1.1 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Create veilid user and directories
|
|
RUN groupadd -r veilid && useradd -r -g veilid veilid
|
|
RUN mkdir -p /etc/veilid-server /var/db/veilid-server/protected_store /var/db/veilid-server/table_store /var/db/veilid-server/block_store /var/db/veilid-server/ipc /var/log/veilid /home/veilid/.veilid-cli
|
|
RUN chown -R veilid:veilid /var/db/veilid-server /var/log/veilid /etc/veilid-server /home/veilid/.veilid-cli
|
|
RUN chmod 750 /var/db/veilid-server/protected_store /var/db/veilid-server/table_store /var/db/veilid-server/block_store /var/db/veilid-server/ipc /var/db/veilid-server /var/log/veilid
|
|
|
|
# Copy the compiled binaries from builder stage
|
|
COPY --from=builder /veilid/target/release/veilid-server /usr/bin/
|
|
COPY --from=builder /veilid/target/release/veilid-cli /usr/bin/
|
|
RUN chmod 755 /usr/bin/veilid-server /usr/bin/veilid-cli
|
|
|
|
# Copy the docker configuration file
|
|
COPY docker-config/veilid-server-docker.conf /etc/veilid-server/veilid-server.conf
|
|
|
|
# Set up veilid-cli environment for the veilid user
|
|
RUN echo "client_api:" > /home/veilid/.veilid-cli/config && \
|
|
echo " address: '127.0.0.1:5959'" >> /home/veilid/.veilid-cli/config && \
|
|
chown -R veilid:veilid /home/veilid/.veilid-cli && \
|
|
chmod -R 755 /home/veilid/.veilid-cli
|
|
|
|
# Make sure all necessary directories are writable by the veilid user
|
|
RUN chmod 1777 /tmp && \
|
|
chmod -R 1777 /var/db/veilid-server/ipc && \
|
|
mkdir -p /var/db/veilid-cli && \
|
|
mkdir -p /home/veilid/.veilid-cli && \
|
|
mkdir -p /home/veilid/.config/veilid-cli && \
|
|
mkdir -p /home/veilid/.cache && \
|
|
mkdir -p /home/veilid/.local/share && \
|
|
mkdir -p /var/run/user/$(id -u veilid) && \
|
|
chown -R veilid:veilid /var/db/veilid-cli /home/veilid /var/run/user/$(id -u veilid) && \
|
|
chmod -R 777 /var/db/veilid-cli /home/veilid/.veilid-cli /home/veilid/.config /home/veilid/.cache /home/veilid/.local /var/run/user/$(id -u veilid)
|
|
|
|
# Expose the default ports for veilid
|
|
EXPOSE 5150/tcp 5150/udp 5959/tcp
|
|
|
|
# Add healthcheck using veilid-cli to check server status
|
|
# Using veilid-cli -e to execute the nodeid command and verify output
|
|
# Added a 60 second startup period to allow the server to initialize fully
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
|
CMD HOME=/home/veilid \
|
|
XDG_CONFIG_HOME=/home/veilid/.config \
|
|
XDG_CACHE_HOME=/home/veilid/.cache \
|
|
XDG_DATA_HOME=/home/veilid/.local/share \
|
|
XDG_RUNTIME_DIR=/var/run/user/$(id -u veilid) \
|
|
VEILID_CLI_CONFIG_DIR=/home/veilid/.veilid-cli \
|
|
veilid-cli -e nodeid | grep -q "VLD0:" || exit 1
|
|
|
|
# Create volume mount points for persistent data and configuration
|
|
VOLUME ["/var/db/veilid-server/protected_store", "/var/db/veilid-server/table_store", "/var/db/veilid-server/block_store", "/var/log/veilid", "/etc/veilid-server", "/var/db/veilid-cli"]
|
|
|
|
# Set environment variables for veilid-cli
|
|
ENV HOME=/home/veilid \
|
|
XDG_CONFIG_HOME=/home/veilid/.config \
|
|
XDG_CACHE_HOME=/home/veilid/.cache \
|
|
XDG_DATA_HOME=/home/veilid/.local/share \
|
|
XDG_RUNTIME_DIR=/var/run/user/$(id -u veilid) \
|
|
VEILID_CLI_CONFIG_DIR=/home/veilid/.veilid-cli
|
|
|
|
# Switch to non-root user
|
|
USER veilid
|
|
|
|
# Command to run
|
|
CMD ["veilid-server", "-c", "/etc/veilid-server/veilid-server.conf"] |