Explicarei o passo a passo, da forma mais completa e detalhada possível para implantarmos o LAMP em um VPS (Servidor Virtual Privado) com Linux UBUNTU 16.04. Utilizaremos linhas de comandos executados dentro de um terminal LINUX, fique calmo, seguindo o passo a passo ficará bem fácil.
Neste tutorial vamos configurar o Apache + MySql + PhpMyAdmin + PHP 7.0 + SSL, realizaremos também algumas configurações básicas para tornar sua instalação mais segura.
Para este Tutorial utilizarei a DigitalOcean, que oferece servidores virtuais privados com planos a partir de $5 dólares mês. Cadastre-se através do Link para receber Bônus em crédito e poder testar a plataforma.
Segue alguns links que podem ser úteis antes de inciarmos as configurações deste tutorial.
- Criando uma chave SSH | DigitalOcean
- Criar um servidor VPS com Ubuntu 16.04 | DigitalOcean
- Apontando o DNS de um domínio para um servidor VPS/Site | DigitalOcean
- Como se conectar a um servidor SSH com o Putty
- Conectando ao SFTP do seu VPS para transferir arquivos | FileZilla
ÍNDICE
- Primeiros Comandos SSH | Update e HostName
- Criar um usuário comum NON-ROOT | Linux
- Instalar o Apache 2.4 + PHP 7 + MySql (LAMP)
- Instalar o PhpMyAdmin para Gerenciar o MySql na Web
- Bloquear/Permitir o PhpMyAdmin apenas para IPs específicos
- Criar Usuário e banco de dados no MySql por SSH
- Configurando/Editando seu php.ini (Básico) | Ubuntu 16.04 + Apache
- Como configurar o Multi Domínios Ubuntu 16.04
- Configurar o Let’s Encrypt | SSL Grátis em seu VPS
- Como alterar a porta padrão do SSH (22)
- Desabilitar conexão por senha no SSH | Somente com chave
- Conectando ao SFTP do seu VPS para transferir arquivos | FileZilla
1. PRIMEIROS COMANDOS SSH | UPDATE E HOSTNAME
Legenda:
# Comandos executados como Root
$ Comandos Executados como Non-Root
Ao copiar o código, não utilizar # ou $
Atualizando o Sistema
sudo apt-get update && sudo apt-get -y upgrade
Alterar o nome do servidor
hostname nomeseuservidor
2. CRIAR UM USUÁRIO COMUM NON-ROOT
Criar um novo Usuário
adduser novousuario
– Crie uma senha e pressione ENTER (Não será mostrada a digitação de senha por segurança)
– Confirme a senha e pressione ENTER
– Informe o nome do usuário e pressione ENTER
– Basta pressionar ENTER nas próximas opções
– Confirme a inclusão pressionando “Y” e ENTER
Permissão SUDO para o novo usuário
sudo usermod -aG sudo novousuario
Realizar login com o novo usuário
sudo su novousuario
Voltar diretório para RAIZ
cd ~
3. INSTALAR O APACHE + PHP 7.0 + MYSQL (LAMP)
Reparem que agora já não estamos mais como root, o sinal passou a ser “$”
Todos os comando serão executados com o novo usuário criado.
Instalando o Maria DB Server (MySql)
sudo apt–get install mariadb–server –y
[sudo] informe a senha criada no passo 2 para o novo usuário e pressione enter (Não será mostrada a digitação de senha por segurança) e aguarde a instalação terminar.
Segurança MySql
O comando mysql secure installation é muito importante e deve ser usado no servidor de produção, o assistente irá nos guiar através de algumas opções que vem configuradas por padrão.sudo mysql_secure_installation
Este é o momento para criamos uma senha para o usuário ROOT no MySql.
Recomendo utilizar senhas seguras, anote sempre essas senhas durante a instalação, Clique Aqui para gerar senhas seguras.
As perguntas serão parecidas como as abaixo:
– Enter current password for root (enter for none): Pressione Enter
– Set root password? [Y/n] <— Y
– New password: <— Crie uma nova senha
– Re–enter new password:<— Confirme a nova senha
Responda Y e pressione ENTER para o restante das opções.
– Reload privilege tables now? [Y/n] <— Y
– Remove anonymous users? [Y/n] <— Y
– Disallow root login remotely? [Y/n] <— Y
– Reload privilege tables now? [Y/n] <— Y
Instalando o Apache
sudo apt–get install apache2 –y
Abra seu navegador e digite o IP do seu servidor (Pode ser encontrado no Droplet da DigitalOcean, utilizamos esse IP para se conectar ao SSH)
Reiniciando o Apache
sudo service apache2 restart
Instalando PHP 7.0
sudo apt–get –y install php7.0 libapache2–mod–php7.0
Instalando algumas dependências do PHP
sudo apt–get install php7.0–mysql php7.0–zip php7.0–curl php7.0–json php–memcached php7.0–mcrypt php7.0–sqlite3 –y
Instalando o ZIP
sudo apt–get install zip –y
Ativando o mcrypt
sudo phpenmod mcrypt
Reiniciando o Apache
sudo service apache2 restart
4. INSTALAR O PHPMYADMIN | GERENCIAR O MYSQL NA WEB
Instalar o PhpMyAdmin
sudo apt–get install phpmyadmin –y
Selecione “Apache2” pressionando a barra de espaço no teclado e pressione ENTER
Próxima tela:
“Configure database for phpmyadmin with dbconfig-common?”
Selecione Sim e Enter
Próxima tela:
Crie uma senha para o usuário “phpmyadmin”
Use uma senha forte novamente! Clique Aqui para gerar senhas seguras.
Pressione Enter, confirme a senha e Enter para finalizar a instalação
Até o momento devemos ter anotado os seguintes dados:
NON-ROOT
Usuário: novousuario
Senha: Senha Criada
MySql
Usuário: Root
Senha: Senha criada
Usuário: phpmyadmin
Senha: Senha criada
5. BLOQUEAR/PERMITIR O PHPMYADMIN APENAS PARA IPS ESPECÍFICOS
O PhpMyAdmin é sempre alvo de muitos ataques, por isso, devemos criar uma ação simples para adicionar uma camada extra de segurança. Iremos permitir o acesso apenas a partir de determinados IPs, será necessário alterar essa configuração a cada mudança de IP por parte do seu provedor. Sim, realmente é chato, mas o processo é simples e garante uma segurança extra para seus bancos de dados, permitindo o acesso apenas através do seu endereço IP.
Editar o Arquivo apache.conf
sudo nano /etc/phpmyadmin/apache.conf
Dentro de: <Directory /usr/share/phpmyadmin>
Insira as seguintes linhas:
Order Deny,Allow
Deny from All
Allow from 158.144.152.33
(Substitua “158.144.152.33” pelo seu IP local, saiba seu IP Clicando Aqui)
Adicione mais linhas “Allow from” para liberar outros IPs de acesso
Após inserir as linhas e seu IP
CTRL +X para sair | “Y” para salvar | ENTER para gravar
Alterar URL (Aliases) de acesso ao PhpMyAdmin (Opcional)
Para evitar problemas relacionados a Bots e Invasores que continuamente estão analisando servidores que utilizam a url padrão do PhpMyAdmin é recomendável que você altere a URL para outro endereço.
Vamos editar o Arquivo apache.conf
sudo nano /etc/phpmyadmin/apache.conf
Altere a Linha “Alias /phpmyadmin/usr/share/phpmyadmin”
Neste exemplo, estou alterando “phpmyadmin” para “dircustom” utilize o nome que achar melhor.
phpMyAdmin default Apache configurationAlias /dircustom/usr/share/phpmyadmin
Após alterar as linhas
CTRL +X para sair | “Y” para salvar | ENTER para gravar
Reiniciando o Apache
sudo service apache2 restart
6. CRIAR USUÁRIO E BANCO DE DADOS NO MYSQL POR SSH
Vamos acessar o MySql e criar um novo Banco de Dados e um Usuário, não se esqueça de alterar os campos “usuário“, “senha“, “nomedobanco“. Mantenha dentro das aspas simples, altere somente o texto.
Acessando o MySql
sudo mysql -u root -p
Informe a senha do usuário Root
Criar Usuário no MySql
CREATE USER ‘usuario‘@’localhost’ IDENTIFIED BY ‘senha‘;
Criar Banco de Dados MySql
CREATE DATABASE nomedobanco;
Definir Privilégios
GRANT ALL PRIVILEGES ON nomedobanco.* TO ‘usuario‘@’localhost’;
Recarregar Privilégios
FLUSH PRIVILEGES;
Sair
exit
Faça um teste acessando o PhpMyAdmin “http://seudominio.com.br/phpmyadmin”, (Substitua phpmyadmin para o diretório personalizado caso tenha alterado no passo opcional “5”.
Entre com o usuário e senha criado.
7. CONFIGURANDO SEU PHP.INI (BÁSICO) | UBUNTU 16.04 + APACHE
Editar o php.ini (PHP 7.0)
sudo nano /etc/php/7.0/apache2/php.ini
Procure pelos termos que não estão comentados com “;” e altere conforme valores em Vermelho.
display_errors = Off
allow_url_fopen = Off
upload_max_filesize = 20M
max_file_uploads = 100
memory_limit = 256M
post_max_size = 20M
max_execution_time = 180
Dica: Pressione “CTRL + W” para localizar termos
Após alterar as linhas
CTRL +X para sair | “Y” para salvar | ENTER para gravar
Voltar diretório para RAIZ
cd ~
Reiniciar Apache
sudo service apache2 restart
8. CONFIGURAR O MULTI DOMÍNIOS LINUX UBUNTU + APACHE
Realize esse procedimento para cada site que for configurado em seu VPS, alterando para o domínio desejado.
Criar diretório do Site
(Altere seudominio.com.br)
sudo mkdir -p /var/www/seudominio.com.br/public_html
Definir Usuário como proprietário do diretório
(Altere seudominio.com.br e seuusuario)
sudo chown -R seuusuario:www-data /var/www/seudominio.com.br/public_html
Permissão ao diretório WWW
sudo chmod -R 755 /var/www
Criar um HTML para teste
(Altere seudominio.com.br)
sudo echo “Site seudominio.com.br – OK!” > /var/www/seudominio.com.br/public_html/index.html
Criando e Configurando seu arquivo .conf
(Altere seudominio.com.br)
sudo nano /etc/apache2/sites-available/seudominio.com.br.conf
Cole as informações abaixo
(Altere seudominio.com.br)
ServerAdmin webmaster@seudominio.com.br
ServerName seudominio.com.br
ServerAlias www.seudominio.com.br
DocumentRoot /var/www/seudominio.com.br/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Após inserir as linhas
CTRL +X para sair | “Y” para salvar | ENTER para gravar
Ativando seu novo site
(Altere seudominio.com.br)
sudo a2ensite seudominio.com.br.conf
Desativando a configuração padrão
sudo a2dissite 000–default.conf
Ativação de Módulos
sudo a2enmod headers
sudo a2enmod rewrite
sudo a2enmod expires
Reiniciar Apache
sudo service apache2 restart
Editando o arquivo Hosts
sudo nano /etc/hosts
Adicione um nova linha abaixo de 127.0.0.1, troque a numeração 98.143.156.87 pelo IP do seu servidor e seu domínio:
Após inserir as linhas
CTRL +X para sair | “Y” para salvar | ENTER para gravar
Reiniciar o Apache
sudo service apache2 restart
9. CONFIGURAR O LET’S ENCRYPT | SSL GRÁTIS EM SEU VPS
O projeto Let’s Encrypt permite gerar um certificado SSL gratuitamente para seu site ou loja virtual, se quiser saber mais sobre o projeto Clique Aqui.
Para que todo processo funcione, seu domínio deve estar apontado para o IP do seu servidor, bem como aliases “www”, o arquivo “hosts” deve estar configurado (Passo 8). E DNS propagados (Geralmente em até 24 horas).
Instalação – Adicionando o Repositório
sudo add-apt-repository ppa:certbot/certbot
Se solicitado, pressione Y e ENTER para confirmar a atualização dos Pacotes
Update
sudo apt update
Instalar Python
sudo apt install python-certbot-apache
Se solicitado, pressione Y e ENTER
Obter certificado SSL
Agora vamos obter o certificado para nosso domínio. Se você quiser usar o prefixo “www”, será necessário obter um certificado para ele também. Mesmo que você esteja apenas redirecionando www.seudominio.com.br para seudominio.com.br usando o .htaccess. Use “-d” para adicionar mais domínios ou sub-domínios, se desejar.
Lembre-se de alterar os comandos para seu domínio “seudominio.com.br”
sudo certbot –apache -d seudominio.com.br -d www.seudominio.com.br
Retorno de Mensagem: Informe um e-mail de contato para receber alertas urgentes de renovações e segurança. Ou pressione “C” para não informar. “Recomendo que coloquem um e-mail nesta opção”.
Retorno de Mensagem: Aceite dos termos de serviço.
Pressione A e ENTER para aceitar e continuar.
Retorno de Mensagem: Compartilhe seu e-mail com a EFF.
Pressione N e ENTER para não compartilhar seu e-mail.
Retorno de Mensagem: Redirecionar HTTP para HTTPS
Você poderá escolher entre ativar o acesso http e https ou forçar todas as solicitações para “https”. Normalmente, é mais seguro exigir https, a não ser que você tenha necessidades específicas de tráfego http não criptografado.
Não Redirecionar: Pressione “1” e “ENTER”
Forçar HTTPS: Pressione “2” e “ENTER” (Recomendado)
Renovando Certificado automaticamente
Os certificados “Let’s Encrypt” expiram a cada 90 dias, eles precisam ser renovados periodicamente. Abaixo segue comando para automatizar o processo de renovação automática, dessa forma o Certbot será executado automaticamente duas vezes por dia e renovará qualquer certificado que esteja no prazo de trinta dias.sudo certbot renew –dry-run
10. COMO ALTERAR A PORTA PADRÃO DO SSH (22) | UBUNTU 16.04
Uma questão de segurança muito importante, é alterar a porta padrão do SSH (22) para um porta aleatória disponivel, esse processo é recomendado, se não houver interesse pule para o próximo passo.
Importante: Antes de alterar a porta SSH, realize um SnapShot do seu servidor e confirme se seu servidor possui um firewall e libere a porta desejada antes de realizar o procedimento abaixo. RISCO DE SER TRANCADO PARA FORA DO SERVIDOR caso o firewall esteja bloqueando a nova porta.
Editando a configuração do SSH
sudo nano /etc/ssh/sshd_config
Localize a linha Port 22 e altere para porta 43000 ou qualquer porta de sua preferencia.
Observação, se a linha estiver dessa forma #Port 22, remova o comentário #.
Reiniciar o SSH
sudo service sshd restart
Será necessário desconectar e se conectar novamente alterando a porta do Putty para a porta configurada no arquivo, no caso aqui a 43000.
11. DESABILITAR CONEXÃO POR SENHA NO SSH | SOMENTE COM CHAVE
Como criamos um usuário NON-ROOT com permissão SUDO, por padrão esse usuário tem permissão para realizar login através do SSH, seria ideal mantermos o acesso apenas com chave SSH por questões de segurança, então caso deseje desabilitar o acesso por senha de todos usuários siga esses passos, caso contrario, pule para a próxima etapa.
Editando a configuração SSH
sudo nano /etc/ssh/sshd_config
Localize a opção #PasswordAuthentication no e remova o comentário apagando “#”
Dica: Pressione “CTRL + W” para localizar termos
Ex.
Antes: #PasswordAuthentication no
Depois: PasswordAuthentication no
Após alterar as linhas
CTRL +X para sair | “Y” para salvar | ENTER para gravar
Reiniciar o SSH
sudo service sshd restart
Finalizamos aqui nossa instalação, basta acessarem o SFTP utilizando seu Cliente favorito.
Um Abraço a todos e sucesso.