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
F1
ouCtrl/Cmd+Shift+P
para 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 install
em todos os pacotes - Compila SDK TypeScript:
npm run build
emopen-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: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