littleshop/TeleBot/deploy-bot.sh
SilverLabs DevTeam 73e8773ea3 Configure BTCPay with external nodes via Tor
- Set up Tor container for SOCKS proxy (port 9050)
- Configured Monero wallet with remote onion node
- Bitcoin node continues syncing in background (60% complete)
- Created documentation for wallet configuration steps
- All external connections routed through Tor for privacy

BTCPay requires manual wallet configuration through web interface:
- Bitcoin: Need to add xpub/zpub for watch-only wallet
- Monero: Need to add address and view key

System ready for payment acceptance once wallets configured.
2025-09-19 12:14:39 +01:00

253 lines
7.1 KiB
Bash
Executable File

#!/bin/bash
# LittleShop TeleBot Docker Deployment Script
# Usage: ./deploy-bot.sh [OPTIONS]
#
# This script helps deploy TeleBot instances to local or remote Docker hosts
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Default values
DOCKER_IMAGE="littleshop/telebot:latest"
CONTAINER_PREFIX="littleshop-bot"
API_URL="${LITTLESHOP_API_URL:-http://localhost:8080}"
RESTART_POLICY="unless-stopped"
DOCKER_HOST=""
# Function to print colored output
print_message() {
local color=$1
local message=$2
echo -e "${color}${message}${NC}"
}
# Function to show usage
show_usage() {
cat << EOF
Usage: $0 [OPTIONS]
Deploy LittleShop TeleBot to Docker hosts
OPTIONS:
-n, --name NAME Bot container name (required)
-t, --token TOKEN Telegram bot token (required)
-k, --api-key KEY Bot API key from admin panel
-a, --api-url URL LittleShop API URL (default: $API_URL)
-h, --host HOST Docker host (e.g., ssh://user@host or tcp://host:2376)
-c, --chat-id ID Admin chat ID for notifications
-e, --encryption-key KEY Database encryption key
-p, --personality NAME Bot personality name
-m, --mode MODE Privacy mode (strict|moderate|relaxed)
-i, --image IMAGE Docker image (default: $DOCKER_IMAGE)
-r, --restart POLICY Restart policy (default: $RESTART_POLICY)
-d, --detach Run in detached mode (default)
-l, --logs Follow logs after deployment
--pull Pull latest image before deployment
--rm Remove existing container before deployment
--help Show this help message
EXAMPLES:
# Deploy to local Docker
$0 -n support-bot -t "TOKEN" -k "API_KEY"
# Deploy to remote host via SSH
$0 -n sales-bot -t "TOKEN" -k "API_KEY" -h ssh://user@server.com
# Deploy with all options
$0 -n vip-bot -t "TOKEN" -k "API_KEY" -a https://api.shop.com \\
-c "123456789" -e "32_char_encryption_key_here" \\
-p "Sarah" -m strict --pull --rm
# Deploy multiple bots using environment file
source .env.bot1 && $0 -n bot1 -t "\$BOT_TOKEN" -k "\$API_KEY"
source .env.bot2 && $0 -n bot2 -t "\$BOT_TOKEN" -k "\$API_KEY"
EOF
}
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-n|--name)
BOT_NAME="$2"
shift 2
;;
-t|--token)
BOT_TOKEN="$2"
shift 2
;;
-k|--api-key)
API_KEY="$2"
shift 2
;;
-a|--api-url)
API_URL="$2"
shift 2
;;
-h|--host)
DOCKER_HOST="$2"
shift 2
;;
-c|--chat-id)
ADMIN_CHAT_ID="$2"
shift 2
;;
-e|--encryption-key)
ENCRYPTION_KEY="$2"
shift 2
;;
-p|--personality)
PERSONALITY="$2"
shift 2
;;
-m|--mode)
PRIVACY_MODE="$2"
shift 2
;;
-i|--image)
DOCKER_IMAGE="$2"
shift 2
;;
-r|--restart)
RESTART_POLICY="$2"
shift 2
;;
-l|--logs)
FOLLOW_LOGS=true
shift
;;
--pull)
PULL_IMAGE=true
shift
;;
--rm)
REMOVE_EXISTING=true
shift
;;
--help)
show_usage
exit 0
;;
*)
print_message "$RED" "Unknown option: $1"
show_usage
exit 1
;;
esac
done
# Validate required parameters
if [ -z "$BOT_NAME" ]; then
print_message "$RED" "Error: Bot name is required (-n/--name)"
exit 1
fi
if [ -z "$BOT_TOKEN" ]; then
print_message "$RED" "Error: Bot token is required (-t/--token)"
exit 1
fi
# Set container name
CONTAINER_NAME="${CONTAINER_PREFIX}-${BOT_NAME}"
# Build Docker command
DOCKER_CMD="docker"
if [ -n "$DOCKER_HOST" ]; then
export DOCKER_HOST="$DOCKER_HOST"
print_message "$YELLOW" "Deploying to remote host: $DOCKER_HOST"
fi
# Pull latest image if requested
if [ "$PULL_IMAGE" = true ]; then
print_message "$YELLOW" "Pulling latest image: $DOCKER_IMAGE"
$DOCKER_CMD pull "$DOCKER_IMAGE"
fi
# Remove existing container if requested
if [ "$REMOVE_EXISTING" = true ]; then
if $DOCKER_CMD ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then
print_message "$YELLOW" "Removing existing container: $CONTAINER_NAME"
$DOCKER_CMD rm -f "$CONTAINER_NAME"
fi
fi
# Build environment variables
ENV_VARS=(
"-e DOTNET_ENVIRONMENT=Production"
"-e TZ=UTC"
"-e Telegram__BotToken=$BOT_TOKEN"
"-e LittleShop__ApiUrl=$API_URL"
"-e Database__ConnectionString=Filename=/app/data/telebot.db;Password=;"
)
# Add optional environment variables
[ -n "$API_KEY" ] && ENV_VARS+=("-e BotManager__ApiKey=$API_KEY")
[ -n "$ADMIN_CHAT_ID" ] && ENV_VARS+=("-e Telegram__AdminChatId=$ADMIN_CHAT_ID")
[ -n "$ENCRYPTION_KEY" ] && ENV_VARS+=("-e Database__EncryptionKey=$ENCRYPTION_KEY")
[ -n "$PERSONALITY" ] && ENV_VARS+=("-e Bot__PersonalityName=$PERSONALITY")
[ -n "$PRIVACY_MODE" ] && ENV_VARS+=("-e Privacy__Mode=$PRIVACY_MODE")
# Default privacy settings
ENV_VARS+=(
"-e Privacy__DataRetentionHours=24"
"-e Privacy__SessionTimeoutMinutes=30"
"-e Privacy__EphemeralByDefault=true"
"-e Features__EnableQRCodes=true"
"-e Features__EnablePGPEncryption=true"
"-e Features__EnableDisappearingMessages=true"
)
# Build volumes
VOLUMES=(
"-v ${CONTAINER_NAME}-data:/app/data"
"-v ${CONTAINER_NAME}-logs:/app/logs"
)
# Deploy the container
print_message "$GREEN" "Deploying bot: $CONTAINER_NAME"
print_message "$YELLOW" "API URL: $API_URL"
$DOCKER_CMD run -d \
--name "$CONTAINER_NAME" \
--restart "$RESTART_POLICY" \
"${ENV_VARS[@]}" \
"${VOLUMES[@]}" \
"$DOCKER_IMAGE"
# Check if deployment was successful
if [ $? -eq 0 ]; then
print_message "$GREEN" "✅ Bot deployed successfully: $CONTAINER_NAME"
# Get container info
CONTAINER_ID=$($DOCKER_CMD ps -q -f name="$CONTAINER_NAME")
print_message "$YELLOW" "Container ID: $CONTAINER_ID"
# Show container status
$DOCKER_CMD ps -f name="$CONTAINER_NAME" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Follow logs if requested
if [ "$FOLLOW_LOGS" = true ]; then
print_message "$YELLOW" "Following logs (Ctrl+C to exit)..."
$DOCKER_CMD logs -f "$CONTAINER_NAME"
else
print_message "$YELLOW" "View logs with: docker logs -f $CONTAINER_NAME"
fi
else
print_message "$RED" "❌ Deployment failed"
exit 1
fi
# Print next steps
echo ""
print_message "$GREEN" "Next steps:"
echo "1. Check bot status: docker ps -f name=$CONTAINER_NAME"
echo "2. View logs: docker logs $CONTAINER_NAME"
echo "3. Stop bot: docker stop $CONTAINER_NAME"
echo "4. Remove bot: docker rm -f $CONTAINER_NAME"
echo "5. Access admin panel to manage bot settings"