Introdução ao Deploy do Vendure Ecommerce em VPS
A escolha da infraestrutura correta é um pilar fundamental para o sucesso de qualquer plataforma de e-commerce moderna. Para desenvolvedores que buscam flexibilidade, controle total e escalabilidade, a combinação de Vendure com uma configuração robusta de servidor oferece vantagens significativas em relação a soluções SaaS fechadas. Neste guia técnico, exploraremos como realizar o install headless commerce utilizando Docker para orquestração e PostgreSQL como banco de dados relacional principal.
O Vendure é um framework construído sobre Node.js, projetado especificamente para criar lojas online escaláveis e modulares. Ao optar por uma VPS (Virtual Private Server), você assume o controle do server configuration, permitindo otimizar recursos como memória RAM, CPU e I/O de disco conforme a necessidade real da aplicação. Este devops guide foi elaborado para sysadmins e desenvolvedores que desejam implementar um ambiente production-ready, garantindo alta disponibilidade e segurança.
A abordagem containerizada via Docker simplifica o gerenciamento de dependências, isolando o ambiente de execução do sistema operacional host. Isso facilita a replicação do ambiente entre stages (desenvolvimento, homologação e produção) e reduz drasticamente problemas de "funciona na minha máquina". Além disso, o uso de PostgreSQL garante integridade transacional robusta, essencial para operações financeiras e controle de estoque em cenários de alto tráfego.
Pré-requisitos e Preparação do Ambiente
Antes de iniciar o processo de deploy, é crucial garantir que sua VPS atenda aos requisitos mínimos de hardware e software. Para um ambiente de produção inicial, recomendamos uma instância com pelo menos 2 vCPUs e 4GB de RAM. O sistema operacional deve ser uma distribuição Linux moderna e suportada, como Ubuntu 22.04 LTS ou Debian 12.
O primeiro passo é atualizar o sistema operacional para garantir que todos os pacotes estejam seguros e atualizados. Conecte-se ao seu servidor via SSH e execute os comandos abaixo:
sudo apt update
sudo apt upgrade -y
Em seguida, instale as ferramentas essenciais de linha de comando e o Docker Engine. A instalação do Docker pode ser feita manualmente ou através dos repositórios oficiais da Docker Inc., que garantem a versão mais recente e estável.
sudo apt install ca-certificates curl gnupg lsb-release -y
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
Após a instalação, verifique se o serviço do Docker está ativo e configurado para iniciar automaticamente com o boot do servidor:
sudo systemctl status docker
sudo systemctl enable docker
Estruturação do Projeto Vendure
Para manter a organização e facilitar a manutenção, criaremos uma estrutura de diretórios dedicada para o projeto. Navegue até o diretório onde deseja hospedar sua loja virtual, por exemplo, /var/www, e crie uma pasta chamada vendure-store.
sudo mkdir -p /var/www/vendure-store
cd /var/www/vendure-store
Dentro deste diretório, criaremos dois arquivos principais: o docker-compose.yml, que define os serviços (Vendure, PostgreSQL e opcionalmente Nginx ou Redis), e um arquivo de configuração inicial do projeto. Embora o Vendure possa ser configurado via código TypeScript, para este tutorial focaremos na configuração via Docker Compose para facilitar a gestão de variáveis de ambiente e volumes.
Crie o arquivo docker-compose.yml utilizando seu editor de texto preferido (como nano ou vim):
sudo nano /var/www/vendure-store/docker-compose.yml
Configuração do Docker Compose com PostgreSQL
O arquivo docker-compose.yml é o coração da sua configuração de infraestrutura. Ele define como os containers serão criados, conectados e persistidos. Abaixo está um exemplo robusto que inclui o serviço principal do Vendure, o banco de dados PostgreSQL e uma configuração básica de armazenamento persistente.
version: '3.8'
services:
vendure-server:
image: vendure/vendure:latest
container_name: vendure-store
restart: unless-stopped
ports:
- "8080:8080"
environment:
- VENDURE_DB_TYPE=postgres
- VENDURE_DB_HOST=database
- VENDURE_DB_PORT=5432
- VENDURE_DB_NAME=vendure
- VENDURE_DB_USERNAME=vendure_user
- VENDURE_DB_PASSWORD=seu_senha_forte_aqui
- VENDURE_ADMIN_API_TOKEN=admintoken
- VENDURE_API_HOST=localhost
- VENDURE_API_PORT=8080
volumes:
- vendure-media:/home/vendure/media
- ./vendure-config.ts:/home/vendure/src/vendure-config.ts
depends_on:
- database
database:
image: postgres:15-alpine
container_name: vendure-db
restart: unless-stopped
environment:
- POSTGRES_DB=vendure
- POSTGRES_USER=vendure_user
- POSTGRES_PASSWORD=seu_senha_forte_aqui
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
vendure-media:
postgres-data:
Neste configuration, há pontos críticos que merecem atenção. Primeiro, a variável VENDURE_DB_TYPE=postgres instrui o Vendure a utilizar o driver do PostgreSQL. A conexão é feita através da rede interna do Docker, referenciando o serviço de banco de dados pelo nome database, o que elimina a necessidade de configurar IPs estáticos.
É fundamental substituir seu_senha_forte_aqui por senhas complexas e únicas. Em ambientes de produção, recomenda-se o uso de segredos gerenciados (como Docker Secrets ou integração com HashiCorp Vault) para não expor credenciais diretamente no arquivo de composição.
O volume vendure-media é crucial para a persistência de imagens e arquivos enviados pelos usuários. Sem ele, ao reiniciar o container, todos os assets da loja seriam perdidos. Da mesma forma, o volume postgres-data garante que as transações e dados cadastrais sobrevivam a reinicializações do banco de dados.
Configuração do Servidor Vendure (TypeScript)
O exemplo acima monta um arquivo vendure-config.ts no caminho /home/vendure/src/vendure-config.ts. O container oficial do Vendure espera uma configuração padrão, mas para produção, você deve customizar este arquivo. Crie este arquivo na raiz do seu projeto localmente antes de subir os containers:
import { defaultSearchPluginOptions } from '@vendure/core';
import { DefaultJobQueuePlugin, ProductListStrategy } from '@vendure/core';
import { AdminUiPlugin } from '@vendure/admin-ui-plugin';
export const config: VendureConfig = {
apiOptions: {
port: 8080,
adminApiPath: 'admin-api',
shopApiPath: 'shop-api',
},
authOptions: {
tokenStrategy: new ApiAuthStrategy({
adminApiAccessTokenType: AdminAccessToken,
shopApiAccessTokenType: ShopAccessToken,
}),
},
databaseOptions: {
type: 'postgres',
host: process.env.VENDURE_DB_HOST || 'localhost',
port: 5432,
schema: 'public',
},
plugins: [
AdminUiPlugin.init({
port: 3000,
}),
DefaultJobQueuePlugin({
jobQueueStrategyName: 'default',
}),
],
};
Esta configuração básica habilita a API GraphQL padrão e o painel administrativo. Note que estamos usando variáveis de ambiente para conexão com o banco, o que alinha perfeitamente com nossa estrutura Docker Compose.
Iniciando a Infraestrutura
Com os arquivos docker-compose.yml e vendure-config.ts preparados, estamos prontos para dar vida ao nosso nodejs ecommerce. Execute o comando abaixo na raiz do diretório vendure-store:
sudo docker compose up -d
O flag -d executa os containers em segundo plano (detached mode). O Docker irá baixar as imagens necessárias, criar as redes e iniciar os serviços. Você pode monitorar o log de inicialização para verificar se há erros de conexão ou configuração:
sudo docker compose logs -f vendure-server
Aguarde até que a mensagem Vendure Server is ready to accept connections apareça. Isso indica que o servidor Node.js iniciou, conectou-se ao PostgreSQL e carregou a schema do banco de dados.
Verificação e Acesso à Interface Administrativa
Agora que a infraestrutura está em execução, é hora de acessar o painel administrativo. Por padrão, o Admin UI do Vendure roda na porta 3000 dentro do container, mas no nosso docker-compose.yml, expusemos apenas a API na porta 8080. Para acessar o Admin UI, precisamos mapear uma porta adicional ou utilizar um proxy reverso.
Para fins de teste rápido, atualize o docker-compose.yml para incluir a porta do Admin UI:
ports:
- "8080:8080"
- "3000:3000"
Reinicie os containers com sudo docker compose up -d. Agora, abra seu navegador e acesse http://SEU_IP_DO_VPS:3000.
O login padrão é geralmente [email protected] com a senha admin123, mas isso pode variar dependendo da versão do Vendure e se você inicializou o banco com dados seed. Se estiver usando um container limpo, o sistema criará um superusuário administrável via API ou interface gráfica na primeira inicialização.
Otimizações de Produção e Segurança
Embora o deploy básico funcione, um ambiente de produção real requer camadas adicionais de segurança e performance. Um elemento essencial é o uso de um reverse proxy, como Nginx ou Traefik, para lidar com o TLS/SSL (HTTPS) e roteamento de subdomínios.
Configure um bloco no Nginx para redirecionar as requisições do domínio da sua loja para os containers Docker:
server {
listen 80;
server_name sua-loja.com;
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Além disso, considere a implementação de um cache Redis para melhorar a performance das consultas à API e do Admin UI. O Vendure oferece suporte nativo ao Redis como backend de cache e sessão.
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redis-data:/data
vendure-server:
# ... outras configurações
environment:
# ... variáveis anteriores
- VENDURE_CACHE_USE_redis=true
- VENDURE_REDIS_HOST=redis
depends_on:
- database
- redis
A utilização de PostgreSQL com backups automáticos é outra etapa crítica. Utilize ferramentas como pgBackRest ou scripts agendados via Cron dentro do container do banco para realizar dumps regulares do banco de dados e enviá-los para um armazenamento externo seguro, como AWS S3 ou Backblaze B2.
Monitoramento e Logs
Para manter a saúde da sua aplicação, é vital implementar monitoramento. Ferramentas como Prometheus e Grafana podem ser integradas ao stack do Docker. O Vendure expõe métricas padrão que podem ser coletadas para monitorar o tempo de resposta da API, consumo de memória e taxa de erros.
Além disso, centralize os logs utilizando o driver de logging do Docker ou uma solução como ELK Stack (Elasticsearch, Logstash, Kibana). Isso facilita a identificação de gargalos e problemas de performance em tempo real.
Conclusão
Realizar o deploy do Vendure em uma VPS com Docker e PostgreSQL oferece um equilíbrio perfeito entre controle técnico e agilidade no desenvolvimento. Este devops guide demonstrou como estruturar a infraestrutura, configurar os serviços essenciais e garantir a persistência dos dados.
Ao seguir estas etapas, você estabelece uma base sólida para escalar seu vendure ecommerce vps conforme o negócio cresce. Lembre-se de sempre manter suas imagens Docker atualizadas, aplicar patches de segurança no sistema operacional host e realizar testes de carga regulares para garantir que sua loja virtual esteja pronta para picos de tráfego.
A personalização continua sendo a chave do sucesso no e-commerce moderno. Com essa infraestrutura em mãos, sua equipe pode focar no desenvolvimento de funcionalidades exclusivas, integração com gateways de pagamento locais e otimização da experiência do usuário, tudo isso suportado por uma stack tecnológica robusta e confiável.