Deploy Vendure E-commerce em VPS com Docker e Postgres

11 min de leitura E-commerce
Deploy Vendure E-commerce em VPS com Docker e Postgres

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.

Compartilhar: Link copiado!
Esse tutorial foi útil?

Comentários (0)

Seja o primeiro a comentar.

Deixe seu comentário

Seu comentário será analisado antes de ser publicado.

0/2000