#!/bin/bash # LittleShop Docker Deployment Script for Hostinger VPS # This script deploys LittleShop to the Hostinger VPS using Docker set -e echo "================================================" echo "LittleShop Docker Deployment to Hostinger VPS" echo "================================================" echo # Configuration REMOTE_HOST="srv1002428.hstgr.cloud" REMOTE_USER="root" REMOTE_PORT="2255" REMOTE_DIR="/opt/docker/littleshop" SSH_KEY="~/.ssh/hostinger_key" # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' print_success() { echo -e "${GREEN}✓${NC} $1" } print_warning() { echo -e "${YELLOW}⚠${NC} $1" } print_error() { echo -e "${RED}✗${NC} $1" } # Step 1: Build Docker image locally echo "1. Building Docker image locally..." ./docker-build.sh --build-only if [ $? -ne 0 ]; then print_error "Docker build failed" exit 1 fi # Step 2: Save Docker image echo echo "2. Saving Docker image to tar file..." docker save littleshop:latest | gzip > littleshop-docker.tar.gz print_success "Docker image saved to littleshop-docker.tar.gz" # Step 3: Transfer files to server echo echo "3. Transferring files to Hostinger VPS..." # Create remote directory ssh -i ${SSH_KEY} -p ${REMOTE_PORT} ${REMOTE_USER}@${REMOTE_HOST} "mkdir -p ${REMOTE_DIR}" # Transfer Docker image echo " Transferring Docker image (this may take a while)..." scp -i ${SSH_KEY} -P ${REMOTE_PORT} littleshop-docker.tar.gz ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/ # Transfer docker-compose.yml echo " Transferring docker-compose.yml..." scp -i ${SSH_KEY} -P ${REMOTE_PORT} docker-compose.yml ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/ # Transfer .env file if [ -f ".env" ]; then echo " Transferring .env file..." scp -i ${SSH_KEY} -P ${REMOTE_PORT} .env ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/ elif [ -f ".env.production" ]; then echo " Transferring .env.production as .env..." scp -i ${SSH_KEY} -P ${REMOTE_PORT} .env.production ${REMOTE_USER}@${REMOTE_HOST}:${REMOTE_DIR}/.env fi print_success "Files transferred successfully" # Step 4: Deploy on server echo echo "4. Deploying on Hostinger VPS..." ssh -i ${SSH_KEY} -p ${REMOTE_PORT} ${REMOTE_USER}@${REMOTE_HOST} << 'ENDSSH' cd /opt/docker/littleshop echo "Loading Docker image..." gunzip -c littleshop-docker.tar.gz | docker load echo "Stopping existing containers..." docker-compose down 2>/dev/null || true echo "Creating directories for volumes..." mkdir -p data logs uploads echo "Starting containers..." docker-compose up -d echo "Waiting for application to start..." sleep 10 echo "Checking container status..." docker-compose ps echo "Testing health endpoint..." if curl -f http://127.0.0.1:5100/api/catalog/products > /dev/null 2>&1; then echo "✓ Application is healthy!" else echo "⚠ Health check failed, checking logs..." docker logs littleshop --tail 20 fi ENDSSH # Step 5: Clean up local tar file echo echo "5. Cleaning up..." rm -f littleshop-docker.tar.gz print_success "Temporary files cleaned" # Step 6: Display deployment info echo echo "================================================" echo "Deployment Complete!" echo "================================================" echo echo "Application Details:" echo " - URL: http://127.0.0.1:5100 (localhost only)" echo " - Admin Panel: http://127.0.0.1:5100/Admin" echo " - Container: littleshop" echo echo "To access from your local machine:" echo " ssh -i ${SSH_KEY} -p ${REMOTE_PORT} -L 5100:127.0.0.1:5100 ${REMOTE_USER}@${REMOTE_HOST}" echo " Then open: http://localhost:5100" echo echo "Remote commands:" echo " - View logs: docker logs -f littleshop" echo " - Restart: docker-compose restart" echo " - Stop: docker-compose down" echo echo "For nginx proxy setup, configure nginx to proxy to 127.0.0.1:5100" echo echo "================================================"