Skip to main content

Installation

This guide will help you set up the Fish Tracker Backend API for development.

Prerequisites

Before installing, ensure you have the following:

  • Node.js: Version 20 or higher
  • MongoDB: A running MongoDB instance (local or cloud)
  • pnpm: Package manager (recommended) or npm

Environment Setup

  1. Clone the repository (if not already done):

    git clone https://github.com/PetarMc1/fish-tracker
    cd fish-tracker/backend
  2. Install dependencies:

    pnpm install
    # or
    npm install
  3. Create environment file: Create a .env file in the backend root directory with the following variables:

    MONGO_URI=mongodb://exampleUser:[email protected]:27017/fishdb
    PORT=10000 # optional otherwise defaults to 10000
    JWT_SECRET=your-super-secret-jwt-key
    MASTER_API_KEY=JI83gstEbMES1fKw65jrQgznfcopWkrO # optional but useful for testsing and admin tasks
    ALLOWED_ORIGIN=https://your-frontend-domain.com # optional otherwise will use https://tracker.petarmc.com
    RATE_LIMIT_WINDOW=5 # optional otherwise defaults to 5 minutes
    RATE_LIMIT_MAX_REQUESTS=25 # optional otherwise defaults to 25 requests per window
    LOG_HEADERS=true # optional default false
    LOG_REQ_BODY=true # optional default false
    LOG_REQ_RES=true # optional default false
    REQUEST_LOGGER=true # optional default false
    SKIP_ALLOWED_ORIGIN=true # optional default false
caution

Never commit the .env file to version control. Add it to .gitignore.

Database Setup

The API uses MongoDB. To see the database structure check the Data Models page.

Running the Application

Development Mode

Start the development server with hot reloading:

pnpm run dev
# or
npm run dev

The server will start on http://localhost:10000 (or the port specified in your .env).

Docker Deployment

Create docker-compose.yml:

version: "3.9"

services:
fish-tracker-backend:
image: petarmc/fish-tracker-backend:1.x.x
ports:
- "10000:10000"
environment:
MONGO_URI: "mongodb://exampleUser:[email protected]:27017/fishdb"
JWT_SECRET: "your-super-secret-jwt-token"
MASTER_API_KEY: "JI83gstEbMES1fKw65jrQgznfcopWkrO"
ALLOWED_ORIGIN: "https://your-frontend-domain.com"
RATE_LIMIT_MAX_REQUESTS: 25
LOG_HEADERS: true
LOG_REQ_BODY: true
LOG_REQ_RES: true
REQUEST_LOGGER: true
SKIP_ALLOWED_ORIGIN: true
PORT: 10000 # if you change it here, change the port mapping above too
restart: unless-stopped

Then start the service:

docker compose up -d

Docker Run Command

docker run -d \
--name fish-tracker-backend \
-p 10000:10000 \
-e MONGO_URI="mongodb://exampleUser:[email protected]:27017/fishdb" \
-e JWT_SECRET="your-super-secret-jwt-token" \
-e MASTER_API_KEY="JI83gstEbMES1fKw65jrQgznfcopWkrO" \
-e LOG_HEADERS=true \
-e LOG_REQ_BODY=true \
-e LOG_REQ_RES=true \
-e REQUEST_LOGGER=true \
-e SKIP_ALLOWED_ORIGIN=true \
-e ALLOWED_ORIGIN="https://your-frontend-domain.com" \
-e PORT=10000 \
-e RATE_LIMIT_WINDOW=5 \
-e RATE_LIMIT_MAX_REQUESTS=25 \
--restart unless-stopped \
petarmc/fish-tracker-backend:2.x.x

Development Docker Images

Download from Jenkins

curl -o backend-docker.tar.gz https://ci.petarmc.com/job/Fish%20Tracker/10/artifact/backend-docker-X.tar.gz

On target machine, load into Docker:

gzip -d backend-docker.tar.gz
docker load -i backend-docker.tar

Or directly without unzipping:

gunzip -c backend-docker.tar.gz | docker load

Run containers:

docker run -d \
--name fish-tracker-backend-dev \
-p 10000:10000 \
-e MONGO_URI="mongodb://exampleUser:[email protected]:27017/fishdb" \
-e JWT_SECRET="your-super-secret-jwt-token" \
-e MASTER_API_KEY="JI83gstEbMES1fKw65jrQgznfcopWkrO" \
-e LOG_HEADERS=true \
-e LOG_REQ_BODY=true \
-e LOG_REQ_RES=true \
-e REQUEST_LOGGER=true \
-e SKIP_ALLOWED_ORIGIN=true \
# -e ALLOWED_ORIGIN="https://your-frontend-domain.com" \
# -e PORT=10000 \
# -e RATE_LIMIT_WINDOW=5 \
# -e RATE_LIMIT_MAX_REQUESTS=25 \
--restart unless-stopped \
petarmc/fish-tracker-backend:X