Ostatnio aktywny 1749140301

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

KarelWintersky zrewidował ten Gist 1749140300. Przejdź do rewizji

Brak zmian

KarelWintersky zrewidował ten Gist 1748429232. Przejdź do rewizji

1 file changed, 192 insertions

vhostmanage.sh(stworzono plik)

@@ -0,0 +1,192 @@
1 + #!/bin/bash
2 +
3 + ### Конфигурация ###
4 + SEARCH_EXTENSION="*" # Можно изменить на "*" для поиска всех файлов
5 + SITES_AVAILABLE="/etc/nginx/sites-available"
6 + SITES_ENABLED="/etc/nginx/sites-enabled"
7 +
8 + ### Стили вывода ###
9 + GREEN='\033[0;32m'
10 + RED='\033[0;31m'
11 + YELLOW='\033[1;33m'
12 + NC='\033[0m' # No Color
13 +
14 + ### Проверка прав ###
15 + check_root() {
16 + if [ "$(id -u)" -ne 0 ]; then
17 + echo -e "${RED}Ошибка: требуется root (используйте sudo)${NC}" >&2
18 + exit 1
19 + fi
20 + }
21 +
22 + ### Получить реальный путь из симлинка ###
23 + get_available_path() {
24 + local enabled_link="$1"
25 + readlink -f "$enabled_link" | sed "s|^$SITES_AVAILABLE/||"
26 + }
27 +
28 + ### Поиск конфигов ###
29 + find_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 + ### Проверка включен ли сайт ###
39 + is_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 + ### Получить имя симлинка для сайта ###
50 + get_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 + ### Вывод списка ###
61 + list_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 + ### Включение сайта ###
81 + enable_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 + ### Выключение сайта ###
124 + disable_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 + ### Основной код ###
155 + show_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 +
165 + check_root
166 +
167 + case "$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 + ;;
191 + esac
192 +
Nowsze Starsze