Compare commits

...
7 Commits
2 changed files with 150 additions and 0 deletions

No files matched your search

+68
View File
@@ -0,0 +1,68 @@
ARG TAG=latest
FROM arthichaud/meelo-front:$TAG AS front
FROM arthichaud/meelo-matcher:$TAG AS matcher
FROM arthichaud/meelo-server:$TAG AS server
FROM arthichaud/meelo-scanner:$TAG AS scanner
FROM --platform=$BUILDPLATFORM alpine:3.23 AS base
ARG TARGETARCH
RUN apk update && apk add git build-base
FROM base AS meilisearch_builder
ENV MEILI_VERSION=v1.53.2
ENV MEILI_REPO=https://github.com/meilisearch/meilisearch
RUN apk add rustup
RUN rustup-init -y
ENV PATH=/root/.cargo/bin/:$PATH
RUN rustup update && rustup default stable
RUN git clone --branch "$MEILI_VERSION" --single-branch "$MEILI_REPO" /tmp/meilisearch
WORKDIR /tmp/meilisearch
RUN case "$TARGETARCH" in \
amd64) echo "amd64" > /tmp/rust-target ;; \
arm64) echo "aarch64" > /tmp/rust-target ;; \
*) echo "Unsupported architecture: $TARGETARCH" >&2; exit 1 ;; \
esac
RUN TARGET="$(cat /tmp/rust-target)-unknown-linux-musl" \
&& rustup target add "$TARGET" \
&& cargo build --release --target="$TARGET" \
&& mkdir /out && mv ./target/$TARGET/release/meilisearch /out/meilisearch
FROM base AS runner
RUN apk add openssl postgresql rabbitmq-server nodejs nginx ffmpeg chromaprint bash
RUN addgroup -S meelo && adduser -S meelo -G meelo
RUN mkdir /app && chown -R meelo:meelo /app
COPY ./nginx.conf.template /etc/nginx/templates/meelo.conf.template
COPY --from=meilisearch_builder /out/meilisearch /usr/bin/meilisearch
RUN meilisearch --version > /dev/null
ENV PGDATA=/var/lib/postgresql/data
RUN mkdir -p "$PGDATA" && chown -R meelo:meelo "$(dirname "$PGDATA")"
RUN mkdir -p /run/postgresql && chown -R meelo:meelo /run/postgresql
USER meelo
COPY --from=front --chown=meelo:meelo /app /app/front
COPY --from=server --chown=meelo:meelo /app /app/server
COPY --from=scanner --chown=meelo:meelo /app /app/scanner
COPY --from=scanner --chown=meelo:meelo /usr/local/lib/libopencv*.so.* /usr/local/lib/
COPY --from=matcher --chown=meelo:meelo /app /app/matcher
COPY --from=matcher /usr/local/lib/python3.14 /usr/local/lib/python3.14
COPY --from=matcher /usr/local/lib/libpython* /usr/local/lib/
COPY --from=matcher /usr/local/bin/fastapi /usr/local/bin
COPY --from=matcher /usr/local/bin/pip* /usr/local/bin
COPY --from=matcher /usr/local/bin/python* /usr/local/bin
RUN node --version > /dev/null && fastapi --version > /dev/null
RUN initdb -D "$PGDATA"
COPY --chown=meelo:meelo --chmod=755 ./unraid/start.sh /app/start.sh
ENTRYPOINT ["/app/start.sh"]
+82
View File
@@ -0,0 +1,82 @@
#!/usr/bin/env bash
# NOTE: Partially generated using AI
set -uo pipefail
declare -A pids
declare -A commands
shutdown_requested=false
start() {
local name="$1"
shift
commands["$name"]="$*"
echo "Starting $name: $*"
"$@" &
pids["$name"]=$!
echo "$name started (PID ${pids[$name]})"
}
stop_all() {
shutdown_requested=true
echo "Stopping processes..."
for name in "${!pids[@]}"; do
pid="${pids[$name]}"
if kill -0 "$pid" 2>/dev/null; then
echo "Sending SIGTERM to $name (PID $pid)"
kill -TERM "$pid" 2>/dev/null || true
fi
done
# Give processes a chance to shut down gracefully.
for name in "${!pids[@]}"; do
pid="${pids[$name]}"
wait "$pid" 2>/dev/null || true
done
echo "Shutdown complete."
exit 0
}
trap stop_all SIGTERM SIGINT
declare -A commands
start psql "postgres -D $PGDATA"
start meilisearch "meilisearch --db-path /app/meilisearch/db --dump-dir /app/meilisearch/dump --no-analytics"
# TODO:
# start process_b /usr/local/bin/process-b
# start process_c /usr/local/bin/process-c
while ! $shutdown_requested; do
wait -n "${pids[@]}" 2>/dev/null || true
$shutdown_requested && break
for name in "${!pids[@]}"; do
pid="${pids[$name]}"
if ! kill -0 "$pid" 2>/dev/null; then
echo "$name (PID $pid) exited; restarting..."
wait "$pid" 2>/dev/null || true
unset 'pids[$name]'
# shellcheck disable=SC2086
start "$name" ${commands[$name]}
break
fi
done
done