# PriceGhost for Online Price Tracking

**URL:** https://discussion.scottibyte.com/t/priceghost-for-online-price-tracking/714
**Category:** Uncategorized
**Created:** [January 31, 2026, 10:28pm UTC](https://discussion.scottibyte.com/t/priceghost-for-online-price-tracking/714 "2026-01-31T22:28:23Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![scott](https://discussion.scottibyte.com/letter_avatar_proxy/v4/letter/s/3e96dc/32.png) [@scott](https://discussion.scottibyte.com/u/scott)
#### Post date: [January 31, 2026, 10:28pm UTC](https://discussion.scottibyte.com/t/priceghost-for-online-price-tracking/714/1 "2026-01-31T22:28:24Z")

</div>

[PriceGhost](https://github.com/clucraft/PriceGhost) is a self-hosted price tracking application that can monitor prices from any website. The rapidly changing prices of memory and storage makes an app like this critical for Home Labbers.

 ![image](https://discussion.scottibyte.com/uploads/default/original/2X/1/1b8682265efd4e5f9af674eb8bc77af3895b44c9.jpeg)

I am hosting PriceGhost inside of an Incus container. If you are not familiar with Incus, go watch my [Incus Containers Step by Step](https://www.youtube.com/watch?v=ULPuU9aKyoU) tutorial.

Start by Creating a container for PriceGhost:

```auto
incus launch images:ubuntu/24.04 PriceGhost -p default -p bridgeprofile -c boot.autostart=true -c security.nesting=true

```

Move inside the new container.

```auto
incus shell PriceGhost

```

Update the container.

```auto
apt update && apt upgrade -y

```

Install dependencies.

```auto
apt install openssh-server nano net-tools curl -y

```

 ![image](https://discussion.scottibyte.com/uploads/default/original/2X/1/1cb51ddc72538f3060579815073f9a16e49506cc.jpeg)

Install docker from the script on the docker website.

```auto
curl https://get.docker.com | sh

```

 ![image](https://discussion.scottibyte.com/uploads/default/original/2X/a/a54462491275d7059cc1b7b6db08dfbef83e8877.jpeg)

Create a user account.

```auto
adduser scott

```

Put my user in the docker & sudo groups.

```auto
usermod -aG sudo,docker scott

```

Move to the new account.

```auto
su - scott

```

Create a folder and move into it.

```auto
mkdir priceghost && cd priceghost

```

Edit a docker compose file.

```auto
nano compose.yml

```

Paste the following into the file.

```auto
services:
  # PostgreSQL Database
  postgres:
    image: postgres:16-alpine
    container_name: priceghost-db
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: priceghost
    volumes:
      - ./data:/var/lib/postgresql/data
      - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

  # Backend API
  backend:
    image: ghcr.io/clucraft/priceghost-backend:latest
    container_name: priceghost-backend
    environment:
      DATABASE_URL: postgresql://postgres:postgres@postgres:5432/priceghost
      JWT_SECRET: ${JWT_SECRET:-change-this-in-production-use-strong-secret}
      PORT: 3001
      NODE_ENV: production
    ports:
      - "3001:3001"
    depends_on:
      postgres:
        condition: service_healthy
    restart: unless-stopped

  # Frontend
  frontend:
    image: ghcr.io/clucraft/priceghost-frontend:latest
    container_name: priceghost-frontend
    ports:
      - "80:80"
    depends_on:
      - backend
    restart: unless-stopped

```

Save the file with a CTRL O and enter and then a CTRL X to exit the nano editor.

Edit an environment variables file.

```auto
nano .env

```

Paste the following into the editor.

```auto
# Database
POSTGRES_USER=postgres
POSTGRES_PASSWORD=your_secure_password
POSTGRES_DB=priceghost

# Backend
JWT_SECRET=your_jwt_secret_here
DATABASE_URL=postgresql://postgres:password@db:5432/priceghost

# Frontend (optional)
VITE_API_URL=/api

```

Be sure to change your JWT\_SECRET to some random value. Save the file with a CTRL O and enter and then CTRL X to exit the editor.

Create the data folders.

```auto
mkdir data database

```

Create the required sql file.

```auto
touch database/init.sql

```

Start the application.

```auto
docker compose up -d

```

 ![image](https://discussion.scottibyte.com/uploads/default/original/2X/4/4c8ac302f9c798f06ff002e87deb5e79ccc6e852.jpeg)

Find out the address of your incus container.

```auto
ifconfig

```

Look for the IP address of your “eth0:” device. Mine will differ from yours.

 ![image](https://discussion.scottibyte.com/uploads/default/original/2X/3/33b11db36c63f1dab30f9252c4a1330f168e3573.jpeg)

Go to the address you found in your web browser.

 ![image](https://discussion.scottibyte.com/uploads/default/original/2X/b/be9dda7646e12b69037116fec515a5acb7d5b055.png)

Choose the “Sign up” option.

 ![image](https://discussion.scottibyte.com/uploads/default/original/2X/7/792b66cc5c8369ba5019db702c0926f48ab65a2e.png)

The first user added will be the admin user with the ability to create additional users.

Once you finish creating your account, you will be logged in.

 ![image](https://discussion.scottibyte.com/uploads/default/original/2X/2/2e3d071bd89622c15b145c546b68ddc2ad013f40.png)

Follow the video tutorial to add websites you want to track and configure notifications.
