Implantando projetos Astro com Dokploy e Nixpacks com otimização de cache para acelerar builds

iDiMi - Implantando projetos Astro com Dokploy e Nixpacks com otimização de cache para acelerar builds

1. Configuração do Dokploy

Dokploy é uma plataforma de implantação de código aberto e auto-hospedada. Projetada como uma alternativa gratuita ao Heroku, Vercel e Netlify, é baseada em Docker e Traefik.

1. Crie um novo projeto e conecte ao repositório GitHub

2. Configure as variáveis de ambiente

NIXPACKS_NODE_VERSION=22
NIXPACKS_PNPM_STORE_PATH=/root/.local/share/pnpm/store/v3
NIXPACKS_INSTALL_CACHE_DIRS=/app/node_modules
NIXPACKS_BUILD_CACHE_DIRS=/app/node_modules/.cache,/app/astro_cache

3. Desative a limpeza automática de cache

  • Serviço do projeto → Clean Cache: desativado
  • Servidor Web → Daily Docker Cleanup: desativado

2. Motor de build Nixpacks

Nixpacks é uma ferramenta de build de código aberto desenvolvida pela Railway que transforma código-fonte em imagens Docker padrão. Dokploy usa Nixpacks como motor de build padrão, com configuração possível via nixpacks.toml ou nixpacks.json.

Crie o arquivo nixpacks.toml no diretório raiz do projeto e defina os diretórios de cache necessários.

Prioridade de configuração (baixa → alta):

  1. Lógica padrão do provider
  2. nixpacks.toml
  3. Variáveis de ambiente
  4. Argumentos CLI

Variáveis de ambiente comuns

VariávelDescrição
NIXPACKS_INSTALL_CMDComando personalizado de instalação
NIXPACKS_BUILD_CMDComando personalizado de build
NIXPACKS_START_CMDComando personalizado de inicialização
NIXPACKS_PKGSPacotes Nix adicionais
NIXPACKS_APT_PKGSPacotes Apt adicionais
NIXPACKS_INSTALL_CACHE_DIRSDiretórios de cache durante a instalação
NIXPACKS_BUILD_CACHE_DIRSDiretórios de cache durante o build
NIXPACKS_NO_CACHEDesativa cache (não recomendado)
NIXPACKS_CONFIG_FILEDefine arquivo de configuração
NIXPACKS_DEBIANUsa imagem base Debian

3. Configuração do projeto Astro

Astro é um framework moderno para sites voltados a conteúdo como blogs, páginas de marketing e e-commerce. Quando há muitos recursos estáticos, o tempo de build pode aumentar — mas com cache, você pode otimizá-lo significativamente.

1. Defina o diretório de cache no Astro

Configure o diretório de cache no arquivo astro.config.mjs. Pode ser caminho relativo ou absoluto.

// astro.config.mjs
export default defineConfig({
  cacheDir: './astro_cache',
});

2. Arquivo de configuração de cache do Nixpacks

Crie nixpacks.toml na raiz do projeto Astro, configurando os diretórios de cache e comandos de build.

# Use versões específicas do Node.js e pnpm
[phases.setup]
nixPkgs = ["nodejs_22", "pnpm"]

# Instale dependências com cache do pnpm
[phases.install]
cmds = ["pnpm install --frozen-lockfile"]
cacheDirectories = ["/root/.local/share/pnpm/store/v3"]

# Compile o Astro e armazene cache de node_modules/.cache e astro_cache
[phases.build]
cmds = ["pnpm run build"]
cacheDirectories = [
  "node_modules/.cache",
  "astro_cache"
]

# Comando de inicialização (assumindo NGINX servindo dist)
[start]
cmd = "echo 'Build concluído. Sirva o diretório dist via NGINX.'"

4. Otimize o contexto de build Docker

Adicione um arquivo .dockerignore na raiz do projeto Astro:

node_modules
astro_cache
dist
*.log
.DS_Store
.vscode
.env*

5. Implantação e verificação

Após a implantação automática no Dokploy, verifique nos logs se o cache foi utilizado:

1. Comando de build montando diretórios de cache

RUN --mount=type=cache,id=xxxx-node_modules/cache,target=/app/node_modules/.cache \
    --mount=type=cache,id=xxxx-astro_cache,target=/app/astro_cache \
    pnpm run build

2. Reutilização de cache pelo Astro (ex. otimização de imagens)

 /_astro/202409272055577_Z2smeTW.avif (reused cache entry)
 /_astro/202409272055575_Z2wPyJN.avif (reused cache entry)
 /_astro/202409272055577_1IgP6g.avif (reused cache entry)

✅ Se você vir --mount=type=cache e reused cache entry, o cache está funcionando corretamente e o build foi otimizado.

🎉 Na aba Deployments do Dokploy, é possível ver o tempo de build cair de 31 minutos para apenas 3 minutos com cache ativado — economizando tempo e largura de banda.


6. Notas

  • Mantenha cacheDir (Astro) e cacheDirectories (Nixpacks) consistentes
  • Declare explicitamente os diretórios de cache em cada fase
  • nixpacks.toml suporta "..." para mesclar com variáveis de ambiente
  • Por padrão, node_modules/.astro não é incluído no cache — adicione manualmente em astro_cache
DiMi

DiMi

Publicado em 2025-07-14, Atualizado em 2025-07-14