Última actividad 1752669988

Инсталатор за Docker приложения в Proxmox контейнери

Revisión 46b18f3145d3aaec3cd1d264480eea68c80230fc

proxmox-apps-installer.sh Sin formato
1#!/bin/bash
2
3# Proxmox Apps Installer
4# Професионален инсталатор за Docker приложения в Proxmox контейнери
5# Автор: Федя Серафиев
6# Версия: 1.0
7
8set -e
9
10# Цветове за по-добра визуализация
11RED='\033[0;31m'
12GREEN='\033[0;32m'
13YELLOW='\033[1;33m'
14BLUE='\033[0;34m'
15PURPLE='\033[0;35m'
16CYAN='\033[0;36m'
17WHITE='\033[1;37m'
18NC='\033[0m' # No Color
19
20# Глобални променливи
21INSTALL_DIR="/opt/proxmox-apps"
22DATA_DIR="/var/lib/proxmox-apps"
23LOG_FILE="/var/log/proxmox-apps-installer.log"
24
25# Функция за лог
26log() {
27 echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
28}
29
30# Функция за показване на header
31show_header() {
32 clear
33 echo -e "${CYAN}╔═══════════════════════════════════════════════════════════════════════════════╗${NC}"
34 echo -e "${CYAN}${WHITE}PROXMOX APPS INSTALLER${CYAN}${NC}"
35 echo -e "${CYAN}${YELLOW}Професионален Docker инсталатор${CYAN}${NC}"
36 echo -e "${CYAN}╠═══════════════════════════════════════════════════════════════════════════════╣${NC}"
37 echo -e "${CYAN}${NC} ${GREEN}${NC} Nginx Proxy Manager - Reverse Proxy & SSL Management ${CYAN}${NC}"
38 echo -e "${CYAN}${NC} ${GREEN}${NC} Dashy V3 - Personalized Dashboard ${CYAN}${NC}"
39 echo -e "${CYAN}${NC} ${GREEN}${NC} File Browser - Web File Manager ${CYAN}${NC}"
40 echo -e "${CYAN}${NC} ${GREEN}${NC} Droppy - Modern File Sharing ${CYAN}${NC}"
41 echo -e "${CYAN}${NC} ${GREEN}${NC} OpenGist - Self-hosted Pastebin ${CYAN}${NC}"
42 echo -e "${CYAN}╚═══════════════════════════════════════════════════════════════════════════════╝${NC}"
43 echo ""
44}
45
46# Функция за проверка на системни изисквания
47check_requirements() {
48 log "Проверка на системни изисквания..."
49
50 # Проверка дали сме в Proxmox контейнер
51 if [[ ! -f /proc/1/cgroup ]] || ! grep -q "lxc" /proc/1/cgroup 2>/dev/null; then
52 echo -e "${YELLOW}⚠️ Предупреждение: Не се засича Proxmox LXC контейнер${NC}"
53 echo -e "${YELLOW} Скриптът ще продължи, но е оптимизиран за Proxmox${NC}"
54 echo ""
55 fi
56
57 # Проверка на свободно пространство
58 AVAILABLE_SPACE=$(df / | tail -1 | awk '{print $4}')
59 if [[ $AVAILABLE_SPACE -lt 5242880 ]]; then # 5GB в KB
60 echo -e "${RED}❌ Недостатъчно дисково пространство. Нужни са поне 5GB${NC}"
61 exit 1
62 fi
63
64 # Проверка на мрежова свързаност
65 if ! ping -c 1 google.com &> /dev/null; then
66 echo -e "${RED}❌ Няма интернет връзка${NC}"
67 exit 1
68 fi
69
70 echo -e "${GREEN}✅ Системните изисквания са изпълнени${NC}"
71}
72
73# Функция за инсталиране на Docker
74install_docker() {
75 if command -v docker &> /dev/null; then
76 log "Docker вече е инсталиран"
77 return 0
78 fi
79
80 log "Инсталиране на Docker..."
81 echo -e "${BLUE}📦 Инсталиране на Docker и Docker Compose...${NC}"
82
83 # Актуализиране на пакетите
84 apt-get update -qq
85 apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
86
87 # Добавяне на Docker GPG ключ
88 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
89
90 # Добавяне на Docker repository
91 echo "deb [arch=$(dpkg --print-architecture) 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
92
93 # Инсталиране на Docker
94 apt-get update -qq
95 apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
96
97 # Стартиране на Docker
98 systemctl enable docker
99 systemctl start docker
100
101 # Инсталиране на Docker Compose standalone
102 curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
103 chmod +x /usr/local/bin/docker-compose
104
105 log "Docker е инсталиран успешно"
106}
107
108# Функция за създаване на директории
109create_directories() {
110 log "Създаване на директории..."
111
112 mkdir -p "$INSTALL_DIR"
113 mkdir -p "$DATA_DIR"
114 mkdir -p "$DATA_DIR/nginx-proxy-manager"
115 mkdir -p "$DATA_DIR/dashy"
116 mkdir -p "$DATA_DIR/filebrowser"
117 mkdir -p "$DATA_DIR/droppy"
118 mkdir -p "$DATA_DIR/opengist"
119
120 log "Директориите са създадени"
121}
122
123# Функция за генериране на случайни пароли
124generate_password() {
125 openssl rand -base64 32 | tr -d "=+/" | cut -c1-25
126}
127
128# Функция за инсталиране на Nginx Proxy Manager
129install_nginx_proxy_manager() {
130 log "Инсталиране на Nginx Proxy Manager..."
131
132 cat > "$INSTALL_DIR/nginx-proxy-manager.yml" << 'EOF'
133version: '3.8'
134services:
135 nginx-proxy-manager:
136 image: 'jc21/nginx-proxy-manager:latest'
137 container_name: nginx-proxy-manager
138 restart: unless-stopped
139 ports:
140 - '80:80'
141 - '443:443'
142 - '81:81'
143 volumes:
144 - /var/lib/proxmox-apps/nginx-proxy-manager:/data
145 - /var/lib/proxmox-apps/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
146 environment:
147 - DISABLE_IPV6=true
148 networks:
149 - proxy-network
150 healthcheck:
151 test: ["CMD", "curl", "-f", "http://localhost:81/api/"]
152 interval: 30s
153 timeout: 10s
154 retries: 3
155
156networks:
157 proxy-network:
158 name: proxy-network
159 driver: bridge
160EOF
161
162 cd "$INSTALL_DIR"
163 docker-compose -f nginx-proxy-manager.yml up -d
164
165 echo -e "${GREEN}✅ Nginx Proxy Manager е инсталиран${NC}"
166 echo -e "${YELLOW}📋 Администриране: http://your-ip:81${NC}"
167 echo -e "${YELLOW}📋 Потребител: [email protected]${NC}"
168 echo -e "${YELLOW}📋 Парола: changeme${NC}"
169 echo ""
170}
171
172# Функция за инсталиране на Dashy V3
173install_dashy() {
174 log "Инсталиране на Dashy V3..."
175
176 # Създаване на базова конфигурация
177 cat > "$DATA_DIR/dashy/conf.yml" << 'EOF'
178pageInfo:
179 title: 'Proxmox Dashboard'
180 description: 'Персонализиран Dashboard за Proxmox Apps'
181 logo: 'https://raw.githubusercontent.com/Lissy93/dashy/master/public/img/dashy.png'
182
183appConfig:
184 theme: 'dark'
185 layout: 'auto'
186 iconSize: 'medium'
187 language: 'bg'
188
189sections:
190 - name: 'Proxmox Services'
191 icon: 'fas fa-server'
192 items:
193 - title: 'Nginx Proxy Manager'
194 description: 'Reverse Proxy & SSL Management'
195 url: 'http://localhost:81'
196 icon: 'fas fa-shield-alt'
197 - title: 'File Browser'
198 description: 'Web File Manager'
199 url: 'http://localhost:8080'
200 icon: 'fas fa-folder'
201 - title: 'Droppy'
202 description: 'File Sharing'
203 url: 'http://localhost:8989'
204 icon: 'fas fa-cloud-upload-alt'
205 - title: 'OpenGist'
206 description: 'Code Snippets'
207 url: 'http://localhost:6157'
208 icon: 'fas fa-code'
209
210 - name: 'System Info'
211 icon: 'fas fa-info-circle'
212 widgets:
213 - type: 'system-info'
214 options:
215 hostname: true
216 uptime: true
217 memory: true
218 cpu: true
219EOF
220
221 cat > "$INSTALL_DIR/dashy.yml" << 'EOF'
222version: '3.8'
223services:
224 dashy:
225 image: 'lissy93/dashy:latest'
226 container_name: dashy
227 restart: unless-stopped
228 ports:
229 - '4000:80'
230 volumes:
231 - /var/lib/proxmox-apps/dashy/conf.yml:/app/public/conf.yml:ro
232 environment:
233 - NODE_ENV=production
234 - UID=1000
235 - GID=1000
236 networks:
237 - proxy-network
238 healthcheck:
239 test: ["CMD", "curl", "-f", "http://localhost:80"]
240 interval: 30s
241 timeout: 10s
242 retries: 3
243
244networks:
245 proxy-network:
246 external: true
247EOF
248
249 cd "$INSTALL_DIR"
250 docker-compose -f dashy.yml up -d
251
252 echo -e "${GREEN}✅ Dashy V3 е инсталиран${NC}"
253 echo -e "${YELLOW}📋 Достъп: http://your-ip:4000${NC}"
254 echo ""
255}
256
257# Функция за инсталиране на File Browser
258install_filebrowser() {
259 log "Инсталиране на File Browser..."
260
261 # Създаване на база данни
262 touch "$DATA_DIR/filebrowser/database.db"
263
264 cat > "$INSTALL_DIR/filebrowser.yml" << 'EOF'
265version: '3.8'
266services:
267 filebrowser:
268 image: 'filebrowser/filebrowser:latest'
269 container_name: filebrowser
270 restart: unless-stopped
271 ports:
272 - '8080:80'
273 volumes:
274 - /var/lib/proxmox-apps/filebrowser/database.db:/database.db
275 - /var/lib/proxmox-apps:/srv/proxmox-apps
276 - /opt/proxmox-apps:/srv/configs
277 environment:
278 - FB_DATABASE=/database.db
279 - FB_ROOT=/srv
280 - FB_LOG=stdout
281 - FB_NOAUTH=false
282 networks:
283 - proxy-network
284 healthcheck:
285 test: ["CMD", "curl", "-f", "http://localhost:80/health"]
286 interval: 30s
287 timeout: 10s
288 retries: 3
289
290networks:
291 proxy-network:
292 external: true
293EOF
294
295 cd "$INSTALL_DIR"
296 docker-compose -f filebrowser.yml up -d
297
298 echo -e "${GREEN}✅ File Browser е инсталиран${NC}"
299 echo -e "${YELLOW}📋 Достъп: http://your-ip:8080${NC}"
300 echo -e "${YELLOW}📋 Потребител: admin${NC}"
301 echo -e "${YELLOW}📋 Парола: admin${NC}"
302 echo ""
303}
304
305# Функция за инсталиране на Droppy
306install_droppy() {
307 log "Инсталиране на Droppy..."
308
309 mkdir -p "$DATA_DIR/droppy/config"
310 mkdir -p "$DATA_DIR/droppy/files"
311
312 cat > "$INSTALL_DIR/droppy.yml" << 'EOF'
313version: '3.8'
314services:
315 droppy:
316 image: 'silverwind/droppy:latest'
317 container_name: droppy
318 restart: unless-stopped
319 ports:
320 - '8989:8989'
321 volumes:
322 - /var/lib/proxmox-apps/droppy/config:/app/config
323 - /var/lib/proxmox-apps/droppy/files:/app/files
324 environment:
325 - NODE_ENV=production
326 - UID=1000
327 - GID=1000
328 networks:
329 - proxy-network
330 healthcheck:
331 test: ["CMD", "curl", "-f", "http://localhost:8989"]
332 interval: 30s
333 timeout: 10s
334 retries: 3
335
336networks:
337 proxy-network:
338 external: true
339EOF
340
341 cd "$INSTALL_DIR"
342 docker-compose -f droppy.yml up -d
343
344 echo -e "${GREEN}✅ Droppy е инсталиран${NC}"
345 echo -e "${YELLOW}📋 Достъп: http://your-ip:8989${NC}"
346 echo ""
347}
348
349# Функция за инсталиране на OpenGist
350install_opengist() {
351 log "Инсталиране на OpenGist..."
352
353 OPENGIST_SECRET=$(generate_password)
354
355 cat > "$INSTALL_DIR/opengist.yml" << EOF
356version: '3.8'
357services:
358 opengist:
359 image: 'ghcr.io/thomiceli/opengist:latest'
360 container_name: opengist
361 restart: unless-stopped
362 ports:
363 - '6157:6157'
364 volumes:
365 - /var/lib/proxmox-apps/opengist:/opengist
366 environment:
367 - OG_DB_TYPE=sqlite
368 - OG_DB_PATH=/opengist/opengist.db
369 - OG_SECRET_KEY=${OPENGIST_SECRET}
370 - OG_EXTERNAL_URL=http://localhost:6157
371 - OG_LOG_LEVEL=info
372 - OG_DISABLE_SIGNUP=false
373 - OG_REQUIRE_LOGIN=false
374 networks:
375 - proxy-network
376 healthcheck:
377 test: ["CMD", "curl", "-f", "http://localhost:6157"]
378 interval: 30s
379 timeout: 10s
380 retries: 3
381
382networks:
383 proxy-network:
384 external: true
385EOF
386
387 cd "$INSTALL_DIR"
388 docker-compose -f opengist.yml up -d
389
390 echo -e "${GREEN}✅ OpenGist е инсталиран${NC}"
391 echo -e "${YELLOW}📋 Достъп: http://your-ip:6157${NC}"
392 echo ""
393}
394
395# Функция за създаване на master Docker Compose файл
396create_master_compose() {
397 log "Създаване на master Docker Compose файл..."
398
399 cat > "$INSTALL_DIR/docker-compose.yml" << 'EOF'
400version: '3.8'
401
402services:
403 # Nginx Proxy Manager
404 nginx-proxy-manager:
405 image: 'jc21/nginx-proxy-manager:latest'
406 container_name: nginx-proxy-manager
407 restart: unless-stopped
408 ports:
409 - '80:80'
410 - '443:443'
411 - '81:81'
412 volumes:
413 - /var/lib/proxmox-apps/nginx-proxy-manager:/data
414 - /var/lib/proxmox-apps/nginx-proxy-manager/letsencrypt:/etc/letsencrypt
415 environment:
416 - DISABLE_IPV6=true
417 networks:
418 - proxy-network
419 healthcheck:
420 test: ["CMD", "curl", "-f", "http://localhost:81/api/"]
421 interval: 30s
422 timeout: 10s
423 retries: 3
424
425 # Dashy Dashboard
426 dashy:
427 image: 'lissy93/dashy:latest'
428 container_name: dashy
429 restart: unless-stopped
430 ports:
431 - '4000:80'
432 volumes:
433 - /var/lib/proxmox-apps/dashy/conf.yml:/app/public/conf.yml:ro
434 environment:
435 - NODE_ENV=production
436 - UID=1000
437 - GID=1000
438 networks:
439 - proxy-network
440 healthcheck:
441 test: ["CMD", "curl", "-f", "http://localhost:80"]
442 interval: 30s
443 timeout: 10s
444 retries: 3
445
446 # File Browser
447 filebrowser:
448 image: 'filebrowser/filebrowser:latest'
449 container_name: filebrowser
450 restart: unless-stopped
451 ports:
452 - '8080:80'
453 volumes:
454 - /var/lib/proxmox-apps/filebrowser/database.db:/database.db
455 - /var/lib/proxmox-apps:/srv/proxmox-apps
456 - /opt/proxmox-apps:/srv/configs
457 environment:
458 - FB_DATABASE=/database.db
459 - FB_ROOT=/srv
460 - FB_LOG=stdout
461 - FB_NOAUTH=false
462 networks:
463 - proxy-network
464 healthcheck:
465 test: ["CMD", "curl", "-f", "http://localhost:80/health"]
466 interval: 30s
467 timeout: 10s
468 retries: 3
469
470 # Droppy File Sharing
471 droppy:
472 image: 'silverwind/droppy:latest'
473 container_name: droppy
474 restart: unless-stopped
475 ports:
476 - '8989:8989'
477 volumes:
478 - /var/lib/proxmox-apps/droppy/config:/app/config
479 - /var/lib/proxmox-apps/droppy/files:/app/files
480 environment:
481 - NODE_ENV=production
482 - UID=1000
483 - GID=1000
484 networks:
485 - proxy-network
486 healthcheck:
487 test: ["CMD", "curl", "-f", "http://localhost:8989"]
488 interval: 30s
489 timeout: 10s
490 retries: 3
491
492 # OpenGist
493 opengist:
494 image: 'ghcr.io/thomiceli/opengist:latest'
495 container_name: opengist
496 restart: unless-stopped
497 ports:
498 - '6157:6157'
499 volumes:
500 - /var/lib/proxmox-apps/opengist:/opengist
501 environment:
502 - OG_DB_TYPE=sqlite
503 - OG_DB_PATH=/opengist/opengist.db
504 - OG_SECRET_KEY=CHANGE_THIS_SECRET_KEY
505 - OG_EXTERNAL_URL=http://localhost:6157
506 - OG_LOG_LEVEL=info
507 - OG_DISABLE_SIGNUP=false
508 - OG_REQUIRE_LOGIN=false
509 networks:
510 - proxy-network
511 healthcheck:
512 test: ["CMD", "curl", "-f", "http://localhost:6157"]
513 interval: 30s
514 timeout: 10s
515 retries: 3
516
517networks:
518 proxy-network:
519 name: proxy-network
520 driver: bridge
521EOF
522
523 # Заместване на placeholder-a за OpenGist secret
524 OPENGIST_SECRET=$(generate_password)
525 sed -i "s/CHANGE_THIS_SECRET_KEY/${OPENGIST_SECRET}/g" "$INSTALL_DIR/docker-compose.yml"
526
527 log "Master Docker Compose файлът е създаден"
528}
529
530# Функция за създаване на управляващи скриптове
531create_management_scripts() {
532 log "Създаване на управляващи скриптове..."
533
534 # Скрипт за старт на всички услуги
535 cat > "$INSTALL_DIR/start-all.sh" << 'EOF'
536#!/bin/bash
537cd /opt/proxmox-apps
538echo "Стартиране на всички услуги..."
539docker-compose up -d
540echo "Всички услуги са стартирани!"
541EOF
542
543 # Скрипт за спиране на всички услуги
544 cat > "$INSTALL_DIR/stop-all.sh" << 'EOF'
545#!/bin/bash
546cd /opt/proxmox-apps
547echo "Спиране на всички услуги..."
548docker-compose down
549echo "Всички услуги са спрени!"
550EOF
551
552 # Скрипт за рестарт на всички услуги
553 cat > "$INSTALL_DIR/restart-all.sh" << 'EOF'
554#!/bin/bash
555cd /opt/proxmox-apps
556echo "Рестартиране на всички услуги..."
557docker-compose down
558docker-compose up -d
559echo "Всички услуги са рестартирани!"
560EOF
561
562 # Скрипт за проверка на статуса
563 cat > "$INSTALL_DIR/status.sh" << 'EOF'
564#!/bin/bash
565cd /opt/proxmox-apps
566echo "Статус на услугите:"
567docker-compose ps
568echo ""
569echo "Използване на ресурси:"
570docker stats --no-stream
571EOF
572
573 # Скрипт за бекъп
574 cat > "$INSTALL_DIR/backup.sh" << 'EOF'
575#!/bin/bash
576BACKUP_DIR="/var/backups/proxmox-apps"
577DATE=$(date +%Y%m%d_%H%M%S)
578BACKUP_FILE="$BACKUP_DIR/proxmox-apps-backup-$DATE.tar.gz"
579
580mkdir -p "$BACKUP_DIR"
581
582echo "Създаване на бекъп..."
583tar -czf "$BACKUP_FILE" -C /var/lib proxmox-apps -C /opt proxmox-apps
584
585echo "Бекъпът е създаден: $BACKUP_FILE"
586ls -lh "$BACKUP_FILE"
587EOF
588
589 # Скрипт за актуализиране
590 cat > "$INSTALL_DIR/update.sh" << 'EOF'
591#!/bin/bash
592cd /opt/proxmox-apps
593echo "Актуализиране на Docker образите..."
594docker-compose pull
595docker-compose up -d
596echo "Премахване на стари образи..."
597docker image prune -f
598echo "Актуализирането е завършено!"
599EOF
600
601 # Правене на скриптовете изпълними
602 chmod +x "$INSTALL_DIR"/*.sh
603
604 log "Управляващите скриптове са създадени"
605}
606
607# Функция за показване на меню
608show_menu() {
609 show_header
610 echo -e "${WHITE}Изберете опция:${NC}"
611 echo ""
612 echo -e "${GREEN}1)${NC} Инсталиране на Nginx Proxy Manager"
613 echo -e "${GREEN}2)${NC} Инсталиране на Dashy V3"
614 echo -e "${GREEN}3)${NC} Инсталиране на File Browser"
615 echo -e "${GREEN}4)${NC} Инсталиране на Droppy"
616 echo -e "${GREEN}5)${NC} Инсталиране на OpenGist"
617 echo -e "${GREEN}6)${NC} Инсталиране на всички приложения"
618 echo -e "${GREEN}7)${NC} Показване на статус"
619 echo -e "${GREEN}8)${NC} Рестарт на всички услуги"
620 echo -e "${GREEN}9)${NC} Спиране на всички услуги"
621 echo -e "${GREEN}10)${NC} Създаване на бекъп"
622 echo -e "${GREEN}11)${NC} Актуализиране на приложенията"
623 echo -e "${RED}0)${NC} Изход"
624 echo ""
625 echo -e "${YELLOW}Моля, въведете вашия избор [0-11]:${NC} "
626}
627
628# Главна функция
629main() {
630 # Създаване на лог файл
631 touch "$LOG_FILE"
632 log "Стартиране на Proxmox Apps Installer"
633
634 # Проверка дали скриптът се изпълнява като root
635 if [[ $EUID -ne 0 ]]; then
636 echo -e "${RED}❌ Този скрипт трябва да се изпълни като root${NC}"
637 exit 1
638 fi
639
640 # Проверка на системни изисквания
641 check_requirements
642
643 # Инсталиране на Docker ако не е инсталиран
644 install_docker
645
646 # Създаване на директории
647 create_directories
648
649 # Главно меню
650 while true; do
651 show_menu
652 read -r choice
653
654 case $choice in
655 1)
656 echo -e "${BLUE}Инсталиране на Nginx Proxy Manager...${NC}"
657 install_nginx_proxy_manager
658 read -p "Натиснете Enter за да продължите..."
659 ;;
660 2)
661 echo -e "${BLUE}Инсталиране на Dashy V3...${NC}"
662 install_dashy
663 read -p "Натиснете Enter за да продължите..."
664 ;;
665 3)
666 echo -e "${BLUE}Инсталиране на File Browser...${NC}"
667 install_filebrowser
668 read -p "Натиснете Enter за да продължите..."
669 ;;
670 4)
671 echo -e "${BLUE}Инсталиране на Droppy...${NC}"
672 install_droppy
673 read -p "Натиснете Enter за да продължите..."
674 ;;
675 5)
676 echo -e "${BLUE}Инсталиране на OpenGist...${NC}"
677 install_opengist
678 read -p "Натиснете Enter за да продължите..."
679 ;;
680 6)
681 echo -e "${BLUE}Инсталиране на всички приложения...${NC}"
682 create_master_compose
683 cd "$INSTALL_DIR"
684 docker-compose up -d
685 create_management_scripts
686 echo -e "${GREEN}✅ Всички приложения са инсталирани успешно!${NC}"
687 echo ""
688 echo -e "${YELLOW}📋 Достъп до приложенията:${NC}"
689 echo -e "${CYAN} • Nginx Proxy Manager: http://your-ip:81${NC}"
690 echo -e "${CYAN} • Dashy Dashboard: http://your-ip:4000${NC}"
691 echo -e "${CYAN} • File Browser: http://your-ip:8080${NC}"
692 echo -e "${CYAN} • Droppy: http://your-ip:8989${NC}"
693 echo -e "${CYAN} • OpenGist: http://your-ip:6157${NC}"
694 echo ""
695 echo -e "${YELLOW}🔧 Управляващи скриптове в $INSTALL_DIR:${NC}"
696 echo -e "${CYAN} • ./start-all.sh - Стартиране на всички услуги${NC}"
697 echo -e "${CYAN} • ./stop-all.sh - Спиране на всички услуги${NC}"
698 echo -e "${CYAN} • ./restart-all.sh - Рестарт на всички услуги${NC}"
699 echo -e "${CYAN} • ./status.sh - Проверка на статуса${NC}"
700 echo -e "${CYAN} • ./backup.sh - Създаване на бекъп${NC}"
701 echo -e "${CYAN} • ./update.sh - Актуализиране${NC}"
702 read -p "Натиснете Enter за да продължите..."
703 ;;
704 7)
705 echo -e "${BLUE}Показване на статус...${NC}"
706 if [[ -f "$INSTALL_DIR/status.sh" ]]; then
707 bash "$INSTALL_DIR/status.sh"
708 else
709 echo -e "${RED}❌ Статус скриптът не е намерен${NC}"
710 fi
711 read -p "Натиснете Enter за да продължите..."
712 ;;
713 8)
714 echo -e "${BLUE}Рестарт на всички услуги...${NC}"
715 if [[ -f "$INSTALL_DIR/restart-all.sh" ]]; then
716 bash "$INSTALL_DIR/restart-all.sh"
717 else
718 echo -e "${RED}❌ Рестарт скриптът не е намерен${NC}"
719 fi
720 read -p "Натиснете Enter за да продължите..."
721 ;;
722 9)
723 echo -e "${BLUE}Спиране на всички услуги...${NC}"
724 if [[ -f "$INSTALL_DIR/stop-all.sh" ]]; then
725 bash "$INSTALL_DIR/stop-all.sh"
726 else
727 echo -e "${RED}❌ Стоп скриптът не е намерен${NC}"
728 fi
729 read -p "Натиснете Enter за да продължите..."
730 ;;
731 10)
732 echo -e "${BLUE}Създаване на бекъп...${NC}"
733 if [[ -f "$INSTALL_DIR/backup.sh" ]]; then
734 bash "$INSTALL_DIR/backup.sh"
735 else
736 echo -e "${RED}❌ Бекъп скриптът не е намерен${NC}"
737 fi
738 read -p "Натиснете Enter за да продължите..."
739 ;;
740 11)
741 echo -e "${BLUE}Актуализиране на приложенията...${NC}"
742 if [[ -f "$INSTALL_DIR/update.sh" ]]; then
743 bash "$INSTALL_DIR/update.sh"
744 else
745 echo -e "${RED}❌ Актуализиращият скрипт не е намерен${NC}"
746 fi
747 read -p "Натиснете Enter за да продължите..."
748 ;;
749 0)
750 echo -e "${GREEN}Благодаря за използването на Proxmox Apps Installer!${NC}"
751 log "Инсталаторът е приключен"
752 exit 0
753 ;;
754 *)
755 echo -e "${RED}❌ Невалиден избор. Моля, опитайте отново.${NC}"
756 read -p "Натиснете Enter за да продължите..."
757 ;;
758 esac
759 done
760}
761
762# Функция за показване на информация за системата
763show_system_info() {
764 echo -e "${CYAN}╔═══════════════════════════════════════════════════════════════════════════════╗${NC}"
765 echo -e "${CYAN}${WHITE}СИСТЕМНА ИНФОРМАЦИЯ${CYAN}${NC}"
766 echo -e "${CYAN}╚═══════════════════════════════════════════════════════════════════════════════╝${NC}"
767 echo ""
768 echo -e "${YELLOW}📊 Система:${NC} $(hostnamectl | grep "Operating System" | cut -d: -f2 | xargs)"
769 echo -e "${YELLOW}🖥️ Хост:${NC} $(hostname)"
770 echo -e "${YELLOW}💾 Памет:${NC} $(free -h | grep Mem | awk '{print $3"/"$2}')"
771 echo -e "${YELLOW}💿 Диск:${NC} $(df -h / | tail -1 | awk '{print $3"/"$2" ("$5" използвани)"}')"
772 echo -e "${YELLOW}🐳 Docker:${NC} $(docker --version 2>/dev/null || echo "Не е инсталиран")"
773 echo -e "${YELLOW}🔧 Docker Compose:${NC} $(docker-compose --version 2>/dev/null || echo "Не е инсталиран")"
774 echo ""
775}
776
777# Функция за проверка на портове
778check_ports() {
779 echo -e "${BLUE}Проверка на портове...${NC}"
780
781 declare -A PORTS=(
782 ["80"]="HTTP (Nginx Proxy Manager)"
783 ["443"]="HTTPS (Nginx Proxy Manager)"
784 ["81"]="Nginx Proxy Manager Admin"
785 ["4000"]="Dashy Dashboard"
786 ["8080"]="File Browser"
787 ["8989"]="Droppy"
788 ["6157"]="OpenGist"
789 )
790
791 for port in "${!PORTS[@]}"; do
792 if ss -tuln | grep -q ":$port "; then
793 echo -e "${RED}❌ Порт $port (${PORTS[$port]}) е зает${NC}"
794 else
795 echo -e "${GREEN}✅ Порт $port (${PORTS[$port]}) е свободен${NC}"
796 fi
797 done
798 echo ""
799}
800
801# Функция за firewall конфигурация
802configure_firewall() {
803 log "Конфигуриране на firewall..."
804
805 if command -v ufw &> /dev/null; then
806 echo -e "${BLUE}Конфигуриране на UFW firewall...${NC}"
807
808 # Разрешаване на портове
809 ufw allow 80/tcp comment "HTTP"
810 ufw allow 443/tcp comment "HTTPS"
811 ufw allow 81/tcp comment "Nginx Proxy Manager"
812 ufw allow 4000/tcp comment "Dashy"
813 ufw allow 8080/tcp comment "File Browser"
814 ufw allow 8989/tcp comment "Droppy"
815 ufw allow 6157/tcp comment "OpenGist"
816
817 # Разрешаване на SSH
818 ufw allow 22/tcp comment "SSH"
819
820 echo -e "${GREEN}✅ UFW firewall е конфигуриран${NC}"
821 else
822 echo -e "${YELLOW}⚠️ UFW не е инсталиран. Моля, конфигурирайте firewall-а ръчно${NC}"
823 fi
824}
825
826# Функция за показване на полезни команди
827show_useful_commands() {
828 echo -e "${CYAN}╔═══════════════════════════════════════════════════════════════════════════════╗${NC}"
829 echo -e "${CYAN}${WHITE}ПОЛЕЗНИ КОМАНДИ${CYAN}${NC}"
830 echo -e "${CYAN}╚═══════════════════════════════════════════════════════════════════════════════╝${NC}"
831 echo ""
832 echo -e "${YELLOW}🐳 Docker команди:${NC}"
833 echo -e "${CYAN} docker ps${NC} - Показва работещите контейнери"
834 echo -e "${CYAN} docker logs <container-name>${NC} - Показва логове на контейнер"
835 echo -e "${CYAN} docker exec -it <container-name> /bin/bash${NC} - Влизане в контейнер"
836 echo -e "${CYAN} docker system prune -f${NC} - Почистване на неизползвани ресурси"
837 echo ""
838 echo -e "${YELLOW}🔧 Docker Compose команди:${NC}"
839 echo -e "${CYAN} docker-compose ps${NC} - Статус на услугите"
840 echo -e "${CYAN} docker-compose logs -f${NC} - Следене на логове"
841 echo -e "${CYAN} docker-compose pull${NC} - Актуализиране на образите"
842 echo -e "${CYAN} docker-compose restart <service>${NC} - Рестарт на услуга"
843 echo ""
844 echo -e "${YELLOW}📁 Важни директории:${NC}"
845 echo -e "${CYAN} $INSTALL_DIR${NC} - Конфигурационни файлове"
846 echo -e "${CYAN} $DATA_DIR${NC} - Данни на приложенията"
847 echo -e "${CYAN} $LOG_FILE${NC} - Лог файл на инсталатора"
848 echo ""
849}
850
851# Функция за генериране на SSL сертификати
852generate_ssl_info() {
853 echo -e "${CYAN}╔═══════════════════════════════════════════════════════════════════════════════╗${NC}"
854 echo -e "${CYAN}${WHITE}SSL СЕРТИФИКАТИ${CYAN}${NC}"
855 echo -e "${CYAN}╚═══════════════════════════════════════════════════════════════════════════════╝${NC}"
856 echo ""
857 echo -e "${YELLOW}🔐 За SSL сертификати използвайте Nginx Proxy Manager:${NC}"
858 echo -e "${CYAN} 1. Отворете http://your-ip:81${NC}"
859 echo -e "${CYAN} 2. Влезте с [email protected] / changeme${NC}"
860 echo -e "${CYAN} 3. Променете паролата при първо влизане${NC}"
861 echo -e "${CYAN} 4. Добавете домейни в 'Proxy Hosts'${NC}"
862 echo -e "${CYAN} 5. Активирайте 'Force SSL' и 'HTTP/2 Support'${NC}"
863 echo -e "${CYAN} 6. Nginx Proxy Manager автоматично ще генерира Let's Encrypt сертификати${NC}"
864 echo ""
865}
866
867# Функция за създаване на systemd службa
868create_systemd_service() {
869 log "Създаване на systemd служба..."
870
871 cat > "/etc/systemd/system/proxmox-apps.service" << 'EOF'
872[Unit]
873Description=Proxmox Apps Docker Compose
874Requires=docker.service
875After=docker.service
876
877[Service]
878Type=forking
879RemainAfterExit=yes
880WorkingDirectory=/opt/proxmox-apps
881ExecStart=/usr/local/bin/docker-compose up -d
882ExecStop=/usr/local/bin/docker-compose down
883ExecReload=/usr/local/bin/docker-compose restart
884TimeoutStartSec=0
885
886[Install]
887WantedBy=multi-user.target
888EOF
889
890 systemctl daemon-reload
891 systemctl enable proxmox-apps.service
892
893 echo -e "${GREEN}✅ Systemd служба е създадена и активирана${NC}"
894 echo -e "${YELLOW}📋 Използвайте: systemctl start|stop|restart proxmox-apps${NC}"
895}
896
897# Trap функция за почистване при прекъсване
898cleanup() {
899 log "Почистване при прекъсване..."
900 echo -e "${YELLOW}⚠️ Инсталацията е прекъсната${NC}"
901 exit 130
902}
903
904# Настройка на trap за SIGINT (Ctrl+C)
905trap cleanup SIGINT
906
907# Функция за показване на help
908show_help() {
909 echo -e "${CYAN}╔═══════════════════════════════════════════════════════════════════════════════╗${NC}"
910 echo -e "${CYAN}${WHITE}ПОМОЩНА ИНФОРМАЦИЯ${CYAN}${NC}"
911 echo -e "${CYAN}╚═══════════════════════════════════════════════════════════════════════════════╝${NC}"
912 echo ""
913 echo -e "${YELLOW}📖 Използване:${NC}"
914 echo -e "${CYAN} sudo ./proxmox-apps-installer.sh${NC}"
915 echo ""
916 echo -e "${YELLOW}🔧 Опции:${NC}"
917 echo -e "${CYAN} --help${NC} - Показва тази помощна информация"
918 echo -e "${CYAN} --version${NC} - Показва версията на скрипта"
919 echo -e "${CYAN} --check${NC} - Проверява системните изисквания"
920 echo -e "${CYAN} --ports${NC} - Проверява наличността на портове"
921 echo ""
922 echo -e "${YELLOW}📂 Структура на файлове:${NC}"
923 echo -e "${CYAN} /opt/proxmox-apps/${NC} - Конфигурационни файлове"
924 echo -e "${CYAN} /var/lib/proxmox-apps/${NC} - Данни на приложенията"
925 echo -e "${CYAN} /var/log/proxmox-apps-installer.log${NC} - Лог файл"
926 echo ""
927 echo -e "${YELLOW}🌐 Портове по подразбиране:${NC}"
928 echo -e "${CYAN} 80/443 - Nginx Proxy Manager (HTTP/HTTPS)${NC}"
929 echo -e "${CYAN} 81 - Nginx Proxy Manager Admin${NC}"
930 echo -e "${CYAN} 4000 - Dashy Dashboard${NC}"
931 echo -e "${CYAN} 8080 - File Browser${NC}"
932 echo -e "${CYAN} 8989 - Droppy${NC}"
933 echo -e "${CYAN} 6157 - OpenGist${NC}"
934 echo ""
935}
936
937# Проверка на command line аргументи
938case "${1:-}" in
939 --help|-h)
940 show_help
941 exit 0
942 ;;
943 --version|-v)
944 echo "Proxmox Apps Installer v1.0"
945 exit 0
946 ;;
947 --check|-c)
948 show_system_info
949 check_requirements
950 exit 0
951 ;;
952 --ports|-p)
953 check_ports
954 exit 0
955 ;;
956 *)
957 # Нормално изпълнение
958 main "$@"
959 ;;
960esac