A full-stack digital marketing web platform built for performance, SEO, and modern user experience — powered by Angular SSR, Spring Boot, and Strapi CMS.
📖 About • 🔄 Flow • 🛠️ Tech Stack • ⚙️ Setup • 🚀 Run • 🧪 Tests • 📡 API • 🗂️ Structure • 🚢 Deploy •
Digital Xis is a dynamic, server-side rendered (SSR) landing page focused on the digital marketing domain. It is designed to deliver high performance, strong online presence, SEO optimization, and a secure, scalable architecture. The platform is divided into three independent, production-ready layers:
| Layer | Technology | Purpose |
|---|---|---|
| Front-end | Angular 21 + SSR | Server-side rendered SPA with smooth UX and SEO |
| Back-end | Spring Boot 4 + Java 21 | REST API with security, rate limiting, caching, and email |
| CMS | Strapi 5 | Headless content management for dynamic page sections |
The architecture follows a headless CMS pattern: all page content (carousel, about, reviews, FAQ, business info) is managed in Strapi, served through the Spring Boot API (which acts as a secure proxy and cache layer), and rendered by the Angular SSR front-end.
Key capabilities:
- Angular SSR — server-side rendering for fast first paint and crawlable HTML
- Redis caching — API responses are cached to minimize Strapi round-trips
- Bucket4j rate limiting — protects all endpoints from abuse and DDoS
- Cloudflare Turnstile — bot-protection captcha on the contact form
- Spring Security — headers hardening, CORS policy, session security
- Jsoup sanitization — all user inputs are sanitized before processing
flowchart LR
User([👤 User]) -->|HTTPS| FE["Angular SSR"]
FE --> HTML["HTML + CSS"]
HTML -->|API| API["Spring Boot"]
API --> SEC["🔒 Spring Security\n(CORS · Rate Limit · CAPTCHA)"]
SEC --> CTL["Controllers"]
CTL --> CACHE{{"Redis Cache"}}
CACHE -->|HIT| CTL
CACHE -->|MISS| CMS["Strapi CMS"]
CMS -->|Data| CACHE
CTL --> MAIL["SMTP (Email)"]
CTL -->|Response| FE
| Technology | :---: | Purpose |
|---|---|---|
| Angular 21 🔗 | 21.0.0 |
SPA framework with component architecture |
| Angular SSR 🔗 | 21.0.4 |
Server-side rendering via Express |
| Express 🔗 | 5.1.0 |
Node.js HTTP server for SSR |
| Lenis 🔗 | 1.3.18 |
Native smooth scroll library |
| RxJS 🔗 | 7.8.0 |
Reactive programming for HTTP streams |
| TypeScript 🔗 | 5.9.2 |
Strictly typed JavaScript |
| Vitest 🔗 | 4.0.8 |
Unit testing framework |
| Technology | Version | Purpose |
|---|---|---|
| Java 🔗 | 21 LTS |
Platform language (LTS) |
| Spring Boot 🔗 | 4.0.4 |
Application framework |
| Spring WebMVC 🔗 | 4.0.4 |
REST controllers and servlet layer |
| Spring Security 🔗 | 4.0.4 |
CORS, headers hardening, session security |
| Spring Mail 🔗 | 4.0.4 |
Email delivery via SMTP |
| Spring Data Redis 🔗 | 4.0.4 |
Reactive Redis cache integration |
| Spring WebClient 🔗 | 4.0.4 |
Non-blocking HTTP client for CMS calls |
| Bucket4j 🔗 | 8.5.0 |
Token-bucket rate limiting |
| Lombok 🔗 | (managed) | Boilerplate reduction annotations |
| MapStruct 🔗 | 1.6.3 |
DTO ↔ domain object mapping |
| Jsoup 🔗 | 1.17.2 |
HTML sanitization for user inputs |
| Springdoc OpenAPI 🔗 | 3.0.2 |
Swagger / OpenAPI documentation |
| Maven 🔗 | 3.9.14 |
Dependency management and build |
| Technology | Version | Purpose |
|---|---|---|
| Strapi 🔗 | 5.36.1 |
Headless CMS with REST API |
| better-sqlite3 🔗 | 12.4.1 |
Embedded SQLite database driver |
| Node.js 🔗 | ≥ 20 |
CMS runtime |
| Technology | Version | Purpose |
|---|---|---|
| Docker 🔗 | Latest | Container build and orchestration |
| Redis 🔗 | 7 |
In-memory API response cache |
| Vercel 🔗 | — | Front-end SSR deployment platform |
| Package | Version | Link |
|---|---|---|
@angular/core |
^21.0.0 |
🔗 |
@angular/ssr |
^21.0.4 |
🔗 |
express |
^5.1.0 |
🔗 |
lenis |
^1.3.18 |
🔗 |
rxjs |
~7.8.0 |
🔗 |
vitest |
^4.0.8 |
🔗 |
| Artifact | Version | Link |
|---|---|---|
spring-boot-starter-webmvc |
4.0.4 |
🔗 |
spring-boot-starter-security |
4.0.4 |
🔗 |
spring-boot-starter-data-redis-reactive |
4.0.4 |
🔗 |
spring-boot-starter-mail |
4.0.4 |
🔗 |
bucket4j-core |
8.5.0 |
🔗 |
mapstruct |
1.6.3 |
🔗 |
jsoup |
1.17.2 |
🔗 |
springdoc-openapi-starter-webmvc-ui |
3.0.2 |
🔗 |
| Tool | Version | Link |
|---|---|---|
| Node.js 🔗 | ≥ 20.x |
Required for front-end and CMS |
| npm 🔗 | ≥ 6.x |
Package manager |
| Java JDK 🔗 | 21 LTS |
Required for back-end |
| Maven 🔗 | ≥ 3.9 |
Build tool (or use ./mvnw) |
| Docker 🔗 | Latest | Container runtime |
| Redis 🔗 | ≥ 7 |
Cache (or run via Docker Compose) |
Create an .env file or export the following variables before running:
MAIL_PORT=587
MAIL_USER=your-gmail@gmail.com
MAIL_PASS=your-gmail-app-password
CMS_HOST=http://localhost:1337
CAPTCHA_SECRET_KEY=your-cloudflare-turnstile-secret
CACHE_HOST=localhost
CACHE_PORT=6379Copy the example file and fill in the secrets:
cp cms-strapi/.env.example cms-strapi/.envHOST=0.0.0.0
PORT=1337
APP_KEYS="key1,key2"
API_TOKEN_SALT=your-salt
ADMIN_JWT_SECRET=your-admin-secret
TRANSFER_TOKEN_SALT=your-transfer-salt
JWT_SECRET=your-jwt-secret
ENCRYPTION_KEY=your-encryption-keygit clone https://github.com/marcGarcias/digital-xis.git
cd digital-xiscd cms-strapi
npm install
npm run dev
# CMS Admin → http://localhost:1337/admincd back-end
docker compose up redis -dcd back-end
./mvnw spring-boot:run
# API → http://localhost:8080cd front-end
npm install
npm start
# App → http://localhost:4200cd back-end
docker compose up --buildcd front-end
docker build -t digital-xis-frontend .
docker run -p 4200:4200 digital-xis-frontendcd front-end
npm test📋 Expected output
✓ src/app/app.spec.ts (1 test)
✓ AppComponent should create the app
Test Files 1 passed
Tests 1 passed
Duration ~1.2s
cd back-end
./mvnw test📋 Expected output
[INFO] Tests run: X, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESS
Base URL: http://localhost:8080
| Method | Route | Description |
|---|---|---|
GET |
/api/content/carousel |
Returns carousel items for the homepage |
GET |
/api/content/about |
Returns the "About Us" section content |
GET |
/api/content/review |
Returns customer reviews and testimonials |
GET |
/api/content/faq |
Returns the frequently asked questions list |
GET |
/api/content/info |
Returns general business information |
| Method | Route | Description |
|---|---|---|
POST |
/api/contact |
Submits a contact form message via email |
| Method | Route | Description |
|---|---|---|
GET |
/uploads/** |
Proxies static assets (images) from Strapi CMS |
📨 POST /api/contact — Example Request & Response
Request:
POST /api/contact
Content-Type: application/json
{
"name": "João Silva",
"email": "joao@example.com",
"subject": "Budget request",
"message": "I'd like to get a quote for a landing page.",
"turnstileToken": "CLOUDFLARE_TURNSTILE_TOKEN"
}Response 200 OK:
{
"success": true,
"message": "Message sent successfully."
}Response 400 Bad Request:
{
"error": "Invalid or expired security verification"
}📦 GET /api/content/carousel — Example Response
Response 200 OK:
{
"data": [
{
"id": 1,
"title": "Digital Marketing that Converts",
"subtitle": "Accelerate your brand's online presence",
"imageUrl": "/uploads/banner_1.webp"
}
]
}Response 502 Bad Gateway:
{
"status": 502,
"error": "Error communicating with CMS",
"path": "/api/content/carousel"
}digital-xis/
├── front-end/ # Angular 21 SSR application
│ ├── src/
│ │ ├── app/
│ │ │ ├── components/ # Shared UI components (logo, nav, footer)
│ │ │ ├── pages/ # Route-based page components
│ │ │ │ ├── home/ # Homepage
│ │ │ │ └── privacy-policy/
│ │ │ ├── models/ # TypeScript interfaces for API data
│ │ │ ├── services/ # HTTP services (CMS, contact)
│ │ │ ├── app.routes.ts # Routing config
│ │ │ └── app.config.ts # App providers and HTTP client
│ │ ├── styles/ # Global CSS styles
│ │ ├── server.ts # Express SSR server entry
│ │ └── index.html # Root HTML template (SEO meta tags)
│ ├── Dockerfile # Multi-stage Docker build (Node 22 Alpine)
│ └── vercel.json # Vercel deployment config
│
├── back-end/ # Spring Boot 4 REST API
│ ├── src/main/java/dev/garcias/backend/
│ │ ├── config/
│ │ │ ├── SecurityConfig.java # CORS, security headers, session
│ │ │ └── RateLimitFilter.java # Bucket4j rate limiting filter
│ │ ├── controller/
│ │ │ ├── CMSController.java # Content endpoints
│ │ │ ├── ContactController.java # Contact form endpoint
│ │ │ └── ProxyController.java # CMS media proxy
│ │ ├── service/ # Business logic layer
│ │ ├── dto/ # Request and response DTOs
│ │ ├── mapper/ # MapStruct mappers
│ │ └── exception/ # Global error handling
│ ├── src/main/resources/
│ │ └── application.properties # App config and env references
│ ├── dockerfile # Multi-stage Docker build (Maven + JRE Alpine)
│ └── docker-compose.yml # Redis + API services
│
└── cms-strapi/ # Strapi 5 headless CMS
├── config/ # Server, database, middlewares, plugins config
├── src/ # Custom content types and extensions
├── database/ # SQLite data and migrations
├── .env.example # Environment variables template
└── package.json
Front-end → Vercel 🔗
The front-end deploys to Vercel as a containerized SSR application.
# Build for production
cd front-end
npm run build
# SSR server output
node dist/front-end/server/server.mjs| Artifact | Path | Notes |
|---|---|---|
| Browser bundle | dist/front-end/browser/ |
Static assets |
| SSR server | dist/front-end/server/server.mjs |
Node.js server |
The vercel.json file at the root of front-end/ configures Vercel routing automatically.
cd back-end
# Build image
docker build -t digital-xis-backend .
# Run with environment variables
docker run -p 8080:8080 \
-e MAIL_PORT=587 \
-e MAIL_USER=your@gmail.com \
-e MAIL_PASS=your-app-password \
-e CMS_HOST=http://your-strapi-host:1337 \
-e CAPTCHA_SECRET_KEY=your-key \
-e CACHE_HOST=redis \
-e CACHE_PORT=6379 \
digital-xis-backendCMS → Strapi Cloud 🔗
The CMS is deployable to Strapi Cloud using the built-in @strapi/plugin-cloud plugin:
cd cms-strapi
npm run deploy🐛 Redis connection required on back-end startup
The Spring Boot API requires a running Redis instance at startup. If Redis is unavailable, the application will fail to start. Always ensure the Redis container is up before starting the API.
Workaround: Use docker compose up redis -d before running the back-end.
- Configure CI/CD pipeline with GitHub Actions for automated deployments
This project is licensed under the PolyForm Noncommercial License 🔗.
Plataforma web de marketing digital full-stack construída para performance, SEO e experiência de usuário moderna — com Angular SSR, Spring Boot e Strapi CMS.
📖 Sobre • 🔄 Fluxo • 🛠️ Tecnologias • ⚙️ Configuração • 🚀 Executar • 🧪 Testes • 📡 API • 🗂️ Estrutura • 🚢 Deploy •
A Digital Xis é uma landing page com renderização no servidor (SSR) e conteúdo dinâmico, voltada ao segmento de marketing digital. Foi projetada para garantir alta performance, forte presença online, otimização para SEO e uma arquitetura segura e escalável. A plataforma é dividida em três camadas independentes e prontas para produção:
| Camada | Tecnologia | Finalidade |
|---|---|---|
| Front-end | Angular 21 + SSR | SPA com renderização no servidor, UX fluida e SEO |
| Back-end | Spring Boot 4 + Java 21 | API REST com segurança, rate limiting, cache e e-mail |
| CMS | Strapi 5 | Gerenciamento headless do conteúdo das páginas |
A arquitetura segue o padrão headless CMS: todo o conteúdo das páginas (carrossel, sobre, avaliações, FAQ, informações do negócio) é gerenciado no Strapi, servido via Spring Boot API (que atua como proxy seguro e camada de cache), e renderizado pelo front-end Angular SSR.
Principais capacidades:
- Angular SSR — renderização no servidor para primeiro carregamento rápido e HTML rastreável por bots
- Cache Redis — respostas da API são cacheadas para minimizar chamadas ao Strapi
- Rate limiting com Bucket4j — proteção de todos os endpoints contra abuso e DDoS
- Cloudflare Turnstile — captcha anti-bot no formulário de contato
- Spring Security — endurecimento de headers HTTP, política de CORS, segurança de sessão
- Sanitização Jsoup — todos os inputs do usuário são sanitizados antes de serem processados
flowchart LR
User([👤 Usuário]) -->|HTTPS| FE["Angular SSR"]
FE --> HTML["HTML + CSS"]
HTML -->|API| API["Spring Boot"]
API --> SEC["🔒 Spring Security\n(CORS · Rate Limit · CAPTCHA)"]
SEC --> CTL["Controllers"]
CTL --> CACHE{{"Redis Cache"}}
CACHE -->|HIT| CTL
CACHE -->|MISS| CMS["Strapi CMS"]
CMS -->|Dados| CACHE
CTL --> MAIL["SMTP (E-mail)"]
CTL -->|Resposta| FE
| Tecnologia | Versão | Finalidade |
|---|---|---|
| Angular 21 🔗 | 21.0.0 |
Framework SPA com arquitetura de componentes |
| Angular SSR 🔗 | 21.0.4 |
Renderização no servidor via Express |
| Express 🔗 | 5.1.0 |
Servidor HTTP Node.js para SSR |
| Lenis 🔗 | 1.3.18 |
Biblioteca de scroll suave nativo |
| RxJS 🔗 | 7.8.0 |
Programação reativa para streams HTTP |
| TypeScript 🔗 | 5.9.2 |
JavaScript com tipagem estrita |
| Vitest 🔗 | 4.0.8 |
Framework de testes unitários |
| Tecnologia | Versão | Finalidade |
|---|---|---|
| Java 🔗 | 21 LTS |
Linguagem principal da plataforma (LTS) |
| Spring Boot 🔗 | 4.0.4 |
Framework de aplicação |
| Spring WebMVC 🔗 | 4.0.4 |
Controllers REST e camada servlet |
| Spring Security 🔗 | 4.0.4 |
CORS, headers de segurança, sessão |
| Spring Mail 🔗 | 4.0.4 |
Envio de e-mails via SMTP |
| Spring Data Redis 🔗 | 4.0.4 |
Integração reativa com Redis |
| Spring WebClient 🔗 | 4.0.4 |
Client HTTP não-bloqueante para o CMS |
| Bucket4j 🔗 | 8.5.0 |
Rate limiting com algoritmo token-bucket |
| Lombok 🔗 | (gerenciado) | Redução de código boilerplate |
| MapStruct 🔗 | 1.6.3 |
Mapeamento DTO ↔ objetos de domínio |
| Jsoup 🔗 | 1.17.2 |
Sanitização de HTML nos inputs do usuário |
| Springdoc OpenAPI 🔗 | 3.0.2 |
Documentação Swagger / OpenAPI |
| Maven 🔗 | 3.9.14 |
Gerenciamento de dependências e build |
| Tecnologia | Versão | Finalidade |
|---|---|---|
| Strapi 🔗 | 5.36.1 |
CMS headless com API REST |
| better-sqlite3 🔗 | 12.4.1 |
Driver SQLite embarcado |
| Node.js 🔗 | ≥ 20 |
Runtime do CMS |
| Tecnologia | Versão | Finalidade |
|---|---|---|
| Docker 🔗 | Mais recente | Build e orquestração de containers |
| Redis 🔗 | 7 |
Cache em memória para respostas da API |
| Vercel 🔗 | — | Plataforma de deploy do front-end SSR |
| Pacote | Versão | Link |
|---|---|---|
@angular/core |
^21.0.0 |
🔗 |
@angular/ssr |
^21.0.4 |
🔗 |
express |
^5.1.0 |
🔗 |
lenis |
^1.3.18 |
🔗 |
rxjs |
~7.8.0 |
🔗 |
vitest |
^4.0.8 |
🔗 |
| Artefato | Versão | Link |
|---|---|---|
spring-boot-starter-webmvc |
4.0.4 |
🔗 |
spring-boot-starter-security |
4.0.4 |
🔗 |
spring-boot-starter-data-redis-reactive |
4.0.4 |
🔗 |
spring-boot-starter-mail |
4.0.4 |
🔗 |
bucket4j-core |
8.5.0 |
🔗 |
mapstruct |
1.6.3 |
🔗 |
jsoup |
1.17.2 |
🔗 |
springdoc-openapi-starter-webmvc-ui |
3.0.2 |
🔗 |
| Ferramenta | Versão | Link |
|---|---|---|
| Node.js 🔗 | ≥ 20.x |
Necessário para o front-end e CMS |
| npm 🔗 | ≥ 6.x |
Gerenciador de pacotes |
| Java JDK 🔗 | 21 LTS |
Necessário para o back-end |
| Maven 🔗 | ≥ 3.9 |
Ferramenta de build (ou use ./mvnw) |
| Docker 🔗 | Mais recente | Runtime de containers |
| Redis 🔗 | ≥ 7 |
Cache (ou use via Docker Compose) |
Crie um arquivo .env ou exporte as seguintes variáveis antes de executar:
MAIL_PORT=587
MAIL_USER=seu-gmail@gmail.com
MAIL_PASS=sua-senha-de-app-gmail
CMS_HOST=http://localhost:1337
CAPTCHA_SECRET_KEY=sua-chave-secreta-cloudflare-turnstile
CACHE_HOST=localhost
CACHE_PORT=6379Copie o arquivo de exemplo e preencha os segredos:
cp cms-strapi/.env.example cms-strapi/.envHOST=0.0.0.0
PORT=1337
APP_KEYS="chave1,chave2"
API_TOKEN_SALT=seu-salt
ADMIN_JWT_SECRET=seu-segredo-admin
TRANSFER_TOKEN_SALT=seu-salt-de-transferencia
JWT_SECRET=seu-jwt-secret
ENCRYPTION_KEY=sua-chave-de-criptografiagit clone https://github.com/marcGarcias/digital-xis.git
cd digital-xiscd cms-strapi
npm install
npm run dev
# Painel Admin → http://localhost:1337/admincd back-end
docker compose up redis -dcd back-end
./mvnw spring-boot:run
# API → http://localhost:8080cd front-end
npm install
npm start
# App → http://localhost:4200cd back-end
docker compose up --buildcd front-end
docker build -t digital-xis-frontend .
docker run -p 4200:4200 digital-xis-frontendcd front-end
npm test📋 Resultado esperado
✓ src/app/app.spec.ts (1 teste)
✓ AppComponent deve criar o componente
Arquivos de Teste 1 passou
Testes 1 passou
Duração ~1.2s
cd back-end
./mvnw test📋 Resultado esperado
[INFO] Tests run: X, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESS
URL base: http://localhost:8080
| Método | Rota | Descrição |
|---|---|---|
GET |
/api/content/carousel |
Retorna os itens do carrossel da homepage |
GET |
/api/content/about |
Retorna o conteúdo da seção "Sobre Nós" |
GET |
/api/content/review |
Retorna avaliações e depoimentos de clientes |
GET |
/api/content/faq |
Retorna a lista de perguntas frequentes |
GET |
/api/content/info |
Retorna informações gerais do negócio |
| Método | Rota | Descrição |
|---|---|---|
POST |
/api/contact |
Envia uma mensagem do formulário de contato via e-mail |
| Método | Rota | Descrição |
|---|---|---|
GET |
/uploads/** |
Faz proxy de assets estáticos (imagens) do Strapi CMS |
📨 POST /api/contact — Exemplo de Requisição e Resposta
Requisição:
POST /api/contact
Content-Type: application/json
{
"name": "João Silva",
"email": "joao@exemplo.com",
"subject": "Solicitação de orçamento",
"message": "Gostaria de obter um orçamento para uma landing page.",
"turnstileToken": "TOKEN_CLOUDFLARE_TURNSTILE"
}Resposta 200 OK:
{
"success": true,
"message": "Message sent successfully."
}Resposta 400 Bad Request:
{
"error": "Invalid or expired security verification"
}📦 GET /api/content/carousel — Exemplo de Resposta
Resposta 200 OK:
{
"data": [
{
"id": 1,
"title": "Marketing Digital que Converte",
"subtitle": "Acelere a presença online da sua marca",
"imageUrl": "/uploads/banner_1.webp"
}
]
}Resposta 502 Bad Gateway:
{
"status": 502,
"error": "Error communicating with CMS",
"path": "/api/content/carousel"
}digital-xis/
├── front-end/ # Aplicação Angular 21 com SSR
│ ├── src/
│ │ ├── app/
│ │ │ ├── components/ # Componentes de UI reutilizáveis (logo, nav, rodapé)
│ │ │ ├── pages/ # Componentes de página baseados em rotas
│ │ │ │ ├── home/ # Página inicial
│ │ │ │ └── privacy-policy/
│ │ │ ├── models/ # Interfaces TypeScript para dados da API
│ │ │ ├── services/ # Serviços HTTP (CMS, contato)
│ │ │ ├── app.routes.ts # Configuração de rotas
│ │ │ └── app.config.ts # Providers e client HTTP
│ │ ├── styles/ # Estilos CSS globais
│ │ ├── server.ts # Entry point do servidor Express SSR
│ │ └── index.html # Template HTML raiz (meta tags SEO)
│ ├── Dockerfile # Build Docker multi-estágio (Node 22 Alpine)
│ └── vercel.json # Configuração de deploy na Vercel
│
├── back-end/ # API REST Spring Boot 4
│ ├── src/main/java/dev/garcias/backend/
│ │ ├── config/
│ │ │ ├── SecurityConfig.java # CORS, headers de segurança, sessão
│ │ │ └── RateLimitFilter.java # Filtro de rate limiting com Bucket4j
│ │ ├── controller/
│ │ │ ├── CMSController.java # Endpoints de conteúdo
│ │ │ ├── ContactController.java # Endpoint do formulário de contato
│ │ │ └── ProxyController.java # Proxy para mídias do CMS
│ │ ├── service/ # Camada de lógica de negócio
│ │ ├── dto/ # DTOs de requisição e resposta
│ │ ├── mapper/ # Mappers MapStruct
│ │ └── exception/ # Tratamento global de erros
│ ├── src/main/resources/
│ │ └── application.properties # Configuração da app e variáveis de ambiente
│ ├── dockerfile # Build Docker multi-estágio (Maven + JRE Alpine)
│ └── docker-compose.yml # Serviços Redis + API
│
└── cms-strapi/ # CMS Headless Strapi 5
├── config/ # Configuração de servidor, banco, middlewares e plugins
├── src/ # Tipos de conteúdo customizados e extensões
├── database/ # Dados SQLite e migrações
├── .env.example # Template de variáveis de ambiente
└── package.json
Front-end → Vercel 🔗
O front-end é deployado na Vercel como aplicação SSR containerizada.
# Build para produção
cd front-end
npm run build
# Servidor SSR de saída
node dist/front-end/server/server.mjs| Artefato | Caminho | Observação |
|---|---|---|
| Bundle do browser | dist/front-end/browser/ |
Assets estáticos |
| Servidor SSR | dist/front-end/server/server.mjs |
Servidor Node.js |
O arquivo vercel.json na raiz de front-end/ configura o roteamento da Vercel automaticamente.
cd back-end
# Build da imagem
docker build -t digital-xis-backend .
# Executar com variáveis de ambiente
docker run -p 8080:8080 \
-e MAIL_PORT=587 \
-e MAIL_USER=seu@gmail.com \
-e MAIL_PASS=sua-senha-de-app \
-e CMS_HOST=http://seu-strapi:1337 \
-e CAPTCHA_SECRET_KEY=sua-chave \
-e CACHE_HOST=redis \
-e CACHE_PORT=6379 \
digital-xis-backendCMS → Strapi Cloud 🔗
O CMS pode ser deployado no Strapi Cloud usando o plugin @strapi/plugin-cloud já incluído:
cd cms-strapi
npm run deploy🐛 Conexão Redis obrigatória na inicialização do back-end
A API Spring Boot requer uma instância Redis em execução ao iniciar. Se o Redis estiver indisponível, a aplicação não vai subir. Sempre certifique-se de que o container Redis está ativo antes de iniciar a API.
Solução: Use docker compose up redis -d antes de executar o back-end.
- Configurar pipeline de CI/CD com GitHub Actions para deploys automatizados
Este projeto está licenciado sob a PolyForm Noncommercial License 🔗.