Passo-a-passo como criar um servidor WEB Apache + PHP + MariaDB + phpMyAdmin no Debian 10 Buster “LAMP”
Distribuição utilizada: Debian 10 Stretch / Instalação Limpa
Vale lembrar que desde o Debian 9 o PHP foi atualizado para a versão 7 e agora para 7.3, e o MySQL foi substituído pelo seu fork MariaBD
Antes de mais nada tenha seu repositório atualizado
# su - # apt update # apt upgrade
:: Instalação do Apache 2.4 ::
# apt install apache2 apache2-utils
Vamos habilitar o mod_rewrite do Apache que é muito utilizado.
Este é um módulo do Apache que utiliza um mecanismo baseado em regras de reescrita.
Vamos ao comando para habilita-lo:
# a2enmod rewrite
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 funcione corretamente será necessário adicionar alguma linhas.
# vim /etc/apache2/sites-enabled/000-default.conf
Adicione abaixo de “DocumentRoot /var/www/html” o seguinte:
<Directory /var/www/html/> Options FollowSymLinks AllowOverride All </Directory>
Agora precisamos restartar o apache2 para que tenha efeito as alterações.
# systemctl restart apache2
http://[SERVER_IP]/
Por segurança remova a assinatura do apache.
# 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
:: Instalação do MariaDB 10.3 ::
# 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. Mas isso é estranho, pois minha senha do root do MariaDB é diferente do meu usuário unix.
Bom se você é meio paranoico com segurança, para alterar a senha do usuário root do MariaDB de forma bruta faça o seguinte:
# mariadb -u root
USE mysql; UPDATE user SET password=PASSWORD('SENHA.db.ROOT') WHERE User='root'; UPDATE user SET plugin="mysql_native_password"; FLUSH PRIVILEGES; quit;
:: Instalação do PHP 7.3 ::
Vou incluir algumas extensões do PHP que são normalmente utilizada
# 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.3.4-2 (cli) (built: Apr 13 2019 19:05:48) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.4-2, Copyright (c) 1999-2018, 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
:: phpMyAdmin ::
Cade ele do repositório?
O PHPMyAdmin não está mais disponível como pacote .deb no Debian 10. Fazendo um pesquisa o motivo é que o “pessoal” que faz empacotamento não tem uma versão estável. https://security-tracker.debian.org/tracker/CVE-2018-19968
Desta forma debian “obriga” com que o usuário instale-o a partir da fonte. https://www.phpmyadmin.net/downloads/
# apt install wget
Escolha qual versão do irá utilizar phpMyAdmin 5.x.x ou 4.x.x
# cd /tmp/
Para phpMyAdmin 5 (06/04/2020)
# wget https://files.phpmyadmin.net/phpMyAdmin/5.0.4/phpMyAdmin-5.0.4-all-languages.tar.gz # tar -vxzf phpMyAdmin-5.0.4-all-languages.tar.gz -C /usr/share/ # mv /usr/share/phpMyAdmin-5.0.4-all-languages /usr/share/phpmyadmin
Para phpMyAdmin 4 (06/04/2020)
# wget https://files.phpmyadmin.net/phpMyAdmin/4.9.5/phpMyAdmin-4.9.5-all-languages.tar.gz # tar -vxzf phpMyAdmin-4.9.5-all-languages.tar.gz -C /usr/share/ # mv /usr/share/phpMyAdmin-4.9.5-all-languages /usr/share/phpmyadmin
Seguimos para phpMyAdmin 5 ou 4
# mkdir /etc/phpmyadmin # touch /etc/phpmyadmin/htpasswd.setup # mkdir -p /var/lib/phpmyadmin/tmp # chown www-data. /var/lib/phpmyadmin/ -R
Criaremos o arquivo de configuração do Apache.
# vim /etc/apache2/conf-available/phpmyadmin.conf
# phpMyAdmin default Apache configuration Alias /phpmyadmin /usr/share/phpmyadmin <Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php <IfModule mod_php7.c> AddType application/x-httpd-php .php php_flag magic_quotes_gpc Off php_flag track_vars On php_flag register_globals Off php_value include_path . </IfModule> </Directory> # Authorize for setup <Directory /usr/share/phpmyadmin/setup> <IfModule mod_authn_file.c> AuthType Basic AuthName "phpMyAdmin Setup" AuthUserFile /etc/phpmyadmin/htpasswd.setup </IfModule> Require valid-user </Directory> # Disallow web access to directories that don't need it <Directory /usr/share/phpmyadmin/libraries> Order Deny,Allow Deny from All </Directory> <Directory /usr/share/phpmyadmin/setup/lib> Order Deny,Allow Deny from All </Directory>
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 FollowSymLinks DirectoryIndex index.php AllowOverride All Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe:d0ce::/64 <IfModule mod_php7.c> AddType application/x-httpd-php .php php_flag magic_quotes_gpc Off php_flag track_vars On php_flag register_globals Off php_value include_path . </IfModule> </Directory> # Authorize for setup <Directory /usr/share/phpmyadmin/setup> AllowOverride All Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe:d0ce::/64 <IfModule mod_authn_file.c> AuthType Basic AuthName "phpMyAdmin Setup" AuthUserFile /etc/phpmyadmin/htpasswd.setup </IfModule> Require valid-user </Directory> # Disallow web access to directories that don't need it <Directory /usr/share/phpmyadmin/libraries> AllowOverride All Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe:d0ce::/64 Order Deny,Allow Deny from All </Directory> <Directory /usr/share/phpmyadmin/setup/lib> AllowOverride All Require ip 127.0.0.1 ::1 200.200.200.0/26 2001:db8:cafe:d0ce::/64 Order Deny,Allow Deny from All </Directory>
Ative a configuração e reinicie o Apache.
# a2enconf phpmyadmin # systemctl restart apache2 # systemctl status apache2
Na próxima etapa, vamos configurar o armazenamento de configuração do phpMyadmin (banco de dados).
Faça o login no MariaDB como usuário root:
# mariadb -p
Criamos um novo banco de dados para o chamado phpmyadmin e um usuario pma (altere para sua senha). Em seguida, concedemos as permissões do banco de dados.
Você pode gerar uma senha acessando https://senhasegura.remontti.com.br/
CREATE DATABASE phpmyadmin; CREATE USER 'pma'@'localhost' IDENTIFIED BY 'SUA_SENHA'; GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'SUA_SENHA' WITH GRANT OPTION; FLUSH PRIVILEGES; EXIT;
Carregue as tabelas do banco de dados: (Informe a senha do root do MariaDB)
# mariadb -u root -p phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql
Agora é necessário ajustar o arquivo de configuração do phpmyadmin.
Definir:
* senha segura (blowfish secret) que deve ter 32 caracteres. Não use o meu exemplo blowfish secreto, defina o seu próprio! Use o gerador https://senhasegura.remontti.com.br
* diretório que o PHPMyAdmin deve usar para armazenar arquivos temporários.
* Descomentar as linhas $cfg['Servers']
- controlhost : localhost
- controlpass : SUA_SENHA
# cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php # vim /usr/share/phpmyadmin/config.inc.php
$cfg['blowfish_secret'] = 'dkJhGx83XR3JjuFrDn8kPp9NtXnkLptl'; /* Adicione esta linha */ $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp'; /* User used to manipulate with storage */ $cfg['Servers'][$i]['controlhost'] = 'localhost'; $cfg['Servers'][$i]['controlport'] = ''; $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = 'SUA_SENHA'; /* Storage database and tables */ $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; $cfg['Servers'][$i]['relation'] = 'pma__relation'; $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; $cfg['Servers'][$i]['history'] = 'pma__history'; $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; $cfg['Servers'][$i]['recent'] = 'pma__recent'; $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; $cfg['Servers'][$i]['users'] = 'pma__users'; $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
http://[SERVER_IP]/phpmyadmin/
Gostou?
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!
Olá. Segui o tutorial certinho mas ao tentar logar no phpmyadmin ele da erro de página e não abre o index.html.
Como eu resolvo?
Tutorial PERFECT ! o blog com tutoriais mais explicativos e didaticos que ja vi ! Rudimar você é fera cara !
otimo tutorial, porem nao consigo instalar o phpmyadmin
erro 404 not found
Muito boa sua didática e explicação, sempre me ajuda e muito.
Sucesso sempre, E muito obrigado.
Parabéns pelo excelente conteúdo que vc fez, super explicativo, obrigado.
Muito obrigado esse seu tutorial salvou meu dia, pena que demorei encontrar. VLW
Muito Obrigado, me ajudou muito aqui
Muito obrigado pelo excelente POST
Perfeito, consegui instalar agora vamos aos trabalhos, ótimo tutorial, parabéns!!!
Tutoria perfeito! Muito Obrigado!
thankyou for perfect tutorial !
O comando # a2enconf phpmyadmin
estava inexistente no meu. Apos algumas pesquisas encontrei esse caminho e adicionei
export PATH=”/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin”
Apos isso o comando # a2enconf phpmyadmin funcionou.
Ta Show o tutorial!
Obirgado Remontti! PARABÉNS!
Vc simplesmente não virou root da forma correta, que é digitando: “su -”
Se não por o “-” as permissões do root são um pouco diferente, entra lá no grupo do telegram, já falamos varias vezes disso, e rimos tb!
BLZ! rsrsr ! Vou refazer novamente ! obrigado
Opa blz?!?! estou seguindo o tutorial e me deparei com um problema. depois de tudo pronto (tive alguns problemas no meio do caminho, mas no fim consegui resolver tudo) quando tento acessar o IPDOSERVIDOR/phpmyadmin/ aparece uma pagina dizendo que eu não tenho permissão pra acessar… 403 FORBIDDEN… onde estou errando?!?! desde já agradeço e o parabenizo pelo excelente blog.
Atenciosamente,
Rafael.
Olá Rafael,
Faça o procedimento abaixo.
1 – Páginas não abrir no browser, zabbix instalado no debian 10
Criar um link /var/www/html , conforme comando abaixo:
PARA A PÁGINA DO PHPADMIN
ln -s /usr/share/phpmyadmin /var/www/html
Lá gambiarra!
Olá!
estou chegando no final do tutorial mas me deparei com um erro interessante.
o comando:
mariadb -u root -p phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql
gera o resultado:
-bash: /usr/share/phpmyadmin/sql/create_tables.sql: Arquivo ou diretório inexistente
achei uma possível solução no stack overflow mas me deu um pressentimento de que iria falhar.
tive de criar 2 usuários pma pois o primeiro saiu com a senha errada. (vou resolver isso depois)
o segundo usuário está como pma01.
tem algo a ver ?
desde já agradeço!
É possível que vc tenha pulado algum comando. Verifica se /usr/share/phpmyadmin/ existe…
Boa Noite.
Meu Zabbix parou de rodar apos a instalação do phpMyAdin, alguém tem ideia do que fazer?
Excelente Tutorial!
No meu deu erro ao me autenticar….
“Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.”
Alguma configuração errada?
Show parabéns deu tudo certo aqui, mas com phpMyAdmin 4 com 5 não sei porque não rolou
Muito bom o Artigo, está funcionando, mas ao final da pagina do PHPMyAdmin aparece duas mensagens:
1º
O ficheiro de configuração precisa agora de uma frase-passe secreta (blowfish_secret).
2º
A $cfg[‘TempDir’] (/usr/share/phpmyadmin/tmp/ 1) não se encontra acessível. phpMyAdmin não conseguirá colocar os modelos em cache e devido a isso irá ser mais lento.
Como eu poderia resolver
verifica o arquivo /usr/share/phpmyadmin/config.inc.php
No tutorial ta lá:
Agora é necessário ajustar o arquivo de configuração do phpmyadmin.
Definir:
* senha segura (blowfish secret) que deve ter 32 caracteres. Não use o meu exemplo blowfish secreto, defina o seu próprio! Use o gerador https://senhasegura.remontti.com.br
* diretório que o PHPMyAdmin deve usar para armazenar arquivos temporários.
* Descomentar as linhas $cfg[‘Servers’]
– controlhost : localhost
– controlpass : SUA_SENHA
Olá, tudo funciona certo, porém quando entro na página do phpmyadmin aparece as linhas dos códigos de vez logar na página, sabe me dizer como posso resolver?
Parece que seu PHP não esta sendo interpretado (ou vc não instalou).
Show de Bola, 1 ano e 8 meses depois que usei pela primeira vez seu post para instalar o nextcloud, agora, novamente vim dar uma olhada se tinha algo mais atualizado e aqui estou com conteudo novo show de bola 100% funcional.
TOp Rudimar! Parabéns!
Tutorial 100% funcional, excelente!
Parabéns Rudimar Remontti.
Tutorial em Vídeo https://youtu.be/ddn6H0y8N5A
Show de bola o artigo! Parabéns!
Trabalho Excelente! Material altamente didático e muito bem detalhado. Parabéns e muito obrigado!
Tutorial 100% funcional, excelente!
Parabéns Rudimar Remontti.
Muito Dez!
Muito bom, obrigado!
Simplesmente espetacular seu tutorial, muito obrigado por disponibilizar esse material.
Infelizmente ainda não consegui resolver, mas já está clareando. Se colocar em /var/www/ funciona, mas meus sites q eu crio os virtual host ficam em /home/user/public_html.
Segundo a documentação do apache:
# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
Options FollowSymLinks
AllowOverride None
Require all denied
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
#
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
#
Bom, mesmo colocando aí o /Directory e / ou dentro do virtualhost em /etc/apache2/sites-available/ não funciona … funciona index.html mas o php não interpreta os códigos, fica exibindo o código php … exemplo phpinfo.php agora se eu coloco em /var/www aí funciona
Tem como clarear ? Tenho dias quebrando a cabeça
Excelente Tutorial.
Aos que utilizam Ubuntu 10, vai precisar de mais 1 comando para dar certo o phpMyAdmin.
Após finalizar o procedimento acima basta aplicar essa linha.
cp -r /usr/share/phpmyadmin/ /var/www/html/phpmyadmin
Não é necessário fazer isso!
Pois a configuração no apache
Cria um atalho para isso
Não consigo abrir a página do phpmyadmin, mas tudo ocorreu sem erros hehe. Obrigado Remontti!
a2enconf phpmyadmin
Ao dar esse comando aqui só dar não encontrado
bom dia,
Seguindo seu tutorial tudo funciona … só tive problema com ulimit na máquina virtual mas já resolvi.
Porém estou tendo problema ao criar os virtual host … quando crio ele não interpreta o código php, fica mostrando o código do arquivo index.php
por exemplo: http://www.brlink.org aparece:
Algum pacote esta faltando, tenta reinstalar os pacotes e iniciar os serviços.
Olá Rudimar
Ainda não consegui resolver o problema, porém parece que já identifiquei mais ou menos onde esteja. Só funciona na pasta padrão /var/www … se colocar o sites lá ele interpreta o php se colocar em qq outra pasta não interpreta só aparece os códigos.
Parece que por padrão a pasta raiz (directory /) é bloqueada (require all denied), então na documentação sugere adicionar em apache2.conf no meu caso o , porém já adicionei e sem sucesso, adicionei no apache2.conf no virtualhost, nos dois e nada.
Poderia fazer um teste sobre isso que falei e dar um retorno a respeito ? Um exemplo de virtualhost ou /directory q funcione nos sites q eu coloque em /home/usuario/
OBS.: Já tem o phpmyadmin 5 instalei no lugar do 4 e funcionou blz só tive q criar uma pasta /usr/share/phpmyadmin/tmp/
Parabéns pelo artigo. Mesmo sem ter experiência com Linux, segui o passo-a-passo e consegui finalizar a configuração. Apenas no momento de baixar o phpMyAdmin-4.9.1-all-languages.tar.gz não consegui estabelecer a conexão. mas baixei de outra forma e deu tudo certo.
Muito bom !!!
Meus parabéns Rudimar!
Seus post’s são muito bem explicados.
Prezado, muito obrigado por compartilhar seus conhecimentos. Tutorial muito bem explicado e detalhado. Resolveu meu problema, principalmente com o PhpMyadmin no Debian 10.
Mais uma vez, grato!
Remontti
Grato pelas explicações e dicas sobre instalação e configuração de serviços Linux.
Parabéns!
Eu estava seguindo o passo a passo, porém quando criado as configurações do apache2 o mesmo da falha no restart e não inicia, aponta erro na linha 160 porém verifiquei o mesmo e esta tudo correto conforme esta descrito aqui, poderia me dar uma luz em relação a este problema? a programação antes do erro deu tudo certo…
Pode ser algum carácter errado, as vezes uma “virgula” já faz toda a diferença, se observar os logs é provável que diga o arquivo que esta com erro e até a linha.
ola o mode # a2enmod rewrite retorna como não encontrado já desinstalei a maquina 3 vezes e o erro persiste.teria alguma solução
Vc não deve está virando root certo.
Se você virar root com apenas su (sem o menos) algumas coisas mudaram na versão do Debian 10
Obrigado amigo, nessa resposta me ajudou também.
Meus parabéns, seu blog esta ótimo, sempre acompanho você! lhe desejo tudo de bom!!!