Cómo instalar LOMP Stack (OpenLiteSpeed, MySQL y PHP) en Ubuntu 24.04
OpenLiteSpeed es una versión ligera y de código abierto del Servidor LiteSpeed desarrollado por LiteSpeed Technologies. Es compatible con las reglas Apache Rewrite, HTTP/2 y HTTP/3, y los protocolos TLS v1.3 y QUIC. Viene con un panel de administración basado en WebGUI, lo que lo diferencia de otros servidores y lo hace más fácil de gestionar.
La pila LOMP es un acrónimo de Linux, OpenLiteSpeed, MySQL/MariaDB y PHP. Los servidores Litespeed son conocidos por su velocidad, especialmente con PHP, que se integra mediante la Interfaz de Programación de Aplicaciones para Servidores LiteSpeed (LSAPI). El intérprete de LiteSpeed PHP (LSPHP) sirve páginas PHP dinámicas a través de LSAPI.
Este tutorial te mostrará cómo instalar un Servidor OpenLiteSpeed en Ubuntu 24.04.
Requisitos previos
- Un servidor con Ubuntu 24.04.
- Un usuario no root con privilegios sudo.
- Un nombre de dominio completo (FQDN) como
example.com
que apunte al servidor. - Asegúrate de que todo está actualizado.
$ sudo apt update $ sudo apt upgrade
- Pocos paquetes que necesite tu sistema.
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
Puede que algunos de estos paquetes ya estén instalados en tu sistema.
Paso 1 – Configurar el cortafuegos
El primer paso es configurar el cortafuegos. Debian viene con ufw (Uncomplicated Firewall) por defecto.
Comprueba si el cortafuegos se está ejecutando.
$ sudo ufw status
Obtendrás la siguiente salida.
Status: inactive
Permite el puerto SSH para que el cortafuegos no rompa la conexión actual al activarlo.
$ sudo ufw allow OpenSSH
Permite también los puertos HTTP y HTTPS.
$ sudo ufw allow http $ sudo ufw allow https
Abre los puertos relacionados con Openlitespeed.
$ sudo ufw allow 7080/tcp
Habilita el cortafuegos
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
Comprueba de nuevo el estado del cortafuegos.
$ sudo ufw status
Deberías ver un resultado similar.
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere 7080/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6) 7080/tcp (v6) ALLOW Anywhere (v6)
Paso 2 – Instalar OpenLiteSpeed
Instalaremos OpenLiteSpeed compilando desde el código fuente. Descarga el archivo del código fuente de OpenLiteSpeed. Puedes obtener el enlace al último archivo de código fuente en la página oficial de descargas de OpenLiteSpeed. La versión 1.7.19 es la versión estable actual disponible.
$ wget https://openlitespeed.org/packages/openlitespeed-1.7.19.src.tgz
Extrae el archivo.
$ tar -zxf openlitespeed-*.tgz
Cambia al directorio extraído.
$ cd openlitespeed-1.7.19
Construye el paquete del servidor.
$ sudo ./build.sh
Puede que tengas que esperar entre 5 y 10 minutos a que termine el proceso. Ignora cualquier advertencia que recibas durante el proceso. Cuando termine, recibirás el siguiente mensaje.
............... [100%] Linking CXX shared library modpagespeed.so /usr/bin/ld: warning: 140.x25519-asm-x86_64.o.o: missing .note.GNU-stack section implies executable stack /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker [100%] Built target modpagespeed Start to pack files. -e Building finished, please run ./install.sh for installation. -e You may want to update the ols.conf to change the settings before installation. -e Enjoy.
Una vez finalizado el proceso, abre el archivo ols.conf
para editarlo.
$ sudo nano ols.conf
Edita el archivo como se muestra a continuación.
#If you want to change the default values, please update this file. # SERVERROOT=/usr/local/lsws OPENLSWS_USER=nobody OPENLSWS_GROUP=nobody OPENLSWS_ADMIN=navjot [email protected] OPENLSWS_ADMINSSL=yes OPENLSWS_ADMINPORT=7080 USE_LSPHP7=yes DEFAULT_TMP_DIR=/tmp/lshttpd PID_FILE=/tmp/lshttpd/lshttpd.pid OPENLSWS_EXAMPLEPORT=8088 #You can set password here #OPENLSWS_PASSWORD=
No añadas aquí tu contraseña. Estableceremos la contraseña más tarde utilizando la línea de comandos. Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Ahora que OpenLiteSpeed está construido, vamos a instalarlo.
$ sudo ./install.sh
El script instalador instala y habilita el servicio lsws
para el servidor. Cuando termine, recibirás el siguiente mensaje.
Updating webcache manager, please waiting ... Downloading latest shared code tar file... Checking tar file md5... Removing existing shared code directory... Extracting downloaded shared code... Removing local shared code tar file... Updating lscmctl script... Done! -e Installation finished, Enjoy! -e Your webAdmin password is kXjWTl5j, written to file /usr/local/lsws/adminpasswd.
Inicia el servidor OpenLiteSpeed.
$ sudo systemctl start lsws
Comprueba el estado del servicio.
$ sudo systemctl status lsws ? lshttpd.service - OpenLiteSpeed HTTP Server Loaded: loaded (/usr/lib/systemd/system/lshttpd.service; enabled; preset: enabled) Active: active (running) since Sun 2024-06-02 12:58:44 UTC; 3s ago Process: 52583 ExecStart=/usr/local/lsws/bin/lswsctrl start (code=exited, status=0/SUCCESS) Main PID: 52604 (litespeed) CGroup: /system.slice/lshttpd.service ??52604 "openlitespeed (lshttpd - main)" ??52610 "openlitespeed (lscgid)" ??52623 "openlitespeed (lshttpd - #01)" ??52624 lsphp Jun 02 12:58:42 lompserver systemd[1]: Starting lshttpd.service - OpenLiteSpeed HTTP Server... Jun 02 12:58:42 lompserver lswsctrl[52583]: [OK] litespeed: pid=52604. Jun 02 12:58:44 lompserver systemd[1]: Started lshttpd.service - OpenLiteSpeed HTTP Server.
Comprueba la versión del servidor instalada.
$ /usr/local/lsws/bin/lshttpd -v LiteSpeed/1.7.19 Open (BUILD built: Tue Apr 16 15:14:26 UTC 2024) module versions: lsquic 3.3.2 modgzip 1.1 cache 1.66 mod_security 1.4 (with libmodsecurity v3.0.12)
Crear la contraseña de administrador
Puedes utilizar la contraseña de administrador proporcionada durante el proceso de instalación. Sin embargo, debes crear la tuya propia restableciéndola. Ejecuta el script de restablecimiento de contraseña.
$ sudo /usr/local/lsws/admin/misc/admpass.sh
Obtendrás la siguiente salida. Elige tu nombre de usuario y establece una contraseña segura.
Please specify the user name of administrator. This is the user name required to login the administration Web interface. User name [admin]: navjot Please specify the administrator's password. This is the password required to login the administration Web interface. Password: Retype password: Administrator's username/password is updated successfully!
Ya puedes utilizar la nueva contraseña de administrador.
Abre http://<YOURSERVERIP>:7080
para acceder al panel de administración de OpenLiteSpeed. En tu primer acceso, tu navegador te advertirá de que tu conexión no es privada. Haz clic en Avanzado y pulsa «Aceptar el riesgo y Continuar» (en el caso de Firefox) o «Proceder a <YOURSERVERIP>(unsafe)
» (en el caso del navegador basado en Chromium). No volverás a ver la advertencia.
Deberías ver la página de inicio de sesión.
Introduce las credenciales que estableciste anteriormente y pulsa el botón Iniciar sesión para continuar.
Aparecerá la siguiente pantalla.
Paso 3 – Instalar MySQL
Antes de proceder con la instalación de MySQL, necesitamos actualizar el repositorio de LiteSpeed. El repositorio de LiteSpeed añadido a través del instalador no funciona correctamente.
Abre el archivo /etc/apt/sources.list.d/lst_debian_repo.list
para editarlo.
$ sudo nano /etc/apt/sources.list.d/lst_debian_repo.list
Cambia el contenido del archivo añadiendo el nombre de la versión Ubuntu 24.04 (noble
) a la URL del repositorio.
deb http://rpms.litespeedtech.com/debian/ noble main
Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Instala el servidor MySQL.
$ sudo apt install mysql-server
El servicio MySQL se inicia y ejecuta automáticamente tras la instalación.
Comprueba el estado del servicio.
$ sudo systemctl status mysql
Obtendrás el siguiente resultado.
? mysql.service - MySQL Community Server Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; preset: enabled) Active: active (running) since Sun 2024-06-02 13:42:12 UTC; 8min ago Process: 57889 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 57898 (mysqld) Status: "Server is operational" Tasks: 37 (limit: 2263) Memory: 370.6M (peak: 386.9M) CPU: 6.762s CGroup: /system.slice/mysql.service ??57898 /usr/sbin/mysqld Jun 02 13:42:11 lompserver systemd[1]: Starting mysql.service - MySQL Community Server...
Ejecuta el script de seguridad de MySQL.
$ sudo mysql_secure_installation
Se te pedirá que instales el Validate Password Component
. Pulsa Y
para continuar.
Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No: y
A continuación, se te pedirá que elijas la fortaleza de la contraseña. Selecciona 2
para Fuerte y procede.
There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
La instalación de MySQL no te pedirá que establezcas una contraseña de root porque el tipo de autenticación por defecto es auth_socket
, que depende de la autenticación de tu sistema Linux. Sin embargo, puedes cambiarla más adelante.
Skipping password set for root as authentication with auth_socket is used by default. If you would like to use password authentication instead, this can be done with the "ALTER_USER" command. See https://dev.mysql.com/doc/refman/8.0/en/alter-user.html#alter-user-password-management for more information.
A continuación, se te harán algunas preguntas para mejorar la seguridad de MySQL. Escribe Y para eliminar los usuarios anónimos, desautorizar los inicios de sesión remotos de root, eliminar la base de datos de prueba y recargar las tablas de privilegios.
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
Puedes entrar en el intérprete de comandos de MySQL escribiendo sudo mysql
en la línea de comandos.
Paso 4 – Instalar PHP
Como hemos creado nuestro paquete a partir del código fuente, compila y construye una versión antigua de PHP cuyo uso no se recomienda. Puedes comprobarlo mediante el siguiente comando.
$ /usr/local/lsws/fcgi-bin/lsphp -v PHP 5.6.40 (litespeed) (built: May 10 2023 23:03:31) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
Por lo tanto, necesitamos compilar e instalar la última versión de PHP. Pero, antes de proceder, necesitamos instalar las herramientas de compilación.
$ sudo apt install build-essential autoconf libtool bison re2c pkg-config
El siguiente paso es instalar los paquetes necesarios para el proceso de compilación de PHP.
$ sudo apt install libssl-dev libsqlite3-dev zlib1g-dev libcurl4-openssl-dev libonig-dev libzip-dev libmemcached-dev libreadline-dev libgmp-dev libpng-dev libjpeg-dev libwebp-dev libxpm-dev libicu-dev libfreetype6-dev libxslt-dev libldb-dev libtidy-dev libvips-dev libsodium-dev libavif-dev libldap2-dev libxml2-dev libkrb5-dev libc-client2007e-dev libpq-dev libargon2-1 libargon2-dev libbz2-dev libffi-dev libc-client-dev libpspell-dev flex libgmp3-dev libmcrypt-dev libmhash-dev freetds-dev libmysqlclient-dev libncurses5-dev libpcre3-dev libaspell-dev librecode-dev libsnmp-dev
A continuación, descarga el código fuente de PHP. Descargaremos la versión PHP 8.3.7, que es la última versión disponible en el momento de escribir esto.
$ cd ~ $ wget https://www.php.net/distributions/php-8.3.7.tar.gz
Extrae los archivos.
$ tar -xzf php-8.3.7.tar.gz
Cambia al directorio descargado.
$ cd php-8.3.7
A continuación, ejecuta el script configure con las siguientes opciones. La opción --enable-litespeed
es esencial.
$ sudo ./configure --prefix=/usr/local/lsws/lsphp83 --enable-bcmath --enable-calendar --enable-exif --enable-ftp --enable-gd --enable-intl --enable-mbregex --enable-mbstring --enable-mysqlnd --enable-opcache --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --with-avif --with-curl --with-ffi --with-freetype --with-gettext --with-gmp --with-imap --with-imap-ssl --with-jpeg --with-kerberos --with-libxml --with-ldap --with-mysqli --with-mysql-sock=/run/mysqld/mysqld.sock --with-openssl --with-password-argon2 --with-pdo-mysql=mysqlnd --with-pdo-pgsql=/usr/bin/pg_config --with-pear --with-pspell --with-readline --with-sodium --with-tidy --with-webp --with-xpm --with-xsl --with-zip --with-zlib --enable-litespeed
Deberías obtener la siguiente salida una vez finalizado el script.
+--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP.
Compila el código fuente.
$ sudo make -j $(nproc)
Recibirás una salida similar una vez finalizado.
Generating phar.php Generating phar.phar PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled. directorytreeiterator.inc phar.inc invertedregexiterator.inc directorygraphiterator.inc pharcommand.inc clicommand.inc Build complete. Don't forget to run 'make test'.
Una vez terminado, ejecuta el siguiente comando para intentar comprobar la versión.
$ ./sapi/litespeed/php -v PHP 8.3.7 (litespeed) (built: Jun 3 2024 05:28:43) Copyright (c) The PHP Group Zend Engine v4.3.7, Copyright (c) Zend Technologies
Instala PHP.
$ sudo make install
Obtendrás la siguiente salida.
Installing shared extensions: /usr/local/lsws/lsphp83/lib/php/extensions/no-debug-non-zts-20230831/ Installing PHP CLI binary: /usr/local/lsws/lsphp83/bin/ Installing PHP CLI man page: /usr/local/lsws/lsphp83/php/man/man1/ Installing PHP LiteSpeed binary: /usr/local/lsws/lsphp83/bin/ Installing phpdbg binary: /usr/local/lsws/lsphp83/bin/ Installing phpdbg man page: /usr/local/lsws/lsphp83/php/man/man1/ Installing PHP CGI binary: /usr/local/lsws/lsphp83/bin/ Installing PHP CGI man page: /usr/local/lsws/lsphp83/php/man/man1/ Installing build environment: /usr/local/lsws/lsphp83/lib/php/build/ Installing header files: /usr/local/lsws/lsphp83/include/php/ Installing helper programs: /usr/local/lsws/lsphp83/bin/ program: phpize program: php-config Installing man pages: /usr/local/lsws/lsphp83/php/man/man1/ page: phpize.1 page: php-config.1 Installing PEAR environment: /usr/local/lsws/lsphp83/lib/php/ [PEAR] Archive_Tar - installed: 1.4.14 [PEAR] Console_Getopt - installed: 1.4.3 [PEAR] Structures_Graph- installed: 1.1.1 [PEAR] XML_Util - installed: 1.4.5 warning: pear/PEAR dependency package "pear/Archive_Tar" installed version 1.4.14 is not the recommended version 1.4.4 [PEAR] PEAR - installed: 1.10.15 Wrote PEAR system config file at: /usr/local/lsws/lsphp83/etc/pear.conf You may want to add: /usr/local/lsws/lsphp83/lib/php to your php.ini include_path Installing PDO headers: /usr/local/lsws/lsphp83/include/php/ext/pdo/
Verifica la instalación de PHP. Hay dos binarios PHP disponibles en el directorio /usr/local/lsws/lsphp83/bin
. Uno es el normal php
que es la versión de línea de comandos y el otro es la versión Litespeed lsphp
. La segunda es la que utilizaremos.
$ /usr/local/lsws/lsphp83/bin/lsphp -v PHP 8.3.7 (litespeed) (built: Jun 3 2024 05:28:43) Copyright (c) The PHP Group Zend Engine v4.3.7, Copyright (c) Zend Technologies
Puedes consultar la lista de módulos PHP habilitados.
$ /usr/local/lsws/lsphp83/bin/php --modules [PHP Modules] bcmath calendar Core ctype curl date dom exif FFI fileinfo filter ftp gd gettext gmp hash iconv imap intl json ldap libxml mbstring mysqli mysqlnd openssl pcre PDO pdo_mysql pdo_pgsql pdo_sqlite Phar posix pspell random readline Reflection session shmop SimpleXML soap sockets sodium SPL sqlite3 standard sysvsem sysvshm tidy tokenizer xml xmlreader xmlwriter xsl zip zlib [Zend Modules]
Copia el php.ini-production
de la carpeta de instalación a la carpeta /usr/local/lsws/lsphp83/lib
.
$ sudo cp php.ini-production /usr/local/lsws/lsphp83/lib/php.ini
Más adelante configuraremos OpenLiteSpeed para que funcione con PHP.
Abre el php.ini
para editarlo.
$ sudo nano /usr/local/lsws/lsphp83/lib/php.ini
Busca la variable include_path
y cambia su valor como se muestra a continuación.
$ ;;;;;;;;;;;;;;;;;;;;;;;;; ; Paths and Directories ; ;;;;;;;;;;;;;;;;;;;;;;;;; ; UNIX: "/path1:/path2" include_path = "/usr/local/lsws/lsphp83/lib/php"
Cuando hayas terminado, guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.
Paso 5 – Configurar MySQL
Accede al shell de MySQL.
$ sudo mysql
Crea una base de datos de prueba. Sustituye testdb
por el nombre de base de datos que prefieras.
mysql> CREATE DATABASE testdb;
Crea un usuario de prueba. Sustituye testuser
por un nombre de usuario apropiado. Sustituye Your_Password123
por una contraseña segura.
mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'Your_Password123';
Concede al usuario todos los privilegios sobre la base de datos.
mysql> GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'localhost';
Elimina los privilegios del usuario.
mysql> FLUSH PRIVILEGES;
Sal del intérprete de comandos MySQL.
mysql> exit
Paso 6 – Configurar OpenLiteSpeed
Vuelve a cambiar el puerto HTTP a 80
Cambiemos el puerto HTTP por defecto a 80. Accede a tu panel de administración en http://<YOURSERVERIP>:7080
con las credenciales que acabas de crear.
Visita la sección Escuchadores de la izquierda. Verás los oyentes por defecto con el puerto 8080
.
Pulsa el botón Ver para ver la configuración detallada. En la página siguiente, en Listener Default > General Page, haz clic en el icono Editar y cambia el puerto de 8080
a 80
.
Haz clic en Guardar y reinicia el servidor haciendo clic en el botón Reinicio graceful.
Abre la URL http://<YOURSERVERIP>
en tu navegador y deberías obtener la siguiente página.
Paso 7 – Configurar PHP
En este paso, tenemos que asociar nuestra copia de PHP 8.3 con el servidor.
Haz clic en la sección Configuración del Serv idor, a la izquierda, y luego en la pestaña Aplicación Externa. Verás una LiteSpeed App para PHP ya existente. Haremos algunas modificaciones en ella.
Haz clic en el botón Editar para editar la aplicación PHP.
A continuación, haz coincidir la configuración como se muestra a continuación. Deja todos los demás campos en blanco.
Name: lsphp Address: uds://tmp/lshttpd/lsphp.sock Max Connections: 35 Environment: PHP_LSAPI_MAX_REQUESTS=500 PHP_LSAPI_CHILDREN=35 LSAPI_AVOID_FORK=200M Initial Request Timeout (secs): 60 Retry Timeout : 0 Persistent Connection: Yes Response Buffering: no Start By Server: Yes(Through CGI Daemon) Command: lsphp83/bin/lsphp Back Log: 100 Instances: 1 Priority: 0 Memory Soft Limit (bytes): 2047M Memory Hard Limit (bytes): 2047M Process Soft Limit: 1400 Process Hard Limit: 1500
Haz clic en Guardar cuando hayas terminado.
Ahora que hemos creado nuestra propia app PHP 8.3, debemos decirle al servidor que empiece a utilizarla. Como hemos editado el listado por defecto, ya está configurado. Reinicia el servidor haciendo clic en el botón Reinicio graceful.
Para comprobar si tu PHP se ha conmutado correctamente, visita http://<YOURSERVERIP>/phpinfo.php
en tu navegador.
Reiniciar PHP
En OpenLiteSpeed, si editas php.ini o instalas un nuevo módulo PHP, al reiniciar el servidor no se mostrarán los cambios. Para ello tendrás que reiniciar el proceso PHP. En primer lugar, tendrás que localizar los ID de proceso del proceso lsphp
.
$ ps aux | grep lsphp nobody 120093 0.0 0.8 123772 32920 ? S 06:35 0:00 lsphp nobody 120111 0.0 0.4 123772 18980 ? Ss 06:38 0:00 lsphp navjot 120139 0.0 0.0 6544 2304 pts/0 S+ 06:44 0:00 grep --color=auto lsphp
Mata manualmente los procesos lsphp
.
$ sudo kill -9 120093 $ sudo kill -9 120111
Reinicia el Servidor.
$ sudo systemctl restart lsws
Paso 8 – Crear el VirtualHost
En primer lugar, necesitamos crear directorios para nuestro host virtual.
$ sudo mkdir /usr/local/lsws/example.com/{html,logs} -p
El directorio html
contendrá los archivos públicos y el directorio logs
contendrá los registros del servidor.
A continuación, abre la consola Admin, accede a la sección Hosts Virtuales desde la izquierda y haz clic en el botón Añadir.
Rellena los valores como se indica
Virtual Host Name: example.com Virtual Host Root: $SERVER_ROOT/example.com/ Config File: $SERVER_ROOT/conf/vhosts/$VH_NAME/vhconf.conf Follow Symbolic Link: Yes Enable Scripts/ExtApps: Yes Restrained: Yes External App Set UID Mode: Server UID
Pulsa el botón Guardar cuando hayas terminado. Aparecerá el siguiente error porque el archivo de configuración no existe en este momento. Haz clic en el enlace para crear el archivo de configuración.
Vuelve a pulsar el botón Guardar para terminar de crear el host virtual.
Una vez creado el host virtual, ve a Hosts Virtuales -> Elegir Host Virtual(ejemplo.com) -> General y modifica la configuración como se indica.
Document Root: $VH_ROOT/html/ Domain Name: example.com Enable GZIP Compression: Yes Enable Brotli Compression: Yes
Pulsa el botón Guardar cuando hayas terminado. A continuación, tenemos que configurar los archivos de índice. Haz clic en el botón Editar contra Archivos de índice debajo de la Sección General. Configura las siguientes opciones.
Use Server Index Files: No Index files: index.php, index.html, index.htm Auto Index: No
Haz clic en Guardar cuando hayas terminado. A continuación, tenemos que elegir Archivos de registro. Ve a la sección Registro, haz clic en Editar en Registro de host virtual e introduce los siguientes valores. No modifiques los demás ajustes.
Use Server’s Log: Yes File Name: $VH_ROOT/logs/error.log Log Level: ERROR Rolling Size (bytes): 10M Keep Days: 30 Compress Archive: Not Set
Puedes elegir el Nivel de registro como DEBUG
si estás en una máquina de desarrollo.
Haz clic en Guardar y, a continuación, haz clic en el signo más de la sección Registro de acceso para añadir una nueva entrada. Rellena los siguientes valores.
Log Control: Own Log File File Name: $VH_ROOT/logs/access.log Piped Logger: Not Set Log Format: Not Set Log Headers: Not Set Rolling Size (bytes): 10M Keep Days: 30 Compress Archive: Not Set Bytes log: Not Set
Haz clic en Guardar cuando hayas terminado. A continuación, tenemos que configurar el Control de Acceso en la sección Seguridad. Establece los siguientes valores.
Allowed List: * Denied List: Not set
Haz clic en Guardar cuando hayas terminado. A continuación, tenemos que configurar la Definición del Manejador de Script. Haz clic en el signo más (+) para añadir una nueva definición. Establece los siguientes valores.
Suffixes: php Handler Type: LiteSpeed SAPI Handler Name: [Server Level]: lsphp
Haz clic en Guardar cuando hayas terminado. A continuación, tenemos que establecer el Control de Reescritura en la sección Reescritura. Establece los siguientes valores.
Enable Rewrite: Yes Auto Load from .htaccess: Yes Log Level: Not Set
Haz clic en Guardar cuando hayas terminado. Y por último, tenemos que configurar los Escuchadores. Ve a la sección Escuchas y haz clic en el botón Ver frente a Escucha por defecto. A continuación, haz clic en el botón Añadir en Asignaciones de host virtual para añadir una nueva asignación y establece los siguientes valores.
Virtual Host: example.com Domains: example.com
Haz clic en Guardar cuando hayas terminado. Ahora, haz clic en el botón Reinicio graceful para aplicar todos los cambios anteriores y reiniciar el servidor.
Paso 9 – Instalar SSL
Configurar SSL en OpenLiteSpeed requiere que configuremos dos certificados. Un certificado autofirmado para todo el servidor y un certificado Let’s Encrypt específico para cada sitio.
El panel de administración ya viene con un certificado autofirmado preinstalado que está disponible en el directorio /usr/local/lsws/admin/conf
.
Creemos primero el certificado autofirmado para el servidor general.
$ cd ~ $ openssl req -x509 -days 365 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes
Obtendrás una salida similar.
----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []:example.com Email Address []:[email protected]
Puedes pulsar intro en todos los campos y dejarlos vacíos. Introduce tu dominio para el Nombre común y tu dirección de correo electrónico.
Crea el directorio para los certificados autofirmados.
$ sudo mkdir /usr/local/lsws/certs
Copia el certificado en el directorio /usr/local/lsws/certs
.
$ sudo mv *.pem /usr/local/lsws/certs
Necesitamos instalar Certbot para generar certificados SSL gratuitos ofrecidos por Let’s Encrypt.
Puedes instalar Certbot utilizando el repositorio de Debian u obtener la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd. Ubuntu 24.04 viene con Snapd preinstalado.
Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.
$ sudo snap install core $ sudo snap refresh core
Ejecuta el siguiente comando para instalar Certbot.
$ sudo snap install --classic certbot
Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin
.
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
Verifica la instalación.
$ certbot --version certbot 2.10.0
Ejecuta el siguiente comando para generar un certificado SSL.
Obtén el certificado SSL. El directorio webroot se establece en el directorio HTML público configurado anteriormente.
$ sudo certbot certonly --webroot -w /usr/local/lsws/example.com/html/ --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com
Genera un certificado de grupo Diffie-Hellman.
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
Comprueba el servicio programador de renovación de Certbot.
$ sudo systemctl list-timers
Encontrarás snap.certbot.renew.service
como uno de los servicios programados para ejecutarse.
NEXT LEFT LAST PASSED UNIT ACTIVATES Mon 2024-06-03 07:20:00 UTC 5min Mon 2024-06-03 07:10:02 UTC 4min 11s ago sysstat-collect.timer sysstat-collect.service Mon 2024-06-03 08:29:00 UTC 1h 14min - - snap.certbot.renew.timer snap.certbot.renew.service Mon 2024-06-03 08:50:32 UTC 1h 36min Mon 2024-06-03 07:04:04 UTC 10min ago fwupd-refresh.timer fwupd-refresh.service
Para comprobar si la renovación SSL funciona correctamente, realiza una ejecución en seco del proceso.
$ sudo certbot renew --dry-run
Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.
Ahora abre la consola Admin, ve a Oyentes >> Añadir nuevo oyente, y añade los siguientes valores.
Listener Name: SSL IP Address: ANY IPv4 Port: 443 Secure: Yes
Haz clic en Guardar cuando hayas terminado. A continuación, ve a la sección Asignaciones de host virtual, debajo de la Escucha SSL, haciendo clic en SSL, pulsando el botón Añadir y rellenando los siguientes valores.
Virtual Host: example.com Domains: example.com
Haz clic en Guardar cuando hayas terminado. A continuación, ve a Receptores >> Receptor SSL >> Pestaña SSL >>Clave privada y certificado SSL (botón Editar) e introduce los siguientes valores para el certificado autofirmado que hemos creado antes.
Private Key File: $SERVER_ROOT/certs/key.pem Certificate File: $SERVER_ROOT/certs/cert.pem Chained Certificate: Yes
Haz clic en Guardar cuando hayas terminado. A continuación, ve a Receptores >> Receptor SSL >> Pestaña SSL >> Protocolo SSL (botón Editar) e introduce los siguientes valores para el protocolo SSL y los detalles de cifrado.
Protocol Version: TLS v1.2 TLS v1.3 Ciphers: ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305 Enable ECDH Key Exchange: Yes Enable DH Key Exchange: Yes DH Parameter: /etc/ssl/certs/dhparam.pem
Pulsa Guardar cuando hayas terminado. A continuación, ve a Anfitriones virtuales >> ejemplo.com >> Pestaña SSL >> Clave privada y certificado SSL (botón Editar) y rellena los siguientes valores con el certificado Let’s Encrypt.
Private Key File: /etc/letsencrypt/live/example.com/privkey.pem Certificate File: /etc/letsencrypt/live/example.com/fullchain.pem Chained Certificate: Yes
Haz clic en Guardar cuando hayas terminado. A continuación, ve a Anfitriones Virtuales >> ejemplo.com >> Pestaña SSL >> Engrapado OCSP (botón Editar) e introduce los siguientes valores para activar el Engrapado OCSP.
Enable OCSP Stapling: Yes OCSP Response Max Age(Secs): 300 OCSP Responder: http://r3.o.lencr.org
Haz clic en Guardar cuando hayas terminado. A continuación, ve a Anfitriones Virtuales >> ejemplo.com >> Pestaña SSL >> Seguridad (botón Editar) y rellena los siguientes valores para habilitar el protocolo HTTP3/QUIC.
ALPN: Enable HTTP/2 and HTTP/3 Enable HTTP3/QUIC: Yes
No necesitamos activar otras opciones porque están activadas por defecto.
Haz clic en Guardar cuando hayas terminado.
Reinicia el servidor haciendo clic en el botón Reinicio graceful.
Paso 10 – Sitio de Prueba
Crea un archivo de Prueba en tu directorio html
.
$ sudo nano /usr/local/lsws/example.com/html/index.php
Pega el siguiente código en el editor Nano.
<html> <head> <h2>OpenLiteSpeed Server Install Test</h2> </head> <body> <?php echo '<p>Hello,</p>'; // Define PHP variables for the MySQL connection. $servername = "localhost"; $username = "testuser"; $password = "Your_Password123"; // Create a MySQL connection. $conn = mysqli_connect($servername, $username, $password); // Report if the connection fails or is successful. if (!$conn) { exit('<p>Your connection has failed.<p>' . mysqli_connect_error()); } echo '<p>You have connected successfully.</p>'; ?> </body> </html>
Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando te lo pida. Abre la URL https://example.com
en un navegador y deberías ver la siguiente página.
El sitio de prueba es totalmente funcional. Puedes empezar a utilizar el servidor para servir sitios web y aplicaciones PHP dinámicas.
Conclusión
Con esto concluye nuestro tutorial sobre la instalación de LOMP Stack (OpenLiteSpeed, MySQL y PHP) en un servidor Ubuntu 24.04. Si tienes alguna pregunta, publícala en los comentarios a continuación.