---
title: "Verdaccio com Docker Compose e hospedagem em um clique"
description: "Auto-hospede o Verdaccio, o registry npm privado, leve e open source: publique seus próprios pacotes e faça cache do npmjs, com npm, yarn e pnpm."
---

[← Todos os templates](https://pethost.dev/pt/templates/) · [Ferramentas de desenvolvimento](https://pethost.dev/pt/templates/developer-tools/)

# Faça deploy de Verdaccio em um clique

Um registry npm privado para os seus próprios pacotes, que também faz cache dos pacotes do npm

Uma alternativa auto-hospedada para npm Teams, GitHub Packages e JFrog Artifactory.

[Fazer deploy no Pethost](https://console.pethost.dev/?template=verdaccio)

## O que é Verdaccio?

O Verdaccio é um registry npm privado e leve, que equipes e desenvolvedores solo rodam no lugar dos pacotes privados pagos do npm, do GitHub Packages ou do JFrog Artifactory. Você publica pacotes nele com npm publish e instala com npm, yarn ou pnpm como se fosse do npmjs. Ele não precisa de banco de dados: os pacotes e seus metadados são arquivos no disco dele.

Ele também é um proxy do registry público: um pacote que ele não tem vem do npmjs pelo uplink e fica guardado, então as próximas instalações saem do Verdaccio, não do npmjs, e um escopo como @seunome pode continuar privado enquanto todo o resto vem do npm. A página web dele mostra o readme, as versões e as dependências de cada pacote.

Este template roda o Verdaccio com o armazenamento num volume e uma única conta, com o usuário e a senha que você informa, gravados no arquivo htpasswd dele a cada inicialização. O cadastro está desativado, e os pacotes, os seus e os do npm, só podem ser lidos e instalados por um usuário que entrou, então o registry não é um espelho aberto para estranhos.

## Hospedagem de Verdaccio no Pethost

1. Você entra no Pethost com uma passkey, GitHub ou Google. Ainda não tem máquina? Você escolhe um plano, e o link espera até ela ficar pronta.
2. Novo projeto abre em Verdaccio. Você preenche o que ele pede e clica em Criar projeto: **Usuário**, **Senha do administrador**.
3. Em um ou dois minutos Verdaccio está no ar no próprio endereço com HTTPS. Os segredos são gerados ao acaso, e os dados vão para o backup noturno.
4. É um projeto como qualquer outro: você ou seu agente podem alterá-lo, fazer rollback ou restaurá-lo.

## Perguntas sobre Verdaccio

**O Verdaccio é gratuito?**

Sim. O Verdaccio é de código aberto sob a licença MIT, sem edição paga, e rodá-lo você mesmo custa só a máquina.

**Como publico um pacote no Verdaccio?**

Rode npm login --registry https://seu-endereco/ com seu usuário e sua senha, e depois npm publish --registry https://seu-endereco/ na pasta do pacote. Definir publishConfig.registry no package.json ou registry no .npmrc evita digitar o endereço toda vez.

**O Verdaccio também instala pacotes públicos?**

Sim. Um pacote que não está no Verdaccio é buscado no npmjs pelo uplink e guardado em cache, então você pode apontar o npm, o yarn ou o pnpm só para o Verdaccio e ter tanto os seus pacotes quanto os públicos. Neste template, instalar também exige um usuário que entrou.

**O Verdaccio funciona com yarn e pnpm?**

Sim. O Verdaccio fala o protocolo do registry do npm, então npm, yarn e pnpm publicam nele e instalam a partir dele assim que a configuração de registry aponta para o endereço do Verdaccio e eles têm o token dele.

**De quanta memória e disco Verdaccio precisa?**

Verdaccio é leve: cerca de 100 MB de memória; o disco guarda seus pacotes e os públicos instalados por ele, alguns megabytes cada. No Pethost, o plano Starter basta, com espaço para outros apps ao lado.

## Arquivo Docker Compose de Verdaccio

O template é este compose.yaml e as variáveis gravadas no .env do projeto quando ele é criado. O Pethost roda o arquivo exatamente como está escrito.

**Containers:** verdaccio (verdaccio/verdaccio:6).

**Volumes, no backup noturno:** storage.

```
services:
  verdaccio:
    image: verdaccio/verdaccio:6
    restart: unless-stopped
    environment:
      VERDACCIO_PUBLIC_URL: ${URL}
      ADMIN_USERNAME: ${ADMIN_USERNAME}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
    # The administrator's line of the htpasswd file is written from the username and password
    # given at every start, so its password is the one in the project's .env; the other lines,
    # users the administrator added, stay as they are.
    command:
      - /bin/sh
      - -c
      - |
        node -e '
          const fs = require("node:fs");
          const bcrypt = require("/usr/local/lib/node_modules/verdaccio/node_modules/bcryptjs");
          const file = "/verdaccio/storage/htpasswd";
          const { ADMIN_USERNAME: name, ADMIN_PASSWORD: password } = process.env;
          const lines = fs.existsSync(file) ? fs.readFileSync(file, "utf8").split("\n") : [];
          const others = lines.filter((line) => line && !line.startsWith(name + ":"));
          fs.writeFileSync(file, [...others, name + ":" + bcrypt.hashSync(password, 10)].join("\n") + "\n", { mode: 0o600 });
        ' || exit 1
        unset ADMIN_PASSWORD
        exec verdaccio --config /verdaccio/conf/config.yaml --listen http://0.0.0.0:4873
    configs:
      - source: config
        target: /verdaccio/conf/config.yaml
    volumes:
      - storage:/verdaccio/storage

configs:
  config:
    content: |
      storage: /verdaccio/storage/data
      plugins: /verdaccio/plugins
      web:
        title: Verdaccio
      auth:
        htpasswd:
          file: /verdaccio/storage/htpasswd
          # Nobody signs up with npm adduser: users are lines of the file, which the administrator adds.
          max_users: -1
      uplinks:
        npmjs:
          url: https://registry.npmjs.org/
      # Only users who signed in install or publish, so the registry is no open mirror of npm.
      packages:
        '@*/*':
          access: $$authenticated
          publish: $$authenticated
          unpublish: $$authenticated
          proxy: npmjs
        '**':
          access: $$authenticated
          publish: $$authenticated
          unpublish: $$authenticated
          proxy: npmjs
      server:
        keepAliveTimeout: 60
      middlewares:
        audit:
          enabled: true
      log:
        type: stdout
        format: pretty
        level: http

volumes:
  storage:
```

[compose.yaml](https://pethost.dev/templates/verdaccio/compose.yaml)[Ver no GitHub](https://github.com/pethost-dev/templates/tree/main/verdaccio)

## [Mais em Ferramentas de desenvolvimento](https://pethost.dev/pt/templates/developer-tools/)

- [**Gitea**Hospedagem de Git com pull requests e issues](https://pethost.dev/pt/templates/gitea/)
- [**code-server**O VS Code no navegador](https://pethost.dev/pt/templates/code-server/)
- [**Kroki**Diagramas a partir de texto: PlantUML, Mermaid, Graphviz e mais](https://pethost.dev/pt/templates/kroki/)
- [**Coder**Ambientes de desenvolvimento remotos a partir de templates do Terraform, abertos no VS Code, JetBrains, no navegador ou por SSH](https://pethost.dev/pt/templates/coder/)
- [**Hasura**APIs GraphQL e REST instantâneas sobre um banco Postgres, com permissões, eventos e um console web](https://pethost.dev/pt/templates/hasura/)
- [**InsForge**Um backend para apps que agentes de código constroem: Postgres, autenticação, armazenamento e edge functions](https://pethost.dev/pt/templates/insforge/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Templates](https://pethost.dev/pt/templates/)
- [Sobre nós](https://pethost.dev/about/)
- [Docs](https://pethost.dev/docs/)
- [Blog](https://pethost.dev/pt/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Plugin](https://github.com/pethost-dev/plugin)
- [Termos](https://pethost.dev/terms/)
- [Privacidade](https://pethost.dev/privacy/)
- [Reembolsos](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Bancos de dados

- [Postgres](https://pethost.dev/pt/postgres/)

Comparativos

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/pt/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/pt/blog/coolify-cloud-vs-dokploy-cloud/)
- [Preços Railway vs Render vs Fly.io](https://pethost.dev/pt/blog/railway-vs-render-vs-fly-io-pricing/)
- [Hospedagem gerenciada de Docker Compose](https://pethost.dev/pt/blog/managed-docker-compose-hosting/)

Alternativas

- [Alternativas ao Railway](https://pethost.dev/pt/blog/railway-alternatives/)
- [Alternativas ao Heroku](https://pethost.dev/pt/blog/heroku-alternatives/)
- [Alternativas ao Dokploy](https://pethost.dev/pt/blog/dokploy-alternatives/)
- [Alternativas ao Coolify](https://pethost.dev/pt/blog/coolify-alternatives/)
- [Alternativas ao Render](https://pethost.dev/pt/blog/render-alternatives/)
- [Alternativas ao Sliplane](https://pethost.dev/pt/blog/sliplane-alternatives/)
