Servidor - 29/05/2026
Apresentação:
-
Este tutorial ensina como montar um servidor completo com as melhores ferramentas disponíveis no momento, visando portabilidade, velocidade, segurança, organização e manutenção.
O ambiente será montado no WSL do Windows, visando compatibilidade com o ambiente de produção, pois desenvolver no Windows para rodar no Linux costuma causar vários problemas.
Onde estiver descrito DEV, refere-se ao WSL; onde estiver PROD, refere-se ao servidor com Debian Net Inst.
Pacotes:
-
Em modo DEV no WSL, instale o wget (downloads via link), o git (enviar o projeto para o GitHub) e o libnss3-tools (necessário para o certificado simulado de HTTPS).
Antes de começar, veja como instalar o Docker AQUI.
Em modo PROD no servidor Debian Netinst, instale o openssh-server (acesso via SSH e FileZilla), o certbot (gerar o certificado HTTPS da Let's Encrypt) e o git (baixar as alterações do projeto no GitHub).
Configurações:
-
Configurações de acesso modo DEV (somente WSL):
-
Criar arquivos de configuração NGINX:
Conteúdo para o servidor padrão localhost, usado em DEV:
Arquivo do servidor com os certificados para HTTPS (usado em PROD):
Conteúdo:
-
RustDesk Server:
Servidor do RustDesk — semelhante ao AnyDesk e outros, mas open source e hospedado no seu próprio servidor.
Aqui você colocará seus arquivos id_25519 e id_25519.pub caso queira restringir o tráfego do seu servidor apenas a clientes que possuam a sua chave pública.
Certificado Fake Local HTTPS:
-
Para não precisar ficar alterando o arquivo de configuração do NGINX entre DEV e PROD, é possível gerar certificados que simulam o certificado da Let's Encrypt localmente. Para isso, acesse o repositório do mkcert (Filippo Valsorda) no GitHub e baixe com o wget o binário ...linux-amd64.
https://github.com/FiloSottile/mkcert/releases
Depois crie o diretório idêntico ao do servidor PROD, entre nele e gere os arquivos:
Por último, baixe o binário ...windows-amd64.exe no Windows e instale pelo PowerShell:
Certbot:
-
Para que o HTTPS funcione, é preciso criar o certificado da Let's Encrypt com o nginx parado (a porta 80 precisa estar livre).
Dica: o certificado é renovado automaticamente pelo timer do Certbot. Para testar a renovação manualmente, use
sudo certbot renew --dry-run.
docker-compose.yml:
-
O docker-compose.yml é o arquivo principal: ele define quais containers serão usados, seus comportamentos e como os arquivos internos serão sobrescritos pelos externos.
-
Observações NGINX:
O app default deve estar funcionando corretamente na pasta padrão /var/www/ para que os demais também funcionem.
Atenção: os arquivos
tulio.local.confehive.cerianthusagro.com.br.confcitados nos volumes são de outros projetos. Remova-os dodocker-compose.ymlse eles não existirem, ou o NGINX não subirá. -
Observações Samba:
Em GROUPID=1001 deve ir o id do grupo escolhido para o diretório compartilhado, assim como o USERID=1000 para o usuário.
Caso ao tentar acessar pelo Windows ocorram alguns erros, execute no cmd do Windows:
Evite usar o Samba para acesso externo, limitando no UFW o acesso à sua rede local:
-
Observações Postgres:
Em ports:, para que o banco seja acessado apenas via SSH ou pela aplicação, mantenha o 127.0.0.1: antes da porta. Para acesso externo (via DBeaver, por exemplo), remova esse IP.
Primeira Execução:
-
Tudo pronto. Agora suba os containers para começar o desenvolvimento.
Este comando inicia o servidor, mas, para que funcione, os containers das aplicações Laravel indicadas no diretório docker/nginx também precisam estar rodando.
VS Code:
-
Instalando a extensão WSL da Microsoft no VS Code, será possível editar os arquivos do projeto no WSL a partir do VS Code no Windows.
Para isso, no terminal do WSL dentro da pasta do projeto, basta digitar code . e pronto: o VS Code abre automaticamente no Windows, já na pasta do projeto, por conexão remota.
Ao instalar o Git e inicializá-lo dentro da pasta do projeto (também no WSL), o VS Code cuida do versionamento e envia as alterações para o GitHub apenas por cliques, de forma bem intuitiva.
Para acompanhar o desenvolvimento do projeto, basta abrir qualquer navegador no Windows e acessá-lo pelo localhost.
Passar o Projeto para Produção:
-
SSH
Para acessar o servidor a partir do Windows, usando o IP 192.168.1.4 como exemplo, use o comando:
Ao se conectar a um dispositivo por SSH, o Windows registra a conexão num arquivo chamado known_hosts (em C:\Users\usuario\.ssh) para evitar que você se conecte ao mesmo IP no futuro, mas em uma máquina diferente — protegendo contra ataques "man-in-the-middle" (MITM). Caso ele detecte que a máquina de destino mudou (por uma formatação, por exemplo), aparece o alerta WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! e a conexão é bloqueada.
Se você tem certeza de que a máquina de destino é a pretendida, pode apagar as linhas referentes ao acesso anterior no known_hosts ou simplesmente rodar:
Ele reseta o acesso e pergunta se você quer registrar um novo fingerprint; basta digitar yes, pressionar Enter, digitar a senha do usuário e pronto, a conexão foi bem-sucedida!
Para não precisar digitar a senha a cada conexão, copie a sua chave pública do Windows (em C:\Users\usuario\.ssh\id_ed25519.pub) e cole no arquivo ~/.ssh/authorized_keys do servidor:
Depois é só salvar com Ctrl + X, Y, Enter e pronto.
Caso ainda não tenha uma chave id_ed25519 no Windows, crie:
Para enviar e receber arquivos do GitHub pelo comando git, adicione a chave pública criada AQUI.
-
Mandar o Projeto para o GitHub:
-
Trazer o projeto para o servidor de produção:
-
Atualizar o Site:
Crie um alias (atalho) chamado gp para que, sempre que houver alterações no DEV enviadas ao GitHub, o servidor PROD consiga baixá-las de forma simples, segura e sem contratempos:
Atenção: o
git reset --harddescarta qualquer alteração local não commitada no servidor. Use só em PROD, onde nada é editado à mão. -
Restaurar banco de dados:
Criar banco para outro projeto:
-
Quando o mesmo servidor for usado para vários projetos, eles precisarão estar na rede rede_global_postgres, e os bancos, usuários e senhas deverão estar no .env de cada projeto.
A rede global precisará estar no docker-compose.yml de todos os projetos.
Conecte como o superusuário (
usuario) no banco padrão (banco) e crie o banco/usuário adicional do novo projeto:E então execute: