Files
pflores.linkedcorp.net/PRODUCCION.md
T

4.1 KiB

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.

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)

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)

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

# 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:

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