Configurar LAMP | VPS Linux Ubuntu 16.04 – Multi Sites

Publicado por:

Vitor Faustino

em 26 de junho de 2018

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.

Clique Aqui para se Cadastrar!

Segue alguns links que podem ser úteis antes de inciarmos as configurações deste tutorial.

PlayList com todos os Vídeos

ÍNDICE

  1. Primeiros Comandos SSH | Update e HostName
  2. Criar um usuário comum NON-ROOT | Linux
  3. Instalar o Apache 2.4 + PHP 7 + MySql (LAMP)
  4. Instalar o PhpMyAdmin para Gerenciar o MySql na Web
  5. Bloquear/Permitir o PhpMyAdmin apenas para IPs específicos
  6. Criar Usuário e banco de dados no MySql por SSH
  7. Configurando/Editando seu php.ini (Básico) | Ubuntu 16.04 + Apache
  8. Como configurar o Multi Domínios Ubuntu 16.04
  9. Configurar o Let’s Encrypt | SSL Grátis em seu VPS
  10. Como alterar a porta padrão do SSH (22)
  11. Desabilitar conexão por senha no SSH | Somente com chave
  12. 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 [email protected]
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.

Não se esqueçam, se forem se cadastrar na DigitalOcean, Clique Aqui.

Um Abraço a todos e sucesso.

Gostou? compartilhe este conteúdo!
Facebook
Twitter
WhatsApp
Telegram
LinkedIn

12 respostas

    1. Olá, Caillou!
      Obrigado por seu comentário, no caso você possui vários IPs ou apenas 1? Poderia me dar um exemplo do que vocês está precisando? Pois se você trabalhar apenas com 1 IP, poderia trabalhar apenas com subdiretórios, exemplo: http://198.178.56.32/cliente1 | http://198.178.56.32/cliente2 e assim por diante. Talvez você nem precise do MultSites, apenas utilizar o arquivo default 000-default.conf. Ou seja elimina o processo 12 e cria subdiretórios dentro da pasta html ou public_html.
      Se você tiver vários IP deve usar o /etc/hosts também.
      Espero ter entendido sua dúvida, não sou nenhum Expert em linux, apenas tento passar um pouco do que aprendo fuçando por ai. hehe
      Grande abraço e sucesso.

  1. Mano meu parabéns ótimo tutorial aprendi muito com vc.
    Conseguir fazer tudo que ensinou, sendo que qd vou configurar a chave ssl da esse erro ai, mesmo meu dominio apontando corretamente e funcionando normal na vps.
    Sabe oque pode ser?..
    Desde ja agradeço e novamente parabens!!

    To fix these errors, please make sure that your domain name was
    entered correctly and the DNS A/AAAA record(s) for that domain
    contain(s) the right IP address. Additionally, please check that
    your computer has a publicly routable IP address and that no
    firewalls are preventing the server from communicating with the
    client. If you’re using the webroot plugin, you should also verify
    that you are serving files from the webroot path you provided.

    1. Olá, Rozan! Obrigado, fico muito feliz que essa publicação tenha sido útil.
      Vamos lá…
      Aparentemente o erro se deve uma falha na consulta DNS ao seu servidor, se adicionou o apontamento ou alterou o DNS recentemente a propagação pode levar um tempinho, se preferir, me informe no e-mail [email protected] o IP do seu servidor e o domínio que está utilizando, dessa forma eu poderei fazer algumas consultas DNS e verificar se existe alguma porta com bloqueio no firewall.
      Reveja o passo “12” em “Editando o arquivo Hosts”, veja se adicionou o ip e domínio corretamente, lembrando que se estiver utilizando o “WWW” você deve duplicar esta opção inserindo a versão com e sem o “WWW”, no seu DNS os dois apontamentos devem existir. Está instalando o SSL só para o dominio principal ou para o WWW também? Fico no aguardo do seu contato, espero poder lhe ajudar.

      1. Amigo obr pela resposta anterior e o erro era onde vc disse, inclui o dominio com www la no passo 12, fiz com disse e dupliquei o dominio e foi di boa, instalou o ssl corretamente…obg!!
        Agora nao querendo abusar mais já abusando..kkk
        Vc teria algum tutorial pra configurar o envio de email na vps, pelo phpmailer usando o gmail..só consigo usando o sendgrid, mais sendgrid as vezes vai pro spam e as vezes nem envia, pelo gmail é mais dificil dar spam
        Uso um script em php e meu servidor é o ubuntu 16.04
        Desde ja agradeço obrigado e parabens novamente!!

  2. olá amigo, fui tentar acessar meu site pelo filezila e não deu certo, talvez porque minha senha e usuário esteja errado sabe como faço para mudar isso no meu servidor ou não tem como?

    1. Olá, Mateus como vai? Você já tentou utilizar a opção de “Reset Root Password” dentro do painel DigitalOcean. Veja se o link abaixo te ajuda:
      https://www.digitalocean.com/docs/droplets/how-to/connect-with-console/

      Neste caso a nova senha gerada será para o usuário “root”.
      Com acesso Root você poderá acessar o SSH via terminal DigitalOcean ou Putty se o acesso por senha estiver ativo.
      Também poderá alterar a senha de outros usuários Sudo caso tenha criado.

      Qualquer coisa me avida, grande abraço.

Deixe uma resposta

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