~/codigoagente
Self-hosting

Cómo instalar Paymenter en un VPS con Coolify y Docker (paso a paso)

Este artículo contiene enlaces de afiliado, marcados con «afiliado». Si contratas a través de ellos, codigoagente puede recibir una comisión sin coste adicional para ti.

Guía paso a paso para poner Paymenter en producción en un VPS de Contabo con Coolify y Docker: servidor, dominio, HTTPS, base de datos, cron, backups y actualizaciones, con los comandos exactos. En el análisis anterior vimos qué es Paymenter y cómo funciona por dentro; aquí lo desplegamos con MariaDB y Redis, servido por HTTPS en tu propio dominio.

Al terminar tendrás esta arquitectura:

  • Contabo Cloud VPS con Ubuntu 24.04 LTS (también sirve 22.04).
  • Coolify, que instala Docker Engine y Docker Compose, y levanta Traefik como proxy inverso con certificados de Let's Encrypt automáticos.
  • Paymenter (PHP-FPM + Nginx + cola + cron en un solo contenedor), MariaDB 11.8 y Redis, desplegados desde la plantilla oficial de Coolify.

La ventaja frente a un docker-compose.yml escrito a mano es que Coolify genera las contraseñas, gestiona el proxy y los certificados, te da logs, terminal y backups programados desde el navegador, y actualizar Paymenter se reduce a cambiar una etiqueta de imagen y redesplegar.

La guía está dividida en seis partes. Puedes seguirlas en orden o saltar a la que necesites:

  1. Contabo: qué es, precios y qué plan elegir.
  2. Preparar el servidor: DNS, actualización, firewall, Coolify y HTTPS para el panel.
  3. Desplegar Paymenter: plantilla, dominio, inicialización, proxies y cron.
  4. Operar en producción: correo, backups y actualizaciones.
  5. Errores reales y cómo resolverlos: los diez problemas que nos encontramos y su solución.
  6. Hazlo con Claude: qué tener conectado y el prompt para que Claude haga el despliegue contigo.

Parte 1: Contabo, el VPS

¿Qué es Contabo?

Contabo es un proveedor alemán de infraestructura fundado en 2003 en Múnich. Su propuesta es simple: mucha CPU, RAM y disco por euro, a cambio de un panel más austero y menos servicios gestionados que los grandes clouds. Por eso es tan popular para autoalojar herramientas como Coolify, paneles de juegos o, como aquí, un sistema de facturación.

Qué ofrece:

  • Cloud VPS: máquinas virtuales con recursos compartidos, el producto que usaremos.
  • Cloud VDS: servidores virtuales con núcleos físicos dedicados, para cargas sostenidas de CPU.
  • Servidores dedicados (bare metal).
  • Object Storage compatible con S3, útil para guardar los backups de la base de datos fuera del VPS.
  • Extras como snapshots, backup automático, IPs adicionales, licencias de Windows Server, cPanel o Plesk.

Tiene centros de datos en la Unión Europea, Reino Unido, Estados Unidos, Singapur, Japón, India y Australia. Si tus clientes están en Latinoamérica, una región de Estados Unidos suele dar mejor latencia que Europa.

Precios de Cloud VPS

Precios publicados en contabo.comafiliado a 13 de octubre de 2026. Contabo los muestra como tarifa mensual efectiva con contrato a 24 meses, impuestos incluidos; con plazos más cortos el precio mensual es mayor (la propia página muestra la referencia más alta junto a cada plan). Confirma siempre el total en el checkout.

PlanvCPURAMDiscoSnapshotsPuertoPrecio/mes (24 meses)
Cloud VPS 448 GB100 GB SSD1200 Mbit/s4,40 €
Cloud VPS 6612 GB200 GB SSD o 100 GB NVMe2300 Mbit/s6,00 €
Cloud VPS 8824 GB300 GB SSD o 150 GB NVMe3600 Mbit/s11,20 €
Cloud VPS 121248 GB400 GB SSD o 200 GB NVMe3800 Mbit/s20,00 €
Cloud VPS 161664 GB500 GB SSD o 250 GB NVMe31 Gbit/s29,60 €
Cloud VPS 181896 GB600 GB SSD o 300 GB NVMe31 Gbit/s39,20 €

Condiciones a tener en cuenta:

  • Tráfico: entrante ilimitado; saliente ilimitado bajo una política de uso justo, y Contabo puede limitar servidores con un consumo muy alto.
  • Contrato: mínimo 1 mes y se renueva por el mismo plazo. Sin preaviso de cancelación en prepago; 4 semanas en pospago.
  • Escalado: puedes subir de plan desde el panel sin reinstalar.
  • Pago: con métodos distintos a la tarjeta, el primer pago se hace manualmente después del pedido, y el servidor no se entrega hasta que se acredita.

Qué plan elegir

Coolify pide como mínimo 2 núcleos, 2 GB de RAM y 10 GB libres. Paymenter, MariaDB y Redis consumen poco con un volumen normal de clientes. El Cloud VPS 4 (4 vCPU, 8 GB) va sobrado para esta guía y te deja margen para alojar más servicios en el mismo Coolify. Si vas a facturar a muchos clientes o compartir el servidor con más aplicaciones, la opción NVMe del Cloud VPS 6 mejora bastante la E/S de la base de datos.

Si aún no tienes un VPS, puedes conseguir uno económico en Contaboafiliado.

Parte 2: preparar el servidor

Requisitos

  • Un VPS con Ubuntu 24.04 LTS o 22.04 LTS recién instalado y acceso root por SSH.
  • Un dominio cuyo DNS puedas editar. Usaremos coolify.tudominio.com para el panel y billing.tudominio.com para Paymenter.
  • Unos 30 minutos.

Paso 1: contratar el VPS

En el pedido elige la región, la imagen Ubuntu 24.04 y define la contraseña de root (o, mejor, pega tu clave pública SSH). Contabo envía la IP por correo cuando el servidor está listo; también la verás en el panel de cliente.

Paso 2: apuntar el dominio al servidor

En tu proveedor de DNS crea dos registros A hacia la IP del VPS (sustituye 203.0.113.10 por la tuya):

DNStext
coolify.tudominio.com   A   203.0.113.10
billing.tudominio.com   A   203.0.113.10

Un comodín *.tudominio.com también funciona y te ahorra registros para futuros servicios. Si usas Cloudflare, deja los registros en DNS only (nube gris) hasta que Coolify haya emitido los certificados.

Cuidado si tu dominio ya tiene un comodín apuntando a otro sitio (por ejemplo, el aparcamiento de tu registrador, o un comodín en modo proxy). Nos pasó en el despliegue real: billing resolvía a otra IP y Let's Encrypt no podía validar. Un registro A específico siempre tiene prioridad sobre el comodín, así que basta con crear el de billing en DNS only.

Registro A específico para el subdominio de Paymenter en Cloudflare, en modo DNS only
Registro A del subdominio de facturación, sin proxy · codigoagente

Comprueba la propagación desde tu equipo:

terminalsh
dig +short billing.tudominio.com

Paso 3: primer acceso y actualización

Conéctate y actualiza el sistema:

terminalsh
ssh root@203.0.113.10

apt update && apt upgrade -y
apt install -y curl ufw
timedatectl set-timezone America/Guayaquil   # usa tu zona horaria (logs y cron del host)
reboot

La zona horaria del host solo afecta a los logs y tareas del sistema. Paymenter usa la suya propia, que configuraremos en el panel (por defecto UTC).

Después, activa el firewall. Coolify necesita SSH y HTTP/HTTPS. Mientras accedas al panel por IP también necesita el puerto 8000 y los puertos 6001 y 6002, que usan las notificaciones en tiempo real y la terminal web:

terminalsh
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8000/tcp
ufw allow 6001/tcp
ufw allow 6002/tcp
ufw enable
ufw status

Ten en cuenta que Docker escribe sus propias reglas de iptables y los puertos que publica un contenedor quedan accesibles aunque UFW no los permita. Por eso en esta guía ningún servicio publica puertos: todo el tráfico entra por Traefik en 80/443.

Paso 4: instalar Coolify (y Docker)

El instalador oficial instala Docker Engine, el plugin de Docker Compose y Coolify en /data/coolify:

terminalsh
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bash

Al terminar, verifica:

terminalsh
docker version --format '{{.Server.Version}}'
docker compose version
docker ps --format 'table {{.Names}}\t{{.Status}}'

Deberías ver los contenedores coolify, coolify-db, coolify-redis, coolify-realtime y coolify-proxy.

Abre http://203.0.113.10:8000 y crea la cuenta de administrador de inmediato: el primero que llegue a esa pantalla se queda con la instancia. Guarda también una copia de /data/coolify/source/.env, que contiene el APP_KEY y demás secretos de Coolify.

Paso 5: dominio y HTTPS para el panel de Coolify

En Settings → General, rellena Instance's Domain con https://coolify.tudominio.com y guarda. Traefik solicitará el certificado a Let's Encrypt en segundos. Con el dominio configurado, Traefik también enruta el tiempo real y la terminal web, así que cuando el panel cargue por HTTPS puedes cerrar los puertos temporales:

terminalsh
ufw delete allow 8000/tcp
ufw delete allow 6001/tcp
ufw delete allow 6002/tcp

Por HTTPS, Traefik enruta /app hacia coolify-realtime:6001 y /terminal/ws hacia coolify-realtime:6002. Si la terminal web muestra "Could not connect to the terminal server" o "websocket connection lost", faltan esas dos rutas. Nos ocurrió en el despliegue real: el proxy tenía un archivo propio coolify-dashboard.toml que solo enrutaba el panel.

La solución es añadir las rutas en un archivo nuevo. Coolify 4.4.6 valida las configuraciones dinámicas como YAML, así que un .toml existente no se puede editar desde la interfaz: crea uno YAML aparte. Ve a Servers → localhost → Proxy → Dynamic Configurations → + Add, ponle de nombre coolify-realtime.yaml y pega esto (cambia el dominio por el tuyo):

coolify-realtime.yamlyaml
http:
  routers:
    coolify-realtime-ws:
      entryPoints:
        - https
      rule: "Host(`coolify.tudominio.com`) && PathPrefix(`/app`)"
      service: coolify-realtime-ws
      tls:
        certResolver: letsencrypt
    coolify-terminal-ws:
      entryPoints:
        - https
      rule: "Host(`coolify.tudominio.com`) && PathPrefix(`/terminal/ws`)"
      service: coolify-terminal-ws
      tls:
        certResolver: letsencrypt
  services:
    coolify-realtime-ws:
      loadBalancer:
        servers:
          - url: "http://coolify-realtime:6001"
    coolify-terminal-ws:
      loadBalancer:
        servers:
          - url: "http://coolify-realtime:6002"

Guarda. Traefik recarga las configuraciones dinámicas solo, sin reiniciar el proxy, y la terminal conecta al momento.

Parte 3: desplegar Paymenter

Paso 6: crear el servicio desde la plantilla

Coolify incluye una plantilla oficial de Paymenter. En Projects pulsa + New Project, ponle un nombre (por ejemplo facturacion) y Coolify crea el entorno production. Dentro del entorno pulsa + New Resource, escribe paymenter en el buscador y pulsa Deploy en su tarjeta. Pese al nombre, ese botón solo crea el servicio; todavía no arranca nada. Si tienes un único servidor, Coolify no te pregunta dónde desplegar.

Catálogo de servicios de Coolify con la plantilla de Paymenter
Plantilla de Paymenter en el catálogo de servicios de Coolify · codigoagente

Esta es la plantilla que Coolify carga (resumida):

docker-compose.ymlyaml
services:
  paymenter:
    image: 'ghcr.io/paymenter/paymenter:v1.4.5'
    volumes:
      - 'app_logs:/app/storage/logs'
      - 'extenstions:/app/extensions'
      - 'themes:/app/themes'
      - 'app_storage:/app/storage/app'
      - 'app_public_storage:/app/storage/app/public'
    environment:
      SERVICE_URL_PAYMENTER: '${SERVICE_URL_PAYMENTER_80}'
      DB_DATABASE: '${MYSQL_DATABASE:-paymenter-db}'
      DB_PASSWORD: '${SERVICE_PASSWORD_MYSQL}'
      DB_USERNAME: '${SERVICE_USER_MYSQL}'
      APP_ENV: production
      CACHE_STORE: redis
      SESSION_DRIVER: redis
      QUEUE_CONNECTION: redis
      REDIS_HOST: redis
      REDIS_USERNAME: default
      REDIS_PASSWORD: '${SERVICE_PASSWORD_64_REDIS}'
      DB_CONNECTION: mariadb
      DB_HOST: mariadb
      DB_PORT: 3306
      APP_KEY: '${SERVICE_BASE64_KEY}'
    depends_on:
      mariadb:
        condition: service_healthy
      redis:
        condition: service_started
  mariadb:
    image: 'mariadb:11.8'
    volumes:
      - 'paymenter_mariadb_data:/var/lib/mysql'
    environment:
      - 'MYSQL_ROOT_PASSWORD=${SERVICE_PASSWORD_MYSQLROOT}'
      - 'MYSQL_DATABASE=${MYSQL_DATABASE:-paymenter-db}'
      - 'MYSQL_USER=${SERVICE_USER_MYSQL}'
      - 'MYSQL_PASSWORD=${SERVICE_PASSWORD_MYSQL}'
  redis:
    image: 'redis:alpine'

Lo importante de este archivo:

  • Las variables SERVICE_PASSWORD_*, SERVICE_USER_* y SERVICE_BASE64_KEY son mágicas: Coolify genera un valor aleatorio para cada una al crear el servicio y lo guarda cifrado. No tienes que inventar contraseñas ni dejarlas en ningún archivo; las ves en la pestaña Environment Variables si las necesitas.
  • SERVICE_URL_PAYMENTER_80 le dice a Coolify que el contenedor escucha en el puerto 80 y que debe enrutar el dominio que configures hacia él a través de Traefik.
  • APP_KEY es la clave con la que Laravel cifra datos sensibles (por ejemplo, credenciales de pasarelas). Si la pierdes o cambia, esos datos quedan ilegibles: inclúyela en tu plan de backups.
  • No hay ports:. Ningún contenedor queda expuesto directamente a Internet.

Versión de la imagen. En Coolify 4.4.6 la plantilla fija v1.4.5, pero la última versión estable de Paymenter es v1.5.9. Pulsa Edit Compose File y cambia la línea por image: 'ghcr.io/paymenter/paymenter:v1.5.9' antes del primer despliegue. Evita latest: con una etiqueta fija sabes exactamente qué corre en producción y decides cuándo actualizar.

Paso 7: dominio y despliegue

En el menú lateral del servicio entra en Domains y pulsa el engranaje del contenedor paymenter. En el diálogo Domain settings elige el protocolo https, escribe billing.tudominio.com y deja el puerto 80. Si Coolify pregunta "Use a different port?", pulsa Use This Port Anyway: el 80 es el puerto interno del contenedor, no uno publicado en el host. Guarda y pulsa Deploy.

En la pestaña General Coolify muestra en claro el usuario de la base de datos. No la compartas en capturas.

Configuración del dominio del servicio Paymenter en Coolify
Dominio del contenedor de Paymenter y botón de despliegue · codigoagente

En el primer arranque, el entrypoint de la imagen espera a que MariaDB responda, crea el enlace de storage, copia los temas y extensiones por defecto, ejecuta php artisan migrate --seed --force y arranca supervisord, que mantiene vivos PHP-FPM, Nginx y el worker de colas (queue:work), además de crond para el scheduler de Laravel. Coolify abre el modal Service Startup con el log de la descarga de imágenes. Cuando los tres contenedores muestren Running (healthy) y el dominio indique DNS matches, el servicio está listo. A partir de aquí el botón Deploy pasa a llamarse Restart current version.

Servicio Paymenter con sus tres contenedores en ejecución en Coolify
Paymenter, MariaDB y Redis en estado Running · codigoagente

Paso 8: inicializar Paymenter

Falta registrar el nombre de la empresa, la URL pública y el primer administrador. En Coolify abre Terminal en el menú del servicio, pulsa Start a terminal session y elige el contenedor paymenter. Ejecuta estos tres comandos, uno a uno:

terminalsh
php artisan app:init
php artisan db:seed --class=CustomPropertySeeder --force
php artisan app:user:create

Qué hace cada uno y qué te pregunta:

  1. app:init pide el nombre de la empresa y la URL pública, que debe empezar por https:// (por ejemplo https://billing.tudominio.com). Los guarda como company_name y app_url. Si te equivocas, puedes volver a ejecutarlo: sobrescribe los dos valores.
  2. db:seed --class=CustomPropertySeeder crea los campos de facturación del cliente (teléfono, empresa, dirección, ciudad, provincia, código postal y país).
  3. app:user:create pide nombre, apellido, email, contraseña y rol. Elige admin, que el seeder crea con permisos *.

Escribe solo la respuesta a cada pregunta. Un error típico es pegar como respuesta la línea de explicación o el siguiente comando: Paymenter lo acepta como texto y acabas con una empresa llamada "php artisan…". Si pasa, repite app:init o corrige el nombre del usuario en Admin → Users.

Si prefieres SSH, desde el VPS localiza el contenedor y antepón docker exec -it a cada comando:

terminalsh
PAYMENTER=$(docker ps --filter 'name=^paymenter-' --format '{{.Names}}' | head -n1)
docker exec -it "$PAYMENTER" php artisan app:init
Terminal de Coolify ejecutando los comandos de inicialización de Paymenter
Inicialización de Paymenter desde la terminal web de Coolify · codigoagente
Creación del primer usuario administrador con app:user:create
Alta del primer administrador desde la terminal · codigoagente

Ahora abre https://billing.tudominio.com, inicia sesión con el usuario que acabas de crear y entra al panel en /admin.

Panel de administración de Paymenter en producción
Panel de administración de Paymenter servido por HTTPS · codigoagente

Paso 9: proxies de confianza

Paymenter está detrás de Traefik, así que todas las peticiones le llegan desde la IP del proxy. Si no le dices que confíe en él, Laravel ignora las cabeceras X-Forwarded-*: genera enlaces http://, el navegador bloquea recursos por contenido mixto y la subida de archivos falla.

Averigua la red del proxy:

terminalsh
docker inspect coolify-proxy \
  --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{$v.IPAddress}}{{"\n"}}{{end}}'

# Subred de la red del servicio de Paymenter
docker network inspect $(docker inspect "$PAYMENTER" --format '{{range $k, $v := .NetworkSettings.Networks}}{{$k}} {{end}}' | awk '{print $1}') \
  --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}'

En Paymenter ve a Admin → Settings → Security → Trusted proxies y añade la IP del proxy en la red de Paymenter, o la subred completa (por ejemplo 10.0.1.0/24). Una alternativa práctica, y la que usamos, es poner los tres rangos privados: 10.0.0.0/8, 172.16.0.0/12 y 192.168.0.0/16. Cubren cualquier red de Docker y son seguros porque el contenedor no publica puertos: solo Traefik puede alcanzarlo. Paymenter también acepta *, aunque es preferible ser explícito.

Antes de guardar, rellena System Email Address en Settings → General. Paymenter valida toda la página de ajustes y, con ese campo vacío, no guarda los proxies.

Ajuste de proxies de confianza en Paymenter
Admin → Settings → Security en Paymenter · codigoagente

Paso 10: comprobar cron y colas

El scheduler de Laravel ejecuta cada minuto un heartbeat, a diario el CronJob que genera facturas, envía recordatorios y suspende o termina servicios, y cada cinco minutos la importación de correos de tickets. Compruébalo:

terminalsh
docker exec -it "$PAYMENTER" php artisan schedule:list
docker exec -it "$PAYMENTER" supervisorctl -c /etc/supervisord.conf status

Deberías ver php-fpm, nginx y queue-worker en RUNNING. La hora del cron diario se cambia en Admin → Settings → Cronjob (por defecto 00:00) y se interpreta en la zona horaria de Admin → Settings → General, que por defecto es UTC: ajústala a la de tu negocio.

Parte 4: operar en producción

Correo saliente

Sin SMTP Paymenter no puede enviar facturas ni restablecer contraseñas. Configúralo en Admin → Settings → Mail con un proveedor transaccional (Amazon SES, Postmark, Brevo, etc.) y configura SPF, DKIM y DMARC en tu dominio. Muchos proveedores de VPS bloquean o limitan el puerto 25; usa 587 con STARTTLS.

Backups

Un sistema de facturación sin backups es una deuda a punto de cobrarse. Dos capas:

  1. Base de datos: en el menú lateral del servicio entra en Automation, pulsa + Add Backup, elige Database backup sobre mariadb y prográmalo a diario (por ejemplo 0 3 * * *). En Settings → S3 Storages puedes añadir un bucket S3, incluido el Object Storage de Contabo, para que las copias salgan del VPS.
  2. Servidor completo: crea un snapshot de Contabo antes de cada actualización importante.

Y guarda fuera del servidor el APP_KEY del servicio y el .env de Coolify.

Backups programados de MariaDB en Coolify
Backup diario de la base de datos de Paymenter hacia S3 · codigoagente

Actualizar Paymenter

Revisa las notas de versión, haz un backup, cambia la etiqueta de la imagen en Edit Compose File (por ejemplo de v1.5.9 a la siguiente) y pulsa Redeploy. Las migraciones se aplican solas porque el entrypoint ejecuta migrate --force en cada arranque.

Una advertencia: en cada arranque la imagen también restaura los temas y extensiones por defecto. Si modificaste el tema por defecto en lugar de crear uno propio, añade PAYMENTER_SKIP_DEFAULT=true a las variables de entorno o perderás los cambios.

Parte 5: errores reales y cómo resolverlos

Estos son los problemas que nos encontramos de verdad al desplegar esta guía, en el orden en que aparecieron. Cada uno tiene el síntoma que verás, la causa y la solución.

Error 1: el subdominio resuelve, pero no a tu VPS

Síntoma: Coolify no emite el certificado y el navegador muestra un aviso de seguridad o la página de otro servicio.

Causa: el dominio tenía un comodín *.tudominio.com apuntando a otro sitio (en nuestro caso, el aparcamiento del registrador con el proxy naranja de Cloudflare). El subdominio "existía", pero devolvía las IPs de Cloudflare y no la del VPS, así que Let's Encrypt no podía validar.

Solución: crea un registro A específico (billing → IP del VPS) en DNS only (nube gris). Un registro específico siempre gana al comodín. Compruébalo así:

terminalsh
dig +short billing.tudominio.com

En Windows usa Resolve-DnsName billing.tudominio.com. Tiene que salir la IP de tu VPS, y en Coolify el dominio debe mostrar DNS matches.

Error 2: la plantilla instala una versión antigua

Síntoma: después de desplegar, el panel muestra una versión de Paymenter anterior a la última publicada.

Causa: la plantilla de Coolify 4.4.6 fija v1.4.5.

Solución: antes del primer Deploy, abre Edit Compose File y cambia la imagen a ghcr.io/paymenter/paymenter:v1.5.9 (paso 6).

Error 3: el aviso "Use a different port?"

Síntoma: al guardar el dominio con el puerto 80, Coolify pregunta si quieres usar otro puerto.

Causa: es una advertencia genérica de la interfaz. El 80 es el puerto interno del contenedor, no uno publicado en el servidor.

Solución: pulsa Use This Port Anyway.

Error 4: la terminal web de Coolify no conecta

Síntoma: "Could not connect to the terminal server" o "Terminal websocket connection lost".

Causa: el proxy tenía una ruta propia que solo enviaba el panel a coolify:8080, sin las rutas de websocket. Si abres https://coolify.tudominio.com/terminal/ws y responde un 404 del panel, este es tu caso.

Solución: crea el archivo coolify-realtime.yaml del paso 5 con las rutas /app → coolify-realtime:6001 y /terminal/ws → coolify-realtime:6002. No hace falta reiniciar el proxy.

Error 5: "Unable to parse at line 2" al editar el proxy

Síntoma: intentas editar un archivo .toml en Dynamic Configurations y Coolify no lo guarda.

Causa: Coolify valida todos los archivos dinámicos como YAML, incluso los que terminan en .toml.

Solución: no edites el .toml; crea un archivo .yaml aparte con las rutas nuevas.

Error 6: no puedes entrar por SSH ni por VNC

Síntoma: ssh root@IP no responde y el cliente VNC de Contabo dice "Failed to connect to server".

Causa: en nuestro VPS el puerto 22 no respondía desde fuera por el firewall, y el VNC estaba desactivado en el panel de Contabo.

Solución: para todo lo de esta guía no necesitas SSH: la terminal web de Coolify (una vez arreglada con el error 4) te deja ejecutar los comandos dentro del contenedor. Si necesitas la consola, activa el VNC en el panel de Contabo (en la gestión del VPS, sección VNC, con una contraseña de 8 caracteres) y revisa las reglas del firewall para el puerto 22.

Error 7: la empresa o tu nombre quedan mal escritos

Síntoma: la empresa se llama "# Nombre de la empresa…" o tu nombre de usuario es "php artisan schedule:list".

Causa: app:init y app:user:create preguntan en cajas interactivas y guardan exactamente lo que pegues. Si copias una línea entera de la guía, o el siguiente comando, eso queda como respuesta.

Solución: responde solo el valor que se pide. app:init se puede repetir y sobrescribe el nombre y la URL. El nombre del usuario se corrige en Admin → Users → Edit.

Error 8: "The system Email Address field is required"

Síntoma: no puedes guardar ningún cambio en Settings, por ejemplo los proxies de confianza.

Causa: Paymenter valida la página entera de ajustes y el correo del sistema está vacío.

Solución: rellena primero Settings → General → System Email Address.

Error 9: el navegador rellena la contraseña del correo por ti

Síntoma: al guardar Settings, el campo Mail Password tiene una contraseña que no escribiste.

Causa: Chrome autocompleta el campo con la contraseña guardada para ese sitio.

Solución: revisa ese campo antes de guardar y bórralo si no has configurado SMTP todavía.

Error 10: no sale ningún correo

Síntoma: ni facturas, ni recordatorios, ni enlaces para restablecer la contraseña.

Causa: Paymenter viene con Disable Mail activado.

Solución: configura SMTP en Settings → Mail y desactiva Disable Mail (Parte 4). Si sigue sin salir, mira el log en storage/logs (volumen app_logs).

Otros errores frecuentes

  • "No available server" o 502 de Traefik: el healthcheck de Paymenter aún no pasa (el primer arranque con migraciones tarda) o el dominio no está asignado al contenedor paymenter. Revisa Logs.
  • Enlaces en http://, CSS roto o subidas que fallan: faltan los proxies de confianza (paso 9).
  • Las facturas no se generan: comprueba schedule:list, la zona horaria de Settings → General y la hora de Settings → Cronjob. Recién instalado, el panel dice "Last cron run: Never" hasta que llega la primera hora programada; es normal.

Parte 6: hazlo con Claude

Si no eres técnico o esta guía se te complica, no tienes que hacerlo todo a mano. Claude puede hacer el despliegue contigo: maneja el navegador, te explica cada paso en lenguaje sencillo y te pide permiso antes de cambiar nada. También te ayuda si te atascas en alguno de los errores de la Parte 5.

Qué tener abierto y conectado

  1. La app de escritorio de Claude con la extensión Claude in Chrome conectada. En los ajustes de la app, la sección de navegadores conectados debe mostrar tu Chrome.
  2. Sesión iniciada en Chrome en Coolify, en tu proveedor de DNS (Cloudflare en nuestro caso) y, más adelante, en Paymenter. Claude no escribe contraseñas: entras tú y él trabaja en las pestañas ya abiertas.
  3. Estos datos a mano: la URL de tu Coolify, el subdominio que quieres para Paymenter, la URL del panel de DNS y la IP del VPS (la misma del registro de coolify).

Qué no hará sin preguntarte

Por seguridad, Claude te pedirá confirmación en el chat antes de cambiar DNS, desplegar, tocar el proxy o hacer cualquier cambio en producción. Tampoco escribe credenciales ni claves de pasarelas. Los comandos php artisan los ejecutas tú en la terminal de Coolify cuando te los indique, porque te piden datos personales y una contraseña.

Nunca pegues contraseñas en el chat. Si Claude necesita entrar a algún sitio, inicia sesión tú en ese navegador.

El prompt

Adapta los datos entre corchetes y pégalo tal cual:

prompttext
Despliega Paymenter en mi Coolify en [https://coolify.tudominio.com] usando la plantilla oficial, en un proyecto llamado "facturacion", entorno production.
Cambia la imagen a ghcr.io/paymenter/paymenter:v1.5.9 antes del primer despliegue.
Pon el dominio [https://billing.tudominio.com].
Comprueba que el registro A de [billing] apunta a la IP de mi VPS. Mi DNS está en Cloudflare: [URL del panel de DNS]. Si falta, pregúntame antes de crearlo y créalo en modo DNS only.
Despliega y espera hasta que los contenedores estén Running (healthy).
Luego dime qué comandos debo ejecutar yo en la terminal de Coolify para inicializarlo.
Cuando esté en /admin, configura los Trusted Proxies.
No escribas contraseñas y pregúntame antes de cualquier cambio fuera de Coolify.

Si algo falla, pídele que revise los logs del servicio y te diga cuál de los errores de la Parte 5 es antes de tocar nada.

Y si prefieres que alguien lo implemente por ti, al final del artículo tienes la agencia que recomendamos para desarrollos a medida.

Conclusión

Con un VPS de pocos euros al mes y una tarde de trabajo tienes un sistema de facturación completo, con HTTPS, backups y actualizaciones controladas, sin licencias por cliente. Coolify reduce la parte operativa a unos clics y Paymenter, al ser MIT, te deja adaptarlo a tu negocio sin pedir permiso.

¿Lo vas a usar para un negocio de hosting, licencias o servicios recurrentes? El siguiente paso natural es configurar una pasarela de pago y tu primer producto, que explicamos en la guía de configuración de Paymenter para agencias.

// código fuente

Repositorio del artículo
El código del que habla este artículo es público: revísalo, dale una estrella o clónalo desde aquí.

// stack referenciado

Herramientas mencionadas
Divulgación: algunos enlaces son de afiliado. Si contratas a través de ellos, codigoagente puede recibir una comisión sin coste adicional para ti. No condiciona la evaluación técnica.

// implementación

¿Necesitas implementar esta automatización en tu negocio?
No pierdas semanas configurando servidores, APIs y agentes. Safe Build Labs, la agencia que patrocina codigoagente, lo construye por ti, listo para producción.