Blog · Guias de deploy
Como fazer deploy de um site VitePress em 2026: um comando, HTTPS e um Dockerfile que fica com você
Você tem um site VitePress que faz build no seu notebook e quer colocá-lo no ar em um endereço com HTTPS. No Pethost, isso é um comando, pethost deploy, rodado na pasta que tem o package.json. Ele escreve o Dockerfile para você, faz o build do site e mostra o endereço dele. O starter do próprio VitePress teve o build feito e foi iniciado em 43 segundos na primeira vez.
- Um comando:
pethost deployna pasta que tem opackage.json. Não há arquivo de configuração para escrever nem configurações de build para preencher. - O que ele faz: encontra o script que roda
vitepress build, escreve um Dockerfile que o roda e serve odocs/.vitepress/dist. - O endereço:
https://my-docs.yourname.pethost.app, com HTTPS na hora. Seu próprio domínio é um registro DNS. - O Dockerfile é seu: ele fica na pasta para você guardar e alterar, e o pethost nunca o escreve de novo.
- O preço: € 9,99 por mês por 2 vCPU, 3 GB e 30 GB, para este site e todos os seus outros projetos. Não existe plano gratuito.
O que você precisa para fazer deploy de um site VitePress em 2026
Três coisas: o site, o comando pethost e uma conta no Pethost.
O site é uma pasta como os primeiros passos do VitePress a deixam: npm add -D vitepress, depois npx vitepress init. O assistente coloca as páginas em docs/ e três scripts no package.json:
"scripts": {
"docs:dev": "vitepress dev ./docs",
"docs:build": "vitepress build ./docs",
"docs:preview": "vitepress preview ./docs"
}
O comando é um programa, instalado com uma linha:
curl -fsSL https://pethost.dev/install.sh | sh # macOS, Linux
irm https://pethost.dev/install.ps1 | iex # Windows, in PowerShell
A conta precisa de um plano. Se você não entrou, o pethost deploy abre o seu navegador e faz o seu login. Se você ainda não tem um plano, ele mostra onde escolher um e espera.
Faça o deploy do site VitePress com um comando
Vá até a pasta que tem o package.json e rode pethost deploy. Esta é a tela inteira, para o starter que o vitepress init escreve:
$ cd my-docs
$ pethost deploy
Name it [my-docs]: it will live at https://my-docs.sam.pethost.app
✓ Packed 6 files, 90 KB (left out node_modules)
✓ Uploaded straight to your machine
✗ /compose.yaml: the project directory has no compose.yaml at its root: add one
✓ VitePress site detected, wrote Dockerfile.
✓ Packed 7 files, 91 KB (left out node_modules)
✓ Uploaded straight to your machine
✓ Built and started in 43 s
· wrote compose.yaml for the Dockerfile: the service app, reading .env, port 80
✓ app listens on 80 → https://my-docs.sam.pethost.app
It answers 200.
https://my-docs.sam.pethost.app
Wrote .pethost (commit it). Next: pethost logs -f · pethost open
- Ele pergunta uma coisa O nome do projeto, que é a primeira palavra do endereço. Enter usa o nome da pasta.
- A máquina não encontra nada para rodar A pasta vai direto para a sua máquina, sem o
node_modules. A linha com o X é a resposta dela: um projeto roda a partir de um Dockerfile ou de um arquivo Compose, e a pasta ainda não tem nenhum dos dois. - O pethost escreve o Dockerfile Ele viu o
vitepressnopackage.jsone um script que rodavitepress build, e envia a pasta de novo. - A máquina faz o build e o inicia Depois o pethost acessa o próprio endereço e mostra o que ele respondeu: 200.
O arquivo .pethost diz qual projeto é esta pasta. Faça o commit dele junto com o Dockerfile, e o próximo deploy não pergunta nada.
O Dockerfile que o pethost escreve para o VitePress
Este é o arquivo como foi escrito na pasta do starter, inteiro:
# Written by pethost deploy for this VitePress site: package.json builds it with
# "vitepress build ./docs", which writes docs/.vitepress/dist, Node 24 (no .nvmrc names
# another), npm installs it (package-lock.json).
# It is yours now: change it as you like. pethost does not write it again.
FROM node:24 AS build
WORKDIR /app
COPY . .
# Every dependency: what builds the project, and may start it, is among the ones for
# development.
RUN --mount=type=cache,target=/root/.npm \
npm install
RUN npm run docs:build
# The site is files: Caddy serves them on port 80.
FROM caddy:2
COPY --from=build /app/docs/.vitepress/dist /srv
COPY <<'EOF' /etc/caddy/Caddyfile
:80 {
root * /srv
# A browser that takes its answers compressed gets them so.
encode
# Names that begin with a dot are no pages;
# .well-known is the one such folder that is there for visitors.
@own {
path */.*
not path /.well-known/*
}
error @own 404
# A page's address works without its ".html", and a folder's leads to its index.html.
try_files {path} {path}.html {path}/
file_server
# An address that is no page: the site's own 404.html, if it has one.
handle_errors 404 {
rewrite * /404.html
file_server
}
}
EOF
EXPOSE 80
As primeiras linhas dizem o que o pethost leu na sua pasta. Três coisas vêm de lá:
- O gerenciador de pacotes é o que o seu lockfile indica: npm, pnpm, Yarn ou Bun.
- A versão do Node é a que o
.nvmrcou o.node-versionindica, e o Node 24 quando não há nenhum dos dois. - A pasta a servir segue o script:
vitepress build ./docsescrevedocs/.vitepress/dist, evitepress buildsozinho escreve.vitepress/dist.
A segunda metade é um pequeno servidor web para as páginas depois do build. Perguntamos ao starter no ar o que um visitante pergunta. A página inicial, /markdown-examples e /markdown-examples.html responderam 200 cada uma, e um endereço que não é uma página respondeu 404 com a própria página “404” do VitePress.
Mais duas coisas mantêm um arquivo errado longe de você. Se a máquina não consegue fazer o build ou iniciar o Dockerfile que o pethost escreveu, o pethost tira o arquivo da sua pasta e diz o que falhou. E se a sua configuração define base como um caminho do tipo /docs/, o pethost não escreve nada e diz por quê: no Pethost, um site fica na raiz do próprio endereço, então defina base como "/" e faça o deploy de novo.
Altere uma página e faça o deploy de novo
Edite uma página e rode o mesmo comando. O segundo deploy do starter levou 4 segundos, porque a máquina guarda as camadas do build:
$ pethost deploy
my-docs (.pethost)
✓ Packed 8 files · uploaded · built and started in 4 s
· wrote compose.yaml for the Dockerfile: the service app, reading .env, port 80
· kept the project's x-pethost
It answers 200.
https://my-docs.sam.pethost.app
Para fazer o deploy a cada push, conecte o repositório uma vez:
pethost github sam/my-docs # from now on, every push deploys itself
O Pethost lê só os repositórios que você deu ao GitHub App dele. Se um deploy der errado, pethost rollback coloca de volta a versão anterior, e a sua máquina guarda as três versões antes da atual. Um agente de IA pode fazer tudo isso por você pelo servidor MCP do Pethost: como um agente faz o deploy de um projeto e cuida dele.
Use seu próprio domínio na documentação
Qualquer nome sob o domínio da sua conta já é um endereço na hora, com HTTPS. Um domínio seu leva um comando e um registro DNS:
pethost domain add docs.example.com
O comando mostra o registro a criar: um CNAME do seu nome para o nome da sua máquina. O certificado chega sozinho assim que o nome resolve, e se renova sozinho. pethost password coloca uma página de senha na frente do site inteiro, para uma documentação que ainda não é pública.
O que você recebe pelo preço
O Pethost custa € 9,99 por mês por tudo o que você hospeda, com 2 vCPU, 3 GB de memória e 30 GB de disco. Um site VitePress depois do build são arquivos atrás de um pequeno servidor web, então a máquina tem espaço para a aplicação que a documentação descreve, o banco de dados dela e os seus outros projetos. Não há taxa por projeto e nada é medido: o segundo site não custa nada a mais.
- € 9,99 por mês por todos os seus projetos, nada medido
- 43s para fazer o build e iniciar o starter, na primeira vez
- 0 arquivos para escrever manualmente
O que já vem feito para você: HTTPS com certificados que se renovam sozinhos, deploys a partir do GitHub, backups noturnos guardados por 14 dias, SSH em qualquer container, e cada requisição contada. O painel mostra os caminhos mais acessados dos últimos 30 dias, que, para um site de documentação, é a lista das páginas que as pessoas leem de verdade. A máquina está sempre ligada, então uma página nunca espera um cold start. Os planos estão na parte de preços da página inicial.
O Pethost é a melhor escolha para
- Desenvolvedores que mantêm a documentação ao lado do app: a API, o banco de dados dela e o site VitePress em uma máquina, em uma só fatura
- Desenvolvedores solo com vários projetos paralelos, cada um com seu próprio site
- Quem deixa o agente fazer o deploy: o Claude Code ou o Codex coloca o site no ar e lê os logs dele
- Equipes pequenas que querem a documentação atrás de uma página de senha até o lançamento
Procure outra opção se
- Sua aplicação precisa de várias regiões ou de autoscaling
Perguntas
Um site VitePress precisa de Dockerfile para fazer deploy?
No Pethost, um projeto roda a partir de um Dockerfile ou de um arquivo Compose, e você não precisa escrevê-lo: em uma pasta que não tem nenhum dos dois, o pethost deploy escreve o Dockerfile de um site VitePress e faz o deploy. O arquivo fica na sua pasta, e você pode alterá-lo.
Qual gerenciador de pacotes e versão do Node o build do VitePress usa?
Os que a sua pasta indica. O gerenciador de pacotes é o do seu lockfile: npm, pnpm, Yarn ou Bun. A versão do Node é a do .nvmrc ou do .node-version, e o Node 24 quando não há nenhum dos dois.
Dá para fazer deploy do VitePress pelo GitHub a cada push?
Sim. Faça o deploy da pasta uma vez com pethost deploy e depois rode pethost github owner/repository. A partir daí, cada push no repositório faz o deploy sozinho, e pethost rollback volta para um commit anterior.
Como usar um domínio próprio com HTTPS em um site VitePress?
Rode pethost domain add docs.example.com e crie o único registro DNS que ele mostra, um CNAME para o nome da sua máquina. O certificado chega sozinho assim que o nome resolve, e se renova sozinho.
Quanto custa hospedar um site VitePress no Pethost?
€ 9,99 por mês no Starter, com 2 vCPU, 3 GB e 30 GB e sem taxa por projeto: seus outros sites, apps e bancos de dados também rodam lá. Não existe plano gratuito. Os preços são sem IVA.
Por que o pethost deploy recusa um site VitePress que define base?
Um site com build feito com base definido como um caminho do tipo /docs/ procura seus estilos e scripts sob esse caminho. No Pethost, um site fica na raiz do próprio endereço, então o pethost não escreve Dockerfile para ele e avisa. Defina base como "/" e faça o deploy de novo.
As telas são deploys do site que o vitepress init escreve, com o VitePress 1.6.4 e o pethost 0.2.1, em uma máquina de teste nossa. A conta nelas é a de exemplo, sam.
- VitePress: primeiros passos
- VitePress: faça o deploy do seu site
- pethost, a linha de comando do Pethost
Coloque seus projetos no ar hoje
Publique apps, bots e bancos de dados pelo seu agente, pelo GitHub ou pelo navegador, quantos couberem, a um preço fixo. Nada medido, nada cobrado à parte.