diff --git a/network-poc/Dockerfile.prod b/network-poc/Dockerfile.prod index fafb760..87eb32e 100644 --- a/network-poc/Dockerfile.prod +++ b/network-poc/Dockerfile.prod @@ -3,10 +3,8 @@ # --- Vaihe 1: Frontend (Astro) --- FROM node:22-slim AS frontend WORKDIR /app/frontend -# Riippuvuudet ensin → cache-kerros (muuttuu harvoin) COPY frontend/package.json frontend/package-lock.json* ./ RUN npm install --silent -# Lähdekoodi → muuttuu usein, mutta npm install on cachessa COPY frontend/ . RUN npm run build @@ -18,7 +16,6 @@ WORKDIR /app COPY Cargo.toml Cargo.lock* ./ COPY node/Cargo.toml node/Cargo.toml COPY node/src node/src -# Dummy-cratet jotta workspace Cargo.toml on tyytyväinen COPY hub/Cargo.toml hub/Cargo.toml COPY native-node/Cargo.toml native-node/Cargo.toml COPY cli/Cargo.toml cli/Cargo.toml @@ -34,7 +31,6 @@ WORKDIR /app COPY Cargo.toml Cargo.lock* ./ COPY hub/Cargo.toml hub/Cargo.toml COPY hub/src hub/src -# Tarvitaan dummy-cratet jotta workspace kompiloi COPY node/Cargo.toml node/Cargo.toml COPY native-node/Cargo.toml native-node/Cargo.toml COPY cli/Cargo.toml cli/Cargo.toml @@ -49,14 +45,11 @@ FROM debian:bookworm-slim RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/* COPY --from=hub-builder /usr/local/bin/hub /usr/local/bin/hub +# Astro dist sisältää kaiken: HTML, JS, avatars, templates, download, GUIDE.md COPY --from=frontend /app/frontend/dist /app/frontend/dist +# Wasm-paketti staattisena COPY --from=wasm-builder /app/wasm-pkg /app/frontend/dist/pkg -# Kopioidaan GUIDE.md ja templates -COPY frontend/public/GUIDE.md /app/frontend/dist/GUIDE.md -COPY frontend/public/templates /app/frontend/dist/templates -COPY frontend/public/avatars /app/frontend/dist/avatars - WORKDIR /app ENV STATIC_DIR=/app/frontend/dist EXPOSE 3000 diff --git a/network-poc/deploy-with-native.sh b/network-poc/deploy-with-native.sh index 051a97f..da8d4a5 100755 --- a/network-poc/deploy-with-native.sh +++ b/network-poc/deploy-with-native.sh @@ -3,11 +3,12 @@ set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$SCRIPT_DIR" echo "=== Kipinä Studio Deploy (+ native binäärit) ===" -# Käännetään native-node-binäärit (ohittaa automaattisesti jos ei muutoksia) -"$SCRIPT_DIR/build-binaries.sh" +# 1. Käännetään native-node-binäärit (ohittaa automaattisesti jos ei muutoksia) +./build-binaries.sh -# Ajetaan normaali deploy -exec "$SCRIPT_DIR/deploy.sh" +# 2. Ajetaan normaali deploy +exec ./deploy.sh diff --git a/network-poc/deploy.sh b/network-poc/deploy.sh index 2d88237..30746eb 100755 --- a/network-poc/deploy.sh +++ b/network-poc/deploy.sh @@ -8,12 +8,14 @@ if [ "$1" == "local" ]; then exit 0 fi +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$SCRIPT_DIR" + SERVER="ubuntu@86.50.252.98" REMOTE_DIR="~/code/agentic-studio/network-poc" KEY="$HOME/.ssh/id_rsa" SSH_OPTS="-o StrictHostKeyChecking=no -i $KEY" -# Varmistetaan, että SSH-avain on agentissa if ! ssh-add -l 2>/dev/null | grep -q id_rsa; then echo "SSH-avain ei ole agentissa. Lisätään..." ssh-add "$KEY" @@ -22,47 +24,43 @@ fi echo "=== Kipinä Studio Deploy ===" # 0. Commitoidaan uncommitted muutokset ennen deployta -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -if ! git -C "$SCRIPT_DIR" diff --quiet HEAD 2>/dev/null || \ - [ -n "$(git -C "$SCRIPT_DIR" ls-files --others --exclude-standard 2>/dev/null)" ]; then +if ! git diff --quiet HEAD 2>/dev/null || \ + [ -n "$(git ls-files --others --exclude-standard 2>/dev/null)" ]; then echo "[0] Uncommitted muutoksia havaittu — commitoidaan..." read -rp " Commit-viesti: " DEPLOY_MSG if [ -z "$DEPLOY_MSG" ]; then DEPLOY_MSG="Deploy $(date +%Y-%m-%d\ %H:%M)" fi - git -C "$SCRIPT_DIR" add -A - git -C "$SCRIPT_DIR" commit -m "$DEPLOY_MSG" + git add -A + git commit -m "$DEPLOY_MSG" echo " Commitoitu: $DEPLOY_MSG" fi -# 1. Rakennetaan Docker-image lokaalisti -echo "[1/4] Rakennetaan image lokaalisti..." +# 1. Docker-image (frontend + hub + wasm) +echo "[1/4] Rakennetaan image..." docker build --platform linux/amd64 -f Dockerfile.prod -t kipina-agentic:latest . -# 2. Tallennetaan tiedostoon +# 2. Pakataan echo "[2/4] Pakataan image..." docker save kipina-agentic:latest | gzip > /tmp/kipina-agentic.tar.gz echo " Koko: $(du -h /tmp/kipina-agentic.tar.gz | cut -f1)" -# 3. Siirretään palvelimelle +# 3. Siirretään echo "[3/4] Siirretään palvelimelle..." scp $SSH_OPTS /tmp/kipina-agentic.tar.gz $SERVER:/tmp/ scp $SSH_OPTS docker-compose.prod.yml Caddyfile.prod $SERVER:$REMOTE_DIR/ -# 4. Ladataan image ja käynnistetään -echo "[4/4] Ladataan image palvelimella..." +# 4. Käynnistetään +echo "[4/4] Käynnistetään palvelimella..." ssh $SSH_OPTS $SERVER "gunzip -c /tmp/kipina-agentic.tar.gz | docker load && rm /tmp/kipina-agentic.tar.gz" - -echo "[4/4] Käynnistetään palvelut uudelleen..." ssh $SSH_OPTS $SERVER "cd $REMOTE_DIR && docker compose -f docker-compose.prod.yml down && docker compose -f docker-compose.prod.yml up -d" echo "=== Valmis! https://kipina.studio ===" # Discord-notifikaatio DISCORD_WEBHOOK="https://discord.com/api/webhooks/1489504066898755687/8U02d0wug-3MkVax0xMmRoj0s_-V1psnNLPWdSOjnGnKRBUpPjaU6XiX9Iu8DgJI69AP" -COMMIT_HASH=$(git -C "$SCRIPT_DIR" log -1 --pretty=format:"%h" 2>/dev/null || echo "?") -COMMIT_MSG=$(git -C "$SCRIPT_DIR" log -1 --pretty=format:"%s" 2>/dev/null || echo "?") -# python3 escapettaa erikoismerkit JSON-turvallisesti +COMMIT_HASH=$(git log -1 --pretty=format:"%h" 2>/dev/null || echo "?") +COMMIT_MSG=$(git log -1 --pretty=format:"%s" 2>/dev/null || echo "?") PAYLOAD=$(python3 -c "import json,sys; print(json.dumps({'content': sys.argv[1]}))" \ "🚀 **Kipinä Studio julkaistu!** > \`${COMMIT_HASH}\` ${COMMIT_MSG} diff --git a/network-poc/local.sh b/network-poc/local.sh index 76cceae..bcb1e90 100755 --- a/network-poc/local.sh +++ b/network-poc/local.sh @@ -2,11 +2,13 @@ set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" +cd "$SCRIPT_DIR" + echo "=== Kipinä Studio Local Development ===" # Tapetaan vanhat prosessit portissa 3000 if lsof -ti:3000 >/dev/null 2>&1; then - echo "[0] Tapetaan vanhat prosessit portissa 3000..." + echo "[0] Vapautetaan portti 3000..." lsof -ti:3000 | xargs kill -9 2>/dev/null || true sleep 1 fi @@ -15,50 +17,52 @@ fi echo "[1/3] Rakennetaan frontend..." cd "$SCRIPT_DIR/frontend" [ -d node_modules ] || npm install --silent -npm run build --silent 2>&1 | tail -1 +npm run build 2>&1 | tail -1 +cd "$SCRIPT_DIR" # Hub echo "[2/3] Käynnistetään hub..." -cd "$SCRIPT_DIR" -STATIC_DIR="$SCRIPT_DIR/frontend/dist" cargo run -p hub & +STATIC_DIR="$SCRIPT_DIR/frontend/dist" cargo run -p hub 2>&1 & HUB_PID=$! -sleep 2 + +# Odotetaan että hub on pystyssä +for i in $(seq 1 10); do + if curl -s -o /dev/null http://localhost:3000 2>/dev/null; then break; fi + sleep 1 +done # Native-node (jos Ollama on käynnissä) +NODE_PID="" if curl -s http://localhost:11434/api/tags >/dev/null 2>&1; then - # Valitaan automaattisesti ensimmäinen qwen-coder -malli MODEL=$(curl -s http://localhost:11434/api/tags | python3 -c " import sys, json models = json.load(sys.stdin).get('models', []) +# Priorisoi: 7b > 3b > mikä tahansa coder > mikä tahansa +best = None for m in models: - if 'coder' in m['name']: - print(m['name']); break -else: - if models: print(models[0]['name']) + name = m['name'] + if '7b' in name and 'coder' in name: best = name; break + if 'coder' in name and not best: best = name +if not best and models: best = models[0]['name'] +if best: print(best) " 2>/dev/null) if [ -n "$MODEL" ]; then - echo "[3/3] Ollama löytyi — käynnistetään native-node (malli: $MODEL)..." - HUB_URL=ws://localhost:3000/ws OLLAMA_MODEL="$MODEL" cargo run -p native-node --no-default-features & + echo "[3/3] Ollama: $MODEL — käynnistetään native-node..." + HUB_URL=ws://localhost:3000/ws OLLAMA_MODEL="$MODEL" cargo run -p native-node --no-default-features 2>&1 & NODE_PID=$! - echo " Native-node PID: $NODE_PID" else echo "[3/3] Ollama käynnissä mutta ei malleja — asenna: ollama pull qwen2.5-coder:7b" fi else echo "[3/3] Ollama ei käynnissä — käytetään selaimen Wasm-laskentaa" - echo " Nopeampi: ollama serve & ollama pull qwen2.5-coder:7b && ./local.sh" fi echo "" echo "=== http://localhost:3000 ===" echo " Ctrl+C pysäyttää" -# Avataan selain open http://localhost:3000 2>/dev/null || xdg-open http://localhost:3000 2>/dev/null || true -# Siivotaan lapset Ctrl+C:llä trap 'echo ""; echo "Pysäytetään..."; kill $HUB_PID $NODE_PID 2>/dev/null; exit 0' INT TERM - -# Odotetaan hub-prosessia wait $HUB_PID