Skip to content

Commit 9e7d7e8

Browse files
authored
Add Full-Stack Ultimate Manager script
This script manages the full-stack application lifecycle, including local setup, Docker management, and Azure deployment.
1 parent 880bcec commit 9e7d7e8

1 file changed

Lines changed: 160 additions & 0 deletions

File tree

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
#!/bin/bash
2+
3+
# =========================================
4+
# Full-Stack Ultimate Manager
5+
# Interactive and fully automated modes
6+
# =========================================
7+
8+
FULLSTACK_DIR="./fullstack-app"
9+
LOCAL_WAIT=5
10+
RESOURCE_GROUP="fullstack-rg"
11+
LOCATION="eastus"
12+
ACR_NAME="fullstackregistry$RANDOM"
13+
PLAN_NAME="fullstack-plan"
14+
BACKEND_APP="fullstack-backend"
15+
FRONTEND_APP="fullstack-frontend"
16+
MONGO_URI="<YOUR_MONGO_URI>" # <-- Replace with your cloud MongoDB URI
17+
JWT_SECRET="your_jwt_secret_here"
18+
19+
MODE="interactive" # default mode
20+
if [[ "$1" == "auto" ]]; then MODE="auto"; fi
21+
22+
# ----------- Functions -----------
23+
24+
generate_local() {
25+
echo "🚀 Generating local full-stack project..."
26+
mkdir -p $FULLSTACK_DIR/backend/models $FULLSTACK_DIR/backend/routes $FULLSTACK_DIR/backend/middleware
27+
mkdir -p $FULLSTACK_DIR/frontend/src
28+
echo "📦 Local project generated at $FULLSTACK_DIR"
29+
}
30+
31+
zip_local() {
32+
echo "📦 Creating ZIP archive..."
33+
zip -r fullstack-app.zip $FULLSTACK_DIR
34+
echo "✅ ZIP created: fullstack-app.zip"
35+
}
36+
37+
start_local() {
38+
echo "🐳 Starting local Docker containers..."
39+
docker-compose -f $FULLSTACK_DIR/docker-compose.yml up --build -d
40+
sleep $LOCAL_WAIT
41+
echo "✅ Local Docker containers running."
42+
}
43+
44+
stop_local() {
45+
echo "🛑 Stopping local Docker containers..."
46+
docker-compose -f $FULLSTACK_DIR/docker-compose.yml down
47+
echo "✅ Local Docker stopped."
48+
}
49+
50+
cleanup_local() {
51+
echo "🧹 Cleaning up local Docker images..."
52+
docker image prune -f
53+
echo "✅ Local cleanup done."
54+
}
55+
56+
build_push_docker() {
57+
echo "🐳 Building and pushing Docker images to Azure Container Registry..."
58+
az login --only-show-errors
59+
az group create --name $RESOURCE_GROUP --location $LOCATION
60+
61+
if ! az acr show --name $ACR_NAME &> /dev/null; then
62+
az acr create --resource-group $RESOURCE_GROUP --name $ACR_NAME --sku Basic
63+
fi
64+
az acr login --name $ACR_NAME
65+
66+
FRONTEND_API_URL="https://$BACKEND_APP.azurewebsites.net/api"
67+
sed -i.bak "s|const API_URL = .*|const API_URL = '$FRONTEND_API_URL';|" $FULLSTACK_DIR/frontend/src/App.js
68+
69+
docker build -t backend $FULLSTACK_DIR/backend
70+
docker tag backend $ACR_NAME.azurecr.io/backend:latest
71+
docker push $ACR_NAME.azurecr.io/backend:latest
72+
73+
docker build -t frontend $FULLSTACK_DIR/frontend
74+
docker tag frontend $ACR_NAME.azurecr.io/frontend:latest
75+
docker push $ACR_NAME.azurecr.io/frontend:latest
76+
}
77+
78+
deploy_azure() {
79+
echo "☁️ Deploying backend & frontend to Azure..."
80+
81+
if ! az appservice plan show --name $PLAN_NAME --resource-group $RESOURCE_GROUP &> /dev/null; then
82+
az appservice plan create --name $PLAN_NAME --resource-group $RESOURCE_GROUP --sku B1 --is-linux
83+
fi
84+
85+
# Backend
86+
if az webapp show --name $BACKEND_APP --resource-group $RESOURCE_GROUP &> /dev/null; then
87+
az webapp config container set --name $BACKEND_APP --resource-group $RESOURCE_GROUP --docker-custom-image-name $ACR_NAME.azurecr.io/backend:latest
88+
else
89+
az webapp create --resource-group $RESOURCE_GROUP --plan $PLAN_NAME --name $BACKEND_APP --deployment-container-image-name $ACR_NAME.azurecr.io/backend:latest
90+
fi
91+
az webapp config appsettings set --name $BACKEND_APP --resource-group $RESOURCE_GROUP --settings MONGO_URI=$MONGO_URI JWT_SECRET=$JWT_SECRET
92+
93+
# Frontend
94+
if az webapp show --name $FRONTEND_APP --resource-group $RESOURCE_GROUP &> /dev/null; then
95+
az webapp config container set --name $FRONTEND_APP --resource-group $RESOURCE_GROUP --docker-custom-image-name $ACR_NAME.azurecr.io/frontend:latest
96+
else
97+
az webapp create --resource-group $RESOURCE_GROUP --plan $PLAN_NAME --name $FRONTEND_APP --deployment-container-image-name $ACR_NAME.azurecr.io/frontend:latest
98+
fi
99+
100+
FRONTEND_URL="https://$FRONTEND_APP.azurewebsites.net"
101+
echo "✅ Azure deployment complete! Frontend URL: $FRONTEND_URL"
102+
103+
OS="$(uname)"
104+
if [[ "$OS" == "Linux" ]]; then xdg-open "$FRONTEND_URL"
105+
elif [[ "$OS" == "Darwin" ]]; then open "$FRONTEND_URL"
106+
elif [[ "$OS" == MINGW* || "$OS" == CYGWIN* || "$OS" == MSYS* ]]; then powershell.exe Start-Process "$FRONTEND_URL"
107+
else echo "Open your browser manually at $FRONTEND_URL"
108+
fi
109+
}
110+
111+
cleanup_azure() {
112+
echo "☁️ Cleaning up Azure resources..."
113+
az login --only-show-errors
114+
az group delete --name $RESOURCE_GROUP --yes --no-wait
115+
echo "✅ Azure cleanup initiated."
116+
}
117+
118+
# ----------- Main -----------
119+
120+
if [[ "$MODE" == "auto" ]]; then
121+
echo "==============================="
122+
echo " FULL-STACK AUTO DEPLOY START "
123+
echo "==============================="
124+
generate_local
125+
zip_local
126+
start_local
127+
build_push_docker
128+
deploy_azure
129+
stop_local
130+
cleanup_local
131+
echo "==============================="
132+
echo " DEPLOYMENT FINISHED "
133+
echo "==============================="
134+
else
135+
# Interactive Menu
136+
echo "==============================="
137+
echo " FULL-STACK ULTIMATE MANAGER "
138+
echo "==============================="
139+
echo "1) Generate local project"
140+
echo "2) Zip local project"
141+
echo "3) Start local Docker"
142+
echo "4) Stop local Docker"
143+
echo "5) Deploy/Update Azure"
144+
echo "6) Cleanup Azure"
145+
echo "7) Cleanup local Docker images"
146+
echo "8) Exit"
147+
read -p "Choose an option [1-8]: " choice
148+
149+
case $choice in
150+
1) generate_local ;;
151+
2) zip_local ;;
152+
3) start_local ;;
153+
4) stop_local ;;
154+
5) build_push_docker; deploy_azure ;;
155+
6) cleanup_azure ;;
156+
7) cleanup_local ;;
157+
8) exit 0 ;;
158+
*) echo "Invalid choice." ;;
159+
esac
160+
fi

0 commit comments

Comments
 (0)