Proyectos Alojados en el Servidor
Carpeta raíz: /projects
Enrutador de Dominios y Subdominios (Caddy HTTPS)
Conecta un dominio o subdominio al contenedor Frontend de tu proyecto, y opcionalmente enruta /api/* hacia su contenedor Backend sin conflictos de CORS ni puertos.
Dominios Configurados
Caddyfile Generado
Estándar de Estructura para Proyectos en ALpanel (Node, Python, Java, Laravel)
Para que ALpanel detecte automáticamente cualquier proyecto, mida su consumo de CPU/RAM, extraiga las credenciales de su Base de Datos y ejecute Git Pull + Restart (con Rollback automático) y Limpieza de Caché sin chocar puertos, sigue estas 3 reglas simples:
El panel principal vive en /opt/alpanel y cada proyecto alojado vive en /opt/projects/<nombre_proyecto> con su propio docker-compose.yml y .env.
Dentro del docker-compose.yml defines los servicios frontend, backend y db. Así el panel te permite reiniciar o ver logs del Front o del Back por separado.
Usa DB_NAME, DB_USER, DB_PASSWORD (o MYSQL_* / POSTGRES_*) en tu .env para que el botón Base de Datos del panel te muestre las credenciales automáticamente.
Ideal para React/Next/Vue + Backend en Node, Java (Spring Boot), Python o Laravel:
services:
db:
image: mariadb:11 # o postgres:15-alpine
container_name: miapp_db
restart: unless-stopped
env_file: .env
ports:
- "3308:3306" # Puerto externo único para conectarte desde DBeaver/TablePlus
volumes:
- db_data:/var/lib/mysql
backend:
build: ./backend # Carpeta con Dockerfile de Node, Java, Python o Laravel
container_name: miapp_backend
restart: unless-stopped
env_file: .env
ports:
- "8081:8080"
depends_on:
- db
frontend:
build: ./frontend # Carpeta con Dockerfile de React / Vue / Next.js
container_name: miapp_frontend
restart: unless-stopped
ports:
- "3001:80"
depends_on:
- backend
volumes:
db_data:
Ejemplos listos para colocar dentro de ./backend/Dockerfile:
# --- OPCIÓN A: Node.js / NestJS --- FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build CMD ["npm", "run", "start:prod"] # --- OPCIÓN B: Java 21 (Spring Boot) --- FROM maven:3.9-eclipse-temurin-21 AS build WORKDIR /app COPY . . RUN mvn clean package -DskipTests FROM eclipse-temurin:21-jre-alpine COPY --from=build /app/target/*.jar /app.jar ENTRYPOINT ["java", "-Xmx512m", "-jar", "/app.jar"] # --- OPCIÓN C: PHP 8.2 / Laravel --- FROM php:8.2-fpm-alpine RUN docker-php-ext-install pdo pdo_mysql WORKDIR /var/www/html COPY . . CMD ["php", "artisan", "serve", "--host=0.0.0.0", "--port=8000"]
Usuarios del Panel
Contraseñas encriptadas en MariaDB 11 con scrypt + salt (16B).
Tabla de Roles
Catálogo de roles asignables a usuarios.
Registro de Auditoría y Seguridad
Historial de acciones ejecutadas en el servidor (sin almacenar contraseñas ni secretos).