Preparación
- VPS con Ubuntu 20.04/22.04/24.04 o Debian 11/12.
- Usuario con sudo, acceso SSH.
- Dominio (opcional) y puerto abierto 80/443 en el panel del proveedor de acceso.
Apache: instalación, inicio automático y verificación.
sudo apt update && sudo apt -y upgrade
sudo apt -y install apache2
sudo systemctl enable --now apache2
curl -I http://127.0.0.1
Espera el encabezado HTTP/1.1 200 OK. La página predeterminada se encuentra en /var/www/html/.
Cortafuegos UFW para HTTP/HTTPS y estado del servicio
sudo systemctl status apache2 --no-pager
sudo ufw allow 'Apache Full' # opens 80 и 443
sudo ufw enable
sudo ufw status
Si no utiliza UFW, asegúrese de que los puertos 80/443 estén autorizados en el firewall en la nube de su proveedor de acceso.
Servidor MySQL: instalación y protección básica
sudo apt -y install mysql-server
sudo systemctl enable --now mysql
sudo mysql_secure_installation
Responder de forma segura:
- Activar el control de la fuerza de la contraseña (Sí).
- Eliminar usuarios anónimos (Sí).
- Prohibir la conexión root remota (Sí).
- Eliminar la base de datos de prueba (Sí).
- Recargar permisos (Sí).
Creación de una base de datos y un usuario para la aplicación
sudo mysql -u root -p
En la consola MySQL:
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'S3cureP@ss!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Para el acceso remoto, indique el host: «appuser»@«%» y configure la dirección de enlace/firewall por separado.
PHP: instalación del módulo y página de prueba
sudo apt -y install php libapache2-mod-php php-mysql php-cli php-curl php-xml php-zip
php -v
echo '' | sudo tee /var/www/html/info.php
Abra http://<IP>/info.php en su navegador para mostrar la página phpinfo() (a continuación, elimínela).
Directorio de producción y host virtual Apache
Creemos la estructura del sitio web y el archivo de configuración:
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/example.com
sudo nano /var/www/example.com/public_html/index.php
index.php (verification PHP):
Cree el archivo de configuración /etc/apache2/sites-available/example.com.conf:
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/example_error.log
CustomLog ${APACHE_LOG_DIR}/example_access.log combined
AllowOverride All es necesario si utiliza .htaccess (reescrituras, almacenamiento en caché, etc.).
Active el sitio web, mod_rewrite, y vuelva a leer la configuración.
sudo a2ensite example.com.conf
sudo a2dissite 000-default.conf
sudo a2enmod rewrite
sudo apache2ctl configtest # Syntax OK
sudo systemctl reload apache2
Comprueba el sitio web utilizando el dominio o la dirección IP: debería aparecer «Hello from LAMP!».
Comprobación de la conexión PHP ↔ MySQL (PDO)
Crea /var/www/example.com/public_html/dbtest.php:
PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
echo $pdo->query('SELECT 1')->fetchColumn();
} catch (Throwable $e) { echo $e->getMessage(); }
Abre «http://example.com/dbtest.php» → Verás 1.
HTTPS en 2 minutos (bonificación)
Si el dominio apunta al servidor, instalamos un certificado gratuito:
sudo apt -y install certbot python3-certbot-apache
sudo certbot --apache -d example.com -d www.example.com
Certbot active automatiquement HTTPS et le renouvellement automatique.
Configuration de PHP pour la production (en bref)
Modifiez /etc/php/*/apache2/php.ini :
- expose_php = Off
- memory_limit = 256M (en fonction de la charge)
- upload_max_filesize et post_max_size en fonction de votre CMS
- date.timezone = Europe/Kyiv
- Redémarrer Apache : sudo systemctl reload apache2.
Analogues pour AlmaLinux/Rocky/CentOS (RHEL)
Certbot activa automáticamente HTTPS y la renovación automática.
Configuración de PHP para producción (en resumen)
Modifique /etc/php/*/apache2/php.ini:
- expose_php = Off
- memory_limit = 256M (dependiendo de la carga)
- upload_max_filesize y post_max_size según su CMS
- date.timezone = Europe/Kyiv
- Reinicie Apache: sudo systemctl reload apache2.
Análogos para AlmaLinux/Rocky/CentOS (RHEL)
sudo dnf -y install httpd mariadb-server php php-mysqlnd php-cli php-xml php-zip php-curl
sudo systemctl enable --now httpd mariadb
sudo mysql_secure_installation
# дальше — те же шаги: создать БД/пользователя, vhost в /etc/httpd/conf.d/site.conf,
# включить firewalld: sudo firewall-cmd --add-service=http --add-service=https --permanent && sudo firewall-cmd --reload
Lista de comprobación para iniciar LAMP
- Apache funciona, los puertos 80/443 están abiertos, mod_rewrite está activado.
- MySQL es seguro, se han creado appdb y appuser.
- PHP está instalado con los módulos necesarios, info.php se ha eliminado.
- Virtual Host está activado, AllowOverride All está definido.
- dbtest.php devuelve 1 (PDO funciona).
- HTTPS está activado (si hay un dominio disponible), cron/auto-renew está activo.