File size: 2,230 Bytes
b0fbd02
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env bash
# Bootstrap JobRAG on a Linux server (Docker, firewall, compose stack).
# Run on the server: bash scripts/server-setup.sh
set -euo pipefail

PROJECT_DIR="${PROJECT_DIR:-$HOME/apps/RAG-jobs}"
PROJECT_DIR="${PROJECT_DIR/#\~/$HOME}"
cd "$PROJECT_DIR"

SUDO=""
if [[ "$(id -u)" -ne 0 ]]; then
  SUDO="sudo"
fi

dc() {
  if docker info &>/dev/null; then
    docker compose "$@"
  else
    $SUDO docker compose "$@"
  fi
}

echo "==> JobRAG server setup in $PROJECT_DIR"

if ! command -v docker &>/dev/null; then
  echo "==> Installing Docker..."
  export DEBIAN_FRONTEND=noninteractive
  $SUDO apt-get update -qq
  $SUDO apt-get install -y -qq ca-certificates curl git
  curl -fsSL https://get.docker.com | $SUDO sh
  if [[ -n "$SUDO" ]]; then
    $SUDO usermod -aG docker "$USER" || true
  fi
fi

if ! docker compose version &>/dev/null && ! $SUDO docker compose version &>/dev/null; then
  echo "ERROR: docker compose plugin not found after install"
  exit 1
fi

echo "==> Docker $($SUDO docker --version 2>/dev/null || docker --version)"
echo "==> $($SUDO docker compose version 2>/dev/null || docker compose version)"

if command -v ufw &>/dev/null; then
  echo "==> Configuring firewall (ufw)..."
  $SUDO ufw allow OpenSSH || true
  $SUDO ufw allow 2312/tcp comment 'JobRAG Streamlit' || true
  $SUDO ufw allow 8080/tcp comment 'JobRAG Airflow' || true
  $SUDO ufw --force enable || true
  $SUDO ufw status || true
fi

if [[ ! -f .env ]]; then
  echo "ERROR: .env not found in $PROJECT_DIR"
  echo "Copy .env.example to .env and fill in secrets, or rsync .env from your Mac."
  exit 1
fi

echo "==> Building and starting stack..."
dc up --build -d

echo "==> Container status:"
dc ps

echo "==> Triggering initial ingestion DAG..."
sleep 15
if docker info &>/dev/null; then
  docker exec rag-jobs-airflow-scheduler \
    airflow dags trigger ingest_software_engineer_jobs_berlin || true
else
  $SUDO docker exec rag-jobs-airflow-scheduler \
    airflow dags trigger ingest_software_engineer_jobs_berlin || true
fi

echo ""
echo "Done. Access:"
echo "  Streamlit UI:  http://100.64.8.100:2312"
echo "  Airflow UI:    http://100.64.8.100:8080  (admin / admin)"
echo "  Logs:          docker compose logs -f app"