From ab3acf1279099e3cfc741ab13a2fc486f5c65a2e Mon Sep 17 00:00:00 2001 From: Luis Pereira Date: Sun, 26 Oct 2025 21:37:33 +0000 Subject: [PATCH] feat: add docker setup for asteroid app --- .dockerignore.asteroid | 8 ++++++ Dockerfile.asteroid | 42 ++++++++++++++++++++++++++++++ docker/docker-compose.asteroid.yml | 14 ++++++++++ docker/radiance-default.conf.lisp | 20 ++++++++++++++ 4 files changed, 84 insertions(+) create mode 100644 .dockerignore.asteroid create mode 100644 Dockerfile.asteroid create mode 100644 docker/docker-compose.asteroid.yml create mode 100644 docker/radiance-default.conf.lisp diff --git a/.dockerignore.asteroid b/.dockerignore.asteroid new file mode 100644 index 0000000..bd27cef --- /dev/null +++ b/.dockerignore.asteroid @@ -0,0 +1,8 @@ +docker/ +music/ +data/ +*.org +docker-compose.yml +Dockerfile* +Makefile +.git/ diff --git a/Dockerfile.asteroid b/Dockerfile.asteroid new file mode 100644 index 0000000..ea970ab --- /dev/null +++ b/Dockerfile.asteroid @@ -0,0 +1,42 @@ +FROM debian:bookworm-slim AS builder + +RUN apt-get update && \ + apt-get install -y curl openssl ca-certificates \ + git make sbcl rlwrap && \ + rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +# Copy asteroid source to container workdir +COPY . . + +# Download Quicklisp installer +RUN curl -O https://beta.quicklisp.org/quicklisp.lisp + +# Installs quicklisp and radiance +RUN sbcl --eval "(load \"quicklisp.lisp\")" \ + --eval "(quicklisp-quickstart:install)" \ + --eval "(ql-dist:install-dist \"http://dist.shirakumo.org/shirakumo.txt\" :prompt nil)" \ + --eval "(ql:quickload :radiance)" + +# Makes the project workdir known as a quicklisp project +RUN mkdir -p $HOME/.config/common-lisp/source-registry.conf.d +RUN echo '(:tree "/app/")' >> "$HOME/.config/common-lisp/source-registry.conf.d/projects.conf" + +# Builds Asteroid binary +RUN make + +# Links binary to path +ENV PATH="$PATH:/app" + +# Adds radiance system configuration file +COPY docker/radiance-default.conf.lisp $HOME/.config/radiance/default/radiance-core/radiance-core.conf.lisp + +# Application +EXPOSE 8080 +# Slynk server +EXPOSE 4009 + +ENV ASTEROID_STREAM_URL=http://localhost:8000 + +CMD [ "asteroid" ] diff --git a/docker/docker-compose.asteroid.yml b/docker/docker-compose.asteroid.yml new file mode 100644 index 0000000..47f6175 --- /dev/null +++ b/docker/docker-compose.asteroid.yml @@ -0,0 +1,14 @@ +services: + asteroid: + build: + context: ../ + dockerfile: Dockerfile.asteroid + image: asteroid/app + container_name: asteroid + environment: + - ASTEROID_STREAM_URL=${ASTEROID_STREAM_URL:-http://localhost:8000} + volumes: + - ${MUSIC_LIBRARY:-../music/library}:/app/music/library:ro + - ${QUEUE_PLAYLIST:-../stream-queue.m3u}:/app/stream-queue.m3u + network_mode: host + restart: unless-stopped diff --git a/docker/radiance-default.conf.lisp b/docker/radiance-default.conf.lisp new file mode 100644 index 0000000..8c97ebe --- /dev/null +++ b/docker/radiance-default.conf.lisp @@ -0,0 +1,20 @@ +; meta (:version 1.0 :package "RADIANCE-CORE") +((:interfaces (:admin . "r-simple-admin") (:auth . "r-simple-auth") + (:ban . "r-simple-ban") (:cache . "r-simple-cache") + (:data-model . "r-simple-model") (:database . "i-lambdalite") + (:relational-database . "i-sqlite") (:logger . "i-verbose") + (:mail . "i-smtp") (:profile . "r-simple-profile") (:rate . "r-simple-rate") + (:server . "i-hunchentoot") (:session . "r-simple-sessions") + (:user . "r-simple-users")) + (:versions + . [hash-table equal ("radiance-core" :|2.2.0|) ("i-hunchentoot" :|1.1.0|) + ("asteroid" :|0.0.0|) ("i-log4cl" :|1.0.0|) ("r-clip" :|1.0.0|) + ("r-data-model" :|1.0.1|) ("i-lambdalite" :|1.0.0|) + ("r-simple-users" :|1.0.1|) + ("r-simple-errors" :|1.0.0|) ("i-verbose" :|1.0.0|) + ("r-simple-auth" :|1.0.0|) ("r-simple-sessions" :|1.0.1|) + ("r-ratify" :|1.0.0|) ("r-simple-rate" :|1.0.0|) + ("r-simple-profile" :|1.0.0|)]) + (:domains "radiance" "localhost") + (:startup :r-simple-errors :r-simple-sessions) (:routes) + (:debugger . :if-swank-connected))