diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..cb6224e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +node_modules/ +data/ +.git/ +.wolf/ +.gitignore +.dockerignore +*.bat +*.sh +README.md diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3c13381 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM node:20-alpine + +WORKDIR /app + +COPY package*.json ./ +RUN npm ci --omit=dev + +COPY server.js ./ +COPY vps_manager.html ./ + +EXPOSE 8095 + +CMD ["node", "server.js"] diff --git a/README.md b/README.md index d948d7e..d70d523 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,37 @@ Open `http://localhost:8095` in your browser. --- +## Docker + +**One command — no Node.js install required.** + +```bash +docker compose up -d +``` + +Open `http://localhost:8095` in your browser. Server data is persisted in `./data/` on the host via a bind mount, so it survives container restarts and rebuilds. + +To stop: + +```bash +docker compose down +``` + +To rebuild after pulling changes: + +```bash +docker compose up -d --build +``` + +To run without Compose (manual): + +```bash +docker build -t vps-fleet . +docker run -d -p 8095:8095 -v "$(pwd)/data:/app/data" --name vps-fleet vps-fleet +``` + +--- + ## Usage **Add a server** — click **+ Add Server** in the top-right corner. Only the hostname is required; all other fields are optional. Enter a location and a map pin is placed automatically. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b6c0518 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,8 @@ +services: + vps-fleet: + build: . + ports: + - "8095:8095" + volumes: + - ./data:/app/data + restart: unless-stopped