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.walletsJSON 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
mainbranch 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
Option 1: Local Docker Testing ✅ (Recommended First Step)
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:
- ✅ Bot registration on first startup
- ✅ No duplicate entry on container restart
- ✅ Wallet configuration UI in Bot Edit page
- ✅ Duplicate detection banner (if existing duplicates)
- ✅ 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:
- SSH tunnel:
ssh -L 5101:localhost:5101 -p 2255 sysadmin@srv1002428.hstgr.cloud - Then open: http://localhost:5101/Admin
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
-
Create Merge Request:
# In GitLab UI or via CLI git checkout development git push origin development # Then create MR: development → main -
Review Changes:
- Check code diff in GitLab
- Verify all tests passed
- Confirm no breaking changes
-
Merge:
- Merge via GitLab UI
- GitLab CI automatically deploys to production
-
Verify Production:
- Check health endpoints
- Monitor logs:
ssh ... "docker logs littleshop -f" - Test bot registration behavior
- Verify wallet configuration working
-
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
- Immediate: Push development branch to GitLab
- Short-term: Test locally with Docker Compose
- Before merge: Deploy to development environment (Option 2 or 3)
- 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