Pesquisa de site

Como instalar LOMP Stack (OpenLiteSpeed, MySQL e PHP) no Ubuntu 24.04


Este tutorial existe para estas versões do sistema operacional

  • Ubuntu 24.04 (Nobre Numbat)
  • Ubuntu 22.04 (Jammy Medusa)
  • Ubuntu 20.04 (FocalFossa)
  • Ubuntu 18.04 (castor biônico)

Nesta página

  1. Pré-requisitos
  2. Passo 1 - Configurar Firewall
  3. Passo 2 - Instale o OpenLiteSpeed

    1. Crie a senha do administrador
  4. Passo 3 - Instale o MySQL
  5. Passo 4 - Instale o PHP
  6. Passo 5 – Configurar MySQL
  7. Passo 6 - Configurar OpenLiteSpeed

    1. Mude a porta HTTP de volta para 80
  8. Passo 7 – Configurar PHP

    1. Reinicie o PHP
  9. Passo 8 - Criar VirtualHost
  10. Passo 9 – Instalar SSL
  11. Passo 10 – Local de Teste
  12. Conclusão

OpenLiteSpeed é uma versão leve e de código aberto do LiteSpeed Server desenvolvido pela LiteSpeed Technologies. Ele suporta regras Apache Rewrite, HTTP/2 e HTTP/3 e protocolos TLS v1.3 e QUIC. Ele vem com um painel de administração baseado em WebGUI, o que o diferencia de outros servidores e é mais fácil de gerenciar.

O LOMP Stack é um acrônimo para Linux, OpenLiteSpeed, MySQL/MariaDB e PHP. Os servidores Litespeed são conhecidos por sua velocidade, especialmente com PHP, que se integra usando a LiteSpeed Server Application Programming Interface (LSAPI). O interpretador LiteSpeed PHP (LSPHP) atende páginas PHP dinâmicas via LSAPI.

Este tutorial mostrará como instalar um servidor OpenLiteSpeed no Ubuntu 24.04.

Pré-requisitos

    Um servidor executando Ubuntu 24.04.

    Um usuário não root com privilégios sudo.

    Um nome de domínio totalmente qualificado (FQDN) como example.com apontando para o servidor.

    Certifique-se de que tudo esteja atualizado.

    $ sudo apt update
    $ sudo apt upgrade
    

    Poucos pacotes que seu sistema precisa.

    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

    Alguns desses pacotes podem já estar instalados em seu sistema.

Passo 1 - Configurar Firewall

O primeiro passo é configurar o firewall. O Debian vem com ufw (Firewall Descomplicado) por padrão.

Verifique se o firewall está em execução.

$ sudo ufw status

Você obterá a seguinte saída.

Status: inactive

Permita a porta SSH para que o firewall não interrompa a conexão atual ao ativá-lo.

$ sudo ufw allow OpenSSH

Permita portas HTTP e HTTPS também.

$ sudo ufw allow http
$ sudo ufw allow https

Portas abertas relacionadas ao Openlitespeed.

$ sudo ufw allow 7080/tcp

Habilite o Firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Verifique o status do firewall novamente.

$ sudo ufw status

Você deverá ver uma saída semelhante.

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)

Passo 2 - Instale o OpenLiteSpeed

Instalaremos o OpenLiteSpeed compilando a partir do código-fonte. Baixe o arquivo de código-fonte do OpenLiteSpeed. Você pode obter o link para o arquivo de código-fonte mais recente na página oficial de downloads do OpenLiteSpeed. A versão 1.7.19 é a versão estável atual disponível.

$ wget https://openlitespeed.org/packages/openlitespeed-1.7.19.src.tgz

Extraia o arquivo.

$ tar -zxf openlitespeed-*.tgz

Mude para o diretório extraído.

$ cd openlitespeed-1.7.19

Construa o pacote do servidor.

$ sudo ./build.sh

Talvez seja necessário esperar uns bons 5 a 10 minutos para que o processo termine. Ignore quaisquer avisos que você receber durante o processo. Você receberá a seguinte saída quando terminar.

...............
[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.

Terminado o processo, abra o arquivo ols.conf para edição.

$ sudo nano ols.conf

Edite o arquivo conforme mostrado abaixo.

#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 
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=

Não adicione sua senha aqui. Definiremos a senha posteriormente usando a linha de comando. Quando terminar, salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Agora que o OpenLiteSpeed foi construído, vamos instalá-lo.

$ sudo ./install.sh

O script do instalador instala e ativa o serviço lsws para o servidor. Você receberá a seguinte saída quando terminar.

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.

Inicie o servidor OpenLiteSpeed.

$ sudo systemctl start lsws

Verifique o status do serviço.

$ 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.

Verifique a versão do servidor instalado.

$ /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)

Crie a senha do administrador

Você pode usar a senha de administrador fornecida durante o processo de instalação. No entanto, você deve criar o seu próprio redefinindo-o. Execute o script de redefinição de senha.

$ sudo /usr/local/lsws/admin/misc/admpass.sh

Você obterá a seguinte saída. Escolha seu nome de usuário e defina uma senha forte.

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!

Agora você pode usar a nova senha de administrador.

Abra http://:7080 para acessar o painel de administração do OpenLiteSpeed. No seu primeiro login, seu navegador avisará que sua conexão não é privada. Clique em Avançado e clique em "Aceitar o risco e continuar" (no caso do Firefox) ou "Prosseguir para (inseguro)" (no caso do navegador baseado em Chromium). Você não verá o aviso novamente.

Você deverá ver a página de login.

Insira as credenciais que você definiu anteriormente e pressione o botão Login para continuar.

Você receberá a seguinte tela.

Passo 3 - Instale o MySQL

Antes de prosseguir com a instalação do MySQL, precisamos atualizar o repositório LiteSpeed. O repositório Litespeed adicionado através do instalador não funciona corretamente.

Abra o arquivo /etc/apt/sources.list.d/lst_debian_repo.list para edição.

$ sudo nano /etc/apt/sources.list.d/lst_debian_repo.list

Altere o conteúdo do arquivo adicionando o nome da versão do Ubuntu 24.04 (noble) ao URL do repositório.

deb http://rpms.litespeedtech.com/debian/ noble main

Quando terminar, salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Instale o servidor MySQL.

$ sudo apt install mysql-server

O serviço MySQL é iniciado automaticamente e executado após a instalação.

Verifique o status do serviço.

$ sudo systemctl status mysql

Você obterá a seguinte saída.

? 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...

Execute o script de segurança do MySQL.

$ sudo mysql_secure_installation

Você será solicitado a instalar o Componente Validar Senha. Pressione 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

Em seguida, você será solicitado a escolher a força da senha. Selecione 2 para Strong e prossiga.

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

A instalação do MySQL não solicitará que você defina uma senha root porque o tipo de autenticação padrão é auth_socket que depende da autenticação do seu sistema Linux. No entanto, você pode alterá-lo mais tarde.

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 seguir, serão feitas algumas perguntas para melhorar a segurança do MySQL. Digite Y para remover usuários anônimos, proibir logins root remotos, remover o banco de dados de teste e recarregar as tabelas de privilégios.

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!

Você pode entrar no shell do MySQL digitando sudo mysql na linha de comando.

Passo 4 - Instale o PHP

Como construímos nosso pacote a partir do código-fonte, ele compila e constrói uma versão antiga do PHP cujo uso não é recomendado. Você pode verificar isso através do seguinte 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

Portanto, precisamos construir e instalar a versão mais recente do PHP. Mas, antes de prosseguirmos, precisamos instalar as ferramentas de construção.

$ sudo apt install build-essential autoconf libtool bison re2c pkg-config

A próxima etapa é instalar os pacotes exigidos pelo processo de construção do 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

Em seguida, baixe o código-fonte do PHP. Faremos o download da versão PHP 8.3.7, que é a versão mais recente disponível no momento da escrita.

$ cd ~
$ wget https://www.php.net/distributions/php-8.3.7.tar.gz

Extraia os arquivos.

$ tar -xzf php-8.3.7.tar.gz

Mude para o diretório baixado.

$ cd php-8.3.7

Em seguida, execute o script configure com as seguintes opções. A opção --enable-litespeed é essencial.

$ 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

Você deverá obter a seguinte saída quando o script for concluído.

+--------------------------------------------------------------------+
| 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.

Compile a fonte.

$ sudo make -j $(nproc)

Você receberá uma saída semelhante quando terminar.

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'.

Quando terminar, execute o seguinte comando para tentar verificar a versão.

$ ./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

Instale PHP.

$ sudo make install

Você obterá a seguinte saída.

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/

Verifique a instalação do PHP. Existem dois binários PHP disponíveis no diretório /usr/local/lsws/lsphp83/bin. Um é o php normal que é a versão de linha de comando e o outro é a versão Litespeed lsphp. O segundo é o que usaremos.

$ /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

Você pode verificar a 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]

Copie o php.ini-production da pasta de instalação para a pasta /usr/local/lsws/lsphp83/lib.

$ sudo cp php.ini-production /usr/local/lsws/lsphp83/lib/php.ini

Configuraremos o OpenLiteSpeed para funcionar com PHP posteriormente.

Abra o php.ini para edição.

$ sudo nano /usr/local/lsws/lsphp83/lib/php.ini

Encontre a variável include_path e altere seu valor conforme mostrado abaixo.

$ ;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; UNIX: "/path1:/path2"
include_path = "/usr/local/lsws/lsphp83/lib/php"

Quando terminar, salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado.

Passo 5 – Configurar MySQL

Faça login no shell do MySQL.

$ sudo mysql

Crie um banco de dados de teste. Substitua testdb pelo nome de banco de dados apropriado de sua escolha.

mysql> CREATE DATABASE testdb;

Crie um usuário de teste. Substitua testuser por um nome de usuário apropriado. Substitua Your_Password123 por uma senha forte.

mysql> CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'Your_Password123';

Conceda todos os privilégios no banco de dados ao usuário.

mysql> GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'localhost';

Liberar privilégios de usuário.

mysql> FLUSH PRIVILEGES;

Saia do shell do MySQL.

mysql> exit

Passo 6 - Configurar OpenLiteSpeed

Mude a porta HTTP de volta para 80

Vamos alterar a porta HTTP padrão para 80. Faça login no painel de administração em http://:7080 com as credenciais que você acabou de criar.

Visite a seção Listeners à esquerda. Você verá os ouvintes padrão com a porta 8080.

Clique no botão Visualizar para ver a configuração detalhada. Na próxima página, em Listener Default > General, clique no ícone Editar e altere a porta de 8080 para 80.

Clique em Salvar e reinicie o servidor clicando no botão Reiniciar normalmente.

Abra o URL http:// em seu navegador e você deverá obter a seguinte página.

Passo 7 – Configurar PHP

Nesta etapa, precisamos associar nossa cópia do PHP 8.3 ao servidor.

Clique na seção Configuração do Servidor à esquerda e depois na aba Aplicativo Externo. Você verá um aplicativo LiteSpeed para PHP existente. Faremos algumas edições nele.

Clique no botão Editar para editar o aplicativo PHP.

Em seguida, combine a configuração conforme mostrado abaixo. Deixe todos os outros campos em branco.

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

Clique em Salvar quando terminar.

Agora que criamos nosso próprio aplicativo PHP 8.3, devemos informar ao servidor para começar a usá-lo. Como editamos a listagem padrão, ela já está configurada. Reinicie o servidor clicando no botão Reinício normal.

Para testar se o seu PHP foi alterado corretamente, visite http:///phpinfo.php no seu navegador.

Reinicie o PHP

No OpenLiteSpeed, se você editar o php.ini ou instalar um novo módulo PHP, reiniciar o servidor não mostrará as alterações. Você precisará reiniciar o processo PHP para isso. Primeiro, você precisará localizar os IDs do processo 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

Elimine manualmente os processos lsphp.

$ sudo kill -9 120093
$ sudo kill -9 120111

Reinicie o servidor.

$ sudo systemctl restart lsws

Passo 8 - Criar VirtualHost

Primeiro, precisamos criar diretórios para nosso host virtual.

$ sudo mkdir /usr/local/lsws/example.com/{html,logs} -p

O diretório html conterá os arquivos públicos e o diretório logs conterá os logs do servidor.

Em seguida, abra o Admin Console, acesse a seção Hosts Virtuais à esquerda e clique no botão Adicionar.

Preencha os valores conforme especificado

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

Clique no botão Salvar quando terminar. Você receberá o seguinte erro porque o arquivo de configuração não existe no momento. Clique no link para criar o arquivo de configuração.

Clique no botão Salvar novamente para finalizar a criação do Host Virtual.

Depois que o host virtual for criado, vá para Hosts Virtuais -> Escolha Host Virtual (exemplo.com) -> Geral e modifique a configuração conforme fornecido.

Document Root: $VH_ROOT/html/
Domain Name: example.com
Enable GZIP Compression: Yes
Enable Brotli Compression: Yes

Clique no botão Salvar quando terminar. Em seguida, precisamos configurar os arquivos de índice. Clique no botão de edição em Arquivos de índice abaixo da seção Geral. Defina as seguintes opções.

Use Server Index Files: No
Index files: index.php, index.html, index.htm
Auto Index: No

Clique em Salvar quando terminar. Em seguida, precisamos escolher Arquivos de log. Vá para a seção Log, clique em Editar em Log do Host Virtual e preencha os seguintes valores. Deixe outras configurações inalteradas.

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

Você pode escolher o Nível de Log como DEBUG se estiver em uma máquina de desenvolvimento.

Clique em Salvar e depois clique no sinal de mais na seção Log de acesso para adicionar uma nova entrada. Preencha os seguintes 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

Clique em Salvar quando terminar. Em seguida, precisamos configurar o Controle de Acesso na seção Segurança. Defina os seguintes valores.

Allowed List: *
Denied List: Not set

Clique em Salvar quando terminar. Em seguida, precisamos definir a Definição do manipulador de script. Clique no sinal de mais (+) para adicionar uma nova definição. Defina os seguintes valores.

Suffixes: php
Handler Type: LiteSpeed SAPI
Handler Name: [Server Level]: lsphp

Clique em Salvar quando terminar. Em seguida, precisamos definir Rewrite Control na seção Rewrite. Defina os seguintes valores.

Enable Rewrite: Yes
Auto Load from .htaccess: Yes
Log Level: Not Set

Clique em Salvar quando terminar. E por fim, precisamos definir os Listeners. Vá para a seção Listeners e clique no botão Visualizar em Listener Padrão. Em seguida, clique no botão Adicionar em Mapeamentos de Host Virtual para adicionar um novo mapeamento e definir os seguintes valores.

Virtual Host: example.com
Domains: example.com

Clique em Salvar quando terminar. Agora, clique no botão Reiniciar normalmente para aplicar todas as alterações acima e reiniciar o servidor.

Passo 9 – Instalar SSL

A configuração do SSL no OpenLiteSpeed exige a configuração de dois certificados. Um certificado autoassinado para o servidor geral e um servidor Let's Encrypt específico do site.

O painel de administração já vem com um certificado autoassinado pré-instalado que está disponível no diretório /usr/local/lsws/admin/conf.

Vamos criar primeiro o certificado autoassinado para o servidor geral.

$ cd ~
$ openssl req -x509 -days 365 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes

Você obterá uma saída semelhante.

-----
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 

Você pode pressionar enter em todos os campos e deixá-los vazios. Preencha seu domínio para o nome comum e seu endereço de e-mail.

Crie o diretório para os certificados autoassinados.

$ sudo mkdir /usr/local/lsws/certs

Copie o certificado para o diretório /usr/local/lsws/certs.

$ sudo mv *.pem /usr/local/lsws/certs

Precisamos instalar o Certbot para gerar certificados SSL gratuitos oferecidos pela Let's Encrypt.

Você pode instalar o Certbot usando o repositório Debian ou obter a versão mais recente usando a ferramenta Snapd. Estaremos usando a versão Snapd. Ubuntu 24.04 vem com Snapd pré-instalado.

Execute os seguintes comandos para garantir que sua versão do Snapd esteja atualizada.

$ sudo snap install core
$ sudo snap refresh core

Emita o seguinte comando para instalar o Certbot.

$ sudo snap install --classic certbot

Use o comando a seguir para garantir que o comando Certbot possa ser executado criando um link simbólico para o diretório /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifique a instalação.

$ certbot --version
certbot 2.10.0

Execute o seguinte comando para gerar um certificado SSL.

Obtenha o certificado SSL. O diretório webroot é definido como o diretório 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  -d example.com

Gere um certificado do grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Verifique o serviço de agendamento de renovação do Certbot.

$ sudo systemctl list-timers

Você encontrará snap.certbot.renew.service como um dos serviços programados para execução.

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 verificar se a renovação SSL está funcionando bem, faça uma simulação do processo.

$ sudo certbot renew --dry-run

Se você não encontrar erros, está tudo pronto. Seu certificado será renovado automaticamente.

Agora abra o Admin Console, vá para Listeners >> Add New Listener e adicione os seguintes valores.

Listener Name: SSL
IP Address: ANY IPv4
Port: 443
Secure: Yes

Clique em Salvar quando terminar. Em seguida, vá para a seção Mapeamentos de Host Virtual no Listener SSL clicando em SSL, clicando no botão Adicionar e preenchendo os seguintes valores.

Virtual Host: example.com
Domains: example.com

Clique em Salvar quando terminar. Em seguida, vá para Listeners >> SSL Listener >> SSL Tab >>SSL Private Key & Certificate (botão Editar) e preencha os seguintes valores para o certificado autoassinado que criamos antes.

Private Key File: $SERVER_ROOT/certs/key.pem
Certificate File: $SERVER_ROOT/certs/cert.pem
Chained Certificate: Yes

Clique em Salvar quando terminar. Em seguida, vá para Listeners >> SSL Listener >> Guia SSL >> Protocolo SSL (botão Editar) e preencha os seguintes valores para o protocolo SSL e detalhes de cifra.

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

Clique em Salvar quando terminar. Em seguida, vá para Virtual Hosts >> example.com >> Guia SSL >> Chave privada e certificado SSL (botão Editar) e preencha os seguintes valores com o 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

Clique em Salvar quando terminar. Em seguida, vá para Hosts Virtuais >> example.com >> Guia SSL >> Grampeamento OCSP (botão Editar) e preencha os seguintes valores para ativar o Grampeamento OCSP.

Enable OCSP Stapling: Yes
OCSP Response Max Age(Secs): 300
OCSP Responder: http://r3.o.lencr.org

Clique em Salvar quando terminar. Em seguida, vá para Virtual Hosts >> example.com >> Guia SSL >> Segurança (botão Editar) e preencha os seguintes valores para ativar o protocolo HTTP3/QUIC.

ALPN: Enable HTTP/2 and HTTP/3
Enable HTTP3/QUIC: Yes

Não precisamos ativar outras opções porque elas estão ativadas por padrão.

Clique em Salvar quando terminar.

Reinicie o servidor clicando no botão Graceful restart.

Passo 10 – Local de Teste

Crie um arquivo de teste em seu diretório html.

$ sudo nano /usr/local/lsws/example.com/html/index.php

Cole o seguinte código no 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>

Salve o arquivo pressionando Ctrl + X e digitando Y quando solicitado. Abra o URL https://example.com em um navegador e você verá a página a seguir.

O site de teste está totalmente funcional. Você pode começar a usar o servidor para servir sites e aplicativos PHP dinâmicos.

Conclusão

Isso conclui nosso tutorial sobre como instalar LOMP Stack (OpenLiteSpeed, MySQL e PHP) em um servidor Ubuntu 24.04. Se você tiver alguma dúvida, poste-a nos comentários abaixo.