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
:: 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/phpmyadminOptions 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 # Disallow web access to directories that don't need itphp_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/ 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!
Muito obrigado pela grande ajuda!
como eu testo, através do ip?
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);
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
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.
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.
https://blog.remontti.com.br/6029