214 lines
4.4 KiB
Markdown
214 lines
4.4 KiB
Markdown
# SecureCam Final Year Project
|
|
|
|
This repository contains the current SecureCam prototype:
|
|
|
|
- `Backend/` - Bun + Express API, Better Auth, Socket.IO, Drizzle ORM, MinIO integration
|
|
- `WebApp/` - SvelteKit browser dashboard for camera and client flows
|
|
- `docker-compose.yml` - local development stack for Postgres, MinIO, TURN, backend, and web app
|
|
|
|
The easiest way to run the project is with Docker Compose. Manual setup instructions are included below if you want to run the backend and web app directly on your machine.
|
|
|
|
## Quick Start
|
|
|
|
### Prerequisites
|
|
|
|
- Docker
|
|
- Docker Compose
|
|
|
|
### Start the full local stack
|
|
|
|
From the repository root:
|
|
|
|
```bash
|
|
docker compose up --build
|
|
```
|
|
|
|
This starts:
|
|
|
|
- Postgres
|
|
- MinIO
|
|
- coturn
|
|
- Backend on `http://localhost:3000`
|
|
- Web app on `http://localhost:5173`
|
|
|
|
### Open the app
|
|
|
|
- Web app: `http://localhost:5173`
|
|
- Backend API: `http://localhost:3000`
|
|
- Swagger docs: `http://localhost:3000/docs`
|
|
- OpenAPI JSON: `http://localhost:3000/openapi.json`
|
|
- Admin dashboard: `http://localhost:3000/admin`
|
|
- MinIO console: `http://localhost:9001`
|
|
|
|
Default admin dashboard credentials:
|
|
|
|
- Username: `admin`
|
|
- Password: `strong-password`
|
|
|
|
Default MinIO credentials:
|
|
|
|
- Username: `minioadmin`
|
|
- Password: `minioadmin`
|
|
|
|
### Stop the stack
|
|
|
|
```bash
|
|
docker compose down
|
|
```
|
|
|
|
To remove volumes as well:
|
|
|
|
```bash
|
|
docker compose down -v
|
|
```
|
|
|
|
## Manual Development Setup
|
|
|
|
Use this path if you want to run the backend and web app outside Docker.
|
|
|
|
### Prerequisites
|
|
|
|
- [Bun](https://bun.sh) for the backend
|
|
- Node.js + npm for the web app
|
|
- A running Postgres instance
|
|
- A running MinIO-compatible object store
|
|
- Optional: coturn if you want the local TURN configuration to work as-is
|
|
|
|
### 1. Configure the backend
|
|
|
|
```bash
|
|
cd Backend
|
|
cp .env.example .env
|
|
```
|
|
|
|
Set the values in `Backend/.env` for your environment, especially:
|
|
|
|
- `DATABASE_URL`
|
|
- `BETTER_AUTH_SECRET`
|
|
- `BETTER_AUTH_BASE_URL`
|
|
- `BETTER_AUTH_TRUSTED_ORIGINS`
|
|
- `MINIO_ENDPOINT`
|
|
- `MINIO_PORT`
|
|
- `MINIO_USE_SSL`
|
|
- `MINIO_ACCESS_KEY`
|
|
- `MINIO_SECRET_KEY`
|
|
- `MINIO_BUCKET`
|
|
|
|
If your backend connects to MinIO on an internal hostname but the browser must upload to a different public hostname, also set:
|
|
|
|
- `MINIO_PUBLIC_ORIGIN`
|
|
|
|
Example:
|
|
|
|
```env
|
|
BETTER_AUTH_BASE_URL=http://localhost:3000
|
|
BETTER_AUTH_TRUSTED_ORIGINS=http://localhost:5173
|
|
MINIO_ENDPOINT=localhost
|
|
MINIO_PORT=9000
|
|
MINIO_USE_SSL=false
|
|
```
|
|
|
|
### 2. Install backend dependencies
|
|
|
|
```bash
|
|
cd Backend
|
|
bun install
|
|
```
|
|
|
|
### 3. Run backend migrations
|
|
|
|
```bash
|
|
cd Backend
|
|
bun run db:migrate
|
|
```
|
|
|
|
### 4. Start the backend
|
|
|
|
```bash
|
|
cd Backend
|
|
bun run dev
|
|
```
|
|
|
|
The backend will be available at `http://localhost:3000`.
|
|
|
|
### 5. Install web app dependencies
|
|
|
|
```bash
|
|
cd WebApp
|
|
npm install
|
|
```
|
|
|
|
### 6. Start the web app
|
|
|
|
```bash
|
|
cd WebApp
|
|
npm run dev
|
|
```
|
|
|
|
The web app will be available at `http://localhost:5173`.
|
|
|
|
## Useful Commands
|
|
|
|
### Docker
|
|
|
|
```bash
|
|
docker compose up --build
|
|
docker compose logs -f backend webapp
|
|
docker compose down
|
|
```
|
|
|
|
### Backend
|
|
|
|
```bash
|
|
cd Backend
|
|
bun run dev
|
|
bun test
|
|
bun run db:migrate
|
|
bun run db:studio
|
|
```
|
|
|
|
### Web app
|
|
|
|
```bash
|
|
cd WebApp
|
|
npm run dev
|
|
npm run build
|
|
npm run check
|
|
npm run test
|
|
```
|
|
|
|
## First-Time Usage
|
|
|
|
Once the app is running:
|
|
|
|
1. Open `http://localhost:5173`
|
|
2. Create an account or sign in
|
|
3. Register the browser as either a `camera` or `client` device
|
|
4. Open a second browser window or profile if you want to simulate both roles locally
|
|
|
|
The web app is the primary interface now. The old static simulator pages and mobile scaffold have been removed from the repo.
|
|
|
|
## Troubleshooting
|
|
|
|
### Browser upload fails with a MinIO URL that looks unreachable
|
|
|
|
If uploads point to an internal hostname such as `http://minio:9000`, set `MINIO_PUBLIC_ORIGIN` in the backend env to a browser-reachable MinIO host and restart the backend.
|
|
|
|
### Backend starts but MinIO checks fail
|
|
|
|
Make sure:
|
|
|
|
- the MinIO server is running
|
|
- the bucket credentials are correct
|
|
- the backend can reach the configured MinIO host
|
|
- TLS settings such as `MINIO_CA_CERT_PATH` or `MINIO_INSECURE_SKIP_TLS_VERIFY` match your environment
|
|
|
|
### TURN issues on other devices
|
|
|
|
The default compose setup uses `127.0.0.1` in coturn-related configuration. If camera and client browsers are on different devices, replace those localhost TURN references with the host machine's LAN IP.
|
|
|
|
## More Detail
|
|
|
|
- Backend setup, env, and API details: [Backend/README.md](./Backend/README.md)
|
|
- Web app source: [WebApp/](./WebApp)
|