This repository was archived by the owner on Aug 23, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup.sh
More file actions
286 lines (241 loc) · 8.48 KB
/
Copy pathsetup.sh
File metadata and controls
286 lines (241 loc) · 8.48 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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
#!/bin/bash
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Функция для генерации случайной строки
generate_random_string() {
local length=$1
openssl rand -hex $length 2>/dev/null || head /dev/urandom | tr -dc A-Za-z0-9 | head -c $length
}
# Функция для генерации UUID
generate_uuid() {
uuidgen 2>/dev/null || python3 -c "import uuid; print(uuid.uuid4())" 2>/dev/null || generate_random_string 16
}
# Функция для чтения пользовательского ввода с значением по умолчанию
read_with_default() {
local prompt="$1"
local default="$2"
local var_name="$3"
if [ -n "$default" ]; then
echo -e "${BLUE}$prompt${NC} [${YELLOW}$default${NC}]: "
else
echo -e "${BLUE}$prompt${NC}: "
fi
read input
if [ -z "$input" ] && [ -n "$default" ]; then
input="$default"
fi
eval "$var_name='$input'"
}
# Функция для чтения пароля
read_password() {
local prompt="$1"
local var_name="$2"
echo -e "${BLUE}$prompt${NC}: "
read -s input
eval "$var_name='$input'"
}
# Функция для подтверждения yes/no
confirm() {
local prompt="$1"
while true; do
echo -e "${YELLOW}$prompt${NC} (y/n): "
read yn
case $yn in
[Yy]* ) return 0;;
[Nn]* ) return 1;;
* ) echo "Пожалуйста, ответьте y или n.";;
esac
done
}
echo -e "${GREEN}=== Настройка CookieCMS Docker ===${NC}"
echo ""
# Проверяем существование .env файла
if [ -f ".env" ]; then
if confirm "Файл .env уже существует. Перезаписать?"; then
rm .env
else
echo -e "${YELLOW}Настройка отменена.${NC}"
exit 0
fi
fi
# Копируем базовый файл если он существует
if [ -f ".env.example" ]; then
cp .env.example .env
echo -e "${GREEN}Создан .env файл на основе .env.example${NC}"
else
touch .env
echo -e "${GREEN}Создан новый .env файл${NC}"
fi
echo ""
echo -e "${GREEN}=== Основные настройки сайта ===${NC}"
# Основные настройки
read_with_default "Название сайта" "cookiecms" NAME_SITE
# Генерация безопасного кода
if confirm "Сгенерировать случайный SECURE_CODE?"; then
SECURE_CODE=$(generate_random_string 32)
echo -e "${GREEN}Сгенерирован SECURE_CODE: $SECURE_CODE${NC}"
else
read_with_default "SECURE_CODE (оставьте пустым для генерации)" "" SECURE_CODE
if [ -z "$SECURE_CODE" ]; then
SECURE_CODE=$(generate_random_string 32)
echo -e "${GREEN}Сгенерирован SECURE_CODE: $SECURE_CODE${NC}"
fi
fi
# API токен
if confirm "Сгенерировать случайный SERVICE_API_TOKEN?"; then
SERVICE_API_TOKEN=$(generate_uuid)
echo -e "${GREEN}Сгенерирован SERVICE_API_TOKEN: $SERVICE_API_TOKEN${NC}"
else
read_with_default "SERVICE_API_TOKEN (оставьте пустым для генерации)" "" SERVICE_API_TOKEN
if [ -z "$SERVICE_API_TOKEN" ]; then
SERVICE_API_TOKEN=$(generate_uuid)
echo -e "${GREEN}Сгенерирован SERVICE_API_TOKEN: $SERVICE_API_TOKEN${NC}"
fi
fi
read_with_default "Максимальное количество сохраненных скинов" "1" MAX_SAVED_SKINS
read_with_default "Домен сайта" "http://localhost:3000" DOMAIN
echo ""
echo -e "${GREEN}=== Настройки окружения ===${NC}"
echo "Выберите тип окружения:"
echo "1) development"
echo "2) production"
echo "3) testing"
echo "4) demo"
read -p "Введите номер (1-4) [2]: " env_choice
case $env_choice in
1) ENV="development";;
3) ENV="testing";;
4) ENV="demo";;
*) ENV="production";;
esac
read_with_default "Уровень логирования" "error,debug,info,warn" LOG_LEVEL
read_with_default "Порт приложения" "8000" PORT
read_with_default "Дни хранения онлайна" "7" SAVED_DAYS
echo ""
echo -e "${GREEN}=== Настройки SMTP ===${NC}"
if confirm "Настроить SMTP для отправки почты?"; then
read_with_default "SMTP хост" "" SMTP_HOST
read_with_default "SMTP пользователь" "" SMTP_USERNAME
read_password "SMTP пароль" SMTP_PASSWORD
echo ""
if confirm "Использовать защищенное соединение (SSL/TLS)?"; then
SMTP_SECURE="true"
read_with_default "SMTP порт" "587" SMTP_PORT
else
SMTP_SECURE="false"
read_with_default "SMTP порт" "25" SMTP_PORT
fi
else
SMTP_HOST=""
SMTP_USERNAME=""
SMTP_PASSWORD=""
SMTP_SECURE=""
SMTP_PORT=""
fi
echo ""
echo -e "${GREEN}=== Настройки Discord ===${NC}"
if confirm "Настроить интеграцию с Discord?"; then
DISCORD_ENABLED="true"
read_with_default "Discord Client ID" "" DISCORD_CLIENT_ID
read_with_default "Discord Secret ID" "" DISCORD_SECRET_ID
read_with_default "Discord Scopes" "identify,email" DISCORD_SCOPES
read_with_default "Discord Redirect URL" "http://localhost:3000/auth/discord/callback" DISCORD_REDIRECT_URL
read_with_default "Discord Guild ID" "" DISCORD_GUILD_ID
read_with_default "Discord Role" "" DISCORD_ROLE
else
DISCORD_ENABLED="false"
DISCORD_CLIENT_ID=""
DISCORD_SECRET_ID=""
DISCORD_SCOPES=""
DISCORD_REDIRECT_URL=""
DISCORD_GUILD_ID=""
DISCORD_ROLE=""
fi
# Создание .env файла
echo ""
echo -e "${GREEN}=== Создание .env файла ===${NC}"
cat > .env << EOF
# Основные настройки сайта
NAME_SITE=$NAME_SITE
SECURE_CODE=$SECURE_CODE
SERVICE_API_TOKEN=$SERVICE_API_TOKEN
MAX_SAVED_SKINS=$MAX_SAVED_SKINS
DOMAIN=$DOMAIN
# Настройки environment
ENV=$ENV
# Настройки шифрования паролей
EOF
if [ "$PASSCRYPT_TYPE" = "argon2" ]; then
cat >> .env << EOF
PASSCRYPT_TYPE=$PASSCRYPT_TYPE
PASSCRYPT_ROUNDS=$PASSCRYPT_ROUNDS
EOF
else
cat >> .env << EOF
# PASSCRYPT_TYPE=bcrypt
# PASSCRYPT_ROUNDS=10
EOF
fi
cat >> .env << EOF
# Настройки логирования
LOG_LEVEL=$LOG_LEVEL
# Настройки аудита
AUDIT_SECRET_ENABLED=$AUDIT_SECRET_ENABLED
AUDIT_SECRET_URL=$AUDIT_SECRET_URL
# Настройки базы данных
DB_TYPE=postgres
DB_HOST=postgres
DB_USERNAME=cookiecms
DB_PASSWORD=cookiecms
DB_NAME=cookiecms
DB_PORT=5432
# Настройки SMTP
SMTP_HOST=$SMTP_HOST
SMTP_USERNAME=$SMTP_USERNAME
SMTP_PASSWORD=$SMTP_PASSWORD
SMTP_SECURE=$SMTP_SECURE
SMTP_PORT=$SMTP_PORT
# Настройки Discord
DISCORD_ENABLED=$DISCORD_ENABLED
DISCORD_CLIENT_ID=$DISCORD_CLIENT_ID
DISCORD_SECRET_ID=$DISCORD_SECRET_ID
DISCORD_SCOPES=$DISCORD_SCOPES
DISCORD_REDIRECT_URL=$DISCORD_REDIRECT_URL
DISCORD_GUILD_ID=$DISCORD_GUILD_ID
DISCORD_ROLE=$DISCORD_ROLE
PORT=$PORT
# Настройки сохранения онлайна
savedDays=$SAVED_DAYS
EOF
echo -e "${GREEN}✅ Файл .env успешно создан!${NC}"
echo ""
# Показ сводки
echo -e "${BLUE}=== Сводка настроек ===${NC}"
echo -e "Название сайта: ${YELLOW}$NAME_SITE${NC}"
echo -e "Домен: ${YELLOW}$DOMAIN${NC}"
echo -e "Окружение: ${YELLOW}$ENV${NC}"
echo -e "Порт: ${YELLOW}$PORT${NC}"
echo -e "SMTP настроен: ${YELLOW}$([ -n "$SMTP_HOST" ] && echo "Да" || echo "Нет")${NC}"
echo -e "Discord настроен: ${YELLOW}$([ "$DISCORD_ENABLED" = "true" ] && echo "Да" || echo "Нет")${NC}"
echo ""
if confirm "Запустить Docker Compose сейчас?"; then
echo -e "${GREEN}Запуск Docker Compose...${NC}"
docker-compose up -d
echo ""
echo -e "${GREEN}=== CookieCMS запущен! ===${NC}"
echo -e "Frontend: ${BLUE}http://localhost:3000${NC}"
echo -e "API: ${BLUE}http://localhost:8000${NC}"
echo -e "PgAdmin: ${BLUE}http://localhost:8080${NC}"
echo -e " - Email: admin@cookiecms.com"
echo -e " - Пароль: cookiecms"
else
echo ""
echo -e "${YELLOW}Для запуска выполните:${NC}"
echo -e "${BLUE}docker-compose up -d${NC}"
fi
echo ""
echo -e "${GREEN}Настройка завершена!${NC}"