Última atividade 1749140301

Аналог a2enable/a2disable для nginx - управляет файлами виртуальных хостов.

Revisão c7b7aca07c7d97beadf6ec2f500e2223d9a8c5de

vhostmanage.sh Bruto
1#!/bin/bash
2
3### Конфигурация ###
4SEARCH_EXTENSION="*" # Можно изменить на "*" для поиска всех файлов
5SITES_AVAILABLE="/etc/nginx/sites-available"
6SITES_ENABLED="/etc/nginx/sites-enabled"
7
8### Стили вывода ###
9GREEN='\033[0;32m'
10RED='\033[0;31m'
11YELLOW='\033[1;33m'
12NC='\033[0m' # No Color
13
14### Проверка прав ###
15check_root() {
16 if [ "$(id -u)" -ne 0 ]; then
17 echo -e "${RED}Ошибка: требуется root (используйте sudo)${NC}" >&2
18 exit 1
19 fi
20}
21
22### Получить реальный путь из симлинка ###
23get_available_path() {
24 local enabled_link="$1"
25 readlink -f "$enabled_link" | sed "s|^$SITES_AVAILABLE/||"
26}
27
28### Поиск конфигов ###
29find_configs() {
30 local search_pattern="*.$SEARCH_EXTENSION"
31 [ "$SEARCH_EXTENSION" = "*" ] && search_pattern="*"
32
33 find "$SITES_AVAILABLE" -type f -name "$search_pattern" | while read -r file; do
34 echo "${file#$SITES_AVAILABLE/}"
35 done
36}
37
38### Проверка включен ли сайт ###
39is_enabled() {
40 local site_path="$1"
41 find "$SITES_ENABLED" -type l | while read -r link; do
42 if [ "$(get_available_path "$link")" = "$site_path" ]; then
43 echo "1"
44 return
45 fi
46 done | grep -q "1"
47}
48
49### Получить имя симлинка для сайта ###
50get_enabled_name() {
51 local site_path="$1"
52 find "$SITES_ENABLED" -type l | while read -r link; do
53 if [ "$(get_available_path "$link")" = "$site_path" ]; then
54 basename "$link"
55 return
56 fi
57 done
58}
59
60### Вывод списка ###
61list_sites() {
62 echo -e "${YELLOW}Доступные сайты (расширение: $SEARCH_EXTENSION):${NC}"
63 echo "===================================="
64
65 find_configs | while read -r rel_path; do
66 if is_enabled "$rel_path"; then
67 local enabled_name=$(get_enabled_name "$rel_path")
68 local base_name=$(basename "$rel_path")
69 if [ "$enabled_name" != "$base_name" ]; then
70 echo -e "${GREEN}[enabled]${NC} $rel_path (как $enabled_name)"
71 else
72 echo -e "${GREEN}[enabled]${NC} $rel_path"
73 fi
74 else
75 echo -e "${RED}[disabled]${NC} $rel_path"
76 fi
77 done
78}
79
80### Включение сайта ###
81enable_site() {
82 local site_path="$1"
83 local link_name="${2:-$(basename "$site_path")}"
84 local available_path="$SITES_AVAILABLE/$site_path"
85 local enabled_path="$SITES_ENABLED/$link_name"
86
87 if [ ! -f "$available_path" ]; then
88 echo -e "${RED}Ошибка: файл $available_path не существует${NC}" >&2
89 exit 1
90 fi
91
92 if is_enabled "$site_path"; then
93 local current_name=$(get_enabled_name "$site_path")
94 if [ "$current_name" != "$(basename "$site_path")" ]; then
95 echo -e "${YELLOW}Предупреждение: сайт уже включен как $current_name${NC}" >&2
96 else
97 echo -e "${YELLOW}Предупреждение: сайт уже включен${NC}" >&2
98 fi
99 return
100 fi
101
102 if ln -s "$available_path" "$enabled_path"; then
103 if [ "$link_name" != "$(basename "$site_path")" ]; then
104 echo -e "${GREEN}Включен: $site_path (как $link_name)${NC}"
105 else
106 echo -e "${GREEN}Включен: $site_path${NC}"
107 fi
108
109 if ! nginx -t; then
110 echo -e "${RED}Ошибка конфигурации!${NC}" >&2
111 rm "$enabled_path"
112 exit 1
113 fi
114
115 systemctl reload nginx
116 echo "NGINX перезагружен"
117 else
118 echo -e "${RED}Ошибка создания симлинка${NC}" >&2
119 exit 1
120 fi
121}
122
123### Выключение сайта ###
124disable_site() {
125 local site_path="$1"
126 local enabled_name=$(get_enabled_name "$site_path")
127 local enabled_path="$SITES_ENABLED/$enabled_name"
128
129 if [ -z "$enabled_name" ]; then
130 echo -e "${YELLOW}Предупреждение: сайт не включен${NC}" >&2
131 return
132 fi
133
134 if rm "$enabled_path"; then
135 if [ "$enabled_name" != "$(basename "$site_path")" ]; then
136 echo -e "${GREEN}Выключен: $enabled_name (ссылался на $site_path)${NC}"
137 else
138 echo -e "${GREEN}Выключен: $site_path${NC}"
139 fi
140
141 if ! nginx -t; then
142 echo -e "${RED}Ошибка конфигурации!${NC}" >&2
143 exit 1
144 fi
145
146 systemctl reload nginx
147 echo "NGINX перезагружен"
148 else
149 echo -e "${RED}Ошибка удаления симлинка${NC}" >&2
150 exit 1
151 fi
152}
153
154### Основной код ###
155show_help() {
156 echo -e "${YELLOW}Использование:${NC}"
157 echo " nghost list - Список сайтов"
158 echo " nghost enable <site> [link_name] - Включить сайт"
159 echo " nghost disable <site> - Выключить сайт"
160 echo -e "\n${YELLOW}Настройки:${NC}"
161 echo " Измените SEARCH_EXTENSION в скрипте"
162 echo " Доступные значения: conf (по умолчанию) или * (все файлы)"
163}
164
165check_root
166
167case "$1" in
168 list)
169 list_sites
170 ;;
171 enable)
172 if [ -z "$2" ]; then
173 echo -e "${RED}Укажите имя сайта${NC}" >&2
174 show_help
175 exit 1
176 fi
177 enable_site "$2" "$3"
178 ;;
179 disable)
180 if [ -z "$2" ]; then
181 echo -e "${RED}Укажите имя сайта${NC}" >&2
182 show_help
183 exit 1
184 fi
185 disable_site "$2"
186 ;;
187 *)
188 show_help
189 exit 1
190 ;;
191esac
192
193