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:
openssl
: esta é a ferramenta básica de linha de comando para criação e gerenciamento de certificados OpenSSL.req
: este subcomando especifica que queremos usar o gerenciamento X.509 de solicitação de assinatura de certificado (CSR). O “X.509” é um padrão de infraestrutura de chave pública aderido pelo SSL e o TLS para seu gerenciamento de chaves e certificados. Queremos criar um novo cert X.509, então estamos usando este subcomando.-x509
: isso modifica ainda mais o subcomando anterior dizendo ao utilitário que queremos criar um certificado autoassinado em vez de gerar uma solicitação de assinatura de certificado, como normalmente aconteceria.-nodes
: isso diz ao OpenSSL para pular a opção de proteger nosso certificado com uma frase secreta. Precisamos que o Apache consiga ler o arquivo, sem a intervenção do usuário, quando o servidor for iniciado. Uma frase secreta impediria que isso acontecesse porque teríamos que digitá-la após cada reinício.-days 1825
: esta opção define a duração do tempo em que o certificado será considerado válido. Aqui, nós configuramos ela para um 5 anos, depois disso visite esse tutorial novamente.-newkey rsa:2048
: isso especifica que queremos gerar um novo certificado e uma nova chave ao mesmo tempo. Não criamos a chave necessária para assinar o certificado em um passo anterior, então precisamos criá-la junto com o certificado. A porçãorsa:2048
diz a ele para criar uma chave RSA que seja de 2048 bits.-keyout
: esta linha diz ao OpenSSL onde colocar o arquivo gerado de chave privada que estamos criando, nesse caso, em/etc/ssl/private/apache-selfsigned.key
.-out
: isso diz ao OpenSSL onde colocar o certificado que estamos criando, nesse caso, em/etc/ssl/certs/apache-selfsigned.crt
.
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:
ServerName localhost
- Endereço que iremos digitar no navegadorDocumentRoot /mnt/d/xampp/htdocs
- /mnt/d/xampp/htdocs é a pasta onde os arquivos atuais estão, ou seja, irá acessar os arquivos da pasta do WindowsD:\xampp\htdocs
<Directory /mnt/d/xampp/htdocs>
- Mesma pastaD:\xampp\htdocs
- E as configurações para acesso por https nas linhas
SSLEngine on
que liga o Engine SSL,SSLCertificateFile "/etc/ssl/certs/apache-selfsigned.crt"
especifica o arquivo de certificado SSL que será usado eSSLCertificateKeyFile "/etc/ssl/private/apache-selfsigned.key"
que especifica o local da key para o certificado.
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:
- ENTER
- ENTER
- Digite a sua senha
- ENTER
- ENTER
- ENTER
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!