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!
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
Embora este guia foque no VS Code, você tem muitas opções para desenvolvimento com Contêiner Dev:
Editores Locais:
- IntelliJ IDEA - Suporte total ao IDE JetBrains
- neovim - Editor leve baseado em terminal
- Emacs - Editor de texto extensível
- DevContainer CLI - Interface de linha de comando
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:
Serviços do Contêiner Dev
O ambiente do Contêiner Dev consiste nos seguintes serviços:
| Serviço | Nome do Contêiner | Descrição | Portas |
|---|---|---|---|
| Servidor & Web | immich-server | Executa o servidor de API e o frontend web em modo de desenvolvimento | 2283 (API) 3000 (Web) 9230 (Depuração de Workers) 9231 (Depuração de API) |
| Banco de Dados | database | Banco de dados PostgreSQL | 5432 |
| Cache | redis | Servidor de cache Valkey | 6379 |
| Aprendizado de Máquina | immich-machine-learning | Servidor de inferência de modelo ML do Immich | 3003 |
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.
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
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:
- Abra o repositório clonado no VS Code
- Pressione
F1ouCtrl/Cmd+Shift+Ppara abrir o painel de comandos - Digite e selecione "Dev Containers: Rebuild and Reopen in Container"
- Selecione "Immich - Backend, Frontend and ML" da lista
- 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:
- Abra o repositório no VS Code
- Você verá uma popup perguntando se deseja reabrir em um contêiner
- 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ável | Padrão | Descrição |
|---|---|---|
DB_PASSWORD | postgres | Senha do PostgreSQL |
DB_USERNAME | postgres | Nome de usuário do PostgreSQL |
DB_DATABASE_NAME | immich | Nome 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:
-
Inicie o Agente SSH na sua máquina hospedeira:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa # ou o caminho da sua chave -
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:
-
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 installem todos os pacotes - Compila SDK TypeScript:
npm run buildemopen-api/typescript-sdk
- Ajusta permissões de arquivo para o usuário
-
Inicia servidores de desenvolvimento via tarefas do VS Code:
Immich API Server (Nest)- Servidor de API com recarga automática na porta 2283Immich Web Server (Vite)- Frontend web com recarga automática na porta 3000- Ambos servidores observam alterações nos arquivos e recompilam automaticamente
-
Configura encaminhamento de portas:
- UI Web: http://localhost:3000 (abre automaticamente)
- API: http://localhost:2283
- Portas de depuração: 9230 (trabalhadores), 9231 (API)
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ço | URL | Descrição |
|---|---|---|
| UI Web | http://localhost:3000 | Interface web principal |
| API | http://localhost:2283 | Endpoints REST API (Não usado diretamente, a UI web exporá isso em http://localhost:3000/api) |
| Banco de Dados | localhost:5432 | PostgreSQL (usuário: postgres) (Não usado diretamente) |
Conectando Aplicativos Móveis
Para conectar o aplicativo móvel ao seu Contêiner Dev:
- Encontre o endereço IP da sua máquina
- No aplicativo móvel, use:
http://SEU_IP:3000/api - 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:sqlno 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