Pesquisa de site

Como instalar o LOMP Stack (OpenLiteSpeed, MySQL e PHP) no Debian 12


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 junto com protocolos TLS v1.3 e QUIC. Ele vem com um painel de administração baseado em WebGUI que o torna diferente 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.

Neste tutorial, aprenderemos como instalar um servidor OpenLiteSpeed em uma máquina Debian 12.

Pré-requisitos

    Um servidor rodando Debian 12.

    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.

    O SELinux não precisa ser desabilitado ou configurado para funcionar com OpenLiteSpeed.

    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 debian-archive-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á-la.

$ 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

OpenLiteSpeed não envia um pacote para Debian 12. Portanto, construiremos nossa cópia 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.

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

Extraia o arquivo.

$ tar -zxf openlitespeed-*.tgz

Mude para o diretório extraído.

$ cd openlitespeed-1.7.18

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
? lsws.service - LSB: lshttpd
     Loaded: loaded (/etc/init.d/lsws; generated)
     Active: active (running) since Wed 2023-09-27 15:55:13 UTC; 4h 18min ago
       Docs: man:systemd-sysv-generator(8)
      Tasks: 4 (limit: 4652)
     Memory: 79.2M
        CPU: 37.823s
     CGroup: /system.slice/lsws.service
             ??64164 "openlitespeed (lshttpd - main)"
             ??64171 "openlitespeed (lscgid)"
             ??64184 "openlitespeed (lshttpd - #01)"
             ??64185 "openlitespeed (lshttpd - #02)"

Sep 27 15:55:11 lomp systemd[1]: Starting lsws.service - LSB: lshttpd...
Sep 27 15:55:13 lomp systemd[1]: Started lsws.service - LSB: lshttpd.

Verifique a versão do servidor instalado.

$ /usr/local/lsws/bin/lshttpd -v
LiteSpeed/1.7.18 Open (BUILD built: Tue Aug 29 12:59:39 UTC 2023)
        module versions:
        lsquic 3.2.0
        modgzip 1.1
        cache 1.64
        mod_security 1.4 (with libmodsecurity v3.0.9)

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 MariaDB

O Debian não vem mais com servidor MySQL. Portanto, usaremos o substituto imediato do MySQL, MariaDB. Mas antes de prosseguir, 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 Debian 11 (bullseye) a ele. Não podemos usar o Debian 12 (bookworm) porque o repositório não está atualizado para ele.

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

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

Instale o servidor MariaDB.

$ sudo apt install mariadb-server

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

Verifique o status do serviço.

$ sudo systemctl status mariadb

Você obterá a seguinte saída.

? mariadb.service - MariaDB 10.11.3 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
     Active: active (running) since Fri 2023-09-29 01:21:09 UTC; 1min 26s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
   Main PID: 361450 (mariadbd)
     Status: "Taking your SQL requests now..."
      Tasks: 10 (limit: 4652)
     Memory: 190.8M
        CPU: 411ms
     CGroup: /system.slice/mariadb.service
             ??361450 /usr/sbin/mariadbd

Execute o script de segurança MariaDB.

$ sudo mariadb-secure-installation

Será solicitada a senha do root. Pressione Enter porque não definimos nenhuma senha para isso.

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):

A seguir, você será perguntado se deseja mudar para o método de autenticação de soquete Unix. O plugin unix_socket permite que você use as credenciais do seu sistema operacional para se conectar ao servidor MariaDB. Como você já possui uma conta root protegida, digite n para continuar.

OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n

Em seguida, você será perguntado se deseja alterar sua senha root. No Debian 12, a senha root está intimamente ligada à manutenção automatizada do sistema, portanto deve ser deixada como está. Digite n para prosseguir.

 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n

A seguir, serão feitas algumas perguntas para melhorar a segurança do MariaDB. 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.

 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB 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? [Y/n] 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? [Y/n] y
 ... Success!

By default, MariaDB 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? [Y/n] 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? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Você pode entrar no shell MariaDB digitando sudo mysql ou sudo mariadb 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-0 libargon2-dev libbz2-dev libffi-dev libc-client-dev libpspell-dev flex libgmp3-dev libmcrypt-dev libmhash-dev freetds-dev libmariadb-dev libmariadb-dev-compat 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.2.10, que é a versão mais recente disponível no momento da escrita.

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

Extraia os arquivos.

$ tar -xzf php-8.2.11.tar.gz

Mude para o diretório baixado.

$ cd php-8.2.11

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

$ sudo ./configure --prefix=/usr/local/lsws/lsphp82 --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.

/bin/bash /home/navjot/php-8.2.11/libtool --silent --preserve-dup-deps --tag CC --mode=link cc -shared -I/home/navjot/php-8.2.11/include -I/home/navjot/php-8.2.11/main -I/home/navjot/php-8.2.11 -I/home/navjot/php-8.2.11/ext/date/lib -I/usr/include/libxml2 -I/usr/include/x86_64-linux-gnu -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/c-client -I/home/navjot/php-8.2.11/ext/mbstring/libmbfl -I/home/navjot/php-8.2.11/ext/mbstring/libmbfl/mbfl -I/usr/include/postgresql -I/usr/include/pspell -I/usr/include/tidy -I/home/navjot/php-8.2.11/TSRM -I/home/navjot/php-8.2.11/Zend  -D_GNU_SOURCE -I/usr/include/c-client  -fno-common -Wstrict-prototypes -Wformat-truncation -Wlogical-op -Wduplicated-cond -Wno-clobbered -Wall -Wextra -Wno-strict-aliasing -Wno-unused-parameter -Wno-sign-compare -g -O2 -fvisibility=hidden -Wimplicit-fallthrough=1 -DZEND_SIGNALS     -o ext/opcache/opcache.la -export-dynamic -avoid-version -prefer-pic -module -rpath /home/navjot/php-8.2.11/modules -L/usr/lib/x86_64-linux-gnu/mit-krb5 -L/usr/lib/x86_64-linux-gnu ext/opcache/ZendAccelerator.lo ext/opcache/zend_accelerator_blacklist.lo ext/opcache/zend_accelerator_debug.lo ext/opcache/zend_accelerator_hash.lo ext/opcache/zend_accelerator_module.lo ext/opcache/zend_persist.lo ext/opcache/zend_persist_calc.lo ext/opcache/zend_file_cache.lo ext/opcache/zend_shared_alloc.lo ext/opcache/zend_accelerator_util_funcs.lo ext/opcache/shared_alloc_shm.lo ext/opcache/shared_alloc_mmap.lo ext/opcache/shared_alloc_posix.lo ext/opcache/jit/zend_jit.lo ext/opcache/jit/zend_jit_gdb.lo ext/opcache/jit/zend_jit_vm_helpers.lo -lrt
/bin/bash /home/navjot/php-8.2.11/libtool --silent --preserve-dup-deps --tag CC --mode=install cp ext/opcache/opcache.la /home/navjot/php-8.2.11/modules

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.2.11 (litespeed) (built: Sep 28 2023 18:40:08)
Copyright (c) The PHP Group
Zend Engine v4.2.11, Copyright (c) Zend Technologies

Instale PHP.

$ sudo make install

Você obterá a seguinte saída.

Installing shared extensions:     /usr/local/lsws/lsphp82/lib/php/extensions/no-debug-non-zts-20220829/
Installing PHP CLI binary:        /usr/local/lsws/lsphp82/bin/
Installing PHP CLI man page:      /usr/local/lsws/lsphp82/php/man/man1/
Installing PHP LiteSpeed binary:  /usr/local/lsws/lsphp82/bin/
Installing phpdbg binary:         /usr/local/lsws/lsphp82/bin/
Installing phpdbg man page:       /usr/local/lsws/lsphp82/php/man/man1/
Installing PHP CGI binary:        /usr/local/lsws/lsphp82/bin/
Installing PHP CGI man page:      /usr/local/lsws/lsphp82/php/man/man1/
Installing build environment:     /usr/local/lsws/lsphp82/lib/php/build/
Installing header files:          /usr/local/lsws/lsphp82/include/php/
Installing helper programs:       /usr/local/lsws/lsphp82/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/lsws/lsphp82/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/lsws/lsphp82/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.13
Wrote PEAR system config file at: /usr/local/lsws/lsphp82/etc/pear.conf
You may want to add: /usr/local/lsws/lsphp82/lib/php to your php.ini include_path
Installing PDO headers:           /usr/local/lsws/lsphp82/include/php/ext/pdo/

Verifique a instalação do PHP. Existem dois binários PHP disponíveis no diretório /usr/local/lsws/lsphp82/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/lsphp82/bin/lsphp -v
PHP 8.2.11 (litespeed) (built: Sep 28 2023 18:40:08)
Copyright (c) The PHP Group
Zend Engine v4.2.11, Copyright (c) Zend Technologies

Você pode verificar a lista de módulos PHP habilitados.

$ /usr/local/lsws/lsphp82/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/lsphp82/lib.

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

Configuraremos o OpenLiteSpeed para funcionar com PHP posteriormente.

Abra o php.ini para edição.

$ sudo nano /usr/local/lsws/lsphp82/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/lsphp82/lib/php

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

Passo 5 - Configurar MariaDB

Faça login no shell MariaDB.

$ 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';

Como não estamos modificando o usuário root, você deve criar outro usuário SQL para executar tarefas administrativas que utilizam autenticação por senha. Escolha uma senha forte para esta.

MariaDB> GRANT ALL ON *.* TO 'navjot'@'localhost' IDENTIFIED BY 'Yourpassword32!' WITH GRANT OPTION;

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.

Passo 7 – Configurar PHP

Nesta etapa, precisamos associar nossa cópia do PHP 8.2 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: lsphp82/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.2, precisamos 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    500747  0.9  0.8 121104 34928 ?        S    05:58   0:00 lsphp
nobody    500748  0.0  0.4 121104 16760 ?        Ss   05:58   0:00 lsphp
navjot    500751  0.0  0.0   3876  1908 pts/0    S+   05:58   0:00 grep lsphp

Elimine manualmente os processos lsphp.

$ sudo kill -9 500747
$ sudo kill -9 500748

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) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []: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. O Debian 12 não vem com o Snapd instalado.

Instale o pacote Snapd.

$ sudo apt install -y snapd

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.6.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
.....
Sat 2023-09-30 18:12:21 UTC 2h 59min left  Sat 2023-09-30 14:22:18 UTC 50min ago   apt-daily.timer            apt-daily.service
Sat 2023-09-30 18:54:00 UTC 3h 41min left  -                           -           snap.certbot.renew.timer   snap.certbot.renew.service
Sun 2023-10-01 00:00:00 UTC 8h left        -                           -           dpkg-db-backup.timer       dpkg-db-backup.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, acesse 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: /home/user/key.pem
Certificate File: /home/user/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.

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 Debian 12. Se você tiver alguma dúvida, poste-a nos comentários abaixo.

Artigos relacionados: