Saltar al contenido principal

Configuración de Apache

Guía completa de configuración de Apache para FeedbackPulse SaaS.


Requisitos Previos

  • Apache 2.4+
  • mod_rewrite habilitado
  • mod_headers habilitado (para cabeceras de seguridad)
  • PHP 8.4+ (mediante mod_php o 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

  1. Sube todos los archivos a public_html/feedbackpulse/
  2. En cPanel → Dominios o Addon Domains, establece la raíz del documento en public_html/feedbackpulse/public
  3. 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

  1. Crea un subdominio en cPanel (p. ej., feedback.yourdomain.com)
  2. Establece su raíz del documento en la carpeta public/
  3. Sube todos los archivos de FeedbackPulse al directorio del subdominio

Opción C: Mover el Contenido de public/

Como último recurso en alojamiento restrictivo:

  1. Sube todos los archivos a un directorio fuera de public_html/ (p. ej., /home/user/feedbackpulse/)
  2. Copia el contenido de public/ a public_html/
  3. 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:

  1. Coloca la carpeta feedbackpulse-saas en C:\laragon\www\
  2. Laragon crea automáticamente un host virtual: feedbackpulse-saas.test
  3. Visita http://feedbackpulse-saas.test en tu navegador
  4. ¡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 en public/ 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