littleshop/DEVELOPMENT_BRANCH_DEPLOYMENT.md

9.5 KiB

Development Branch Deployment Guide

Created: 2025-10-10 Branch: development Status: Ready for testing

Recent Changes (Commit: 7008a95)

Bot Management Improvements

  • Fixed duplicate bot registration issue

    • TeleBot now checks for existing bot by Telegram username before registering
    • Prevents multiple database entries on container restarts
    • Auto-populates platform info (username, display name, platform ID)
  • Added wallet configuration system

    • UI for managing cryptocurrency wallet addresses
    • Supports: BTC, XMR, LTC, DOGE, ETH, ZEC, DASH
    • Stored in Bot.Settings.wallets JSON field
    • Used as fallback when payment gateway unavailable
  • Added duplicate detection utility

    • Admin Bot Index page detects duplicates by platform username
    • Visual cleanup interface with one-click delete
    • Highlights most recent entry to keep

Files Modified

LittleShop/
├── Controllers/BotsController.cs (new API endpoint)
├── Services/BotService.cs (lookup by platform)
├── Services/IBotService.cs (interface update)
├── DTOs/BotDto.cs (wallet DTOs)
├── Areas/Admin/Controllers/BotsController.cs (UpdateWallets action)
├── Areas/Admin/Views/Bots/Edit.cshtml (wallet UI)
└── Areas/Admin/Views/Bots/Index.cshtml (duplicate detection)

TeleBot/
└── Services/BotManagerService.cs (duplicate prevention logic)

Current Deployment Infrastructure

Production Environment

  • VPS: srv1002428.hstgr.cloud (Hostinger)
  • SSH Port: 2255
  • Deployment Path: /opt/littleshop
  • GitLab CI/CD: Auto-deploys on main branch push
  • Docker Registry: localhost:5000
  • Networks:
    • littleshop_littleshop-network (LittleShop API)
    • silverpay_silverpay-network (Payment gateway + TeleBot)

Development Environment

Currently Not Configured

GitLab CI only triggers on main branch:

rules:
  - if: '$CI_COMMIT_BRANCH == "main"'

Testing Options

Quick validation of bot management changes:

# Build and start local environment
cd /mnt/c/Production/Source/LittleShop
docker-compose up --build -d

# View logs
docker logs littleshop -f

# In another terminal, monitor TeleBot
docker logs telebot-service -f

# Test bot restart behavior (verify no duplicates created)
docker restart telebot-service

# Check Admin Panel
# Navigate to: http://localhost:5100/Admin/Bots
# Login: admin / admin

What to Test:

  1. Bot registration on first startup
  2. No duplicate entry on container restart
  3. Wallet configuration UI in Bot Edit page
  4. Duplicate detection banner (if existing duplicates)
  5. Duplicate cleanup functionality

Stop When Done:

docker-compose down

Option 2: Manual Development Deployment on VPS 📦

Deploy alongside production for real-world testing:

Setup Script

#!/bin/bash
# deploy-development.sh - Deploy development branch to VPS

VPS_HOST="srv1002428.hstgr.cloud"
VPS_PORT="2255"
VPS_USER="sysadmin"
DEV_PORT_API="5101"
DEV_PORT_TELEBOT="5011"

ssh -i ~/.ssh/littleshop_deploy_key -p $VPS_PORT $VPS_USER@$VPS_HOST << 'EOF'
  set -e

  # Create development directory
  sudo mkdir -p /opt/littleshop-dev
  cd /opt/littleshop-dev

  # Pull latest development branch
  git clone -b development https://gitlab.silverlabs.uk/Jamie/littleshop.git . || git pull origin development

  # Create dev docker-compose
  cat > docker-compose.dev.yml << 'COMPOSE'
version: '3.8'

services:
  littleshop-dev:
    build: .
    image: localhost:5000/littleshop:dev
    container_name: littleshop-dev
    restart: unless-stopped
    ports:
      - "127.0.0.1:5101:5000"
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=http://+:5000
      - ConnectionStrings__DefaultConnection=Data Source=/app/data/littleshop-dev.db
    volumes:
      - littleshop_dev_data:/app/data
      - littleshop_dev_uploads:/app/wwwroot/uploads
    networks:
      - littleshop-dev-network

volumes:
  littleshop_dev_data:
  littleshop_dev_uploads:

networks:
  littleshop-dev-network:
    driver: bridge
COMPOSE

  # Build and start
  docker-compose -f docker-compose.dev.yml up --build -d

  echo "✅ Development environment deployed:"
  echo "   API: http://localhost:5101"
  echo "   Admin: http://localhost:5101/Admin"
EOF

Deploy:

chmod +x deploy-development.sh
./deploy-development.sh

Access Development Environment:


Option 3: GitLab CI Development Pipeline 🔧

For automated development deployments:

Modify .gitlab-ci.yml

Add this job after deploy:vps:

deploy:development:
  stage: deploy
  image: docker:24
  before_script:
    - apk add --no-cache openssh-client bash curl
    - echo "$VPS_SSH_KEY_B64" | base64 -d > /tmp/deploy_key
    - chmod 600 /tmp/deploy_key
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan -p "$VPS_PORT" "$VPS_HOST" >> ~/.ssh/known_hosts
  script:
    - export VERSION="dev-${CI_COMMIT_SHORT_SHA}"
    - echo "Deploying development version $VERSION to VPS"

    # Build development images
    - docker build --no-cache -t littleshop:$VERSION .
    - docker build --no-cache -t telebot:$VERSION -f Dockerfile.telebot .

    # Copy to VPS
    - docker save littleshop:$VERSION | ssh -i /tmp/deploy_key -p "$VPS_PORT" "$VPS_USER@$VPS_HOST" "docker load"
    - docker save telebot:$VERSION | ssh -i /tmp/deploy_key -p "$VPS_PORT" "$VPS_USER@$VPS_HOST" "docker load"

    # Deploy to development namespace
    - |
      ssh -i /tmp/deploy_key -p "$VPS_PORT" "$VPS_USER@$VPS_HOST" bash -s << EOF
      set -e
      export VERSION="$VERSION"

      cd /opt/littleshop-dev

      # Tag as dev
      docker tag littleshop:\$VERSION localhost:5000/littleshop:dev
      docker tag telebot:\$VERSION localhost:5000/telebot:dev

      # Stop existing dev containers
      docker stop littleshop-dev telebot-dev 2>/dev/null || true
      docker rm littleshop-dev telebot-dev 2>/dev/null || true

      # Start with dev compose file
      docker-compose -f docker-compose.dev.yml up -d

      # Health check
      sleep 10
      curl -f http://localhost:5101/api/catalog/products || exit 1
      echo "✅ Development deployment successful"
      EOF      
  environment:
    name: development
    url: http://dev.hq.lan:5101
  rules:
    - if: '$CI_COMMIT_BRANCH == "development"'
      when: on_success
  tags:
    - docker

Testing Checklist

Functional Testing

  • Bot starts without errors
  • Bot registration creates single database entry
  • Container restart does NOT create duplicate entry
  • Platform info auto-populated (username, display name, bot ID)
  • Wallet configuration UI displays correctly
  • Can add/update cryptocurrency wallet addresses
  • Wallet addresses saved to Bot.Settings.wallets
  • Duplicate detection shows warning if duplicates exist
  • Can delete duplicate bot entries
  • Most recent bot entry highlighted in green

Integration Testing

  • TeleBot connects to LittleShop API
  • Bot authentication works
  • Orders can be created through bot
  • Admin panel shows correct bot information

Performance Testing

  • Bot startup time acceptable
  • API response times normal
  • No memory leaks on container restart

Merge Process

When Ready to Deploy to Production

  1. Create Merge Request:

    # In GitLab UI or via CLI
    git checkout development
    git push origin development
    # Then create MR: development → main
    
  2. Review Changes:

    • Check code diff in GitLab
    • Verify all tests passed
    • Confirm no breaking changes
  3. Merge:

    • Merge via GitLab UI
    • GitLab CI automatically deploys to production
  4. Verify Production:

    • Check health endpoints
    • Monitor logs: ssh ... "docker logs littleshop -f"
    • Test bot registration behavior
    • Verify wallet configuration working
  5. Cleanup Development Branch (optional):

    • Keep branch for future development work
    • Or delete if no longer needed

Rollback Procedure

If issues found after merge:

# GitLab CI provides manual rollback job
# OR manually SSH to VPS:

ssh -i ~/.ssh/littleshop_deploy_key -p 2255 sysadmin@srv1002428.hstgr.cloud

cd /opt/littleshop

# Tag previous working image as latest
docker tag localhost:5000/littleshop:previous localhost:5000/littleshop:latest
docker tag localhost:5000/telebot:previous localhost:5000/telebot:latest

# Restart services
docker-compose down
docker-compose up -d

# Verify
docker logs littleshop -f

Branch Protection Status

  • Main branch: Protected from direct pushes (requires merge request)
  • Development branch: Allows direct pushes for development work
  • Local push to main: Disabled (no_push)

Next Steps

  1. Immediate: Push development branch to GitLab
  2. Short-term: Test locally with Docker Compose
  3. Before merge: Deploy to development environment (Option 2 or 3)
  4. Production: Create MR and merge when confident

Contact & Support

GitLab Repository: https://gitlab.silverlabs.uk/Jamie/littleshop Production VPS: srv1002428.hstgr.cloud:2255 Admin Panel: https://admin.dark.side (Nginx Proxy Manager → littleshop:5000)

Documentation:

  • CLAUDE.md - Project progress and working baseline
  • ROADMAP.md - Development priorities
  • DEPLOYMENT.md - Production deployment guide