Skip to content

amis13/funding-fee

Repository files navigation

💸 Funding-Fee Dashboard

🧠 Self-Hosted Deployment with Docker, NGINX Proxy & Let’s Encrypt SSL


Web: https://fundingfees.web3crypt.net

⚙️ Overview

Funding-Fee Dashboard es una aplicación Next.js autoalojada diseñada para mostrar y actualizar en tiempo real las funding rates de protocolos como Lighter, Hyperliquid, Paradex y Pacifica.

Se ejecuta en tu propio servidor Ubuntu, con un backend que guarda los datos localmente en SQLite y un sistema de actualización automatizado cada hora mediante systemd.

Todo está contenedorizado y asegurado con:

  • 🐳 Docker Compose
  • 🌐 NGINX Proxy (Reverse Proxy Automático)
  • 🔒 Certificados SSL de Let’s Encrypt
  • Dominio personalizado y HTTPS completo
  • 🧠 Updater automático con systemd

🧩 Directory Structure


/opt/funding-fee
├── app/                     # Next.js source code
├── dist-updater/            # Código compilado del updater
├── funding.db               # Base de datos persistente SQLite
├── Dockerfile               # Build instructions
├── docker-compose.yml       # Orquestación de servicios
├── run-updater.sh           # Script systemd de actualización
├── updater.log              # Registro de actualizaciones
└── ...


🚀 Deployment Steps

1️⃣ Instalación de dependencias

sudo apt update && sudo apt install -y \
  curl git docker.io docker-compose-plugin

Opcional (para compilar en local):

curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
nvm install 22
nvm use 22

2️⃣ Clonar el repositorio

cd /opt
git clone https://github.com/amis13/funding-fee.git
cd funding-fee

Limpia posibles instalaciones previas:

rm -rf node_modules package-lock.json pnpm-lock.yaml

3️⃣ Dockerfile — Multi-stage Build

Optimizado para Next.js en producción:

# Etapa 1: Build
FROM node:22-slim AS builder
RUN apt-get update && apt-get install -y python3 make g++ sqlite3 && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY . .
RUN npm install --legacy-peer-deps && npm run build

# Etapa 2: Producción
FROM node:22-slim
RUN apt-get update && apt-get install -y sqlite3 && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=builder /app ./
ENV NODE_ENV=production
EXPOSE 3000
CMD ["npm", "run", "start"]

4️⃣ docker-compose.yml

Define tres contenedores:

  • 🧠 funding-fee → la aplicación Next.js
  • 🌐 funding-proxy → proxy inverso NGINX
  • 🔒 funding-letsencrypt → emisión y renovación automática SSL
services:
  funding-fee:
    build: .
    container_name: funding-fee
    restart: always
    environment:
      - NODE_ENV=production
      - PORT=3000
      - VIRTUAL_HOST=fundingfees.web3crypt.net
      - LETSENCRYPT_HOST=fundingfees.web3crypt.net
      - LETSENCRYPT_EMAIL=amis13og@web3crypt.net
      - FUNDING_DB_PATH=/data/funding.db
    expose:
      - "3000"
    volumes:
      - ./funding.db:/data/funding.db
    networks:
      - funding-net
    depends_on:
      - nginx-proxy

  nginx-proxy:
    image: nginxproxy/nginx-proxy:alpine
    container_name: funding-proxy
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - certs:/etc/nginx/certs
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
    networks:
      - funding-net

  letsencrypt:
    image: nginxproxy/acme-companion
    container_name: funding-letsencrypt
    restart: always
    environment:
      - DEFAULT_EMAIL=amis13og@web3crypt.net
      - NGINX_PROXY_CONTAINER=funding-proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - certs:/etc/nginx/certs
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
    depends_on:
      - nginx-proxy
    networks:
      - funding-net

volumes:
  certs:
  vhost:
  html:

networks:
  funding-net:
    driver: bridge

5️⃣ Configurar el dominio

En tu panel DNS:

A record → fundingfees.web3crypt.net → tu_IP_pública

Y en tu router, habilita el reenvío de puertos:

WAN Port LAN Port IP Interna Protocolo
80 80 192.168.1.150 TCP
443 443 192.168.1.150 TCP

⚠️ Asegúrate de que el servidor tenga IP LAN estática.


6️⃣ Desplegar el stack

docker compose up -d --build

Esto construirá la imagen, levantará los contenedores y solicitará automáticamente tu certificado SSL.


7️⃣ Verificar emisión de SSL

docker logs -f funding-letsencrypt

Busca el mensaje:

fundingfees.web3crypt.net: Verify success.
Certificate successfully issued.

8️⃣ Acceder al dashboard

Una vez emitido el certificado:

https://fundingfees.web3crypt.net

✅ HTTPS activo ✅ Base de datos persistente ✅ Certificados auto-renovables


⏱️ Systemd Auto-Updater

El updater cada hora usa un servicio systemd + timer.

Archivo del servicio: /etc/systemd/system/funding-updater.service

[Unit]
Description=Funding Fee Updater - Refresh funding data hourly
After=network.target

[Service]
Type=simple
ExecStart=/opt/funding-fee/run-updater.sh
WorkingDirectory=/opt/funding-fee
StandardOutput=append:/opt/funding-fee/updater.log
StandardError=append:/opt/funding-fee/updater.log
User=amis13
Restart=on-failure

Timer: /etc/systemd/system/funding-updater.timer

[Unit]
Description=Run Funding Fee Updater every hour

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target

Activación:

sudo systemctl daemon-reload
sudo systemctl enable --now funding-updater.timer

Verifica logs:

tail -f /opt/funding-fee/updater.log

🧠 Troubleshooting

Problema Causa Solución
Timeout during connect Puerto 80 bloqueado Verifica NAT o firewall
Invalid status en letsencrypt DNS o redirección incorrecta Confirma que fundingfees.web3crypt.net apunte al servidor
Certificado no se instala Error en nginx-proxy Reinicia funding-proxy y revisa logs
No guarda datos Permisos en funding.db chmod 664 funding.db y chown $USER:$USER

🔍 Useful Commands

# Ver contenedores activos
docker ps

# Logs principales
docker logs -f funding-proxy
docker logs -f funding-letsencrypt
docker logs -f funding-fee

# Reiniciar todo
docker compose down -v
docker compose up -d --build

🧱 Infraestructura

Componente Descripción
Frontend Next.js 15 (Node 22)
Base de datos SQLite (persistente)
Proxy nginx-proxy + acme-companion
SSL Let’s Encrypt (auto-renewal)
Updater systemd timer (cada hora)
Host OS Ubuntu 22 / 24 LTS

🧩 Result

Funding-Fee Dashboard 🟢 Self-hosted 🔐 HTTPS + SSL automático ⚙️ Actualización horaria ☁️ Cero dependencias externas


🛠️ Maintained by @amis13

⭐ Si te resultó útil, deja una estrella en el repositorio.

About

funding fee dashboard

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors