Add full monorepo: virtual-banker, backend, frontend, docs, scripts, deployment
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
170
deployment/scripts/deploy-lxc.sh
Executable file
170
deployment/scripts/deploy-lxc.sh
Executable file
@@ -0,0 +1,170 @@
|
||||
#!/bin/bash
|
||||
# LXC Deployment Script for ChainID 138 Explorer Platform
|
||||
# This script automates the deployment process
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
PROJECT_ROOT="$( cd "$SCRIPT_DIR/../.." && pwd )"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Configuration
|
||||
CONTAINER_ID="${CONTAINER_ID:-100}"
|
||||
CONTAINER_HOSTNAME="${CONTAINER_HOSTNAME:-explorer-prod}"
|
||||
DOMAIN="${DOMAIN:-explorer.d-bis.org}"
|
||||
SKIP_CONTAINER_CREATION="${SKIP_CONTAINER_CREATION:-false}"
|
||||
|
||||
echo -e "${GREEN}=== ChainID 138 Explorer Platform - LXC Deployment ===${NC}"
|
||||
echo ""
|
||||
|
||||
# Check if running on Proxmox host
|
||||
if ! command -v pct &> /dev/null; then
|
||||
echo -e "${RED}Error: This script must be run on a Proxmox host${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Phase 1: Create LXC Container
|
||||
if [ "$SKIP_CONTAINER_CREATION" != "true" ]; then
|
||||
echo -e "${YELLOW}Phase 1: Creating LXC Container...${NC}"
|
||||
|
||||
# Check if container already exists
|
||||
if pct list | grep -q "^$CONTAINER_ID "; then
|
||||
echo -e "${YELLOW}Container $CONTAINER_ID already exists. Skipping creation.${NC}"
|
||||
echo "Set SKIP_CONTAINER_CREATION=true to skip this check."
|
||||
read -p "Do you want to continue with existing container? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Creating container $CONTAINER_ID..."
|
||||
pct create $CONTAINER_ID \
|
||||
local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst \
|
||||
--hostname $CONTAINER_HOSTNAME \
|
||||
--memory 16384 \
|
||||
--cores 4 \
|
||||
--swap 4096 \
|
||||
--storage local-lvm \
|
||||
--rootfs local-lvm:100 \
|
||||
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
|
||||
--unprivileged 0 \
|
||||
--features nesting=1 \
|
||||
--start 1
|
||||
|
||||
echo "Waiting for container to start..."
|
||||
sleep 5
|
||||
fi
|
||||
fi
|
||||
|
||||
# Phase 2: Initial Container Setup
|
||||
echo -e "${YELLOW}Phase 2: Initial Container Setup...${NC}"
|
||||
|
||||
cat << 'INITSCRIPT' | pct exec $CONTAINER_ID bash
|
||||
set -e
|
||||
|
||||
# Update system
|
||||
apt update && apt upgrade -y
|
||||
|
||||
# Install essential packages
|
||||
apt install -y curl wget git vim net-tools ufw fail2ban \
|
||||
unattended-upgrades apt-transport-https ca-certificates \
|
||||
gnupg lsb-release software-properties-common
|
||||
|
||||
# Set timezone
|
||||
timedatectl set-timezone UTC
|
||||
|
||||
# Create deployment user
|
||||
if ! id "explorer" &>/dev/null; then
|
||||
adduser --disabled-password --gecos "" explorer
|
||||
usermod -aG sudo explorer
|
||||
echo "explorer ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
|
||||
fi
|
||||
INITSCRIPT
|
||||
|
||||
echo -e "${GREEN}✓ Container setup complete${NC}"
|
||||
|
||||
# Phase 3: Install Dependencies
|
||||
echo -e "${YELLOW}Phase 3: Installing Dependencies...${NC}"
|
||||
|
||||
cat << 'DEPSCRIPT' | pct exec $CONTAINER_ID bash
|
||||
set -e
|
||||
|
||||
# Install Go
|
||||
if ! command -v go &> /dev/null; then
|
||||
cd /tmp
|
||||
wget -q https://go.dev/dl/go1.21.6.linux-amd64.tar.gz
|
||||
rm -rf /usr/local/go
|
||||
tar -C /usr/local -xzf go1.21.6.linux-amd64.tar.gz
|
||||
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
|
||||
export PATH=$PATH:/usr/local/go/bin
|
||||
fi
|
||||
|
||||
# Install Node.js
|
||||
if ! command -v node &> /dev/null; then
|
||||
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
|
||||
apt install -y nodejs
|
||||
fi
|
||||
|
||||
# Install Docker
|
||||
if ! command -v docker &> /dev/null; then
|
||||
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||
apt update
|
||||
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||
systemctl enable docker
|
||||
systemctl start docker
|
||||
usermod -aG docker explorer
|
||||
fi
|
||||
|
||||
# Install PostgreSQL
|
||||
if ! command -v psql &> /dev/null; then
|
||||
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
||||
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
|
||||
apt update
|
||||
apt install -y postgresql-16 postgresql-contrib-16
|
||||
fi
|
||||
|
||||
# Install Nginx
|
||||
if ! command -v nginx &> /dev/null; then
|
||||
apt install -y nginx
|
||||
fi
|
||||
|
||||
# Install cloudflared
|
||||
if ! command -v cloudflared &> /dev/null; then
|
||||
cd /tmp
|
||||
wget -q https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
|
||||
dpkg -i cloudflared-linux-amd64.deb || apt install -f -y
|
||||
fi
|
||||
DEPSCRIPT
|
||||
|
||||
echo -e "${GREEN}✓ Dependencies installed${NC}"
|
||||
|
||||
# Phase 4: Deploy Application
|
||||
echo -e "${YELLOW}Phase 4: Deploying Application...${NC}"
|
||||
|
||||
# Copy project files to container (assuming git clone on host)
|
||||
echo "Note: You'll need to clone the repository inside the container or copy files"
|
||||
echo "For now, the script will prepare the structure"
|
||||
|
||||
cat << 'APPSCRIPT' | pct exec $CONTAINER_ID bash -s
|
||||
set -e
|
||||
mkdir -p /home/explorer/explorer-monorepo
|
||||
chown explorer:explorer /home/explorer/explorer-monorepo
|
||||
APPSCRIPT
|
||||
|
||||
echo -e "${YELLOW}Please complete the deployment manually:${NC}"
|
||||
echo "1. Clone repository inside container: pct exec $CONTAINER_ID"
|
||||
echo "2. Copy .env file and configure"
|
||||
echo "3. Run migrations"
|
||||
echo "4. Build applications"
|
||||
echo "5. Configure services"
|
||||
echo ""
|
||||
echo "See DEPLOYMENT_GUIDE.md for complete instructions"
|
||||
|
||||
echo -e "${GREEN}=== Deployment Script Complete ===${NC}"
|
||||
|
||||
Reference in New Issue
Block a user