67 lines
2.6 KiB
Bash
Executable File
67 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Assemble l'arborescence d'exécution à partir d'un dépôt déjà construit.
|
|
#
|
|
# Le dépôt et l'instance qui tourne n'ont PAS la même forme : le clone contient
|
|
# des sources et un `apps/nextjs/.next/standalone` ; l'instance attend
|
|
# `apps/nextjs/server.js`, `db/migrations/`, `build/better_sqlite3.node` à sa
|
|
# racine. Ce script fait la conversion — les mêmes COPY que le stage `runner`
|
|
# du Dockerfile officiel, d'où vient la disposition de /opt/homarr.
|
|
#
|
|
# Usage : ops/assemble-standalone.sh <destination>
|
|
#
|
|
# Construire d'abord :
|
|
# pnpm turbo build --filter=@homarr/nextjs... --filter=@homarr/cli
|
|
#
|
|
set -euo pipefail
|
|
|
|
DEST="${1:?usage: ops/assemble-standalone.sh <destination>}"
|
|
REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
|
|
cd "$REPO"
|
|
|
|
[ -d apps/nextjs/.next/standalone ] || {
|
|
echo "apps/nextjs/.next/standalone absent — construis d'abord :" >&2
|
|
echo " pnpm turbo build --filter=@homarr/nextjs... --filter=@homarr/cli" >&2
|
|
exit 1
|
|
}
|
|
|
|
mkdir -p "$DEST"
|
|
|
|
# L'ordre suit le Dockerfile : le standalone d'abord, le reste par-dessus.
|
|
cp -a apps/nextjs/.next/standalone/. "$DEST/"
|
|
mkdir -p "$DEST/apps/nextjs/.next"
|
|
cp -a apps/nextjs/.next/static "$DEST/apps/nextjs/.next/static"
|
|
cp -a apps/nextjs/public "$DEST/apps/nextjs/public"
|
|
cp -a apps/nextjs/next.config.ts apps/nextjs/package.json pnpm-workspace.yaml "$DEST/"
|
|
|
|
mkdir -p "$DEST/apps/cli"
|
|
cp -a packages/cli/cli.cjs "$DEST/apps/cli/cli.cjs"
|
|
|
|
# Binaire natif : lié à l'architecture et à l'ABI Node de la machine qui a
|
|
# construit. Assembler et exécuter sur la même machine rend la question sans
|
|
# objet ; c'est le déploiement à distance qui doit la poser.
|
|
mkdir -p "$DEST/build"
|
|
cp -a node_modules/better-sqlite3/build/Release/better_sqlite3.node "$DEST/build/"
|
|
|
|
mkdir -p "$DEST/db"
|
|
rm -rf "$DEST/db/migrations"
|
|
cp -a packages/db/migrations "$DEST/db/migrations"
|
|
|
|
# run.sh n'est copié que s'il manque, jamais écrasé. Sur le LXC, l'installateur
|
|
# a adapté le sien — il annonce le port 80 là où celui du dépôt annonce 7575 —
|
|
# et l'écraser ferait écouter nginx sur deux ports différents selon la famille
|
|
# d'adresses. Même raison pour entrypoint.sh, nginx.conf et redis.conf, qui
|
|
# appartiennent à l'installation et ne sont pas copiés du tout.
|
|
if [ -f "$DEST/run.sh" ]; then
|
|
echo "run.sh déjà présent — laissé tel quel (il peut être adapté à cette installation)."
|
|
if ! diff -q scripts/run.sh "$DEST/run.sh" > /dev/null; then
|
|
echo " il diffère de scripts/run.sh : \`diff scripts/run.sh $DEST/run.sh\` pour voir quoi."
|
|
fi
|
|
else
|
|
cp -a scripts/run.sh "$DEST/run.sh"
|
|
chmod +x "$DEST/run.sh"
|
|
fi
|
|
|
|
echo "Assemblé dans $DEST ($(du -sh "$DEST" | cut -f1))"
|