Compare commits
7
Commits
main
...
unraid-template
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
596555bea6 | ||
|
|
0cabb5014e | ||
|
|
b57d5fe442 | ||
|
|
de38f43bb2 | ||
|
|
152f119d4e | ||
|
|
126ad652f2 | ||
|
|
ef1eed50b8 |
No files matched your search
@@ -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"]
|
||||
@@ -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
|
||||
Reference in new issue
Block a user