Servidor WEB Apache2 + PHP 8.2 + MariaDB +Let’s Encrypt Debian 12 Bookworm (LAMP)
Distribuição utilizada:
– Debian 12 Bookworm / 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 Apache2 ::
# apt install apache2 apache2-utils -y
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" <Directory /var/www/html/> Options FollowSymLinks AllowOverride All </Directory>
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 PHP 8.2 ::
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 -y
É necessário reiniciar o apache para que o php tenha efeito.
# systemctl restart apache2
Consultado informações de versão:
# php --version
PHP 8.2.7 (cli) (built: Jun 9 2023 19:37:27) (NTS) Copyright (c) The PHP Group Zend Engine v4.2.7, Copyright (c) Zend Technologies with Zend OPcache v8.2.7, Copyright (c), by Zend Technologies
Você pode criar um arquivo php com a função phpinfo() para mostrar todas as informações.
# echo '<?php phpinfo(); ?>' > /var/www/html/phpinfo.php
http://[SERVER_IP]/phpinfo.php
:: Instalação do MariaDB 10.11 + phpMyAdmin 5 ::
# apt install mariadb-server mariadb-client phpmyadmin
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.
Informe a senha para o banco de dados do phpmyadmin. http://senhasegura.remontti.com.br/
Para acessar o phpmyadmin:http://[SERVER_IP]/phpmyadmin/
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 <Directory /usr/share/phpmyadmin> Options SymLinksIfOwnerMatch DirectoryIndex index.php # Restrito aos IPs 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 <IfModule mod_php7.c> 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/ </IfModule> # PHP 8+ <IfModule mod_php.c> 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/ </IfModule> </Directory> # Disallow web access to directories that don't need it <Directory /usr/share/phpmyadmin/templates> Require all denied </Directory> <Directory /usr/share/phpmyadmin/libraries> Require all denied </Directory>
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!
# > /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
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!
O meu está dando erro 500 fiz tudo como estava aqui no tutorial. me ajudem por favor ,obrigado.
Bom dia. Agradeço o artigo publicado foi de grande valia.
Estou no debian Bokwoorm 12, porém ele não reconhece o comando vim.
Tente trocar por nano.
Como acesso meu servidor atrás do Starlink sem Ip público?
Não consigo habilitar o mod_rewrite, o comando não é valido.
entra com “su -” no root