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:
- Contabo: qué es, precios y qué plan elegir.
- Preparar el servidor: DNS, actualización, firewall, Coolify y HTTPS para el panel.
- Desplegar Paymenter: plantilla, dominio, inicialización, proxies y cron.
- Operar en producción: correo, backups y actualizaciones.
- Errores reales y cómo resolverlos: los diez problemas que nos encontramos y su solución.
- 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.
| Plan | vCPU | RAM | Disco | Snapshots | Puerto | Precio/mes (24 meses) |
|---|---|---|---|---|---|---|
| Cloud VPS 4 | 4 | 8 GB | 100 GB SSD | 1 | 200 Mbit/s | 4,40 € |
| Cloud VPS 6 | 6 | 12 GB | 200 GB SSD o 100 GB NVMe | 2 | 300 Mbit/s | 6,00 € |
| Cloud VPS 8 | 8 | 24 GB | 300 GB SSD o 150 GB NVMe | 3 | 600 Mbit/s | 11,20 € |
| Cloud VPS 12 | 12 | 48 GB | 400 GB SSD o 200 GB NVMe | 3 | 800 Mbit/s | 20,00 € |
| Cloud VPS 16 | 16 | 64 GB | 500 GB SSD o 250 GB NVMe | 3 | 1 Gbit/s | 29,60 € |
| Cloud VPS 18 | 18 | 96 GB | 600 GB SSD o 300 GB NVMe | 3 | 1 Gbit/s | 39,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.compara el panel ybilling.tudominio.compara 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):
coolify.tudominio.com A 203.0.113.10
billing.tudominio.com A 203.0.113.10Un 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.

Comprueba la propagación desde tu equipo:
dig +short billing.tudominio.comPaso 3: primer acceso y actualización
Conéctate y actualiza el sistema:
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)
rebootLa 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:
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 statusTen 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:
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | sudo bashAl terminar, verifica:
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:
ufw delete allow 8000/tcp
ufw delete allow 6001/tcp
ufw delete allow 6002/tcpPor 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):
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.

Esta es la plantilla que Coolify carga (resumida):
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_*ySERVICE_BASE64_KEYson 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_80le 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_KEYes 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.

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.

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:
php artisan app:init
php artisan db:seed --class=CustomPropertySeeder --force
php artisan app:user:createQué hace cada uno y qué te pregunta:
app:initpide el nombre de la empresa y la URL pública, que debe empezar porhttps://(por ejemplohttps://billing.tudominio.com). Los guarda comocompany_nameyapp_url. Si te equivocas, puedes volver a ejecutarlo: sobrescribe los dos valores.db:seed --class=CustomPropertySeedercrea los campos de facturación del cliente (teléfono, empresa, dirección, ciudad, provincia, código postal y país).app:user:createpide 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:
PAYMENTER=$(docker ps --filter 'name=^paymenter-' --format '{{.Names}}' | head -n1)
docker exec -it "$PAYMENTER" php artisan app:init

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

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

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:
docker exec -it "$PAYMENTER" php artisan schedule:list
docker exec -it "$PAYMENTER" supervisorctl -c /etc/supervisord.conf statusDeberí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:
- Base de datos: en el menú lateral del servicio entra en Automation, pulsa + Add Backup, elige Database backup sobre
mariadby prográmalo a diario (por ejemplo0 3 * * *). En Settings → S3 Storages puedes añadir un bucket S3, incluido el Object Storage de Contabo, para que las copias salgan del VPS. - 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.

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í:
dig +short billing.tudominio.comEn 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
- 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.
- 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.
- 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:
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
// stack referenciado
// implementación