DEV Community

Daniel Ioni
Daniel Ioni

Posted on

๐Ÿš€ Deploying the Complete MyZubster Ecosystem on a VPS: Gateway, Marketplace, Frontend, and AI-Powered Security

 ๐Ÿš€ Deploying the Complete MyZubster Ecosystem on a VPS: Gateway, Marketplace, Frontend, and AI-Powered Security

How I built a full decentralized marketplace with Monero payments, Docker, Nginx, and an AI security botโ€”all on a single VPS.
๐ŸŒฑ The Vision

MyZubster is an open-source ecosystem for a decentralized marketplace that uses Monero (XMR) as its primary currency to guarantee privacy and security. The architecture consists of four core components:

Gateway: Monero payment engine (Node.js + MongoDB)

Marketplace: RESTful API backend (Node.js + SQLite)

Frontend: React/Vite web interface served via Nginx

Security Bot: Automated vulnerability scanning with Kali Linux tools and DeepSeek AI (Ollama)
Enter fullscreen mode Exit fullscreen mode

This post documents my journey deploying the entire system on a VPS, from initial configuration to final validation, including the integration of an AI-powered security bot.
๐Ÿ—บ๏ธ Roadmap and Priorities
Priority Task Status
๐Ÿ”ด High Deploy Gateway with Docker in production โœ… Completed
๐Ÿ”ด High Connect Marketplace to Gateway โœ… Completed
๐ŸŸก Medium Deploy Frontend with Nginx โœ… Completed
๐ŸŸก Medium Integrate Security Bot with DeepSeek AI โœ… Completed
๐ŸŸข Low Deploy NFT template on Tari In Progress
๐Ÿ› ๏ธ Technology Stack
Layer Technology Purpose
Languages JavaScript (Node.js), Python (Security Bot), Rust (NFTs) Backend, automation, blockchain
Databases MongoDB (gateway), SQLite (marketplace) Transactional data, user data
Containerization Docker & Docker Compose Reproducible deployments
Blockchain Monero (mainnet), Tari Private payments, NFT assets
Security Kali Linux, nmap, nikto, sqlmap, gobuster, DeepSeek (Ollama) Vulnerability scanning, AI analysis
Frontend React + Vite Modern web interface
Web Server Nginx with Let's Encrypt SSL Reverse proxy and HTTPS
๐Ÿ”ง Step 1: Gateway Configuration
1.1 Dockerfile
dockerfile

FROM node:20-slim AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force
COPY . .

FROM node:20-slim
RUN groupadd -r myzubster && useradd -r -g myzubster myzubster
WORKDIR /app
COPY --from=builder --chown=myzubster:myzubster /app/node_modules ./node_modules
COPY --from=builder --chown=myzubster:myzubster /app ./
EXPOSE 3000
USER myzubster
CMD ["node", "server.js"]

1.2 docker-compose.yml
yaml

services:
mongodb:
image: mongo:7-jammy
container_name: myzubster-mongodb
restart: unless-stopped
environment:
MONGO_INITDB_ROOT_USERNAME: ${MONGO_USER:-admin}
MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD:-securepassword}
volumes:
- mongodb_data:/data/db
ports:
- "27018:27017"
networks:
- myzubster-network
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"]
interval: 30s
timeout: 10s
retries: 5

gateway:
build:
context: .
dockerfile: Dockerfile
container_name: myzubster-gateway
restart: unless-stopped
environment:
- NODE_ENV=${NODE_ENV:-production}
- PORT=${PORT:-3000}
- MONGO_URI=mongodb://${MONGO_USER:-admin}:${MONGO_PASSWORD:-securepassword}@mongodb:27017/myzubster?authSource=admin
- MONERO_RPC_URL=${MONERO_RPC_URL:-http://node.moneroworld.com:18081}
- MONERO_NETWORK=${MONERO_NETWORK:-mainnet}
- JWT_SECRET=${JWT_SECRET}
- API_KEY=${API_KEY}
ports:
- "3001:3000"
depends_on:
mongodb:
condition: service_healthy
networks:
- myzubster-network
volumes:
- ./public:/app/public
- gateway_logs:/app/logs

volumes:
mongodb_data:
driver: local
gateway_logs:
driver: local

networks:
myzubster-network:
driver: bridge

Why port 3001? I mapped internal port 3000 to external port 3001 to avoid conflicts with other services.
๐Ÿ”— Step 2: Connecting the Marketplace

The marketplace is a separate Node.js application that connects to the gateway for payment processing and order management.
2.1 Marketplace .env Configuration
env

PORT=4000
NODE_ENV=production
DB_DIALECT=sqlite
DB_STORAGE=./data/marketplace.sqlite
MYZUBSTER_API_URL=http://localhost:3001/api
MYZUBSTER_API_TOKEN=your_api_token
MONERO_NETWORK=mainnet
MONERO_RPC_URL=http://node.moneroworld.com:18081
MONERO_WALLET_ADDRESS=your_wallet_address
MONERO_WALLET_PASSWORD=your_wallet_password
MONERO_MIN_CONFIRMATIONS=10
JWT_SECRET=your_jwt_secret
JWT_EXPIRES_IN=7d

2.2 Launch and Verify
bash

cd ~/MyZubster-Marketplace
npm install
node server.js &

curl http://localhost:4000/api/health

{"status":"ok","service":"MyZubster-Marketplace","database":"sqlite"}

curl http://localhost:4000/api/gateway/status

{"gateway":{"status":"ok"},"status":"connected"}

๐ŸŒ Step 3: Deploying the Frontend with Nginx
3.1 Nginx Configuration
nginx

/etc/nginx/sites-available/myzubster-ip

server {
listen 80;
server_name your-vps-ip;

root /var/www/myzubster-frontend;
index index.html;

location / {
    try_files $uri $uri/ /index.html;
}

location /api/ {
    proxy_pass http://localhost:3001/api/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}
Enter fullscreen mode Exit fullscreen mode

}

3.2 HTTPS with Let's Encrypt
bash

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d myzubster.com -d www.myzubster.com

๐Ÿ›ก๏ธ Step 4: AI-Powered Security Bot

I integrated a security bot that performs automated vulnerability scanning using Kali Linux tools and analyzes results with DeepSeek AI running locally via Ollama.
4.1 Security Bot Architecture
python

!/usr/bin/env python3

import subprocess
import json
import logging
import datetime
import requests

LOG_FILE = "/var/log/security_bot.log"
DEEPSEEK_URL = "http://localhost:11434/api/generate"
DEEPSEEK_MODEL = "deepseek-r1:1.5b"

def run_nmap():
return subprocess.run("nmap -sV --script=default localhost",
shell=True, capture_output=True, text=True).stdout

def run_nikto():
return subprocess.run("nikto -h https://myzubster.com -ssl -Format json",
shell=True, capture_output=True, text=True).stdout

def run_sqlmap():
return subprocess.run("sqlmap -u localhost --batch --level=1 --risk=1",
shell=True, capture_output=True, text=True).stdout

def run_gobuster():
return subprocess.run("gobuster dir -u localhost -w /usr/share/wordlists/dirb/common.txt -t 50",
shell=True, capture_output=True, text=True).stdout

def analyze_with_deepseek(results):
response = requests.post(DEEPSEEK_URL, json={
"model": DEEPSEEK_MODEL,
"prompt": f"Analyze these security scan results and identify vulnerabilities:\n{results}",
"stream": False
})
return response.json().get("response", "No response")

4.2 Install DeepSeek with Ollama
bash

Install Ollama

curl -fsSL https://ollama.com/install.sh | sh

Download DeepSeek model

ollama pull deepseek-r1:1.5b

Run the security bot

cd ~/MyZubsterGateway/security
nohup python3 security_bot.py > /var/log/security_bot.log 2>&1 &

4.3 Sample Security Report

The bot generates comprehensive JSON reports:
json

{
"timestamp": "2026-07-25T19:29:49.080367",
"target": "localhost",
"scans": {
"nmap": "22/tcp open ssh OpenSSH 9.6p1...",
"nikto": "No vulnerabilities found...",
"sqlmap": "All tested parameters are not injectable...",
"gobuster": "/api (Status: 301)..."
},
"deepseek_analysis": "Security analysis complete. No critical vulnerabilities found."
}

โœ… Final Results

After completing the deployment, all services were operational:
Service Endpoint Status
Gateway /api/health {"status":"ok"}
Marketplace /api/health {"status":"ok"}
Integration /api/gateway/status "connected"
Frontend / HTTPS 200 OK
Security Bot Cron job โœ… Running hourly
DeepSeek AI Ollama โœ… Active
System Overview
text

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ MyZubster VPS Infrastructure โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Frontend โ”‚ โ”‚ Gateway โ”‚ โ”‚ Marketplace โ”‚ โ”‚ Security Bot โ”‚ โ”‚
โ”‚ โ”‚ (Nginx) โ”‚โ”€โ”€โ–ถ (Port 3001) โ”‚โ—„โ”€โ”ค (Port 4000) โ”‚ โ”‚ - nmap โ”‚ โ”‚
โ”‚ โ”‚ Port 443 โ”‚ โ”‚ - MongoDB โ”‚ โ”‚ - SQLite โ”‚ โ”‚ - nikto โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ - sqlmap โ”‚ โ”‚
โ”‚ โ”‚ โ”‚ โ”‚ - gobuster โ”‚ โ”‚
โ”‚ โ–ผ โ–ผ โ”‚ - DeepSeek AI โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ Monero Node (node.moneroworld) โ”‚ โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ–ผ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Ollama โ”‚ โ”‚
โ”‚ โ”‚ DeepSeek โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ’ก Lessons Learned

Docker simplifies deployment โ€“ Containerizing the gateway made the process reproducible, scalable, and easier to manage.

Environment variables are critical โ€“ Separating configuration from code is essential for security and flexibility.

Monero payment monitoring requires a reliable node โ€“ Using node.moneroworld.com as a public node worked well for testing; consider self-hosting for production.

Integration is seamless โ€“ The REST API communication between gateway and marketplace works without issues.

Nginx with Let's Encrypt โ€“ Adding HTTPS with Certbot was straightforward and essential for production.

AI-powered security is a game changer โ€“ DeepSeek running locally via Ollama provides intelligent vulnerability analysis without sending data to third parties.

Security automation saves time โ€“ The security bot runs hourly and produces detailed reports, reducing manual monitoring.
Enter fullscreen mode Exit fullscreen mode

๐Ÿ”ฎ Next Steps

Deploy the Mobile App to Google Play Store

Integrate NFC payments for physical interactions

Implement DAO Governance for community decisions

Complete Security Audit with third-party tools

Add more NFT functionality for real-world asset tokenization
Enter fullscreen mode Exit fullscreen mode

๐Ÿ“š Repository & Documentation

All code is available on GitHub:

Gateway: DanielIoni-creator/MyZubsterGateway

Marketplace: DanielIoni-creator/MyZubster-Marketplace

Frontend: DanielIoni-creator/myzubster-frontend

Mobile App: DanielIoni-creator/MyZubster-App

NFT Template: DanielIoni-creator/tari-nft-template
Enter fullscreen mode Exit fullscreen mode

๐Ÿค Contribute

If you're interested in blockchain, privacy-first payments, or decentralized markets, contribute to the repositories on GitHub or open an issue to discuss new features.

Key areas for contribution:

Frontend: Improve the admin dashboard

Testing: Add webhook integration tests

Documentation: Write tutorials for new users

Security: Conduct penetration testing
Enter fullscreen mode Exit fullscreen mode

๐ŸŒ Connect with Me

Follow the development of MyZubster and connect with me on social media:

Blog & Articles: DEV.to - Daniel Ioni

X (Twitter): @myzubster

LinkedIn: Daniel Ioni

GitHub: DanielIoni-creator

TikTok: @h4x0r_23
Enter fullscreen mode Exit fullscreen mode

Built with โค๏ธ for Monero, Tari, and the open-source community. ๐ŸŒฑ

Originally published on DEV.to
๐Ÿ“‹ Quick Reference: All Commands Used
bash

Deploy Gateway

cd ~/MyZubsterGateway
docker compose up -d --build

Deploy Marketplace

cd ~/MyZubster-Marketplace
npm install
node server.js &

Deploy Frontend

cd ~/myzubster-frontend
npm run build
sudo cp -r dist/* /var/www/myzubster-frontend/
sudo systemctl restart nginx

Install DeepSeek AI

curl -fsSL https://ollama.com/install.sh | sh
ollama pull deepseek-r1:1.5b

Run Security Bot

cd ~/MyZubsterGateway/security
nohup python3 security_bot.py > /var/log/security_bot.log 2>&1 &

Verify Integration

curl http://localhost:4000/api/gateway/status

Top comments (0)