-
Notifications
You must be signed in to change notification settings - Fork 52
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
·146 lines (125 loc) · 4.12 KB
/
Copy pathdeploy.sh
File metadata and controls
executable file
·146 lines (125 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
# Quick deployment script for VPS
# Usage: ./deploy.sh
set -e
echo "🚀 PentesterOPS Dashboard - VPS Deployment Script"
echo "=================================================="
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# Check if running as root or with sudo
if [ "$EUID" -ne 0 ]; then
echo -e "${YELLOW}⚠️ This script requires sudo privileges${NC}"
echo "Please run: sudo ./deploy.sh"
exit 1
fi
# Configuration
APP_DIR="/opt/pentestops"
APP_NAME="pentestops"
IMAGE_NAME="pentestops-dashboard:latest"
CONTAINER_NAME="pentestops"
# Check if Docker is installed
if ! command -v docker &> /dev/null; then
echo -e "${RED}❌ Docker is not installed${NC}"
echo "Please install Docker first. See VPS_DEPLOYMENT_GUIDE.md"
exit 1
fi
# Create application directory
echo -e "${YELLOW}📁 Creating application directory...${NC}"
mkdir -p $APP_DIR
mkdir -p $APP_DIR/data/db
mkdir -p $APP_DIR/uploads
# Check if .env exists
if [ ! -f "$APP_DIR/.env" ]; then
echo -e "${YELLOW}⚠️ .env file not found. Creating template...${NC}"
cat > $APP_DIR/.env << EOF
# Application
NODE_ENV=production
BACKEND_PORT=4000
FRONTEND_PORT=3000
# Database
MONGODB_URI=mongodb://localhost:27017/pentest-dashboard
# Security (IMPORTANT: Change these!)
JWT_SECRET=$(openssl rand -base64 32)
JWT_REFRESH_SECRET=$(openssl rand -base64 32)
# CORS
CORS_ORIGIN=*
# Registration
ALLOW_REGISTRATION=false
# File Uploads
MAX_FILE_SIZE=10485760
UPLOAD_DIR=/app/uploads
# Frontend
NEXT_PUBLIC_API_URL=http://localhost:4000
EOF
echo -e "${GREEN}✅ Created .env file at $APP_DIR/.env${NC}"
echo -e "${YELLOW}⚠️ Please edit .env file with your actual values!${NC}"
echo "Press Enter to continue after editing .env..."
read
fi
# Copy files to application directory if not already there
if [ ! -f "$APP_DIR/Dockerfile" ]; then
echo -e "${YELLOW}📋 Copying application files...${NC}"
if [ -f "./Dockerfile" ]; then
cp -r . $APP_DIR/
else
echo -e "${RED}❌ Dockerfile not found in current directory${NC}"
exit 1
fi
fi
# Build Docker image
echo -e "${YELLOW}🔨 Building Docker image...${NC}"
cd $APP_DIR
docker build -t $IMAGE_NAME .
# Stop and remove existing container if it exists
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
echo -e "${YELLOW}🛑 Stopping existing container...${NC}"
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
fi
# Run container
echo -e "${YELLOW}🚀 Starting container...${NC}"
docker run -d \
--name $CONTAINER_NAME \
--restart unless-stopped \
-p 3000:3000 \
-p 4000:4000 \
-p 27017:27017 \
-v $APP_DIR/data/db:/data/db \
-v $APP_DIR/uploads:/app/uploads \
--env-file $APP_DIR/.env \
$IMAGE_NAME
# Wait for services to start
echo -e "${YELLOW}⏳ Waiting for services to start...${NC}"
sleep 10
# Check container status
if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then
echo -e "${GREEN}✅ Container is running!${NC}"
echo ""
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN}🎉 Deployment successful!${NC}"
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
echo "Application URLs:"
echo " Frontend: http://localhost:3000"
echo " Backend API: http://localhost:4000"
echo ""
echo "Useful commands:"
echo " View logs: docker logs -f $CONTAINER_NAME"
echo " Stop: docker stop $CONTAINER_NAME"
echo " Start: docker start $CONTAINER_NAME"
echo " Restart: docker restart $CONTAINER_NAME"
echo ""
echo -e "${YELLOW}⚠️ Next steps:${NC}"
echo " 1. Configure Nginx reverse proxy (see VPS_DEPLOYMENT_GUIDE.md)"
echo " 2. Set up SSL certificate with Let's Encrypt"
echo " 3. Update CORS_ORIGIN in .env file"
echo " 4. Configure firewall (UFW)"
echo ""
else
echo -e "${RED}❌ Container failed to start${NC}"
echo "Check logs: docker logs $CONTAINER_NAME"
exit 1
fi