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