diff --git a/PROMPT_IA.md b/PROMPT_IA.md index bf1837f..0950736 100644 --- a/PROMPT_IA.md +++ b/PROMPT_IA.md @@ -73,6 +73,8 @@ pflores.linkedcorp.net/ ## 3. Base de datos +### Desarrollo + ``` Host: 192.168.222.20 DB: paty.wordpress @@ -81,11 +83,22 @@ Password: paty.wordpress Prefijo: cv_ → tabla principal: cv_options ``` -Conexión de prueba: ```bash mysql -u "paty.wordpress" -p"paty.wordpress" -h 192.168.222.20 "paty.wordpress" --ssl=0 ``` +### Producción + +``` +Host: 192.168.222.32 +DB: paty.wordpress +Usuario: paty.wordpress +Password: (ver LOCAL_DEPLOY_CONTEXT.md) +Prefijo: cv_ +``` + +> La BD de producción es una copia completa de la de desarrollo. Misma estructura, mismos datos del CV. Credenciales distintas. + --- ## 4. Arrancar / reiniciar el servidor @@ -763,3 +776,83 @@ echo "1.0.1" > VERSION # Anotar cambio en CHANGELOG.md # Luego commit y push normal ``` + +--- + +## 22. Servidor de producción + +### Datos del servidor + +- Host: `192.168.222.3` +- SSH: `deploy@192.168.222.3 -p 2203` +- `deploy` tiene sudo NOPASSWD +- Ruta app: `/opt/apps/pflores.linkedcorp.net` +- Servicio systemd: `pflores-web.service` +- Puerto interno: `127.0.0.1:8081` +- NPM proxy: `pflores.linkedcorp.net` → `192.168.222.3:8081` + +Credenciales SSH: ver `LOCAL_DEPLOY_CONTEXT.md` + +### Estructura en producción + +``` +/opt/apps/pflores.linkedcorp.net/ +├── backend/wordpress/ ← WordPress + temas + plugins +├── frontend/ ← temas (lumina, persona-cv, cvolio via symlink) +├── scripts/deploy_prod_web.sh ← script de deploy +└── .env ← config producción (local, nunca versionar) +``` + +### Deploy recurrente (flujo completo) + +```bash +# 1. En desarrollo: commit + push a Gitea (ver sección 21) + +# 2. En el servidor de producción: +ssh deploy@192.168.222.3 -p 2203 +cd /opt/apps/pflores.linkedcorp.net +bash scripts/deploy_prod_web.sh +``` + +El script hace: `git reset --hard` + verificar plugins + `systemctl restart` + verificar HTTP 200. + +### Comandos útiles en producción + +```bash +sudo systemctl status pflores-web +sudo systemctl restart pflores-web +sudo journalctl -u pflores-web -n 50 --no-pager +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 +``` + +### Plugins de terceros (no en git) + +Si desaparecen tras un `git reset --hard`, el script de deploy los reinstala automáticamente. También se pueden instalar manualmente: + +```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) + +Si hay que reinstalar el core de WordPress en el servidor: +```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 +z=zipfile.ZipFile('/tmp/wp.zip') +z.extractall('/tmp/wp_extract') +src='/tmp/wp_extract/wordpress' +for d in ['wp-admin','wp-includes']: + if not os.path.exists(d): shutil.copytree(os.path.join(src,d),d) +for f in os.listdir(src): + if os.path.isfile(os.path.join(src,f)): shutil.copy2(os.path.join(src,f),f) +" +rm -rf /tmp/wp.zip /tmp/wp_extract +```