Como instalar a Apache, MariaDB e PHP no Linux Ubundo rorando no WSL no Windows 11

Nesse cenário vou colocar o Apache do Linux para enxergar a mesma pasta onde o XAMPP está instalado no Windows.

Como no Windows o Xampp está rodando na porta 80 e 443, vou colocar o Linux para todar na porta 8080.

Instale o Ubuntu pela Windows Store.

Caso seja a primeira vez que você irá usar o WSL instale o mesmo, no Terminal do Windows (disponível na Windows Store), ou no PowerShell digite:

wsl --install

Após a instalação será necessário reiniciar o computador.

Abra terminal do Ubuntu e execute a linha de comando abaixo para atualizar os pacotes de repositório e software do Ubuntu.

sudo apt update && sudo apt upgrade

Instalação do Apache

Para instalar o Apache rode o comando abaixo

sudo apt install -y apache2 apache2-utils

Antes de colocar o apache para rodar, adicione o código abaixo dentro de /etc/apache2/apache2.conf, no final do arquivo:

Abrimos o editor nano com o comando

sudo nano /etc/apache2/apache2.conf

E colamos o trecho a seguir no fim do arquivo

Servername localhost
AcceptFilter http none

Para salvar tecle Ctrl+O, tecle Enter para confirmar o nome do arquivo e tecle Ctrl+X para sair

Alterando a porta do Apache

Por padrão a porta do apache é a 80, porém, como dito, já estou usando essa porta para o Xampp do Windows. Então vou mudar para 8080. Edite o arquivo /etc/apache2/ports.conf com o comando

sudo nano /etc/apache2/ports.conf

Substitua o Listen 80 por Listen 8080 e o Listen 443 por 8443. Deverá ficar assim:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 8080

<IfModule ssl_module>
    Listen 8443
</IfModule>

<IfModule mod_gnutls.c>
       Listen 8443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Para salvar o arquivo no nano pressione Ctrl+O e tecle Enter. Para sair Ctrl+X.

Inicie o servidor Apache

sudo service apache2 start

Se não der nenhum erro, ele estará funcionando normalmente, você pode verificar também usando o comando

apache2 -v

Ou pode acessar também o endereço http://localhost:8080 no Windows para verificar se está abrindo a abrindo a página do Apache.

Instalando os mod do Apache

Por padrão a instalação acima vem limpa e não é permitido reescrita de URL's ou setar cabeçalhos head. Então rode os comandos abaixo, um a um.

sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod expires
sudo a2enmod deflate
sudo a2enmod ssl

Ou instale todos de uma vez com o comando

sudo a2enmod rewrite headers expires deflate ssl

Se depois de instalado quiser deinstalar algum módulo acima basta usar o comando

sudo a2dismod nome_do_modulo

Reinicie o Apache

sudo service apache2 restart

Configurando acesso po SSL

Para instalar um certificado SSL auto-aussinado gratuito na sua máquina e também poder acessar https://localhost:8443 digite o comando abaixo.

sudo openssl req -x509 -nodes -days 1825 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Então será necessário informar algumas coisas, para agilizar, deixei alguns dados fake aqui:

Country Name (2 letter code) [AU]:BR
State or Province Name (full name) [Some-State]:Sao Paulo
Locality Name (eg, city) []:Sao Paulo
Organization Name (eg, company) [Internet Widgits Pty Ltd]:localhost
Organizational Unit Name (eg, section) []:localhost
Common Name (e.g. server FQDN or YOUR name) []:127.0.0.1
Email Address []:webmaster@localhost

Por enquando é isso, já temos os dois arquivos necessários para informar no Virtual Host, são eles /etc/ssl/certs/apache-selfsigned.crt e /etc/ssl/private/apache-selfsigned.key.

O que aconteceu? Explicando o comando acima, tempos:

Configurando o Virtual Host

Até agora o Apache está enxergando a pasta /var/www/html. Vamos agora criar um host virtual para e informar a pasta que deverá ser acessada quando digitamos o endereço http://localhost:8080

Crie um arquivo com o nome do host que deseja criar, aqui vou criar o host localhost, para isso abra esse arquivo com o comando

sudo nano /etc/apache2/sites-available/localhost.conf

E cole o conteúdo do arquivo:

<VirtualHost *:8080>
    ServerAdmin webmaster@localhost
    ServerName localhost
    ServerAlias *.localhost

    DocumentRoot /mnt/d/xampp/htdocs

    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>

    <Directory /mnt/d/xampp/htdocs>
            Options Indexes FollowSymlinks MultiViews
            AllowOverride All
            #Order allow,deny
            #Allow from all
            Require all granted
    </Directory>
</VirtualHost>
<VirtualHost *:8443>
    ServerAdmin webmaster@localhost
    ServerName localhost
    ServerAlias *.localhost

    DocumentRoot /mnt/d/xampp/htdocs

    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>

    <Directory /mnt/d/xampp/htdocs>
            Options Indexes FollowSymlinks MultiViews
            AllowOverride All
            #Order allow,deny
            #Allow from all
            Require all granted
    </Directory>

    SSLEngine on
    SSLCertificateFile "/etc/ssl/certs/apache-selfsigned.crt"
    SSLCertificateKeyFile "/etc/ssl/private/apache-selfsigned.key"
</VirtualHost>

Ctrl+O , Enter , Ctrl+X para salvar e sair.

As principais configurações aí são:

Agora, para habilitar o endereço, digite o comando:

sudo a2ensite localhost.conf

E então desabilite o endereço site padrão que vem com o Apache

sudo a2dissite 000-default

Permissões para a pasta onde estão nossos arquivos de produção

Primeiro adicione o seu usuário ao grupo www-data (grupo do apache)

sudo adduser NOME-DO-SEU-USUARIO www-data

Agora alteramos a propriedade do diretório pretendido

sudo chown -vR :www-data /mnt/d/xampp/htdocs/

Concedendo permissão de gravação para o novo proprietário

sudo chmod -vR g+w /mnt/d/xampp/htdocs/

Definido as permissões para o grupo do Apache

sudo chgrp -R www-data /mnt/d/xampp/htdocs/

E definindo que todos os arquivos e subpastas novos também terão essa permissão

sudo chmod 2750 /mnt/d/xampp/htdocs/

Reinicie o Apache

sudo service apache2 reload

Se nenhum erro apareceu, significa que deu tudo certo :)

Instalando o MariaDB

Para instalar o MariaDB mais recente no Ubuntu 20.04 acessamos o endereço https://mariadb.org/download/ para obter o repositório do MariaDB, na guia MariaDB Repositories selecionamos a versão Linux que queremos e a versão do MariaDB, neste momento a versão mais recente estável é a 10.6, assim que selecionamos as opções nos é mostrado os comandos para adicionar o repositório:

sudo apt-get install software-properties-common dirmngr apt-transport-https
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://mirror.ufro.cl/mariadb/repo/10.6/ubuntu focal main'

E depois atualiza o apt e instala o MariaDB

sudo apt update
sudo apt install mariadb-server

Após isso basta executar o comando abaixo para garantir o usuário do mysql tenha permissão de criar diretórios na pasta onde está instalado.

sudo usermod -d /var/lib/mysql/ mysql

Agora, inicie o serviço do MySQL

sudo service mariadb start

Se nenhum problema foi apresentado, o MariaDB já está pronto para uso. Mas vamos definir algumas configurações. Execute o script abaixo para definir as principais configurações do MariaDB

sudo mysql_secure_installation

Com esse comando o MariaDB fará várias perguntas, você pode ler e verificar cada resposta, ou simplesmente usar as respostas que usei agora:

Dica: Para alterar o funcionamento do MariaDB, ou seja o sql_mode, edite o arquivo /etc/mysql/mariadb.conf.d/50-server.cnf adicionando, local abaixo de [mysqld] sql_mode=NO_ENGINE_SUBSTITUTION ou os mods que você deseja. Os mod padrões são ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION.

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Logo depois de [mysqld] coloque o código abaixo

sql_mode=NO_ENGINE_SUBSTITUTION

Sempre que alterar esse arquivo, reinicie o MySQL.

sudo service mariadb restart

Alterando a senha do usuário root

Pare o serviço do MariaDB, caso o mesmo esteja em execução.

sudo service mariadb stop

Execute o MariaDB em Safe Mod e log como root

sudo mysqld_safe --skip-grant-tables &
mysql -u root

No MariaDB execute os comandos abaixo, onde 123456 é a sua nova senha:

flush privileges;
update mysql.user set password=password('newpass') where user='root';
flush privileges;
update mysql.user set plugin='mysql_native_password' where user='root';
flush privileges;
exit;

Agora é só iniciar o serviço

sudo service mariadb start

Instalando o PHP

Para instalar o php inicialmente instalamos as dependências necessárias com o comando:

sudo apt-get install software-properties-common

Em seguida, adicionanmos o repositório do software:

sudo add-apt-repository ppa:ondrej/php

Atualiza o apt

sudo apt update

E instala o PHP 8 com alguns módulos básicos e mais usados, se você quiser instalar o PHP 7.4 ou outra versão, basta trocar a linha php8.0 pela versão que você deseja.

sudo apt install php8.0 php-curl php-intl php-mysql php-sqlite3 php-gd php-mbstring php-common php-zip php-json

Para instalar o PHP 8.1

Note que o PHP 8.1 traz uma série de modificações em funções e várias classes e/ou métodos terão que ser reescritos

sudo apt install php8.1-common php8.1-mysql php8.1-sqlite3 php8.1-xml php8.1-xmlrpc php8.1-curl php8.1-gd php8.1-imagick php8.1-cli php8.1-dev php8.1-imap php8.1-mbstring php8.1-opcache php8.1-soap php8.1-zip php8.1-redis php8.1-intl -y

UPGRADE para o PHP 8.1 Se estiver fazend o upgrande e deseja que o PHP 8.1 seja o padrão, basta executar o comando abaixo

sudo apt install libapache2-mod-php8.1
sudo a2enmod php8.1

Agora reinicie o Apache

sudo service apache2 restart

Se quiser remover o PHP 8.1

sudo apt purge php8.1-* -y && sudo apt autoclean -y && sudo apt autoremove -y

Reconfigure o Apache para o PHP 8.0

sudo a2enmod php8.0
sudo service apache2 restart

Crie um arquivo para testar se está tudo funcionando.

nano /mnt/d/xampp/htdocs/teste-php-linux.php

Com o conteúdo

<?php 

php_info();

?>

E acesse https://localhost:8443/teste-php-linux.php

Instalando o phpMyAdmin

Rode o comando abaixo. Durante a instalação vai ser necessário você confirmar alguns passos. Dê um enter para confirmar que será instalado no Apache, depois dê enter para confirmar a configuração de uma database para o phpmyadmin com ok e logo será solicitado que digite a senha de acesso, não deixe em branco, caso contrário uma randômica será usada, confirme a senha.

sudo apt install phpmyadmin -y

Registre o acesso ao phpMyAdmin no Apache editando o arquivo de configuração do Apache

sudo nano /etc/apache2/apache2.conf

No final do arquivo adicione a linha abaixo:

IncludeOptional /etc/phpmyadmin/apache.conf

Ctrl+O , Enter , Ctrl+X para salvar e sair.

Reinicie o apache

sudo service apache2 restart

Agora você já pode acessar http://localhost/phpmyadmin e digitar suas credenciais de acesso, login root e senha 123456.

Caso você não queria está colocando a senha toda hora para entrar no phpMyAdmin, edite o arquivo de configuração do phpMyAdmin. NUNCA FAÇA ISSO EM UM SERVIDOR DE PRODUÇÃO!

sudo nano /etc/phpmyadmin/config.inc.php

Exclua todo o conteúdo (se você teclar Ctrl+K remove uma linha toda) e cole o conteúdo abaixo, substitua a senha se ela for diferente de 123456.

<?php
$cfg['blowfish_secret'] = '8baa64a3d940ae4cfb79fcc4c863d381';

$i = 1;

/* Authentication type and info */
$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '123456';
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = true;
$cfg['Lang'] = '';

/* Bind to the localhost ipv4 address and tcp */
$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['connect_type'] = 'tcp';

/* User for advanced features */
$cfg['Servers'][$i]['controluser'] = 'root';
$cfg['Servers'][$i]['controlpass'] = '123456';

Se você instalou o PHP 8 e por acaso o phpMyAdmin ficar mostrando uns avisos no final de cada página, ele está desatualizado. Siga os passos abaixo para atualizá-lo.

Atualizando o phpMyAdmin

ATENÇÃO: verifique em https://phpmyadmin.net a versão compatível entre PHP e phpMyAdmin. Se deseja mesmo atualizar, faça o backup da sua pasta atual do phpMyAdmin.

sudo mv /usr/share/phpmyadmin/ /usr/share/phpmyadmin-backup

Crie a pasta /usr/share/phpmyadmin e entre nela

sudo mkdir /usr/share/phpmyadmin
cd /usr/share/phpmyadmin

Baixe o phpMyAdmin mais atual, nesse momento é o 5.1.1 (você pode conferir isso em https://phpmyadmin.net)

sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.tar.gz

Extraia os arquivos

sudo tar xzf phpMyAdmin-5.1.1-all-languages.tar.gz

Os arquivos extraídos foram para a pasta /usr/share/phpmyadmin/phpMyAdmin-5.1.1-all-languages/ então vamos trazê-los para a pasta /usr/share/phpmyadmin/

sudo mv phpMyAdmin-5.1.1-all-languages/* /usr/share/phpmyadmin

Pronto, phpMyAdmin atualizado. Como o arquivo baixado não é mais necessário e a pasta phpMyAdmin-5.1.1-all-languages está vazia, vamos excluí-los.

sudo unlink phpMyAdmin-5.1.1-all-languages.tar.gz
sudo rm -r phpMyAdmin-5.1.1-all-languages

Como nós atualizamos manualmente o phpMyAdmin, vamos só fazer uma pequena alteração nele para que ele enxergue o arquivo de configuração corretamente. Edite o arquivo /usr/share/phpmyadmin/libraries/vendor_config.php e subsitua define('CONFIG_DIR', ROOT_PATH); por define('CONFIG_DIR', '/etc/phpmyadmin/');

sudo nano /usr/share/phpmyadmin/libraries/vendor_config.php

Pressione CTRL + W e pesquise por CONFIG_DIR então faça a substituição:

define('CONFIG_DIR', '/etc/phpmyadmin/');

A essa altura você já sabe como sai do nano, mas de qualquer forma: Para salvar tecle Ctrl+O, tecle Enter para confirmar o nome do arquivo e tecle Ctrl+X para sair.

Crie a pasta temporária do phpMyAdmin:

sudo mkdir tmp && sudo chmod 777 tmp

E depois reiniciar o servidor apache

sudo service apache2 restart

Agora sim, tudo vai está funcionando e super atualizado!

Teste tudo, se estiver funcionando exclua a pasta de bakup do phpMyAdmin

sudo rm -r /usr/share/phpmyadmin-backup

Espero ter ajudado!