Initial commit: monorepo Match Live TV.

Rails API, app Flutter, infrastruttura Docker/MediaMTX, sito marketing e documentazione di deploy.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-26 17:45:37 +02:00
commit bba6df52c0
381 changed files with 20599 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
#!/usr/bin/env bash
# Dopo server_bootstrap.sh: avvia lo stack produzione
set -euo pipefail
DEPLOY_ROOT="${DEPLOY_ROOT:-$HOME/matchlivetv}"
if [[ -d /opt/matchlivetv ]]; then
DEPLOY_ROOT="/opt/matchlivetv"
fi
cd "$DEPLOY_ROOT/infra"
if [[ ! -f .env ]]; then
echo "Manca infra/.env — copia da .env.production.example e compila i secret"
exit 1
fi
docker compose -f docker-compose.prod.yml --env-file .env up -d --build
echo "Attendo healthcheck Rails..."
sleep 30
curl -sf "http://127.0.0.1:3000/up" && echo " OK" || echo " FAIL — vedi: docker compose -f docker-compose.prod.yml logs rails"
echo "Seed demo (opzionale, una tantum):"
echo " docker compose -f docker-compose.prod.yml exec rails bundle exec rails db:seed"

View File

@@ -0,0 +1,59 @@
#!/usr/bin/env bash
# Eseguire UNA VOLTA sul server con sudo (da console SSH o: sudo bash server_bootstrap.sh)
set -euo pipefail
if [[ "${EUID}" -ne 0 ]]; then
if sudo -n true 2>/dev/null; then
exec sudo -n bash "$0" "$@"
else
echo "ERRORE: eseguire come root o con sudo senza password:"
echo " sudo bash $0"
echo ""
echo "Per abilitare NOPASSWD per eminux (opzionale):"
echo " echo 'eminux ALL=(ALL) NOPASSWD: ALL' | sudo tee /etc/sudoers.d/eminux-nopasswd"
exit 1
fi
fi
export DEBIAN_FRONTEND=noninteractive
apt-get update -qq
apt-get install -y -qq ca-certificates curl git ufw rsync
if ! command -v docker >/dev/null 2>&1; then
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
. /etc/os-release
CODENAME="${VERSION_CODENAME:-bookworm}"
if [[ "$CODENAME" == "trixie" ]]; then
CODENAME="bookworm"
fi
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian ${CODENAME} stable" \
> /etc/apt/sources.list.d/docker.list
apt-get update -qq
apt-get install -y -qq docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
fi
usermod -aG docker eminux 2>/dev/null || true
systemctl enable --now docker
mkdir -p /opt/matchlivetv
chown -R eminux:eminux /opt/matchlivetv
# UFW base
ufw --force reset || true
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp comment 'SSH'
ufw allow 1935/tcp comment 'RTMP MediaMTX'
ufw allow 8888/tcp comment 'HLS MediaMTX optional'
ufw allow from 192.168.0.0/16 to any port 3000 proto tcp comment 'Rails LAN NPM'
ufw --force enable
docker --version
docker compose version
echo "Bootstrap completato. Riavvia sessione SSH di eminux per gruppo docker."

View File

@@ -0,0 +1,33 @@
#!/usr/bin/env bash
# Sincronizza il monorepo sul server di produzione (pre-Gitea)
set -euo pipefail
SERVER="${DEPLOY_SERVER:-eminux@192.168.1.146}"
DEST="${DEPLOY_PATH:-/opt/matchlivetv}"
SRC="$(cd "$(dirname "$0")/../.." && pwd)"
echo "Sync $SRC -> $SERVER:$DEST"
if ssh "$SERVER" 'command -v rsync >/dev/null 2>&1'; then
rsync -avz --delete \
--exclude '.git' \
--exclude 'mobile/build' \
--exclude 'mobile/.dart_tool' \
--exclude 'backend/log' \
--exclude 'backend/tmp' \
--exclude 'backend/.bundle' \
--exclude 'infra/.env' \
--exclude 'node_modules' \
"$SRC/" "$SERVER:$DEST/"
else
echo "rsync non disponibile sul server, uso tar+scp..."
tar -C "$SRC" -czf /tmp/matchlivetv-deploy.tar.gz \
--exclude='./mobile/build' --exclude='./mobile/.dart_tool' \
--exclude='./backend/log' --exclude='./backend/tmp' --exclude='./infra/.env' --exclude='./.git' .
scp /tmp/matchlivetv-deploy.tar.gz "$SERVER:~/matchlivetv-deploy.tar.gz"
ssh "$SERVER" "mkdir -p $DEST && tar -xzf ~/matchlivetv-deploy.tar.gz -C $DEST"
fi
echo "Done. On server run:"
echo " cd $DEST/infra && cp .env.production.example .env # edit secrets"
echo " docker compose -f docker-compose.prod.yml up -d --build"