Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin + Let’s Encrypt no Debian 11 bullseye “LAMP”


Distribuição utilizada: Debian 11 Bullseye / Instalação Limpa

Acesse seu bash e vire root com o comando su – para evitar comandos “que não existem”, e antes de mais nada tenha seu repositório atualizado.

# su -
# apt update
# apt upgrade

:: Instalação do Apache ::

# apt install apache2 apache2-utils

Após a instação, habilitamos o mod_rewrite do Apache que é muito utilizado. Este é um módulo que utiliza um mecanismo baseado em regras de reescrita. (phpipa, wordpress todos usam), e o mod_headers Este módulo fornece diretivas para controlar e modificar os cabeçalhos de solicitação e resposta HTTP. Comando para habilita-lo:

# a2enmod rewrite
# a2enmod headers

A página que vimos ao abri o ip do nosso servidor no navegador fica no diretório /var/www/html, isso está sendo informado no arquivo default do apache que fica em /etc/apache2/sites-enabled/000-default.conf, e para que nosso mod_rewrite e headers funcione corretamente será necessário adicionar alguma linhas.
O HTTP Strict Transport Security ou HSTS (RFC 6797) é um novo padrão de segurança SSL aprovado recentemente pelo IETF. Ele traz diversas melhorias para o SSL como forçar a utilização do HTTPS impedindo que sites sejam acessados usando o protocolo HTTP ou que partes do código de um site que está usando HTTPS seja executado em servidores usando o HTTP entre outras.

# vim /etc/apache2/sites-enabled/000-default.conf

Adicione abaixo de “DocumentRoot /var/www/html” o seguinte:

	Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains"

	
    		Options FollowSymLinks
    		AllowOverride All
	

Para você aprender mais como o apache funciona recomendo: Como ter diversos sub/domínios no mesmo servidor

Por segurança remova a assinatura do apache e reinicie o apache2 para que tenha efeito as nossas alterações.

# sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/apache2/conf-available/security.conf
# sed -i 's/ServerSignature On/ServerSignature Off/' /etc/apache2/conf-available/security.conf
# systemctl restart apache2

http://[SERVER_IP]

:: Instalação do MariaDB 10.5 ::

# apt install mariadb-server mariadb-client 

Por padrão o pacote MaraiDB no Debian usa unix_socket para autenticar o login do usuário, o que basicamente significa que você pode usar o nome de usuário e a senha do sistema operacional para efetuar login no console do MariaDB.
Assim, você pode logar diretamente sem fornecer a senha root do MariaDB. Mais a frente vou ensinar como definir uma senha, não farei agora pois se você alterar nesse momento ao instalar o phpMyAdmin terá um erro.

:: Instalação do PHP 7.4 ::

Para instalação do PHP vou incluir algumas extensões que são as mais utilizada, mas seu preferir você pode optar em não instalar, as necessárias são libapache2-mod-php php php-mysql php-cli.

# apt install libapache2-mod-php php php-mysql php-cli php-pear php-gmp php-gd php-bcmath php-mbstring php-curl php-xml php-zip

É necessário reiniciar o apache para que o php tenha efeito.

# systemctl restart apache2

Consultado informações de versão:

# php --version
PHP 7.4.21 (cli) (built: Jul  2 2021 03:59:48) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.21, Copyright (c), by Zend Technologies

Você pode criar um arquivo php com a função phpinfo() para mostrar todas as informações.

# echo '' > /var/www/html/phpinfo.php

http://[SERVER_IP]/phpinfo.php

:: phpMyAdmin ::

Adivinha quem voltou para o repositório? Sim! phpmyadmin está de volta!

# apt install phpmyadmin

Selecione Apache2

Sim

Informe a senha para o banco de dados do phpmyadmin. http://senhasegura.remontti.com.br/

Aguarde finalizar… Se você é um menino que seguiu a risca não vai ter o erro seguinte, então pode pular esta parte.

POSSÍVEL ERRO!
Este erro acontece quando o usuário root do mariaDB está com senha. Caso isso acontecer, selecione IGNORAR e siga os passos a baixo.


SE OCORRER O ERRO: SIGAS ESTES PASSOS PARA RESOLUÇÃO DO PROBLEMA ACIMA.
Como o usuário root já tem senha e o script de instalção não sabe qual é a senha ele ele acaba apresentando esse erro ao criar o banco de dados bem como as tabelas do phpmyadmin, então vamos ter que criar na mão.
Se você quiser certificar qual a senha digitou na instalação do phpmyadmin basta olhar o arquivo:

# vim /etc/phpmyadmin/config-db.php
$dbuser='phpmyadmin';
$dbpass='SUPER_SENHA';
$basepath='';
$dbname='phpmyadmin';
$dbserver='localhost';
$dbport='3306';
$dbtype='mysql';

Agora entre no mariadb e vamos criar o banco bem como o usuário phpmyadmin (Use a mesma senha que está no config-db.php, ou altere também no config-db.php)

# mariadb -u root -p 

Não esqueça de alterar a SUPER_SENHA.

CREATE DATABASE phpmyadmin;
CREATE USER 'phpmyadmin'@'localhost' IDENTIFIED BY 'SUPER_SENHA';
GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY 'SUPER_SENHA' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;

Importe as tabelas:

# mariadb -u root -p phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql

Pronto erro solucionado!


Para acessar o phpmyadmin:http://[SERVER_IP]/phpmyadmin/
Caso seu phpmyadmin não abrir, certifique-se que o arquivo phpmyadmin.conf está lincado em /etc/apache2/conf-enabled/

# ls -lh /etc/apache2/conf-available/ | grep phpmyadmin.conf


Caso não esteja execute o comando, e reinicie o apache:

# ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-enabled/phpmyadmin.conf
# systemctl restart apache2

Agora tente novamente.,

Por segurança eu sempre fecho o acesso ao phpmyadmin para os IPs da administração, assim evito que uma possível vulnerabilidade venha me afetar. Para isso edite:

# vim /etc/phpmyadmin/apache.conf

Se deseja deixar o atalho para o phpmyadmin restrito apenas aos seus IP de gerencia faça da seguinte forma. Lembre-se de alterar os IPs 200.200.200.0/26 2001:db8:cafe:d0ce::/64 para os seus.

# phpMyAdmin default Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin


    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php

    AllowOverride All
    Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe:d0ce::/64

    # limit libapache2-mod-php to files and directories necessary by pma
    
        php_admin_value upload_tmp_dir /var/lib/phpmyadmin/tmp
        php_admin_value open_basedir /usr/share/phpmyadmin/:/usr/share/doc/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/:/usr/share/javascript/
    



# Disallow web access to directories that don't need it

    Require all denied


    Require all denied

Reinicie o Apache.

 systemctl restart apache2

:: Definindo senha para o root do mariaDB ::

Para aumentar a seguraçã vamos definir uma senha para o usuário root do MariDB, não esqueça de alterar ALTERE_3ST4_SENHA pela sua senha.

# mariadb -u root
USE mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'ALTERE_3ST4_SENHA';
FLUSH PRIVILEGES;
EXIT;

Apague seus rastros, em /root/.mysql_history temos um histórico com todos os comandos dado no terminal do MariaDB, então não é legal deixar lá em texto puro a senha que setamos!

# echo > /root/.mysql_history

:: Let's Encrypt ::

Criando certificado grátis para seus sub/domínios.

# apt install certbot python3-certbot-apache

Para gerar o certificado use o comando:

# certbot

Não esqueça de colocar no seu cron para ele renovar o certificado, pois a cada 90 ele expira. Neste exemplo todo dia primeiro tento renovar.

# certbot -q renew

Dica, se desejar desativar o TLS1.0 e TLS1.1 após criar um certificado um arquivo é criado /etc/letsencrypt/options-ssl-apache.conf, então edite e inclua no SSLProtocol TLSv1 -TLSv1.1

# vim /etc/letsencrypt/options-ssl-apache.conf

Ficando

#SSLProtocol            all -SSLv2 -SSLv3
SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

Reinicie o Apache:

# systemctl restart apache2

Para testar acesse: https://www.cdn77.com/tls-test/

Gostou?

Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Abraço!

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

11 Resultados

  1. Frederico disse:

    Muito obrigado pela grande ajuda!

  2. fabricio disse:

    como eu testo, através do ip?

  3. Alysson disse:

    Parabéns pelo post, no php7.4.30 como que faço para rodar script de consulta snmp, tenho um que rodo normalmente no xampp, ja nesse não consegui, ja ativei a extension = snmp e não roda. $session_snmp = new SNMP(SNMP::VERSION_2c, $ip_host.”:”.$porta_host, $comunidade_host);

  4. Segui o passo a passo e no phpmyadmin quando crio um banco de dados, ao ir na guia privilégios aparece o seguinte erro: #1267 – Combinação ilegal de collations (utf8mb4_general_ci,COERCIBLE) e (utf8mb4_unicode_ci,COERCIBLE) para operação ”.

    Ja tentei várias coleções porém não resolve

  5. Mark disse:

    Fiz todos os passos, consigo logar no phpmy, crio tabelas, porem quando tento me conectar atraves da aplicação vb.net ou mysql workbech não consigo, criei usuarios com super previlegios e nada.

  6. Robson Dantas disse:

    E agora, como faço para instalar o WordPress neste servidor criado?
    É só para aprender a usar o WordPress antes de colocar num servidor pago.
    Quem pode tirar essa dúvida minha?

    Grato.

  1. 11 de fevereiro de 2022

    […] 1 – Debian 11 Bullseye – Instalação limpa 2 – WEB Apache + PHP + MariaDB + phpMyAdmin “LAMP” […]

  2. 14 de junho de 2022

    […] Debian 11 (recomendado): 1- Debian 11 Bullseye / Instalação Limpa 2- Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin phpMyAdmin :: (Opcional não […]

  3. 15 de julho de 2022

    […] Será necessário a instalação do Apache2, PHP, MySQL você pode seguir o tutorial: Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin + Let’s Encrypt no De… […]

  4. 7 de dezembro de 2022

    […] Se você tiver interesse em ter uma interface web para gerenciamento recomendo: Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin + Let’s Encrypt no De… […]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *