- Laravel – Framework PHP para desenvolvimento web
- Docker – Containerização do ambiente
- PostgreSQL – Banco de dados relacional
Este guia detalha o processo para configurar e iniciar o ambiente de desenvolvimento completo do projeto, que utiliza Vagrant para criar uma máquina virtual e Docker para orquestrar os serviços.
⚠️ Aviso de Desempenho: Linux vs. Windows É altamente recomendado executar este ambiente em um sistema operacional Linux. A integração nativa do Docker com o kernel do Linux oferece um desempenho drasticamente superior. Em sistemas Windows, a camada de virtualização adicional para o compartilhamento de arquivos pode tornar a aplicação, especialmente o frontend, significativamente mais lenta.
Antes de começar, garanta que os seguintes softwares estejam instalados em sua máquina:
- Virtualização Habilitada na BIOS: Verifique se a virtualização (Intel VT-x ou AMD-V) está ativada na BIOS/UEFI do seu computador. Este é um requisito fundamental para o VirtualBox funcionar.
- Git: Para controle de versão.
- VirtualBox: A plataforma de virtualização.
- Vagrant: A ferramenta para gerenciar a máquina virtual.
Para mitigar a falta de desempenho no Windows, você pode tentar ativar a "Plataforma do Hipervisor do Windows", o que pode melhorar a comunicação com o VirtualBox.
- Pressione
Wine digite "Ativar ou desativar recursos do Windows". - Na janela que abrir, encontre e marque a opção "Plataforma do Hipervisor do Windows".
- Clique em "OK" e reinicie o computador quando solicitado.
Siga estes passos para estruturar corretamente seu ambiente local.
-
Crie uma pasta principal para o projeto (ex:
ifcodes-dev). -
Dentro desta pasta, crie a seguinte estrutura e clone os repositórios do backend e frontend (ou forks correspondentes) nos locais indicados:
ifcodes-dev/ | ├── back/ | └── front/Exemplo dos comandos:
mkdir ifcodes-dev cd ifcodes-dev git clone [URL_DO_REPO_BACKEND] back git clone [URL_DO_REPO_FRONTEND] front
Copie os seguintes arquivos dessa pasta do drive para a raiz da sua pasta principal (ifcodes-dev/):
docker-compose.ymlinit-backend-db.shjudge0.confVagrantfile
Sua estrutura de pastas e arquivos deve ficar exatamente assim:
ifcodes-dev/
├── .env
├── back/
└── ... (código completo do Laravel)
├── front/
└── ... (código completo do React)
├── docker-compose.yml
├── init-backend-db.sh
├── judge0.conf
└── Vagrantfile
Siga esta sequência com atenção.
-
Ajuste de Recursos (Opcional): A máquina virtual está pré-configurada para usar 4 núcleos de CPU e 4GB de RAM. Se sua máquina tiver recursos limitados ou de sobra, você pode ajustar estes valores no
Vagrantfile:# Dentro do Vagrantfile vb.customize ["modifyvm", :id, "--memory", "4096"] # Altere o valor da memória (em MB) vb.cpus = 4 # Altere o número de núcleos de CPU
-
Inicie a Máquina Virtual: Abra um terminal na pasta raiz do projeto (
ifcodes-dev/) e execute:vagrant up
Este comando irá baixar a imagem do Ubuntu e provisionar a VM com Docker, o que pode demorar vários minutos na primeira vez.
Dica de Troubleshooting: Se a máquina não subir ou apresentar erros de tela preta, descomente a linha
vb.gui = truenoVagrantfile. Isso abrirá uma janela do VirtualBox, permitindo que você veja o que está acontecendo dentro da VM. -
Recarregue a VM: O Judge0 precisa de uma configuração especial no boot da VM. Para aplicá-la, é necessário recarregar a máquina:
vagrant reload
-
Configure o
.envdo Backend: O passo anterior gerou um arquivopasswords.txtna raiz do seu projeto.- Abra o
passwords.txte copie o valor do campo "PostgreSQL Password". - Navegue até a pasta
back/src/. Você encontrará um arquivo.env.example. - Copie este arquivo e renomeie a cópia para
.env. - Abra o novo
back/src/.enve cole a senha que você copiou no campoDB_PASSWORD.
- Abra o
-
Acesse a VM via SSH:
vagrant ssh
-
Navegue até a Pasta do Projeto: Dentro da VM, os arquivos do seu projeto estão na pasta
/vagrant.cd /vagrant -
Inicie os Contêineres Docker: Este comando irá baixar todas as imagens Docker e iniciar os serviços.
docker compose up -d
Atenção: Este processo pode demorar muito, especialmente na primeira vez em um sistema Windows. É normal que o download de algumas imagens pareça "travado". Se o processo ficar congelado por mais de 5-10 minutos em uma única etapa, pressione
Ctrl + Cpara interromper e execute o comandodocker compose up -dnovamente. O Docker continuará de onde parou. -
Execute as Migrações do Banco de Dados: Com os contêineres rodando, execute as migrações do Laravel para criar as tabelas no banco de dados.
docker exec laravel_app php artisan migrate:fresh --seed -
Gere a Chave da Aplicação Laravel: Execute o comando para gerar a chave de criptografia da aplicação:
docker exec laravel_app php artisan key:generate
Pronto! Se todos os passos foram concluídos, o sistema deve estar totalmente funcional.
- Frontend (React):
http://localhost:5173 - Backend (Laravel):
http://localhost:8000 - API (Judge0):
http://localhost:2358
Ambas as aplicações usam a mesma instância do PostgreSQL, mas bancos de dados separados.
Banco de Dados do Judge0:
- Host/URL:
localhost - Porta:
5433 - Base de Dados:
judge0 - Usuário:
integrador - Senha: A senha do arquivo
passwords.txt.
Banco de Dados do Backend:
- Host/URL:
localhost - Porta:
5433 - Base de Dados:
ifcodes - Usuário:
integrador - Senha: A senha do arquivo
passwords.txt.
Caso o sistema esteja muito lento, a alternativa é usar o modo de compartilhamento de arquivos NFS, que é drasticamente mais rápido. No Windows, ele não é suportado nativamente pelo Vagrant e precisa de um plugin. Essa configuração não está como padrão pois não foi bem testada ainda.
- Instale o plugin:
vagrant plugin install vagrant-winnfsd
- Edite o
Vagrantfile: Altere a linhasynced_folderpara usar o NFS e adicione as opções de montagem que corrigem bugs comuns no Windows.# No Vagrantfile config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ['vers=3', 'tcp', 'nolock', 'actimeo=1']
- Execute
vagrant reloade aceite a solicitação do Firewall do Windows quando ela aparecer.
Fiquem à vontade para compartilhar outras configurações e melhorias!