# Producción — pflores.linkedcorp.net ## Estado actual - Versión: `1.0.0` - Estado: `operativo` - Última validación: `2026-06-05` ## Acceso público - URL: `https://pflores.linkedcorp.net` - Admin: `https://pflores.linkedcorp.net/wp-admin` - PDF: `https://pflores.linkedcorp.net/?cv_pdf=1` ## Servidor de aplicación - Host: `192.168.222.3` - SSH: `deploy@192.168.222.3 -p 2203` - Ruta base: `/opt/apps/pflores.linkedcorp.net` - Credenciales SSH: ver `.token_gitea` bloque `# Produccion user` ## Estructura en servidor - Código fuente: `/opt/apps/pflores.linkedcorp.net/` - WordPress: `/opt/apps/pflores.linkedcorp.net/backend/wordpress/` - Plugins propios: `backend/wordpress/wp-content/plugins/pflores-cv-fields/` - Temas: `backend/wordpress/wp-content/themes/` - Config: `/opt/apps/pflores.linkedcorp.net/.env` (local, nunca versionar) - Script de deploy: `scripts/deploy_prod_web.sh` ## Servicio systemd - Servicio: `pflores-web.service` - Puerto: `0.0.0.0:8081` > ⚠ **El servicio DEBE escuchar en `0.0.0.0:8081`**, no en `127.0.0.1:8081`. > NPM viene de una IP externa y no puede alcanzar el loopback. Si queda en `127.0.0.1` el resultado es **502 Bad Gateway**. ```bash sudo systemctl status pflores-web sudo systemctl restart pflores-web sudo journalctl -u pflores-web -n 50 --no-pager ``` ## Nginx Proxy Manager - Domain: `pflores.linkedcorp.net` - Forward Hostname/IP: `192.168.222.3` - Forward Port: `8081` - Scheme: `http` - SSL: certificado `pflores.linkedcorp.net`, Force SSL activado - `X-Forwarded-Proto: https` — wp-config.php lo detecta automáticamente ## Base de datos (producción) - Host: `192.168.222.32` - Base: `paty.wordpress` - Usuario: `paty.wordpress` - Prefijo de tablas: `cv_` - Credenciales: ver `.token_gitea` bloque `# Base de datos` ## Plugins de terceros (no en git — reinstalar si es necesario) ```bash cd /opt/apps/pflores.linkedcorp.net/backend/wordpress/wp-content/plugins # CMB2 wget -q https://downloads.wordpress.org/plugin/cmb2.latest-stable.zip -O cmb2.zip python3 -c "import zipfile; zipfile.ZipFile('cmb2.zip').extractall('.')" && rm cmb2.zip # WP Mail SMTP wget -q https://downloads.wordpress.org/plugin/wp-mail-smtp.latest-stable.zip -O wpmail.zip python3 -c "import zipfile; zipfile.ZipFile('wpmail.zip').extractall('.')" && rm wpmail.zip ``` ## WordPress core (no en git — reinstalar si es necesario) ```bash cd /opt/apps/pflores.linkedcorp.net/backend/wordpress wget -q https://wordpress.org/wordpress-7.0.zip -O /tmp/wp.zip python3 -c "import zipfile,shutil,os; ..." ``` ## Verificación rápida ```bash # Desde el servidor de producción: curl -s -o /dev/null -w "HTTP %{http_code}" http://127.0.0.1:8081/ curl -sI http://127.0.0.1:8081/?cv_pdf=1 | grep Content-Type curl -s -o /dev/null -w "favicon: HTTP %{http_code}\n" http://127.0.0.1:8081/favicon.ico ``` ## Problemas conocidos y soluciones ### 502 Bad Gateway general El servicio escucha en `0.0.0.0:8081`. Si queda en `127.0.0.1` NPM no puede alcanzarlo. ### 502 en recursos estáticos (CSS, JS, favicon) con NPM Cache Assets activado NPM cachéa respuestas de error (502/404). Si un recurso faltaba antes y ahora existe, NPM sigue sirviendo la respuesta vieja desde caché. **Solución:** en NPM, desactivar **Cache Assets** → guardar → reactivar → guardar. Para un sitio CV, **Cache Assets puede quedarse desactivado** sin impacto notable. ### CSS/JS con 404 tras clonar el repo en un servidor nuevo Los symlinks `persona-cv`, `lumina` y `cvolio` en `wp-content/themes/` usan **rutas relativas** (`../../../../frontend/...`). Si al clonar quedan rotos, recrearlos: ```bash THEMES='/opt/apps/pflores.linkedcorp.net/backend/wordpress/wp-content/themes' FRONTEND='/opt/apps/pflores.linkedcorp.net/frontend' rm -f $THEMES/persona-cv $THEMES/lumina $THEMES/cvolio ln -s $FRONTEND/persona-cv-theme $THEMES/persona-cv ln -s $FRONTEND/lumina-cv-theme $THEMES/lumina ln -s $FRONTEND/cvfolio-theme $THEMES/cvolio ``` ### favicon.ico El archivo `backend/wordpress/favicon.ico` está en git (foto de Patricia, 16/32/48px). No hace falta recrearlo manualmente. ## Pendientes - [ ] Configurar SMTP en WP Mail SMTP - [ ] Confirmar que NPM apunta a `192.168.222.3:8081`