-
Notifications
You must be signed in to change notification settings - Fork 268
feat: add Minepanel template #655
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
built with Refined Cloudflare Pages Action⚡ Cloudflare Pages Deployment
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR adds a new template for Minepanel, a web-based panel for managing Minecraft servers with Docker. The template includes a backend service (NestJS API), frontend service (Next.js), auto-generated credentials, Docker socket access, and persistent storage.
Changes:
- Added Minepanel template with backend and frontend services using Docker Compose
- Added template configuration for domain routing, environment variables, and auto-generated secrets
- Updated meta.json with Minepanel entry including metadata and tags
Reviewed changes
Copilot reviewed 3 out of 4 changed files in this pull request and generated 6 comments.
| File | Description |
|---|---|
| meta.json | Added Minepanel entry with metadata, links, and tags between "minio" and "mixpost" |
| blueprints/minepanel/docker-compose.yml | Defines backend and frontend services with Docker socket access and persistent volumes |
| blueprints/minepanel/template.toml | Configures domain routing, environment variables, and credential generation |
| blueprints/minepanel/minepanel.webp | Logo for the template |
| @@ -0,0 +1,32 @@ | |||
| services: | |||
| backend: | |||
| image: ketbom/minepanel-backend:latest | |||
Copilot
AI
Jan 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The :latest tag violates the coding guidelines which state: 'NEVER use latest tag—it can break templates when upstream images change unexpectedly.' Pin to a specific version (e.g., ketbom/minepanel-backend:1.0.0). Before committing, verify the image exists using docker manifest inspect <image:tag>.
| - /var/run/docker.sock:/var/run/docker.sock | ||
|
|
||
| frontend: | ||
| image: ketbom/minepanel-frontend:latest |
Copilot
AI
Jan 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The :latest tag violates the coding guidelines which state: 'NEVER use latest tag—it can break templates when upstream images change unexpectedly.' Pin to a specific version (e.g., ketbom/minepanel-frontend:1.0.0). Before committing, verify the image exists using docker manifest inspect <image:tag>.
meta.json
Outdated
| { | ||
| "id": "minepanel", | ||
| "name": "Minepanel", | ||
| "version": "latest", |
Copilot
AI
Jan 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The version field should match the specific image version used in docker-compose.yml instead of latest. After pinning the Docker images to specific versions, update this field to match.
blueprints/minepanel/template.toml
Outdated
| FRONTEND_URL = "https://${frontend_domain}" | ||
| NEXT_PUBLIC_BACKEND_URL = "https://api-${backend_domain}" |
Copilot
AI
Jan 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
URL variables should use HTTP by default, not HTTPS. The coding guidelines state: 'URL Variables: When environment variables require URLs (e.g., WEB_URL, NEXTAUTH_URL, PUBLIC_URL), always use HTTP by default (e.g., \"http://${main_domain}\"). HTTPS should only be used if explicitly required by the application or when using a reverse proxy with SSL termination.' Change to http:// unless the application specifically requires HTTPS.
| ports: | ||
| - 8091 |
Copilot
AI
Jan 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The coding guidelines state to avoid explicit ports as Dokploy handles proxying: 'Docker Compose: Minimal—omit ports (Dokploy proxies)'. While using port numbers without host mapping is acceptable, consider whether this is necessary given Dokploy's proxy capabilities.
| ports: | ||
| - 3000 |
Copilot
AI
Jan 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The coding guidelines state to avoid explicit ports as Dokploy handles proxying: 'Docker Compose: Minimal—omit ports (Dokploy proxies)'. While using port numbers without host mapping is acceptable, consider whether this is necessary given Dokploy's proxy capabilities.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
Copilot reviewed 3 out of 4 changed files in this pull request and generated 2 comments.
| - BASE_DIR=${BASE_DIR} | ||
| volumes: | ||
| - minepanel-servers:/app/servers | ||
| - minepanel-data:/app/data |
Copilot
AI
Jan 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mounting the Docker socket grants the container full control over the host's Docker daemon, which is a significant security risk. While this may be necessary for Minepanel's functionality to manage Minecraft server containers, this creates a potential privilege escalation vector. Consider documenting this security implication in the template description or adding a warning comment in the docker-compose.yml file.
| - minepanel-data:/app/data | |
| - minepanel-data:/app/data | |
| # WARNING: Mounting the Docker socket gives this container full control over the host's Docker daemon. | |
| # Only use this in trusted environments and be aware this is a potential privilege escalation vector. |
| [config.env] | ||
| JWT_SECRET = "${jwt_secret}" | ||
| CLIENT_USERNAME = "${client_username}" | ||
| CLIENT_PASSWORD = "${client_password}" | ||
| FRONTEND_URL = "http://${frontend_domain}" | ||
| NEXT_PUBLIC_BACKEND_URL = "http://api-${backend_domain}" | ||
| NEXT_PUBLIC_DEFAULT_LANGUAGE = "${default_language}" | ||
| BASE_DIR = "/app" |
Copilot
AI
Jan 16, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The [config.env] section defines environment variables but doesn't specify which service they apply to. According to the docker-compose.yml, the backend service needs JWT_SECRET, CLIENT_USERNAME, CLIENT_PASSWORD, FRONTEND_URL, and BASE_DIR, while the frontend needs NEXT_PUBLIC_BACKEND_URL and NEXT_PUBLIC_DEFAULT_LANGUAGE. This configuration will apply all variables to all services, which works but is not explicit. Consider using the array format with service-specific variables like env = [...] in the README examples, or document that all variables are shared across services.
| [config.env] | |
| JWT_SECRET = "${jwt_secret}" | |
| CLIENT_USERNAME = "${client_username}" | |
| CLIENT_PASSWORD = "${client_password}" | |
| FRONTEND_URL = "http://${frontend_domain}" | |
| NEXT_PUBLIC_BACKEND_URL = "http://api-${backend_domain}" | |
| NEXT_PUBLIC_DEFAULT_LANGUAGE = "${default_language}" | |
| BASE_DIR = "/app" | |
| [[config.env]] | |
| serviceName = "backend" | |
| env = [ | |
| "JWT_SECRET=${jwt_secret}", | |
| "CLIENT_USERNAME=${client_username}", | |
| "CLIENT_PASSWORD=${client_password}", | |
| "FRONTEND_URL=http://${frontend_domain}", | |
| "BASE_DIR=/app", | |
| ] | |
| [[config.env]] | |
| serviceName = "frontend" | |
| env = [ | |
| "NEXT_PUBLIC_BACKEND_URL=http://api-${backend_domain}", | |
| "NEXT_PUBLIC_DEFAULT_LANGUAGE=${default_language}", | |
| ] |
What is this PR about?
New PR of Minepanel - Web panel for managing Minecraft servers with Docker.
Checklist
Before submitting this PR, please make sure that:
Issues related (if applicable)
N/A
Screenshots or Videos
Template includes:
Links: