Backend service untuk aplikasi analisis nutrisi makanan menggunakan OCR dan AI. Service ini menangani upload gambar label makanan dan koordinasi dengan Python AI service untuk pemrosesan OCR.
- Runtime: Node.js
- Framework: Express.js
- Database: MySQL + Prisma ORM
- File Upload: Multer
- Environment: dotenv
- Clone repository dan masuk ke direktori:
cd Noga-BE- Install dependencies:
npm install- Setup environment variables:
cp .env.example .envEdit file .env dan sesuaikan:
PORT=3000
DATABASE_URL=mysql://user:password@host:port/database
- Buat database MySQL:
PENTING: Database MySQL harus dibuat manual terlebih dahulu. Prisma hanya auto-create tables, bukan database.
-- Login ke MySQL
mysql -u root -p
-- Buat database
CREATE DATABASE nama_database;- Setup akan otomatis saat pertama kali run (skip ke step Menjalankan Server)
Otomatis generate Prisma client dan sync schema ke database, lalu start server:
npm run devnpm startServer akan berjalan di http://localhost:3000
Catatan: Saat pertama kali npm install, Prisma client akan otomatis ter-generate (postinstall hook)
Upload gambar untuk makanan kemasan berlabel.
Form Data:
composition: File gambar komposisi/ingredientnutrition_info: File gambar informasi nutrisisessionid: Session ID (string)
Response:
{
"composition": "http://localhost:3000/uploads/composition/composition-xxx.jpg",
"nutrition_info": "http://localhost:3000/uploads/nutrition_info/nutrition_info-xxx.jpg",
"sessionid": "session-123"
}Upload gambar untuk makanan siap saji tanpa label.
Form Data:
foods: File gambar makanansessionid: Session ID (string)
Response:
{
"foods": "http://localhost:3000/uploads/foods/foods-xxx.jpg",
"sessionid": "session-123"
}Table ocr_table:
sessionid(String, Primary Key): ID unik untuk setiap sesistatus(String): Status pemrosesaningredients(Text): JSON data ingredientnutrition_info(Text): JSON data informasi nutrisi
Noga-BE/
βββ routes/ # Definisi endpoint API
βββ controller/ # Logic handling request
βββ function/ # Utility functions
βββ prisma/ # Database schema
βββ uploads/ # Temporary file storage
βββ app.js # Express configuration
βββ bin/www # Server startup
# Generate Prisma client
npx prisma generate
# Create migration
npx prisma migrate dev --name nama_migrasi
# Open database GUI
npx prisma studio
# Push schema tanpa migration
npx prisma db pushdocker build -t noga-backend .docker run -p 3000:3000 \
-e DATABASE_URL="mysql://user:password@host:port/database" \
-e PORT=3000 \
noga-backendBuat file docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=${DATABASE_URL}
- PORT=3000
volumes:
- ./uploads:/app/uploadsRun dengan:
docker-compose up-
Buka Railway dan login
-
Klik "New Project" β pilih "Provision MySQL"
-
Setelah MySQL service dibuat, klik service tersebut
-
Buka tab "Variables" β copy nilai
DATABASE_URLContoh format:
mysql://root:RKgrphVeECnkSZVEopgoeMmbKNKSAkSB@maglev.proxy.rlwy.net:20862/railway
-
Push code ke GitHub repository
-
Di Railway project yang sama, klik "New" β "GitHub Repo"
-
Pilih repository Noga-BE dan connect
-
Tambahkan Environment Variables:
DATABASE_URL: Paste connection string dari MySQL servicePORT: Railway akan auto-set (tidak perlu diisi manual)
-
Railway akan otomatis detect Dockerfile dan deploy
-
Setelah deploy selesai, klik service β tab "Settings" β "Generate Domain" untuk mendapatkan public URL
- Railway otomatis detect Dockerfile
- Bisa pakai Railway MySQL add-on atau external MySQL
- Environment variables diset di Settings β Variables
- Auto-deploy setiap push ke branch main/master
- Check logs di dashboard jika ada error