# Setup — dari clone sampai aplikasi terbuka dengan data Panduan ini untuk komputer yang **belum pernah** menjalankan proyek ini. Ikuti berurutan; setiap langkah punya cara memastikan ia berhasil. Perkiraan waktu: 20–40 menit, sebagian besar menunggu unduhan model LLM (~5 GB). ## Yang harus sudah terpasang | | Cara memeriksa | | -------------- | ------------------- | | Docker Desktop | `docker info` | | Node.js 18+ | `node -v` | | Python 3.10+ | `python3 --version` | --- ## 1. Clone dan pasang dependensi ```bash git clone https://github.com/abdshomad/dashboard-solusi-ai-peternakan-ayam.git cd dashboard-solusi-ai-peternakan-ayam git checkout Alfreda npm install npm install --prefix backend pip3 install -r "AI Insight/requirements.txt" ``` ## 2. Siapkan file `.env` Ada **dua** file, dan `DB_PASSWORD` di keduanya harus sama persis. ```bash cp .env.example .env cp backend/.env.example backend/.env ``` Buka keduanya, ganti `DB_PASSWORD` dengan satu password yang sama. > **Jebakan paling sering:** `DB_PORT` harus **15432**, bukan 5432. Postgres di > Docker dipetakan ke 15432 supaya tidak bentrok dengan Postgres yang mungkin > sudah terpasang di komputer Anda. Nilai ini sudah benar di > `backend/.env.example` — jangan diubah jadi 5432. ## 3. Nyalakan Postgres dan Ollama Hanya dua container ini. Jangan `docker compose up` seluruhnya — container `backend`/`frontend`/`rag` akan berebut port dengan proses yang dijalankan `start_all.sh` di langkah 6. ```bash docker compose up -d database llm ``` Tunggu sampai database siap: ```bash until docker exec dashboard-database pg_isready -U dashboard_user -d dashboard_db; do sleep 1; done ``` **Kalau port 11434 bentrok:** aplikasi Ollama bawaan macOS menahannya. Matikan dulu dengan `osascript -e 'quit app "Ollama"'`. ## 4. Unduh model LLM Sekitar 5 GB, jalan sekali saja. ```bash docker exec dashboard-llm ollama pull qwen2.5:7b ``` Pastikan sudah ada: ```bash curl -s http://localhost:11434/api/tags | grep qwen2.5 ``` Nama model ini harus sama dengan `LLM_MODEL_NAME` di `backend/.env`. Kalau berbeda, semua AI Insight gagal dengan error _model not found_. ## 5. Isi database **Langkah ini tidak otomatis.** Skema dan migrasi memang dibuat sendiri saat backend start, tapi **tabelnya akan kosong**. Tanpa langkah ini dashboard terbuka tanpa kandang, tanpa siklus, dan semua AI Insight menulis "data tidak tersedia" — yang mudah disalahartikan sebagai aplikasi rusak. ```bash docker exec -i dashboard-database psql -U dashboard_user -d dashboard_db < backup.sql ``` Pastikan datanya masuk: ```bash docker exec dashboard-database psql -U dashboard_user -d dashboard_db -c \ "select count(*) from mortality_records;" ``` Harusnya **270**. ## 6. Jalankan aplikasinya ```bash bash start_all.sh ``` Skrip ini menyalakan tiga layanan (RAG, backend, frontend) lalu menampilkan alamat yang harus dibuka, misalnya: ``` 🌐 Frontend: http://localhost:3000 🔧 Backend API: http://localhost:5001 (health: /health) 🧠 RAG Service: http://localhost:5002 ``` **Bukalah alamat yang tertulis di keluaran itu**, jangan diasumsikan. Vite memakai port 3000, tapi mundur ke 3001, 3002, dan seterusnya kalau port itu sedang dipakai proses lain. Backend menerima port localhost mana pun saat `NODE_ENV=development`, jadi berapa pun portnya aplikasinya tetap jalan. Skrip berakhir dengan `tail -f` pada log backend dan tidak pernah keluar sendiri. Tekan Ctrl+C untuk berhenti menonton log — layanannya tetap hidup. ## 7. Pastikan semuanya benar-benar hidup ```bash curl -s -o /dev/null -w "backend %{http_code}\n" http://localhost:5001/health curl -s -o /dev/null -w "rag %{http_code}\n" http://localhost:5002/health curl -s http://localhost:5001/api/kandangs | head -c 80 ``` Ketiganya harus `200`, dan perintah terakhir harus mengembalikan `{"success":true,"data":[{"id":1,"name":"Kandang Atas"...`. Kalau `/health` sudah 200 tapi `/api/kandangs` gagal, berarti backend hidup tapi database tidak terjangkau — periksa ulang `DB_PORT=15432` di langkah 2. --- ## Menghentikan semuanya ```bash pkill -f "rag_service.py"; pkill -f "node server.js"; pkill -f vite docker compose stop database llm # opsional ``` ## Kalau ada yang salah | Gejala | Penyebab yang paling mungkin | | ----------------------------------------- | ----------------------------------------------------------- | | `ECONNREFUSED 127.0.0.1:15432` | container `database` belum jalan, atau `DB_PORT` salah | | Dashboard terbuka tapi semua angka kosong | langkah 5 (isi database) terlewat | | AI Insight error _model not found_ | `LLM_MODEL_NAME` tidak cocok dengan model yang di-pull | | `Folder tidak ditemukan: .../AI Insight` | `start_all.sh` dijalankan dari salinan di luar repo | | Halaman tampil tapi data gagal dimuat | backend mati — cek `/tmp/backend.log` | | Generate AI Insight lama sekali | wajar: 2–5 menit per laporan di CPU. Cek `/tmp/backend.log` | Log ada di `/tmp/backend.log`, `/tmp/frontend.log`, dan `/tmp/rag_service.log`. Catatan teknis yang lebih dalam — keputusan desain, jebakan yang sudah ditemukan, dan pekerjaan yang masih terbuka — ada di `CATATAN-LANJUTAN.md`.