Compare commits

..

8 Commits

Author SHA1 Message Date
c97b8179af Update with Gitea registry 2026-03-09 22:32:42 +01:00
15b59d5e16 Increased the heap to 4G 2026-03-09 21:51:35 +01:00
17c766c27f Added Docker workflow
All checks were successful
Build & Push Docker Image / build-and-push (push) Successful in 6m23s
2026-03-09 21:17:00 +01:00
e2726083f6 Update logo 2026-03-09 00:16:33 +01:00
2a10c1ce70 Update readme 2026-03-08 23:53:22 +01:00
56a2e1c7b9 CHnage readme logo 2026-03-08 23:25:43 +01:00
898f355a12 Added dark mode logo 2026-03-08 23:25:14 +01:00
3f90949c2b Add logo 2026-03-08 17:53:11 +01:00
6 changed files with 189 additions and 1 deletions

36
.dockerignore Normal file
View File

@@ -0,0 +1,36 @@
# Dependencies
node_modules
# Next.js build output (rebuilt in Docker)
.next
# Local env files (pass secrets via Docker env, not baked into image)
.env.local
.env*.local
# Dev / editor artifacts
.git
.gitignore
*.md
.vscode
.idea
# OS
.DS_Store
Thumbs.db
# Logs
*.log
npm-debug.log*
# Data directories (mounted as volumes)
data
mc-data
backups
# Test / CI
coverage
.nyc_output
# Misc
*.tsbuildinfo

View File

@@ -0,0 +1,47 @@
name: Build & Push Docker Image
on:
push:
tags:
- "v*" # triggers on v0.1.0, v1.0.0, etc.
workflow_dispatch: # allow manual trigger from Gitea UI
env:
REGISTRY: git.azuze.fr
IMAGE: git.azuze.fr/kawa/cubeadmin
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Extract version tag
id: meta
run: |
TAG="${GITHUB_REF_NAME}" # e.g. v0.1.0
VERSION="${TAG#v}" # strip leading v → 0.1.0
echo "tag=${TAG}" >> $GITHUB_OUTPUT
echo "version=${VERSION}" >> $GITHUB_OUTPUT
- name: Log in to Gitea container registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.REGISTRY_USER }}
password: ${{ secrets.REGISTRY_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: |
${{ env.IMAGE }}:latest
${{ env.IMAGE }}:${{ steps.meta.outputs.version }}
cache-from: type=gha
cache-to: type=gha,mode=max

48
Dockerfile Normal file
View File

@@ -0,0 +1,48 @@
# ─── Stage 1: Install dependencies ───────────────────────────────────────────
FROM oven/bun:1 AS deps
WORKDIR /app
COPY package.json bun.lock ./
RUN bun install --frozen-lockfile
# ─── Stage 2: Build Next.js ──────────────────────────────────────────────────
FROM oven/bun:1 AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
ENV NODE_OPTIONS="--max-old-space-size=4096"
RUN bun run build
# ─── Stage 3: Production runner ──────────────────────────────────────────────
FROM oven/bun:1-slim AS runner
WORKDIR /app
ENV NODE_ENV=production
# Copy runtime dependencies
COPY --from=builder /app/node_modules ./node_modules
# Copy Next.js build output
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
# Copy server entry point and all runtime source files
COPY --from=builder /app/server.ts ./server.ts
COPY --from=builder /app/lib ./lib
COPY --from=builder /app/drizzle ./drizzle
COPY --from=builder /app/tsconfig.json ./tsconfig.json
COPY --from=builder /app/next.config.ts ./next.config.ts
# Pre-create data directory (SQLite db + uploads land here)
RUN mkdir -p /app/data
EXPOSE 3000
# Volumes for persistent data
# Mount your Minecraft server directory to /mc-server
# Mount your backups directory to /backups
VOLUME ["/app/data", "/mc-server", "/backups"]
CMD ["bun", "--bun", "run", "server.ts"]

View File

@@ -1,6 +1,7 @@
# CubeAdmin
![CubeAdmin-logo](https://git.azuze.fr/kawa/CubeAdmin/raw/branch/main/cubeadmin-logo-dark.png)
A production-ready Minecraft server administration panel built with Next.js, Bun, and SQLite.
[Website](https://cubeadmin.kawa.zip) - [Wiki](https://cubeadmin.kawa.zip/wiki)
## Features

BIN
cubeadmin-logo-dark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

56
docker-compose.yml Normal file
View File

@@ -0,0 +1,56 @@
services:
cubeadmin:
image: git.azuze.fr/kawa/cubeadmin:latest
# To build locally instead of pulling, uncomment:
# build: .
container_name: cubeadmin
restart: unless-stopped
ports:
- "${PORT:-3000}:3000"
environment:
NODE_ENV: production
PORT: 3000
# ── Auth ────────────────────────────────────────────────────
BETTER_AUTH_URL: ${BETTER_AUTH_URL}
BETTER_AUTH_SECRET: ${BETTER_AUTH_SECRET}
# ── Email / SMTP ────────────────────────────────────────────
SMTP_HOST: ${SMTP_HOST:-}
SMTP_PORT: ${SMTP_PORT:-587}
SMTP_SECURE: ${SMTP_SECURE:-false}
SMTP_USER: ${SMTP_USER:-}
SMTP_PASS: ${SMTP_PASS:-}
EMAIL_FROM: ${EMAIL_FROM:-CubeAdmin <noreply@example.com>}
# ── Minecraft / RCON ────────────────────────────────────────
MC_SERVER_PATH: /mc-server
MC_RCON_HOST: ${MC_RCON_HOST:-127.0.0.1}
MC_RCON_PORT: ${MC_RCON_PORT:-25575}
MC_RCON_PASSWORD: ${MC_RCON_PASSWORD}
# ── Database ────────────────────────────────────────────────
DATABASE_PATH: /app/data/cubeadmin.db
# ── Security ────────────────────────────────────────────────
TRUSTED_ORIGINS: ${TRUSTED_ORIGINS}
RATE_LIMIT_RPM: ${RATE_LIMIT_RPM:-100}
# ── First admin (only used on first startup) ─────────────────
INITIAL_ADMIN_EMAIL: ${INITIAL_ADMIN_EMAIL:-admin@example.com}
INITIAL_ADMIN_NAME: ${INITIAL_ADMIN_NAME:-Administrator}
INITIAL_ADMIN_PASSWORD: ${INITIAL_ADMIN_PASSWORD:-ChangeMe123!}
# ── Optional ────────────────────────────────────────────────
BLUEMAP_URL: ${BLUEMAP_URL:-}
volumes:
# SQLite database + uploaded files
- cubeadmin-data:/app/data
# Minecraft server files (set MC_DATA_PATH in .env to override host path)
- ${MC_DATA_PATH:-./mc-data}:/mc-server
# Backups
- ${BACKUPS_PATH:-./backups}:/backups
volumes:
cubeadmin-data: