guidly/deploy/deploy.sh
laruevin d5ed7fdcf9 Initial commit: Guidly project with CI/CD pipeline
Telegram Bot + Mini App for city walking quests.
- React 19 + TypeScript + Vite 6 frontend
- Express 5 + PostgreSQL backend
- grammY Telegram bot with DeepSeek AI
- GitLab CI/CD: lint, build, deploy to production

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 11:42:42 +07:00

58 lines
1.3 KiB
Bash

#!/bin/bash
set -e
SERVER="${DEPLOY_SERVER:-root@85.239.58.182}"
REMOTE_DIR="/root/guidly"
DOMAIN="gidli.ru"
echo "=== Building project ==="
npm run build
echo "=== Creating deployment archive ==="
tar -czf deploy.tar.gz \
dist/ \
dist-server/ \
dist-bot/ \
package.json \
package-lock.json \
ecosystem.config.cjs \
deploy/nginx-guidly.conf
echo "=== Uploading to server ==="
scp deploy.tar.gz "$SERVER:/tmp/"
echo "=== Deploying on server ==="
ssh "$SERVER" << ENDSSH
set -e
mkdir -p $REMOTE_DIR
cd $REMOTE_DIR
# Extract new files
tar -xzf /tmp/deploy.tar.gz
rm /tmp/deploy.tar.gz
# Install production dependencies
npm install --omit=dev
# Copy nginx config if not already linked
if [ ! -f /etc/nginx/sites-available/$DOMAIN ]; then
cp deploy/nginx-guidly.conf /etc/nginx/sites-available/$DOMAIN
ln -sf /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx
echo "Nginx config installed. Run 'certbot --nginx -d $DOMAIN' if SSL not yet set up."
fi
# Restart app via PM2
pm2 delete guidly-server 2>/dev/null || true
pm2 start ecosystem.config.cjs
pm2 save
echo "=== Deployment complete ==="
echo "App: https://$DOMAIN"
ENDSSH
echo "=== Cleanup ==="
rm deploy.tar.gz
echo "=== Deploy complete ==="