[{"data":1,"prerenderedAt":221},["ShallowReactive",2],{"seo-verification":3,"blog-alojar-postgresql-en-un-vps-ma-es":6,"promo-bar-likely":220},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-alojar-postgresql-en-un-vps-ma-es",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":163,"ctaBody":164,"ctaButton":165,"ctaUrl":166,"relatedPosts":167},56,"alojar-postgresql-en-un-vps",{"fr":12,"en":13,"ar":14,"es":10},"heberger-postgresql-vps","postgresql-on-a-vps-a-reliable-and-controlled-database","postgresql-على-خادم-vps-قاعدة-بيانات-موثوقة-ومتحكم-بها","PostgreSQL en VPS: base de datos fiable y controlada","Aloje PostgreSQL en VPS: configuración prod, copias pgBackRest, HA streaming, comparativa RDS\u002FSupabase\u002FNeon y resolución de fallos OOM.",9,1,false,"2026-04-25T00:00:00+00:00","2026-10-21T15:21:37+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},6,"Bases de datos","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-postgresql-vps-poster.svg",{"categorySlug":34,"appSlug":35},"bases-de-datos","postgresql-stack","PostgreSQL suele ser la base de datos de confianza de las aplicaciones de negocio, las API y las herramientas de análisis. En un VPS ServOrbit, usted controla la versión, el almacenamiento, las copias de seguridad y los accesos en lugar de pagar una base de datos gestionada por GB. Esta guía cubre las decisiones que importan — persistencia, usuarios, red y restauración — así como el ajuste fino de `postgresql.conf`, las copias de seguridad automatizadas con prueba de restauración, la alta disponibilidad en streaming sobre dos VPS y la resolución de los fallos más frecuentes en producción.",[38,42,52,55,80,95,98,101,154,157,160],{"type":39,"title":40,"body":41},"h2","Por qué autoalojar PostgreSQL en un VPS","Las bases de datos gestionadas (RDS, Cloud SQL) facturan por GB almacenado, por IOPS y por conexiones, y a menudo limitan las extensiones disponibles. Al desplegar PostgreSQL en su propio VPS, activa `pg_stat_statements`, `PostGIS`, `pgvector` o `TimescaleDB` sin restricción, elige su versión exacta (15, 16, 17) y mantiene sus datos en una jurisdicción que usted controla. Un VPS con disco SSD ofrece latencias de I\u002FO muy bajas, ideales para las cargas transaccionales de una aplicación en producción. Paga una tarifa fija y previsible, y decide usted solo su estrategia de replicación, de cifrado y de retención de las copias de seguridad.",{"type":43,"title":44,"items":45},"ul","Los beneficios concretos de un PostgreSQL autoalojado",[46,47,48,49,50,51],"Coste fijo y previsible: sin facturación por GB, por IOPS ni por número de conexiones activas.","Extensiones libres: `pgvector` para la IA, `PostGIS` para lo geoespacial, `TimescaleDB` para las series temporales.","Control total de las copias de seguridad: `pg_dump` planificado, `pg_basebackup` o replicación física hacia un segundo VPS.","Ajuste fino de `postgresql.conf` (shared_buffers, work_mem, WAL), imposible en la mayoría de las ofertas gestionadas.","Soberanía de los datos: sus datos permanecen en una infraestructura que usted elige.","Acceso de superusuario real para auditar, perfilar y optimizar sin abrir un ticket de soporte.",{"type":39,"title":53,"body":54},"Requisitos de hardware y software","Para una instancia PostgreSQL de desarrollo o un proyecto pequeño en producción, prevea un VPS con 2 vCPU, 4 GB de RAM y 40 GB de SSD NVMe: PostgreSQL aprovecha la memoria para su caché de páginas. Para una carga más sostenida (varios cientos de conexiones o conjuntos de datos de varias decenas de GB), apunte a 4 vCPU y 8 GB de RAM. En cuanto al software: Ubuntu 22.04 o 24.04 LTS, Docker Engine y el plugin Docker Compose v2, un nombre de dominio que apunte al VPS si expone el acceso remoto, y un cortafuegos `ufw` configurado para dejar pasar solo lo estrictamente necesario. Reserve también un volumen Docker dedicado para `PGDATA` con el fin de desacoplar los datos del contenedor.",{"type":56,"title":57,"steps":58},"steps","Desplegar PostgreSQL con Docker en producción",[59,62,65,68,71,74,77],{"title":60,"body":61},"Preparar el VPS y el cortafuegos","Conéctese por SSH, actualice el sistema con `apt update && apt upgrade -y` e instale Docker mediante `curl -fsSL https:\u002F\u002Fget.docker.com | sh`. Bloquee el puerto 5432 desde el exterior con `ufw deny 5432`: la base de datos nunca debe estar expuesta directamente a Internet.",{"title":63,"body":64},"Escribir el docker-compose.yml","Cree un servicio `postgres:17`, monte un volumen con nombre en `\u002Fvar\u002Flib\u002Fpostgresql\u002Fdata` y defina `POSTGRES_PASSWORD`, `POSTGRES_DB` y `POSTGRES_USER` mediante un archivo `.env` que nunca se suba al repositorio. Añada `shm_size: 256mb` para las ordenaciones voluminosas y un `healthcheck` con `pg_isready`.",{"title":66,"body":67},"Lanzar e inicializar la base de datos","Arranque con `docker compose up -d`, compruebe los logs con `docker compose logs -f postgres` y después conéctese con `docker compose exec postgres psql -U app -d mabase`. Cree sus roles de aplicación con privilegios mínimos en lugar de utilizar el superusuario.",{"title":69,"body":70},"Exponer el acceso mediante un túnel o un proxy TLS","Para un acceso remoto seguro, nunca abra 5432 en claro: utilice un túnel SSH (`ssh -L 5432:localhost:5432`) o coloque `pgbouncer` detrás de un reverse proxy. Active el SSL del lado de PostgreSQL con un certificado Let's Encrypt montado en el contenedor (`ssl = on` en `postgresql.conf`).",{"title":72,"body":73},"Ajustar la configuración","Ajuste `shared_buffers` a alrededor del 25% de la RAM, `effective_cache_size` al 50-75% y `work_mem` según sus consultas. Active `pg_stat_statements` para identificar las consultas lentas. Utilice la herramienta PGTune como punto de partida.",{"title":75,"body":76},"Automatizar las copias de seguridad","Programe un `pg_dump` diario mediante una tarea cron en el host, comprima en formato custom `.dump` y copie los archivos hacia un almacenamiento externo. Pruebe regularmente la restauración con `pg_restore`: una copia de seguridad no probada no existe.",{"title":78,"body":79},"Conectarse por primera vez","pgAdmin no está publicado en Internet: abra un túnel desde su equipo (ssh -L 5050:127.0.0.1:5050 root@\u003CIP>) y después http:\u002F\u002F127.0.0.1:5050, e inicie sesión con admin@local.host y la contraseña facilitada. A continuación añada su servidor («Add New Server») con el host db, el puerto 5432, el usuario postgres y esa misma contraseña.",{"type":56,"title":81,"steps":82},"Configurar postgresql.conf para producción",[83,86,89,92],{"title":84,"body":85},"shared_buffers: la caché de memoria de PostgreSQL","Defina `shared_buffers = 25%` de la RAM total del VPS. En 8 GB de RAM, eso da 2 GB. Este parámetro controla el tamaño de la caché de páginas compartida entre todos los procesos de PostgreSQL — es la palanca más importante para las lecturas repetidas. Un archivo `postgresql.conf` personalizado montado vía Docker permite aplicar estos ajustes al arranque del contenedor.",{"title":87,"body":88},"work_mem y max_connections","Establezca `work_mem` en función de sus consultas de ordenación y unión: de 4 a 16 MB es razonable para cargas mixtas. Atención: cada conexión puede asignar `work_mem` varias veces simultáneamente, así que multiplique por `max_connections` para estimar el pico de consumo de memoria. Para 100 conexiones de aplicación, `max_connections = 150` es suficiente; más allá, use `pgbouncer` en modo transacción para multiplexar conexiones.",{"title":90,"body":91},"Logging y detección de consultas lentas","Active `logging_collector = on` y `log_min_duration_statement = \u003Cseuil_ms>` (ms) para registrar todas las consultas que superen el umbral configurado. Combinar esto con `pg_stat_statements` (extensión a activar en `shared_preload_libraries`) ofrece una vista agregada de las consultas más costosas sin escanear cada archivo de log.",{"title":93,"body":94},"WAL y checkpoints","Aumente `wal_buffers` a 16 MB y establezca `checkpoint_completion_target` en 0.9 para distribuir las escrituras de checkpoints en el tiempo. En SSD NVMe, `random_page_cost = 1.1` (en lugar del valor por defecto 4.0) anima al planificador a elegir index scans en lugar de seq scans — un ajuste frecuentemente ignorado que cambia drásticamente los planes de ejecución en bases de datos grandes.",{"type":39,"title":96,"body":97},"Copias de seguridad automáticas y estrategia de recuperación","Una copia de seguridad no probada es una copia que no existe. Tres enfoques complementarios cubren necesidades distintas.\n\n**`pg_dump` + cron** es el punto de partida: sencillo de configurar, produce un archivo SQL lógico restaurable en cualquier versión compatible. Prográmelo a las 3 AM, comprima con `--format=custom`, y copie el archivo hacia almacenamiento externo con `rclone` o `scp`. Conserve 7 días en local y 30 días en remoto.\n\n**`pgBackRest`** va más lejos: admite copias incrementales y diferenciales, compresión paralela y restauración a punto en el tiempo (PITR) a partir de archivos WAL. Es la solución recomendada cuando su base supera unos pocos GB o necesita volver a un minuto preciso tras un `DELETE` accidental.\n\n**Prueba de restauración mensual**: ejecute `pg_restore -d test_restore \u003Cdump>` regularmente en un VPS de prueba para verificar la integridad de sus archivos.",{"type":39,"title":99,"body":100},"Alta disponibilidad ligera sin Kubernetes","La alta disponibilidad de PostgreSQL en un VPS no implica necesariamente Patroni o un clúster Pacemaker complejo. La replicación streaming nativa cubre la mayoría de las necesidades con una configuración mínima.\n\n**Replicación streaming manual**: en el VPS primario, active `wal_level = replica`, añada un usuario `replicator` en `pg_hba.conf` y establezca `max_wal_senders = 3`. En el VPS secundario (standby), ejecute `pg_basebackup` para inicializar una copia física, cree un archivo `standby.signal` y configure `primary_conninfo` en `postgresql.conf`. La replicación arranca automáticamente al reiniciar. Con `hot_standby = on`, el standby acepta consultas de solo lectura.\n\n**Patroni** añade la conmutación por error automática: monitoriza el primario mediante una clave en `etcd` o `Consul`, y promueve automáticamente el standby si el primario deja de responder durante más de 30 segundos.\n\n**Monitorización del lag de replicación**: `SELECT pg_wal_lsn_diff(pg_current_wal_lsn(), sent_lsn) AS lag_bytes FROM pg_stat_replication` en el primario le da el desfase en bytes en tiempo real.",{"type":102,"title":103,"columns":104,"rows":110},"comparison","PostgreSQL self-hosted vs RDS vs Supabase vs Neon",[105,106,107,108,109],"Criterio","VPS ServOrbit (self-hosted)","AWS RDS PostgreSQL","Supabase (cloud)","Neon (serverless)",[111,117,123,129,134,140,145,150],[112,113,114,115,116],"Coste mensual (small)","99 DH\u002Fmes (tarifa plana)","~35-70 $\u002Fmes (db.t3.medium)","~25 $\u002Fmes (Pro)","~19 $\u002Fmes (Launch)",[118,119,120,121,122],"Control de postgresql.conf","Total","Parcial (grupos de parámetros)","Limitado","Mínimo",[124,125,126,127,128],"Extensiones personalizadas","Todas (pgvector, PostGIS…)","Lista restringida","pgvector, PostGIS","Limitadas",[130,131,132,133,132],"PITR","Sí con pgBackRest","Sí (nativo)","Sí (Pro+)",[135,136,137,138,139],"Alta disponibilidad","Replicación manual o Patroni","Multi-AZ nativo","Nativo","Multi-región nativo",[141,142,143,144,144],"Carga de mantenimiento","Alta (requiere DBA)","Baja","Muy baja",[146,147,148,148,149],"Datos fuera de EE.UU.","Sí (VPS marroquí)","Por región","Solo EE.UU.\u002FUE",[151,152,153,153,153],"Superusuario \u002F extensiones","Sí","No",{"type":39,"title":155,"body":156},"Resolución de problemas frecuentes en producción","**El OOM killer mata PostgreSQL**: la señal `OOM` en `\u002Fvar\u002Flog\u002Fsyslog` indica que la memoria se ha agotado. Causas principales: `shared_buffers` demasiado alto, `work_mem` mal calibrado frente al número de conexiones. Diagnóstico: `cat \u002Fproc\u002Fmeminfo | grep -E 'MemFree|Cached|Buffers'`. Solución: reducir `work_mem`, activar `huge_pages = try` en `postgresql.conf`, o actualizar el VPS.\n\n**Conexiones agotadas** (`FATAL: sorry, too many clients already`): se ha alcanzado `max_connections`. Corto plazo: `SELECT count(*), state FROM pg_stat_activity GROUP BY state` para identificar conexiones inactivas. Largo plazo: despliegue `pgbouncer` en modo transacción delante de PostgreSQL.\n\n**Autovacuum saturado**: las tablas con muchas operaciones `UPDATE` o `DELETE` acumulan tuplas muertas. `SELECT relname, n_dead_tup, last_autovacuum FROM pg_stat_user_tables ORDER BY n_dead_tup DESC LIMIT 10` revela las tablas problemáticas. Acelere el autovacuum reduciendo `autovacuum_vacuum_scale_factor` a 0.01 para las tablas críticas.\n\n**Checkpoints demasiado frecuentes** (`LOG: checkpoint occurring too frequently`): aumente `max_wal_size` a 2-4 GB y `checkpoint_timeout` a 15-30 min para espaciar los checkpoints.",{"type":158,"body":159},"tip","Para alta disponibilidad, despliegue un segundo VPS en replicación física por streaming (`primary_conninfo` + slot de replicación). Obtiene un standby caliente listo para tomar el relevo, y puede derivar hacia él sus consultas de lectura pesadas (`hot_standby = on`) para aliviar el primario. Combinado con `pgBackRest` para copias de seguridad incrementales diferenciales, alcanza un RPO de unos minutos sin depender de un servicio gestionado.",{"type":158,"title":161,"body":162},"La documentación oficial","Para la configuración avanzada, las opciones propias de la herramienta y los cambios de versión, consulte la \u003Ca href=\"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">documentación oficial de PostgreSQL\u003C\u002Fa>. Esta guía cubre la puesta en línea en un VPS ServOrbit; la documentación del editor sigue siendo la referencia para los ajustes finos.","Despliegue su PostgreSQL en unos minutos","Lance un VPS Cloud de ServOrbit con plantilla Docker preconfigurada y SSD: el entorno ideal para alojar PostgreSQL sin facturación por GB.","Configurar mi VPS Cloud","\u002Fvps-cloud",[168,186,204],{"id":169,"slug":170,"slugs":171,"title":175,"excerpt":176,"readTime":17,"views":177,"isPinned":19,"noindex":19,"publishedAt":178,"updatedAt":179,"category":180,"categories":181,"featuredImage":30,"bgImage":31,"posterImage":183,"relatedSolution":184},57,"alojar-mysql-en-un-vps",{"fr":172,"en":173,"ar":174,"es":170},"heberger-mysql-vps","hosting-mysql-on-a-vps","استضافة-mysql-على-خادم-vps","Alojar MySQL en un VPS: guía completa","Instale MySQL 8.4 LTS en un VPS: requisitos, seguridad, rendimiento InnoDB, acceso remoto seguro, copias de seguridad automatizadas y resolución de errores.",0,"2026-04-24T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[182],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-mysql-vps-poster.svg",{"categorySlug":34,"appSlug":185},"mysql-stack",{"id":187,"slug":188,"slugs":189,"title":193,"excerpt":194,"readTime":195,"views":177,"isPinned":19,"noindex":19,"publishedAt":196,"updatedAt":197,"category":198,"categories":199,"featuredImage":30,"bgImage":31,"posterImage":201,"relatedSolution":202},58,"alojar-redis-en-un-vps",{"fr":190,"en":191,"ar":192,"es":188},"heberger-redis-vps","hosting-redis-on-a-vps","استضافة-redis-على-خادم-vps","Alojar Redis en un VPS: la guía completa","Despliegue Redis en su VPS Cloud: requisitos de RAM\u002FCPU, seguridad (ACL, TLS), persistencia RDB\u002FAOF, resolución de errores y alta disponibilidad.",10,"2026-04-23T00:00:00+00:00","2026-09-08T21:59:59+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[200],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-redis-vps-poster.svg",{"categorySlug":34,"appSlug":203},"redis-stack",{"id":205,"slug":206,"slugs":207,"title":211,"excerpt":212,"readTime":213,"views":177,"isPinned":19,"noindex":19,"publishedAt":214,"updatedAt":215,"category":216,"categories":217,"featuredImage":30,"bgImage":31,"posterImage":219,"relatedSolution":30},59,"alojar-mongodb-en-un-vps",{"fr":208,"en":209,"ar":210,"es":206},"heberger-mongodb-vps","hosting-mongodb-on-a-vps","استضافة-mongodb-على-خادم-vps","Alojar MongoDB en un VPS","Aloje MongoDB en su VPS Cloud: despliegue Docker, replica set, autenticación, indexación y copias de seguridad controladas.",3,"2026-04-22T00:00:00+00:00","2026-09-08T22:00:02+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},[218],{"id":23,"name":24,"slug":25,"color":26,"icon":27},"\u002Fblog\u002Fcovers\u002Fheberger-mongodb-vps-poster.svg",true,1794270538617]