Ir para o conteúdo principal

Desenvolvimento com Contêineres Dev

Os Contêineres Dev fornecem um ambiente de desenvolvimento consistente e reproduzível usando contêineres Docker. Com um único clique, você pode iniciar um ambiente de desenvolvimento Immich no Mac, Linux, Windows ou na nuvem usando o GitHub Codespaces.

Inicie rapidamente!

Abrir no GitHub Codespaces

Saiba mais sobre Contêineres Dev

Pré-requisitos​

Antes de começar, certifique-se de ter:

  • Docker Desktop (versão mais recente)
  • Visual Studio Code com a extensão Dev Containers
  • Git para clonar o repositório
  • Pelo menos 8GB de RAM (16GB recomendados)
  • 20GB de espaço livre em disco
Ambientes de Desenvolvimento Alternativos

Embora este guia foque no VS Code, você tem muitas opções para desenvolvimento com Contêiner Dev:

Editores Locais:

Soluções Baseadas na Nuvem:

  • GitHub Codespaces - Totalmente integrado ao GitHub, suporte excelente para devcontainer.json
  • GitPod - Plataforma SaaS com suporte recente para contêineres Dev (historicamente usava gitpod.yml)

Opções Auto-Hospedadas:

  • Coder - Focado em empresas, requer conhecimento em Terraform, autogerenciado
  • DevPod - Ferramenta somente cliente com excelente suporte a devcontainer.json, funciona com qualquer provedor (local, nuvem ou no local)

Serviços do Contêiner Dev​

O ambiente do Contêiner Dev consiste nos seguintes serviços:

ServiçoNome do ContêinerDescriçãoPortas
Servidor & Webimmich-serverExecuta o servidor de API e o frontend web em modo de desenvolvimento2283 (API)
3000 (Web)
9230 (Depuração de Workers)
9231 (Depuração de API)
Banco de DadosdatabaseBanco de dados PostgreSQL5432
CacheredisServidor de cache Valkey6379
Aprendizado de Máquinaimmich-machine-learningServidor de inferência de modelo ML do Immich3003

Primeiros Passos​

Etapa 1: Clonar o Repositório​

git clone https://github.com/immich-app/immich.git
cd immich

Etapa 2: Configurar Variáveis de Ambiente​

Os contêineres dev do Immich leem variáveis de ambiente do seu ambiente shell, não de arquivos .env. Isso permite que eles funcionem em ambientes na nuvem sem pré-configuração.

Configuração

Ao executar localmente, e se você deseja criar (ou usar uma existente) pasta de armazenamento de fotos e/ou banco de dados, você deve definir a variável UPLOAD_LOCATION em seu ambiente shell antes de iniciar o Contêiner Dev. Isso determina onde os arquivos enviados serão armazenados e também onde o banco de dados salva seus dados.

# Configure temporariamente para a sessão atual
export UPLOAD_LOCATION=/opt/dev_upload_folder

# Ou adicione ao seu perfil do shell para persistência
# (~/.bashrc, ~/.zshrc, ~/.bash_profile, etc.)
echo 'export UPLOAD_LOCATION=/opt/dev_upload_folder' >> ~/.bashrc
source ~/.bashrc

Etapa 3: Iniciar o Contêiner Dev​

dica

O desenvolvimento do Immich faz uso extensivo de imagens base especializadas para seu desenvolvimento baseado em docker-compose. Por esse motivo, você não poderá usar o comando Clone Repository in a Container Volume do VSCode.

Usando a Interface do VS Code:​

  1. Abra o repositório clonado no VS Code
  2. Pressione F1 ou Ctrl/Cmd+Shift+P para abrir o painel de comandos
  3. Digite e selecione "Dev Containers: Rebuild and Reopen in Container"
  4. Selecione "Immich - Backend, Frontend and ML" da lista
  5. Aguarde o contêiner ser construído e iniciado (isso pode levar vários minutos na primeira execução)

Usando Ações Rápidas do VS Code:​

  1. Abra o repositório no VS Code
  2. Você verá uma popup perguntando se deseja reabrir em um contêiner
  3. Clique em "Reabrir em Contêiner"

Usando Linha de Comando:​

# Usando o CLI DevContainer
devcontainer up --workspace-folder .

Detalhes das Variáveis de Ambiente​

Como Contêineres Dev Lidam com Variáveis de Ambiente​

Diferentemente da configuração de desenvolvedor do Immich baseada em Docker Compose que usa arquivos .env, os Contêineres Dev do Immich leem variáveis de ambiente do seu ambiente shell. Isso é configurado em .devcontainer/devcontainer.json:

"remoteEnv": {
"UPLOAD_LOCATION": "${localEnv:UPLOAD_LOCATION:./Library}",
"DB_PASSWORD": "${localEnv:DB_PASSWORD:postgres}",
"DB_USERNAME": "${localEnv:DB_USERNAME:postgres}",
"DB_DATABASE_NAME": "${localEnv:DB_DATABASE_NAME:immich}"
}

A sintaxe ${localEnv:VARIABLE:default} lê do seu ambiente shell com valores padrão opcionais.

Resolução do Caminho de Upload Location​

A variável de ambiente UPLOAD_LOCATION controla onde os arquivos são armazenados:

Padrão: ./Library (relativo ao diretório docker) Resolvido para: <immich-root>/docker/Library

Montagens Bind Criadas:

# De .devcontainer/server/container-compose-overrides.yml
- ${UPLOAD_LOCATION-./Library}/photos:/workspaces/immich/server/upload
- ${UPLOAD_LOCATION-./Library}/postgres:/var/lib/postgresql/data

Configuração do Banco de Dados​

Essas variáveis têm valores padrão apropriados (para desenvolvimento) mas podem ser personalizadas:

VariávelPadrãoDescrição
DB_PASSWORDpostgresSenha do PostgreSQL
DB_USERNAMEpostgresNome de usuário do PostgreSQL
DB_DATABASE_NAMEimmichNome do banco de dados

Configurando Variáveis de Ambiente​

Adicione-as ao seu perfil shell (~/.bashrc, ~/.zshrc, ~/.bash_profile, etc.):

# Necessário
export UPLOAD_LOCATION=./Library # ou caminho absoluto

# Opcional (apenas se estiver usando valores diferentes dos padrões)
export DB_PASSWORD=sua_senha
export DB_USERNAME=seu_usuario
export DB_DATABASE_NAME=seu_banco_de_dados

Lembre-se de recarregar sua configuração de shell:

source ~/.bashrc  # ou ~/.zshrc, etc.

Configuração do Git​

Chaves SSH e Autenticação​

Para usar suas chaves SSH para acesso ao GitHub dentro do Contêiner Dev:

  1. Inicie o Agente SSH na sua máquina hospedeira:

    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa # ou o caminho da sua chave
  2. O VS Code encaminha automaticamente seu agente SSH para o contêiner

Para instruções detalhadas, veja o guia do VS Code sobre compartilhamento de credenciais Git.

Assinatura de Commit​

Para usar sua chave SSH para assinatura de commits, veja o guia do GitHub sobre assinatura SSH de commits.

Fluxo de Trabalho de Desenvolvimento​

Configuração Automática​

Quando o Contêiner Dev inicia, ele automaticamente:

  1. Executa script pós-criação (container-server-post-create.sh):

    • Ajusta permissões de arquivo para o usuário node
    • Instala dependências: npm install em todos os pacotes
    • Compila SDK TypeScript: npm run build em open-api/typescript-sdk
  2. Inicia servidores de desenvolvimento via tarefas do VS Code:

    • Immich API Server (Nest) - Servidor de API com recarga automática na porta 2283
    • Immich Web Server (Vite) - Frontend web com recarga automática na porta 3000
    • Ambos servidores observam alterações nos arquivos e recompilam automaticamente
  3. Configura encaminhamento de portas:

informação

A configuração do Contêiner Dev substitui o comando make dev da configuração tradicional. Todos os serviços iniciam automaticamente ao abrir o contêiner.

Acessando Serviços​

Uma vez em execução, você pode acessar:

ServiçoURLDescrição
UI Webhttp://localhost:3000Interface web principal
APIhttp://localhost:2283Endpoints REST API (Não usado diretamente, a UI web exporá isso em http://localhost:3000/api)
Banco de Dadoslocalhost:5432PostgreSQL (usuário: postgres) (Não usado diretamente)

Conectando Aplicativos Móveis​

Para conectar o aplicativo móvel ao seu Contêiner Dev:

  1. Encontre o endereço IP da sua máquina
  2. No aplicativo móvel, use: http://SEU_IP:3000/api
  3. Certifique-se de que seu firewall permite conexões na porta 2283

Fazendo Alterações no Código​

  • Código do servidor (/server): As alterações acionam reinício automático
  • Código da Web (/web): As alterações acionam substituição de módulo a quente
  • Migrações de Banco de Dados: Execute npm run sync:sql no diretório do servidor
  • Alterações na API: Regenerar SDK TypeScript com make open-api

Testando​

Executando Testes​

O Container de Desenvolvimento suporta várias formas de executar testes:

Usando Comandos Make (Recomendado)​

# Execute testes para componentes específicos
make test-server # Testes unitários do servidor
make test-web # Testes unitários da web
make test-e2e # Testes de ponta a ponta
make test-cli # Testes da CLI

# Execute todos os testes
make test-all # Executa testes para todos os componentes

# Testes médios (testes de integração)
make test-medium-dev # Testes de ponta a ponta

Usando NPM Diretamente​

# Testes do servidor
cd /workspaces/immich/server
npm test # Executa todos os testes
npm run test:watch # Modo de observação
npm run test:cov # Relatório de cobertura

# Testes da web
cd /workspaces/immich/web
npm test # Executa todos os testes
npm run test:watch # Modo de observação

# Testes E2E
cd /workspaces/immich/e2e
npm run test # Executa testes de API
npm run test:web # Executa testes de IU da web

Comandos de Qualidade de Código​

# Linting
make lint-server # Analisa o código do servidor
make lint-web # Analisa o código da web
make lint-all # Analisa todos os componentes

# Formatação
make format-server # Formata o código do servidor
make format-web # Formata o código da web
make format-all # Formata todo o código

# Verificação de tipos
make check-server # Verifica tipos do servidor
make check-web # Verifica tipos da web
make check-all # Verifica todos os componentes

# Verificação completa de higiene
make hygiene-all # Executa lint, formata, verifica, sincroniza SQL e audita

Comandos Make Adicionais​

# Comandos de build
make build-server # Build do servidor
make build-web # Build da aplicação web
make build-all # Build de tudo

# Geração de API
make open-api # Gera especificações OpenAPI
make open-api-typescript # Gera SDK TypeScript
make open-api-dart # Gera SDK Dart

# Banco de dados
make sql # Sincroniza esquema do banco de dados

# Dependências
make install-server # Instala dependências do servidor
make install-web # Instala dependências da web
make install-all # Instala todas as dependências

Depuração​

O Container de Desenvolvimento está pré-configurado para depuração:

  1. Depuração do Servidor de API:

    • Configure pontos de interrupção no VS Code
    • Pressione F5 ou use o painel "Executar e Depurar"
    • Selecione a configuração "Attach to Server"
    • Porta de depuração: 9231
  2. Depuração do Worker:

    • Use a configuração "Attach to Workers"
    • Porta de depuração: 9230
  3. Depuração da Web:

    • Use DevTools do navegador
    • Depurador do VS Code para extensões Chrome/Edge suportado

Solução de Problemas​

Problemas Comuns​

Erros de Permissão​

Problema: Erros EACCES ou permissão negada
Solução:

  • O Container de Desenvolvimento é executado como o usuário node (UID 1000)
  • Caso o UID do host seja diferente, você pode enfrentar problemas de permissão
  • Tente reconstruir o container: "Containers de Desenvolvimento: Reconstruir Container"

Container Não Inicia​

Problema: O Container de Desenvolvimento falha ao iniciar ou construir
Solução:

  1. Verifique se o Docker está em execução: docker ps
  2. Limpe recursos do Docker: docker system prune -a
  3. Verifique o espaço disponível em disco
  4. Revise os limites de recursos do Docker Desktop

Porta Já em Uso​

Problema: "Porta 3000/2283 já está em uso"
Solução:

  1. Verifique serviços conflitantes: lsof -i :3000 (macOS/Linux)
  2. Pare serviços conflitantes ou altere os mapeamentos de porta
  3. Reinicie o Docker Desktop

Localização de Upload Não Configurada​

Problema: Erros relacionados à ausência de UPLOAD_LOCATION
Solução:

  1. Configure a variável de ambiente: export UPLOAD_LOCATION=./Library
  2. Adicione ao perfil de shell para persistência
  3. Reinicie seu terminal e o VS Code

Falha na Conexão com o Banco de Dados​

Problema: Não é possível conectar ao PostgreSQL
Solução:

  1. Certifique-se de que todos os containers estão ativos: docker ps
  2. Verifique os logs: "Containers de Desenvolvimento: Mostrar Logs do Container"
  3. Verifique se as credenciais do banco de dados correspondem às variáveis de ambiente

Obtendo Ajuda​

Se encontrar problemas:

  1. Verifique os logs do container: Visualizar → Saída → Selecione "Containers de Desenvolvimento"
  2. Reconstrua sem cache: "Containers de Desenvolvimento: Reconstruir Container Sem Cache"
  3. Revise problemas comuns do Docker
  4. Pergunte no Discord no canal #help-desk-support

Desenvolvimento Mobile​

Embora o Container de Desenvolvimento seja focado em desenvolvimento de servidor e web, você pode conectar apps mobile para testes:

Conectando Apps iOS/Android​

  1. Certifique-se de que a API está acessível:

    # Descubra o IP da sua máquina
    # macOS
    ipconfig getifaddr en0
    # Linux
    hostname -I
    # Windows (no WSL2)
    ip addr show eth0
  2. Configure o app mobile:

    • URL do servidor: http://SEU_IP:2283/api
    • Certifique-se de que o firewall permite a porta 2283
  3. Para desenvolvimento mobile completo, veja o guia de desenvolvimento mobile, que cobre:

    • Configuração do Flutter
    • Execução em simuladores/dispositivos
    • Depuração específica para mobile

Configuração Avançada​

Extensões Personalizadas do VS Code​

Adicione extensões ao .devcontainer/devcontainer.json:

"customizations": {
"vscode": {
"extensions": [
"your.extension-id"
]
}
}

Serviços Adicionais​

Para adicionar serviços (por exemplo, Redis Commander), modifique:

  1. /docker/docker-compose.dev.yml - Adicione a definição do serviço
  2. /.devcontainer/server/container-compose-overrides.yml - Adicione substituições, se necessário

Limites de Recursos​

Ajuste os recursos do Docker Desktop:

  • macOS/Windows: Docker Desktop → Configurações → Recursos
  • Linux: Modifique a configuração do daemon do Docker

Mínimos recomendados:

  • CPU: 4 núcleos
  • Memória: 8GB
  • Disco: 20GB

Próximos Passos​