mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 07:40:43 +00:00
update deploy script
This commit is contained in:
+2
-1
@@ -10,4 +10,5 @@
|
||||
.gitignore
|
||||
Dockerfile
|
||||
*.conf
|
||||
.gitmodules
|
||||
.gitmodules
|
||||
*.sh
|
||||
Executable
+113
@@ -0,0 +1,113 @@
|
||||
#!/bin/bash
|
||||
# deploy.sh - Complete deployment script for staging and production environments
|
||||
# This script:
|
||||
# 1. Builds and uploads the Docker image to ECR with appropriate tag
|
||||
# 2. Copies the update script to EC2 instance (staging or prod)
|
||||
# 3. Executes the update script on the EC2 instance
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status
|
||||
|
||||
# Function to print section headers
|
||||
print_header() {
|
||||
echo "======================================================"
|
||||
echo "🚀 $1"
|
||||
echo "======================================================"
|
||||
}
|
||||
|
||||
# Load environment variables
|
||||
if [ -f .env ]; then
|
||||
echo "Loading configuration from .env file..."
|
||||
export $(grep -v '^#' .env | xargs)
|
||||
fi
|
||||
|
||||
# Check command line argument
|
||||
if [ $# -ne 1 ] || ([ "$1" != "staging" ] && [ "$1" != "prod" ]); then
|
||||
echo "Error: Please specify environment (staging or prod)"
|
||||
echo "Usage: $0 [staging|prod]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ENV=$1
|
||||
VERSION_TAG=""
|
||||
|
||||
# Set environment-specific variables
|
||||
if [ "$ENV" == "staging" ]; then
|
||||
print_header "DEPLOYING TO STAGING ENVIRONMENT"
|
||||
EC2_HOST=$EC2_HOST_STAGING
|
||||
VERSION_TAG="staging"
|
||||
else
|
||||
print_header "DEPLOYING TO PRODUCTION ENVIRONMENT"
|
||||
EC2_HOST=$EC2_HOST_PROD
|
||||
VERSION_TAG="latest"
|
||||
fi
|
||||
|
||||
# Check required environment variables
|
||||
if [ -z "$EC2_HOST" ]; then
|
||||
echo "Error: EC2_HOST_${ENV^^} not defined in .env file or environment"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Configuration
|
||||
EC2_KEY=${EC2_KEY:-"~/.ssh/id_rsa"} # Use default or override from .env
|
||||
BUILD_SCRIPT="./upload.sh" # Path to your build script
|
||||
UPDATE_SCRIPT="./update.sh" # Path to your update script
|
||||
REMOTE_UPDATE_SCRIPT="/home/ec2-user/update-openfront.sh" # Where to place the script on EC2
|
||||
|
||||
# Check if required scripts exist
|
||||
if [ ! -f "$BUILD_SCRIPT" ]; then
|
||||
echo "Error: Build script $BUILD_SCRIPT not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "$UPDATE_SCRIPT" ]; then
|
||||
echo "Error: Update script $UPDATE_SCRIPT not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Step 1: Build and upload Docker image to ECR
|
||||
print_header "STEP 1: Building and uploading Docker image to ECR"
|
||||
echo "Environment: ${ENV}"
|
||||
echo "Using version tag: $VERSION_TAG"
|
||||
|
||||
# Execute the build script with the version tag
|
||||
$BUILD_SCRIPT $VERSION_TAG
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Build and upload failed. Stopping deployment."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Step 2: Copy update script to EC2 instance
|
||||
print_header "STEP 2: Copying update script to EC2 instance"
|
||||
echo "Target: $EC2_HOST"
|
||||
|
||||
# Make sure the update script is executable
|
||||
chmod +x $UPDATE_SCRIPT
|
||||
|
||||
# Copy the update script to the EC2 instance
|
||||
scp -i $EC2_KEY $UPDATE_SCRIPT $EC2_HOST:$REMOTE_UPDATE_SCRIPT
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Failed to copy update script to EC2 instance. Stopping deployment."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Update script successfully copied to EC2 instance."
|
||||
|
||||
# Step 3: Execute the update script on the EC2 instance
|
||||
print_header "STEP 3: Executing update script on EC2 instance"
|
||||
|
||||
# Make the script executable on the remote server and execute it
|
||||
ssh -i $EC2_KEY $EC2_HOST "chmod +x $REMOTE_UPDATE_SCRIPT && $REMOTE_UPDATE_SCRIPT"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "❌ Failed to execute update script on EC2 instance."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_header "DEPLOYMENT COMPLETED SUCCESSFULLY"
|
||||
echo "✅ New version deployed to ${ENV} environment!"
|
||||
echo "🌐 Check your ${ENV} server to verify the deployment."
|
||||
echo "======================================================"
|
||||
@@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
# Script to update Docker container
|
||||
|
||||
# Get AWS account ID
|
||||
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
|
||||
ECR_REPO="${AWS_ACCOUNT_ID}.dkr.ecr.eu-west-1.amazonaws.com/openfront:latest"
|
||||
|
||||
echo "Logging in to ECR..."
|
||||
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.eu-west-1.amazonaws.com
|
||||
|
||||
echo "Pulling latest image..."
|
||||
docker pull $ECR_REPO
|
||||
|
||||
echo "Checking for existing container..."
|
||||
# Check for running container
|
||||
RUNNING_CONTAINER=$(docker ps | grep openfront | awk '{print $1}')
|
||||
if [ -n "$RUNNING_CONTAINER" ]; then
|
||||
echo "Stopping running container $RUNNING_CONTAINER..."
|
||||
docker stop $RUNNING_CONTAINER
|
||||
docker rm $RUNNING_CONTAINER
|
||||
echo "Container $RUNNING_CONTAINER stopped and removed."
|
||||
fi
|
||||
|
||||
# Also check for stopped containers with the same name
|
||||
STOPPED_CONTAINER=$(docker ps -a | grep openfront | awk '{print $1}')
|
||||
if [ -n "$STOPPED_CONTAINER" ]; then
|
||||
echo "Removing stopped container $STOPPED_CONTAINER..."
|
||||
docker rm $STOPPED_CONTAINER
|
||||
echo "Container $STOPPED_CONTAINER removed."
|
||||
fi
|
||||
|
||||
echo "Starting new container..."
|
||||
docker run -d -p 80:80 \
|
||||
--log-driver=awslogs \
|
||||
--log-opt awslogs-region=eu-west-1 \
|
||||
--log-opt awslogs-group=/aws/ec2/docker-containers \
|
||||
--log-opt awslogs-create-group=true \
|
||||
--name openfront \
|
||||
$ECR_REPO
|
||||
|
||||
echo "Update complete! New container is running."
|
||||
Reference in New Issue
Block a user