mini Cpanel para Raspberry PI

🟢 Mini cPanel – Procedimiento Completo para Raspberry Pi 3B


1️⃣ Instalación de FileBrowser

Descarga e instala el binario oficial de FileBrowser:

curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash

Inicia FileBrowser manualmente por primera vez:

sudo filebrowser -d /etc/filebrowser.db -r /var/www/apps
  • Esto crea la base de datos inicial y un usuario admin con contraseña aleatoria, estate atento y COPIALA!
  • Solo escucha en 127.0.0.1 (localhost)
  • La carpeta raíz para las apps será /var/www/apps

2️⃣ Ajuste de permisos para LAN y servicio

sudo chown www-data:www-data /etc/filebrowser.db
sudo chmod 600 /etc/filebrowser.db
sudo chown -R www-data:www-data /var/www/apps
sudo chmod -R 750 /var/www/apps

3️⃣ Probar acceso desde otro PC de la LAN

Ejecuta FileBrowser escuchando en todas las IP de la Raspberry:

sudo -u www-data /usr/local/bin/filebrowser -d /etc/filebrowser.db -r /var/www/apps -a 0.0.0.0 -p 8080
  • Desde tu navegador en otro PC de la LAN: http://IP_DE_LA_RASPI:8080
  • Usuario: admin
  • Contraseña: la que se generó al iniciar FileBrowser
  • Cambia la contraseña al entrar por primera vez

4️⃣ Crear scripts de administración

Cierra el FileBrowser desde la Raspi: Crtl+C

Crea la carpeta para scripts del mini cPanel:

sudo mkdir -p /var/www/apps/admin-scripts
sudo chown -R www-data:www-data /var/www/apps/admin-scripts
sudo chmod -R 750 /var/www/apps/admin-scripts

Ejemplos de scripts

Los puedes crear en la carpeta admin-scripts directamente desde el FileBrowser

  • reiniciar-php.sh
#!/bin/bash
touch /tmp/restart_php_fpm.flag
echo "Solicitud de reinicio registrada"
  • ajustar-permisos.sh
#!/bin/bash
sudo chown -R www-data:www-data /var/www/apps
sudo chmod -R 750 /var/www/apps
echo "Permisos ajustados correctamente"
  • backup.sh (definitivo, funciona con sudo)
#!/bin/bash
sudo mkdir -p /home/pi/backups
sudo cp -r /var/www/apps /home/pi/backups/apps_$(date +%Y%m%d_%H%M%S)
echo "Backup realizado en /home/pi/backups"

Dar permisos de ejecución:

# 1. Asegúrate de que las carpetas superiores permitan el paso
sudo chmod 755 /var/www/apps
sudo chmod 755 /var/www/apps/admin-scripts

# 2. Ahora intenta el chmod de los archivos
sudo chmod +x /var/www/apps/admin-scripts/*.sh

Permitir que www-data ejecute el script de backup con sudo sin contraseña:

sudo visudo

Añadir al final:

www-data ALL=(ALL) NOPASSWD: /var/www/apps/admin-scripts/backup.sh
www-data ALL=(ALL) NOPASSWD: /var/www/apps/admin-scripts/reiniciar-php.sh
www-data ALL=(ALL) NOPASSWD: /var/www/apps/admin-scripts/ajustar-permisos.sh

5️⃣ Crear mini panel web PHP

Archivo: /var/www/html/admin.phpimportante: mover a /html

o

Creamos el archivo directamente en la ruta correcta: sudo nano /var/www/html/admin.php

sudo mv /var/www/apps/admin.php /var/www/html/
sudo chown www-data:www-data /var/www/html/admin.php
sudo chmod 750 /var/www/html/admin.php

Contenido del archivo (muy básico):

<?php
session_start();
$secret_pass = "TU_PASSWORD_SEGURA"; // Cambiar antes de producción

if(isset($_POST['password'])){
if($_POST['password'] === $secret_pass){
$_SESSION['logged_in'] = true;
} else {
$error = "Contraseña incorrecta";
}
}

if(!isset($_SESSION['logged_in'])){
?>
<form method="POST">
<input type="password" name="password" placeholder="Contraseña">
<input type="submit" value="Entrar">
<?php if(isset($error)) echo "<p>$error</p>"; ?>
</form>
<?php
exit;
}

function runScript($script){
$output = shell_exec("sudo /var/www/apps/admin-scripts/$script 2>&1");
echo "<pre>$output</pre>";
}

if(isset($_GET['action'])){
switch($_GET['action']){
case 'reiniciar_php':
runScript('reiniciar-php.sh'); break;
case 'ajustar_permisos':
runScript('ajustar-permisos.sh'); break;
case 'backup':
runScript('backup.sh'); break;
}
}
?>
<h1>Mini cPanel Profesional</h1>
<ul>
<li><a href="?action=reiniciar_php">Reiniciar PHP-FPM</a></li>
<li><a href="?action=ajustar_permisos">Ajustar permisos apps</a></li>
<li><a href="?action=backup">Hacer backup de JSON + DB</a></li>
</ul>

Ahora el panel PHP se accede desde:

http://IP_DE_LA_RASPI/admin.php

6️⃣ Crear servicio systemd para FileBrowser (ejecución en segundo plano)

Archivo: /etc/systemd/system/filebrowser.service

sudo nano /etc/systemd/system/filebrowser.service

[Unit]
Description=FileBrowser Web Manager
After=network.target

[Service]
Type=simple
User=www-data
Group=www-data
ExecStart=/usr/local/bin/filebrowser \
-d /etc/filebrowser.db \
-r /var/www/apps \
-a 0.0.0.0 \
-p 8080
Restart=on-failure
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Comprueba que el binario existe:

ls -l /usr/local/bin/filebrowser

Debe existir y ser ejecutable.

Comprueba la base de datos:

ls -l /etc/filebrowser.db

Debe ser propiedad de www-data.

Recargar y habilitar:

sudo systemctl daemon-reload
sudo systemctl enable filebrowser
sudo systemctl start filebrowser
sudo systemctl status filebrowser

Parar / arrancar manualmente:

sudo systemctl stop filebrowser
sudo systemctl start filebrowser

📌 Nota importante (buenas prácticas)

  • NO ejecutes FileBrowser como root
  • NO guardes apps en /var/www/html
  • /html → solo panel y frontend
  • /apps → backend, uploads, datos

7️⃣ Seguridad y recomendaciones

  • Acceso solo desde LAN
  • Cambiar la contraseña admin al entrar por primera vez
  • Opcional: configurar HTTPS con certificado self-signed
  • Usar usuario admin separado y no usar pi para administración
  • Ajustar firewall si es necesario (puerto 8080 abierto solo LAN)

8️⃣ Estado final

✅ Gestionas WebApps desde navegador (subida, permisos, estructura)
✅ Reinicio de PHP-FPM desde web
✅ Backups automáticos de JSON + DB funcionando con sudo
✅ Panel seguro solo LAN
✅ Escalable: firewall, MariaDB, phpMyAdmin visual

🐉 En la siguiente entrada del Blog…

  • Añadimos herramientas
  • Mejoramos la UX (User Experience)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *