Este repositório está configurado para realizar deploy automático em um servidor remoto com Docker, toda vez que um git push for feito na branch main.
✅ Compatível com servidores Linux comuns e com WSL (Windows Subsystem for Linux)
- Repositório hospedado no GitHub
- Docker e Docker Compose instalados no servidor (ou WSL)
- Acesso SSH ao servidor
- Git configurado no servidor e com acesso ao repositório
No seu terminal local:
ssh-keygen -t rsa -b 4096 -C "github-deploy"Isso gerará dois arquivos:
~/.ssh/id_rsa→ chave privada~/.ssh/id_rsa.pub→ chave pública
No terminal local, execute:
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@ip-do-servidorOu cole manualmente o conteúdo da
id_rsa.pubno arquivo~/.ssh/authorized_keysdo servidor.
No repositório:
Vá em Settings > Secrets and variables > Actions > New repository secret e crie os seguintes:
| Nome | Valor |
|---|---|
SERVER_HOST |
IP ou domínio do servidor |
SERVER_USER |
Usuário SSH (ex: ubuntu, root) |
SERVER_SSH_KEY |
Conteúdo da chave privada id_rsa |
Crie o arquivo .github/workflows/deploy.yml com o seguinte conteúdo:
name: Deploy automático
on:
push:
branches:
- main # Altere para sua branch principal, se diferente
jobs:
deploy:
name: Deploy via SSH
runs-on: ubuntu-latest
steps:
- name: Deploy no servidor
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
cd /caminho/do/seu/projeto
git pull
docker compose down
docker compose up -d-
Faça um commit e
pushna branchmain:git add . git commit -m "Testando deploy automático" git push origin main
-
Acesse o GitHub → aba Actions → veja o job rodando.
- O WSL precisa estar com Docker funcionando (via Docker Desktop ou local).
- O terminal do WSL deve estar ativo ou configurar startup automático.
- Use caminhos absolutos corretos no
cddo script (/home/seu-usuario/projeto).
Quer logs no servidor? Edite o script:
script: |
cd /caminho/projeto
echo "$(date) - Início do deploy" >> deploy.log
git pull >> deploy.log
docker compose down >> deploy.log
docker compose up -d >> deploy.log
echo "$(date) - Deploy finalizado" >> deploy.log