Configuración de Apache
Guía completa de configuración de Apache para FeedbackPulse SaaS.
Requisitos Previos
- Apache 2.4+
mod_rewritehabilitadomod_headershabilitado (para cabeceras de seguridad)- PHP 8.4+ (mediante
mod_phpo PHP-FPM)
Habilitar los Módulos Requeridos
sudo a2enmod rewrite headers ssl
sudo systemctl restart apache2
Host Virtual Básico
Crea un nuevo archivo de host virtual:
sudo nano /etc/apache2/sites-available/feedbackpulse.conf
Pega lo siguiente:
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/feedbackpulse-saas/public
<Directory /var/www/feedbackpulse-saas/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Registros
ErrorLog ${APACHE_LOG_DIR}/feedbackpulse-error.log
CustomLog ${APACHE_LOG_DIR}/feedbackpulse-access.log combined
</VirtualHost>
Habilita el sitio y reinicia:
sudo a2ensite feedbackpulse.conf
sudo a2dissite 000-default.conf # Deshabilita el sitio predeterminado (opcional)
sudo systemctl restart apache2
Host Virtual con HTTPS (usando Let's Encrypt)
Tras obtener un certificado SSL:
<VirtualHost *:443>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/feedbackpulse-saas/public
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
<Directory /var/www/feedbackpulse-saas/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Cabeceras de Seguridad
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
ErrorLog ${APACHE_LOG_DIR}/feedbackpulse-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/feedbackpulse-ssl-access.log combined
</VirtualHost>
# Redirigir HTTP a HTTPS
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>
Soporte de Subdominios con Comodín (Opcional)
Si deseas subdominios de inquilino como acme.yourdomain.com:
<VirtualHost *:443>
ServerName yourdomain.com
ServerAlias *.yourdomain.com
DocumentRoot /var/www/feedbackpulse-saas/public
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
<Directory /var/www/feedbackpulse-saas/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Importante: También necesitas un registro DNS con comodín (
*.yourdomain.com) y un certificado SSL con comodín. Consulta Configuración de DNS con Comodín y Certificados SSL.
El Archivo .htaccess
FeedbackPulse incluye un archivo .htaccess en el directorio public/. Se encarga de:
- Reescritura de URL (URLs amigables sin
index.php) - Forzar HTTPS
- Establecer cabeceras de seguridad
Si tu .htaccess no funciona, asegúrate de que AllowOverride All esté configurado en tu host virtual.
El .htaccess predeterminado incluye:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Y en public/.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
cPanel / Alojamiento Compartido
Si estás en alojamiento compartido con cPanel:
Opción A: Instalar en public_html
- Sube todos los archivos a
public_html/feedbackpulse/ - En cPanel → Dominios o Addon Domains, establece la raíz del documento en
public_html/feedbackpulse/public - Si no puedes cambiar la raíz del documento, usa este truco:
Crea un .htaccess en tu raíz public_html/:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ feedbackpulse/public/$1 [L]
</IfModule>
Opción B: Instalar en un Subdominio
- Crea un subdominio en cPanel (p. ej.,
feedback.yourdomain.com) - Establece su raíz del documento en la carpeta
public/ - Sube todos los archivos de FeedbackPulse al directorio del subdominio
Opción C: Mover el Contenido de public/
Como último recurso en alojamiento restrictivo:
- Sube todos los archivos a un directorio fuera de
public_html/(p. ej.,/home/user/feedbackpulse/) - Copia el contenido de
public/apublic_html/ - Edita
public_html/index.php— actualiza las rutas:
// Cambia esto:
require __DIR__.'/../vendor/autoload.php';
// Por esto:
require '/home/user/feedbackpulse/vendor/autoload.php';
// Cambia esto:
$app = require_once __DIR__.'/../bootstrap/app.php';
// Por esto:
$app = require_once '/home/user/feedbackpulse/bootstrap/app.php';
Advertencia: La Opción C requiere actualizar las rutas tras cada actualización. Usa la Opción A o B si es posible.
Laragon (Desarrollo Local en Windows)
Laragon lo hace increíblemente fácil:
- Coloca la carpeta
feedbackpulse-saasenC:\laragon\www\ - Laragon crea automáticamente un host virtual:
feedbackpulse-saas.test - Visita
http://feedbackpulse-saas.testen tu navegador - ¡Laragon apunta a
public/automáticamente!
Host virtual automático de Laragon: Laragon crea hosts virtuales de Apache para cada carpeta en
www/. La raíz del documento se establece automáticamente enpublic/si ese directorio existe.
Verificar la Configuración de Apache
# Probar sintaxis de configuración
sudo apachectl configtest
# Verificar si mod_rewrite está habilitado
apache2ctl -M | grep rewrite
# Verificar si el sitio está habilitado
ls /etc/apache2/sites-enabled/
# Reiniciar Apache
sudo systemctl restart apache2
Visita https://yourdomain.com — deberías ver la página de inicio de FeedbackPulse o el instalador.
Próximos Pasos
- Certificados SSL — configura HTTPS
- Configuración de DNS con Comodín — habilita subdominios de inquilino
- Guía del Instalador Web — ejecuta el instalador