Add systemd auto-start services + realistic feature updates
Some checks failed
CI / Frontend Lint & Type Check (push) Has been cancelled
CI / Frontend Build (push) Has been cancelled
CI / Backend Lint (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Docker Build (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
Deploy / Build & Push Images (push) Has been cancelled
Deploy / Deploy to Server (push) Has been cancelled
Deploy / Notify (push) Has been cancelled
Some checks failed
CI / Frontend Lint & Type Check (push) Has been cancelled
CI / Frontend Build (push) Has been cancelled
CI / Backend Lint (push) Has been cancelled
CI / Backend Tests (push) Has been cancelled
CI / Docker Build (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
Deploy / Build & Push Images (push) Has been cancelled
Deploy / Deploy to Server (push) Has been cancelled
Deploy / Notify (push) Has been cancelled
This commit is contained in:
@ -93,7 +93,7 @@ TIER_CONFIG = {
|
||||
"portfolio_limit": -1, # Unlimited portfolio
|
||||
"listing_limit": -1, # Unlimited listings
|
||||
"sniper_limit": 50, # Sniper alerts
|
||||
"check_frequency": "realtime", # Every 10 minutes
|
||||
"check_frequency": "5min", # Every 5 minutes (was 10min)
|
||||
"history_days": -1, # Unlimited
|
||||
"features": {
|
||||
"email_alerts": True,
|
||||
|
||||
@ -44,11 +44,7 @@ LOG_FILE = Path("/home/user/logs/zone_sync.log")
|
||||
COMPRESS_DOMAIN_LISTS = True
|
||||
|
||||
# CZDS TLDs we have access to
|
||||
# NOTE: .org and .xyz are temporarily disabled - too large for 2GB RAM server
|
||||
# .org = 10M+ domains (~500MB RAM), .xyz = 8M+ domains (~400MB RAM)
|
||||
# Enable when server has more RAM or we implement streaming to SQLite
|
||||
CZDS_TLDS = ["app", "dev", "info", "online"] # Small/medium TLDs only
|
||||
CZDS_TLDS_DISABLED = ["org", "xyz"] # Too large for current server
|
||||
CZDS_TLDS = ["app", "dev", "info", "online", "org", "xyz"]
|
||||
|
||||
# Switch.ch AXFR config
|
||||
SWITCH_CONFIG = {
|
||||
|
||||
@ -65,7 +65,7 @@ const tiers = [
|
||||
description: 'Full firepower. No limits.',
|
||||
features: [
|
||||
{ text: 'Market Feed', highlight: true, available: true, sublabel: 'Priority' },
|
||||
{ text: 'Alert Speed', highlight: true, available: true, sublabel: '10 min' },
|
||||
{ text: 'Alert Speed', highlight: true, available: true, sublabel: '5 min' },
|
||||
{ text: 'Unlimited Watchlist', highlight: true, available: true },
|
||||
{ text: 'Unlimited Portfolio', highlight: true, available: true },
|
||||
{ text: 'Unlimited Listings', highlight: true, available: true, sublabel: 'Featured' },
|
||||
@ -83,7 +83,7 @@ const tiers = [
|
||||
|
||||
const comparisonFeatures = [
|
||||
{ name: 'Market Feed', scout: 'Raw', trader: 'Curated', tycoon: 'Priority + Early' },
|
||||
{ name: 'Alert Speed', scout: 'Daily', trader: 'Hourly', tycoon: 'Every 10 min' },
|
||||
{ name: 'Alert Speed', scout: 'Daily', trader: 'Hourly', tycoon: 'Every 5 min' },
|
||||
{ name: 'Watchlist', scout: '10 Domains', trader: '100 Domains', tycoon: 'Unlimited' },
|
||||
{ name: 'Portfolio', scout: '3 Domains', trader: '50 Domains', tycoon: 'Unlimited' },
|
||||
{ name: 'Listings', scout: '1 (Try it)', trader: '10 (0% Fee)', tycoon: 'Unlimited + Featured' },
|
||||
@ -98,7 +98,7 @@ const comparisonFeatures = [
|
||||
const faqs = [
|
||||
{
|
||||
q: 'How fast will I know when a domain drops?',
|
||||
a: 'Depends on your plan. Scout: daily. Trader: hourly. Tycoon: every 10 minutes. When it drops, you\'ll know.',
|
||||
a: 'Depends on your plan. Scout: daily. Trader: hourly. Tycoon: every 5 minutes. When it drops, you\'ll know.',
|
||||
},
|
||||
{
|
||||
q: 'What\'s domain valuation?',
|
||||
|
||||
@ -466,21 +466,6 @@ export default function YieldPage() {
|
||||
</button>
|
||||
</section>
|
||||
|
||||
{/* FEATURE IN DEVELOPMENT BANNER */}
|
||||
<section className="px-4 lg:px-10 pt-4">
|
||||
<div className="bg-amber-400/10 border border-amber-400/20 p-4 text-amber-400 flex items-center gap-3">
|
||||
<Sparkles className="w-5 h-5 shrink-0" />
|
||||
<div>
|
||||
<h2 className="text-sm font-bold uppercase tracking-wider flex items-center gap-2">
|
||||
Feature in Development <span className="px-2 py-0.5 text-[8px] font-mono bg-amber-400/20 text-amber-400 border border-amber-400/30">Coming Soon</span>
|
||||
</h2>
|
||||
<p className="text-xs font-mono mt-1 text-amber-400/80">
|
||||
We're building an automated yield system for your parked domains. Soon you'll be able to monetize idle domains with intelligent traffic routing. Stay tuned for updates!
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* CONTENT */}
|
||||
<section className="px-4 lg:px-10 py-4 pb-28 lg:pb-10">
|
||||
{loading ? (
|
||||
|
||||
96
systemd/install-services.sh
Executable file
96
systemd/install-services.sh
Executable file
@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ============================================================================
|
||||
# POUNCE SYSTEMD SERVICE INSTALLER
|
||||
# Run this script to install auto-start services on the server
|
||||
# ============================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
SERVER_USER="user"
|
||||
SERVER_HOST="10.42.0.73"
|
||||
SERVER_PASS="user"
|
||||
SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
|
||||
|
||||
if ! command -v sshpass >/dev/null 2>&1; then
|
||||
echo "sshpass is required but not installed. Install with: brew install sshpass"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${BLUE} POUNCE SYSTEMD SERVICE INSTALLER ${NC}"
|
||||
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
|
||||
|
||||
# Get script directory
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
|
||||
echo -e "\n${YELLOW}[1/4] Copying service files to server...${NC}"
|
||||
sshpass -p "$SERVER_PASS" scp $SSH_OPTS "$SCRIPT_DIR/pounce-backend.service" "$SERVER_USER@$SERVER_HOST:/tmp/"
|
||||
sshpass -p "$SERVER_PASS" scp $SSH_OPTS "$SCRIPT_DIR/pounce-frontend.service" "$SERVER_USER@$SERVER_HOST:/tmp/"
|
||||
echo " ✓ Service files copied"
|
||||
|
||||
echo -e "\n${YELLOW}[2/4] Installing services (requires sudo)...${NC}"
|
||||
sshpass -p "$SERVER_PASS" ssh $SSH_OPTS "$SERVER_USER@$SERVER_HOST" << 'EOF'
|
||||
# Move service files to systemd directory
|
||||
echo "user" | sudo -S cp /tmp/pounce-backend.service /etc/systemd/system/
|
||||
echo "user" | sudo -S cp /tmp/pounce-frontend.service /etc/systemd/system/
|
||||
|
||||
# Set correct permissions
|
||||
echo "user" | sudo -S chmod 644 /etc/systemd/system/pounce-backend.service
|
||||
echo "user" | sudo -S chmod 644 /etc/systemd/system/pounce-frontend.service
|
||||
|
||||
echo " ✓ Service files installed"
|
||||
EOF
|
||||
|
||||
echo -e "\n${YELLOW}[3/4] Stopping existing processes...${NC}"
|
||||
sshpass -p "$SERVER_PASS" ssh $SSH_OPTS "$SERVER_USER@$SERVER_HOST" << 'EOF'
|
||||
# Kill existing nohup processes
|
||||
pkill -f 'uvicorn app.main:app' 2>/dev/null || true
|
||||
pkill -f 'node .next/standalone/server.js' 2>/dev/null || true
|
||||
sleep 2
|
||||
echo " ✓ Existing processes stopped"
|
||||
EOF
|
||||
|
||||
echo -e "\n${YELLOW}[4/4] Enabling and starting services...${NC}"
|
||||
sshpass -p "$SERVER_PASS" ssh $SSH_OPTS "$SERVER_USER@$SERVER_HOST" << 'EOF'
|
||||
# Reload systemd daemon
|
||||
echo "user" | sudo -S systemctl daemon-reload
|
||||
|
||||
# Enable services (auto-start on boot)
|
||||
echo "user" | sudo -S systemctl enable pounce-backend
|
||||
echo "user" | sudo -S systemctl enable pounce-frontend
|
||||
|
||||
# Start services
|
||||
echo "user" | sudo -S systemctl start pounce-backend
|
||||
sleep 3
|
||||
echo "user" | sudo -S systemctl start pounce-frontend
|
||||
sleep 2
|
||||
|
||||
# Check status
|
||||
echo ""
|
||||
echo " Backend status:"
|
||||
systemctl status pounce-backend --no-pager -l | head -15 || true
|
||||
echo ""
|
||||
echo " Frontend status:"
|
||||
systemctl status pounce-frontend --no-pager -l | head -15 || true
|
||||
EOF
|
||||
|
||||
echo -e "\n${GREEN}═══════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e "${GREEN} ✅ SERVICES INSTALLED! ${NC}"
|
||||
echo -e "${GREEN}═══════════════════════════════════════════════════════════════${NC}"
|
||||
echo -e ""
|
||||
echo -e " Services will now auto-start after server reboot."
|
||||
echo -e ""
|
||||
echo -e "${BLUE}Useful commands (run on server):${NC}"
|
||||
echo -e " sudo systemctl status pounce-backend"
|
||||
echo -e " sudo systemctl status pounce-frontend"
|
||||
echo -e " sudo systemctl restart pounce-backend"
|
||||
echo -e " sudo systemctl restart pounce-frontend"
|
||||
echo -e " journalctl -u pounce-backend -f"
|
||||
echo -e " journalctl -u pounce-frontend -f"
|
||||
|
||||
24
systemd/pounce-backend.service
Normal file
24
systemd/pounce-backend.service
Normal file
@ -0,0 +1,24 @@
|
||||
[Unit]
|
||||
Description=Pounce Backend API (FastAPI/Uvicorn)
|
||||
After=network.target postgresql.service
|
||||
Wants=postgresql.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=user
|
||||
Group=user
|
||||
WorkingDirectory=/home/user/pounce/backend
|
||||
Environment="PATH=/home/user/pounce/backend/venv/bin:/usr/local/bin:/usr/bin:/bin"
|
||||
ExecStart=/home/user/pounce/backend/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
StandardOutput=append:/home/user/pounce/backend/backend.log
|
||||
StandardError=append:/home/user/pounce/backend/backend.log
|
||||
|
||||
# Hardening
|
||||
NoNewPrivileges=true
|
||||
PrivateTmp=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
27
systemd/pounce-frontend.service
Normal file
27
systemd/pounce-frontend.service
Normal file
@ -0,0 +1,27 @@
|
||||
[Unit]
|
||||
Description=Pounce Frontend (Next.js Standalone)
|
||||
After=network.target pounce-backend.service
|
||||
Wants=pounce-backend.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=user
|
||||
Group=user
|
||||
WorkingDirectory=/home/user/pounce/frontend
|
||||
Environment="NODE_ENV=production"
|
||||
Environment="HOSTNAME=0.0.0.0"
|
||||
Environment="PORT=3000"
|
||||
Environment="BACKEND_URL=http://127.0.0.1:8000"
|
||||
ExecStart=/usr/bin/node /home/user/pounce/frontend/.next/standalone/server.js
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
StandardOutput=append:/home/user/pounce/frontend/frontend.log
|
||||
StandardError=append:/home/user/pounce/frontend/frontend.log
|
||||
|
||||
# Hardening
|
||||
NoNewPrivileges=true
|
||||
PrivateTmp=true
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
Reference in New Issue
Block a user