--- title: "Cómo instalar BookStack en Ubuntu 24.04 con Nginx y MySQL" description: "Instala BookStack en Ubuntu 24.04 con PHP 8.3, MySQL y Nginx, protégelo con HTTPS de Let's Encrypt y programa copias de seguridad diarias de tu wiki." category: "Hosting de Aplicaciones Web" language: es source: https://cubepath.com/es/docs/hosting-de-aplicaciones-web/instalacion-de-la-plataforma-de-documentacion-bookstack updated: 2026-09-25 --- # Cómo instalar BookStack en Ubuntu 24.04 con Nginx y MySQL BookStack es una plataforma de documentación de código abierto, escrita en PHP con Laravel, que organiza el contenido en estanterías, libros, capítulos y páginas. En este tutorial instalarás BookStack en Ubuntu 24.04 con PHP 8.3, MySQL 8 y Nginx, lo publicarás con HTTPS mediante Let's Encrypt y dejarás programada una copia de seguridad diaria de la base de datos y los archivos subidos. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 1 GB de RAM (2 GB recomendados) y 10 GB libres en disco. - Un usuario no root con privilegios `sudo`. - Un dominio o subdominio con un registro DNS A apuntando a la IP del servidor. En esta guía se usa `your_domain` como marcador; sustitúyelo por el tuyo. - Los puertos 22, 80 y 443 abiertos. ## Paso 1: Instalar Nginx, PHP y MySQL BookStack necesita PHP 8.2 o superior con varias extensiones, un servidor web y una base de datos MySQL o MariaDB. Ubuntu 24.04 incluye PHP 8.3 en sus repositorios, así que no hace falta añadir repositorios externos. Actualiza el índice de paquetes e instala todo lo necesario: ```bash sudo apt update sudo apt install nginx mysql-server git unzip composer php-fpm php-curl php-mbstring php-ldap php-xml php-zip php-gd php-mysql ``` Comprueba que PHP-FPM está en marcha: ```bash systemctl status php8.3-fpm --no-pager ``` ```output ● php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager Loaded: loaded (/usr/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled) Active: active (running) ``` Permite el tráfico HTTP y HTTPS en el cortafuegos si usas UFW: ```bash sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' sudo ufw enable ``` ## Paso 2: Crear la base de datos Ejecuta el asistente de seguridad de MySQL para eliminar usuarios anónimos y la base de datos de prueba. Puedes responder `Y` a todas las preguntas: ```bash sudo mysql_secure_installation ``` Abre la consola de MySQL. En Ubuntu el usuario `root` de MySQL se autentica por socket, así que no pide contraseña al usar `sudo`: ```bash sudo mysql ``` Crea la base de datos y un usuario exclusivo para BookStack. Sustituye `your_strong_password` por una contraseña robusta: ```sql CREATE DATABASE bookstack CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'bookstack'@'localhost' IDENTIFIED BY 'your_strong_password'; GRANT ALL PRIVILEGES ON bookstack.* TO 'bookstack'@'localhost'; FLUSH PRIVILEGES; EXIT; ``` Verifica que el nuevo usuario puede conectarse: ```bash mysql -u bookstack -p -e "SHOW DATABASES;" ``` ```output +--------------------+ | Database | +--------------------+ | bookstack | | information_schema | | performance_schema | +--------------------+ ``` ## Paso 3: Descargar BookStack e instalar sus dependencias El proyecto publica cada versión estable en la rama `release` de su repositorio. Clonar esa rama facilita las actualizaciones posteriores, que se reducen a un `git pull`: ```bash sudo git clone https://github.com/BookStackApp/BookStack.git --branch release --single-branch /var/www/bookstack ``` Instala las dependencias de PHP con Composer. La variable `COMPOSER_ALLOW_SUPERUSER` evita el aviso por ejecutarlo como root; más adelante cambiarás el propietario de los archivos: ```bash cd /var/www/bookstack sudo COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --no-interaction ``` Al terminar, el directorio `vendor/` contendrá las librerías de Laravel: ```bash ls /var/www/bookstack/vendor | head -3 ``` ```output autoload.php bacon barryvdh ``` ## Paso 4: Configurar el entorno de BookStack La configuración de BookStack se guarda en el archivo `.env`. Crea una copia a partir de la plantilla: ```bash sudo cp .env.example .env sudo nano .env ``` Ajusta la URL pública y los datos de la base de datos creada en el paso 2: ```ini APP_URL=https://your_domain DB_HOST=localhost DB_DATABASE=bookstack DB_USERNAME=bookstack DB_PASSWORD=your_strong_password ``` `APP_URL` debe coincidir exactamente con la dirección que usarán los navegadores, incluido `https://` y sin barra final; si no coincide, los enlaces y las imágenes se generarán mal. Genera la clave de cifrado de la aplicación: ```bash sudo php artisan key:generate --no-interaction --force ``` ```output INFO Application key set successfully. ``` Asigna los archivos al usuario del servidor web y restringe los permisos de `.env`, que contiene la contraseña de la base de datos: ```bash sudo chown -R www-data:www-data /var/www/bookstack sudo chmod 640 /var/www/bookstack/.env ``` Crea las tablas ejecutando las migraciones como `www-data`, para que los archivos de caché y de log que se generen tengan el propietario correcto: ```bash sudo -u www-data php artisan migrate --force ``` La salida lista cada migración con `DONE`. Si ves un error `SQLSTATE[HY000] [1045] Access denied`, revisa `DB_USERNAME` y `DB_PASSWORD` en `.env`. ## Paso 5: Configurar Nginx Crea un bloque de servidor para BookStack. La raíz debe ser el directorio `public/`, nunca la raíz del proyecto, para no exponer `.env` ni el código: ```bash sudo nano /etc/nginx/sites-available/bookstack ``` ```nginx server { listen 80; listen [::]:80; server_name your_domain; root /var/www/bookstack/public; index index.php; client_max_body_size 50M; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.3-fpm.sock; } location ~ /\.(?!well-known) { deny all; } } ``` Activa el sitio, desactiva el sitio por defecto y comprueba la sintaxis: ```bash sudo ln -s /etc/nginx/sites-available/bookstack /etc/nginx/sites-enabled/ sudo rm /etc/nginx/sites-enabled/default sudo nginx -t ``` ```output nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ``` Recarga Nginx: ```bash sudo systemctl reload nginx ``` El valor `client_max_body_size 50M` permite subir adjuntos de hasta 50 MB. PHP también limita el tamaño de subida; para igualarlo, edita `/etc/php/8.3/fpm/php.ini`, pon `upload_max_filesize = 50M` y `post_max_size = 50M`, y reinicia PHP-FPM con `sudo systemctl restart php8.3-fpm`. ## Paso 6: Activar HTTPS con Let's Encrypt Instala Certbot y su plugin para Nginx: ```bash sudo apt install certbot python3-certbot-nginx ``` Solicita el certificado. Certbot añadirá la configuración TLS al bloque de servidor y la redirección de HTTP a HTTPS: ```bash sudo certbot --nginx -d your_domain ``` El paquete de Ubuntu instala un temporizador de systemd que renueva los certificados automáticamente. Comprueba que la renovación funciona: ```bash sudo certbot renew --dry-run ``` ```output Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/your_domain/fullchain.pem (success) ``` Verifica que BookStack responde por HTTPS y redirige a la pantalla de acceso: ```bash curl -sI https://your_domain | grep -i -E '^(HTTP|location)' ``` ```output HTTP/1.1 302 Found location: https://your_domain/login ``` ## Paso 7: Acceder y cambiar la cuenta de administrador Abre `https://your_domain` en el navegador. BookStack crea un administrador por defecto con estas credenciales: - Correo: `admin@admin.com` - Contraseña: `password` Inicia sesión y, de inmediato, entra en el icono de tu usuario, **Editar perfil**, y cambia el nombre, el correo y la contraseña. Mientras no lo hagas, cualquiera que conozca las credenciales por defecto puede entrar. Después revisa **Ajustes** para definir el nombre de la aplicación, el idioma por defecto y si quieres permitir el acceso público de solo lectura. Para enviar invitaciones y restablecer contraseñas por correo, configura las variables `MAIL_*` de `.env` con los datos de tu servidor SMTP. ## Paso 8: Programar copias de seguridad Una copia completa de BookStack consiste en la base de datos más los archivos subidos (`public/uploads`, `storage/uploads`), los temas (`themes`) y el archivo `.env`. Crea un script que guarde todo ello y elimine las copias de más de 14 días: ```bash sudo nano /usr/local/bin/bookstack-backup ``` ```bash #!/usr/bin/env bash set -euo pipefail BACKUP_DIR="/var/backups/bookstack" APP_DIR="/var/www/bookstack" STAMP="$(date +%F_%H%M)" mkdir -p "$BACKUP_DIR" chmod 700 "$BACKUP_DIR" mysqldump --single-transaction bookstack | gzip > "$BACKUP_DIR/bookstack-db-$STAMP.sql.gz" tar -czf "$BACKUP_DIR/bookstack-files-$STAMP.tar.gz" -C "$APP_DIR" .env public/uploads storage/uploads themes find "$BACKUP_DIR" -type f -mtime +14 -delete ``` El script se ejecuta como root, que accede a MySQL por socket sin necesidad de guardar contraseñas en el archivo. Hazlo ejecutable y pruébalo: ```bash sudo chmod 750 /usr/local/bin/bookstack-backup sudo /usr/local/bin/bookstack-backup sudo ls -lh /var/backups/bookstack ``` ```output -rw-r--r-- 1 root root 48K Sep 25 10:12 bookstack-db-2026-09-25_1012.sql.gz -rw-r--r-- 1 root root 12K Sep 25 10:12 bookstack-files-2026-09-25_1012.tar.gz ``` Prográmalo cada noche a las 02:30 con un archivo en `/etc/cron.d`: ```bash echo '30 2 * * * root /usr/local/bin/bookstack-backup' | sudo tee /etc/cron.d/bookstack-backup ``` Copia estos archivos periódicamente fuera del servidor; una copia que vive en el mismo disco no te protege si pierdes el servidor. ## Actualizar BookStack Antes de actualizar, lanza una copia de seguridad y lee las notas de la versión en GitHub. Después descarga la nueva versión, reinstala las dependencias y aplica las migraciones: ```bash cd /var/www/bookstack sudo /usr/local/bin/bookstack-backup sudo git -c safe.directory=/var/www/bookstack pull origin release sudo COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --no-interaction sudo chown -R www-data:www-data /var/www/bookstack sudo -u www-data php artisan migrate --force ``` Limpia las cachés para que se carguen las vistas y la configuración nuevas: ```bash sudo -u www-data php artisan cache:clear sudo -u www-data php artisan config:clear sudo -u www-data php artisan view:clear ``` ## Solución de problemas - **Error 500 tras la instalación**: revisa `/var/www/bookstack/storage/logs/laravel.log`. La causa más habitual son permisos; vuelve a ejecutar `sudo chown -R www-data:www-data /var/www/bookstack`. - **Las imágenes no cargan o los enlaces apuntan a `http://`**: `APP_URL` en `.env` no coincide con la URL real. Corrígelo y ejecuta `sudo -u www-data php artisan config:clear`. - **Error 413 al subir archivos**: aumenta `client_max_body_size` en Nginx y `upload_max_filesize` y `post_max_size` en `php.ini`. - **502 Bad Gateway**: PHP-FPM no está en marcha o la ruta del socket es distinta. Comprueba `systemctl status php8.3-fpm` y que existe `/run/php/php8.3-fpm.sock`. ## Conclusión Tienes BookStack funcionando en Ubuntu 24.04 detrás de Nginx con HTTPS, con la cuenta de administrador protegida y copias de seguridad diarias. Como siguientes pasos, puedes crear roles y permisos por libro para tu equipo, conectar el inicio de sesión a LDAP o a un proveedor SAML/OIDC siguiendo la documentación oficial de BookStack, y enviar las copias a un almacenamiento externo.