feat: sitio hostingdelsur.net v2 con Astro 5, Tailwind v4, soporte light/dark, i18n es/en, Keystatic CMS, reCAPTCHA v3

- Arista Pro Alternate Regular self-hosted (font corporativa)
- Toggle theme con CSS variables y @custom-variant dark
- 6 servicios en 3 categorías (Hosting & Correo / Diseño & Contenido / Infraestructura)
- 3 planes destacados (Básico USD 59, Institucional USD 129, E-commerce USD 219)
- Datacenters en 4 países (Canadá, USA, Alemania, Uruguay) sin ciudades en el sitio
- Sede operativa en Maldonado, Uruguay
- i18n es/en con contenido duplicado en Keystatic
- Endpoint PHP para form de contacto con PHPMailer + reCAPTCHA v3 + honeypot + rate limit
- WorldMap con animación SVG de los 4 países
- 29 páginas generadas, 0 JS por default
- Sitemap auto + robots.txt
- JSON-LD Organization + ProfessionalService con areaServed
This commit is contained in:
Mauri
2026-06-08 22:32:23 -03:00
commit 393f6b0dc3
73 changed files with 15399 additions and 0 deletions
+103
View File
@@ -0,0 +1,103 @@
# Contact Form — PHP endpoint
Este endpoint vive en `server1` y procesa los envíos del formulario de `/contacto`.
## ⚠️ NO se deploya con Astro. Es solo template.
## Setup en server1 (Netcup, cPanel)
### 1. Crear cuenta de correo dedicada
En cPanel → Email Accounts, crear:
- **Email**: `no-reply@hostingdelsur.net` (Mauri confirma que ya existe)
- **Password**: contraseña fuerte (mínimo 16 caracteres, símbolos, números)
- **Quota**: 1 GB (solo se usa para SMTP, no recibe correo)
### 2. Crear archivo de credenciales
El archivo se crea en `/home/hostingdelsur/.smtp-credentials.json` (NO en `public_html/`, por seguridad).
Contenido (reemplazar PEGAR_AQUI con la password real):
```json
{
"host": "localhost",
"port": 465,
"username": "no-reply@hostingdelsur.net",
"password": "PEGAR_AQUI",
"encryption": "ssl",
"from": "no-reply@hostingdelsur.net",
"fromName": "Hosting del Sur - Web",
"to": "contacto@hostingdelsur.net"
}
```
Por SSH:
```bash
chmod 600 /home/hostingdelsur/.smtp-credentials.json
chown hostingdelsur:hostingdelsur /home/hostingdelsur/.smtp-credentials.json
```
### 3. Subir PHPMailer (ya subido en este deploy)
```bash
# Ya ejecutado durante el deploy:
mkdir -p /home/hostingd/private/PHPMailer
# 3 archivos copiados: Exception.php, PHPMailer.php, SMTP.php
chmod 640 /home/hostingd/private/PHPMailer/*.php
chown -R hostingdelsur:hostingdelsur /home/hostingd/private
```
### 4. Subir el endpoint (ya subido)
```
/home/hostingd/public_html/api/contact.php
/home/hostingd/public_html/api/.htaccess
```
El `.htaccess` deniega todo excepto POST al endpoint. Ya configurado.
### 5. Variables de entorno opcionales (reCAPTCHA secret)
Para activar validación reCAPTCHA v3 server-side, agregar en el `.htaccess` o php.ini del server:
```bash
# SetEnv RECAPTCHA_SECRET "6LeOxaEaAAAAAM5OODBE2p9bknosuxpW7Gg17fKG"
```
O en cPanel → MultiPHP INI Editor:
```ini
env[RECAPTCHA_SECRET] = "6LeOxaEaAAAAAM5OODBE2p9bknosuxpW7Gg17fKG"
```
### 6. Test
```bash
curl -X POST https://hostingdelsur.net/api/contact.php \
-d "name=Test&[email protected]&message=Hola&lang=es"
```
Debe devolver `{"ok":true}`. Sin reCAPTCHA token primero, con token después.
## Seguridad implementada
- ✅ Credenciales fuera de `public_html/` (en `~/`)
- ✅ Permisos `chmod 600` (solo el usuario puede leer)
- ✅ Honeypot (`website` field) anti-bot
- ✅ Validación y sanitización de inputs
-`Reply-To` con email del visitante para responder
-`From` con la cuenta dedicada (no spoofing)
- ✅ TLS obligatorio (puerto 465 + `ssl`)
- ✅ Rate limit básico por IP (3 envíos/hora) vía `apcu_fetch/store`
- ✅ Headers anti-cache y anti-sniff
- ✅ Mensaje de error genérico (no expone detalles internos)
- ✅ reCAPTCHA v3 invisible (con score ≥ 0.3) si se configura `RECAPTCHA_SECRET`
## Pendiente
- [ ] Mauri debe re-enviar la password de `no-reply@` (Mauri la puso en chat originalmente; el deploy la borró del servidor)
- [ ] Mauri debe crear el archivo `~/.smtp-credentials.json` con la password real
- [ ] (Opcional) Configurar `RECAPTCHA_SECRET` en el environment del server