Added Docker support.

This commit is contained in:
Fabio Manganiello 2025-03-07 00:19:45 +01:00
parent bb0da62ea0
commit a837ae06bd
Signed by: blacklight
GPG key ID: D90FBA7F76362774
5 changed files with 132 additions and 14 deletions

View file

@ -10,7 +10,7 @@ BACKEND_PORT=3000
# Application database URL (required)
# Postgres:
DB_URL=postgres://user:password@host:port/dbname
DB_URL=postgres://gpstracker:gpstracker@db:5432/gpstracker
# SQLite:
# DB_URL=sqlite:///path/to/app.db

1
.gitignore vendored
View file

@ -30,3 +30,4 @@ coverage
*.db
*.sqlite
*.sqlite3
data/

65
Dockerfile Normal file
View file

@ -0,0 +1,65 @@
# Build image
FROM node:23-alpine AS build
WORKDIR /app
# Copy backend source files
COPY LICENSE \
README.md \
package.json \
package-lock.json \
tsconfig.json \
Makefile \
./
COPY src ./src
# Copy frontend source files
RUN mkdir -p ./frontend
COPY frontend/package.json \
frontend/package-lock.json \
frontend/tsconfig.json \
frontend/tsconfig.app.json \
frontend/tsconfig.node.json \
frontend/vite.config.ts \
frontend/env.d.ts \
frontend/index.html \
frontend/Makefile \
./frontend/
COPY frontend/src ./frontend/src
COPY frontend/public ./frontend/public
# Install system dependencies
RUN apk add --no-cache typescript make
# Build all
RUN make
# Web image
FROM node:23-alpine AS web
WORKDIR /app
# Copy built files
COPY --from=build \
/app/package.json \
/app/LICENSE \
/app/README.md \
./
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
# Copy frontend built files
COPY --from=build /app/frontend/dist ./frontend/dist
COPY --from=build /app/frontend/node_modules ./frontend/node_modules
COPY --from=build /app/frontend/public ./frontend/public
COPY --from=build \
/app/frontend/package.json \
/app/frontend/package-lock.json \
/app/frontend/index.html \
/app/frontend/
# Run the app
CMD ["npm", "run", "start"]

View file

@ -12,7 +12,26 @@ GPSTracker is a simple Webapp that consists of:
- [[*TODO*]] Can ingest GPS data points from HTTP, MQTT, Websocket or Kafka.
- A frontend to display GPS data points and provides advanced filtering.
## Building the application
![Screenshot of GPSTracker](https://static.platypush.tech/screenshots/gpstracker_screenshot.png)
## Configuration
```
cp .env.example .env
```
See [the provided `.env.example`](./.env.example) for a reference.
## Docker installation
```sh
docker compose up
```
## Local installation
### Build
Requirements:
@ -34,23 +53,13 @@ make backend
make frontend
```
## Configuration
See [`.env.example`](./.env.example) for a reference. Copy it to `.env` and modify it accordingly.
## Running the application
### Local installation
### Run
```sh
npm run start
```
### Docker
[[*TODO*]]
## Project Setup
## Development
### Compile and Hot-Reload for Development

43
docker-compose.yml Normal file
View file

@ -0,0 +1,43 @@
services:
app:
build:
context: .
dockerfile: Dockerfile
env_file:
- ./.env
environment:
# Needed to make sure that the backend port can be exposed
BACKEND_ADDRESS: 0.0.0.0
ports:
- 3000:3000
depends_on:
db:
condition: service_healthy
healthcheck:
# If you change the backend port, remember to also change this URL
test: curl -s 'http://localhost:3000' >/dev/null
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
db:
image: postgres:17-alpine
environment:
# These should match the settings reported in your DB_URL env variable
- POSTGRES_USER=gpstracker
- POSTGRES_PASSWORD=gpstracker
- POSTGRES_DB=gpstracker
volumes:
- data:/var/lib/postgresql/data/
expose:
- 5432
healthcheck:
test: pg_isready -U gpstracker
interval: 2s
timeout: 5s
retries: 10
restart: unless-stopped
volumes:
data: