-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathApache_scr2.sh
224 lines (185 loc) · 7.65 KB
/
Apache_scr2.sh
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
#!/bin/bash
# Перевірка прав root
if [[ $EUID -ne 0 ]]; then
echo "Цей скрипт повинен запускатися з правами root"
exit 1
fi
# Налаштування кольорів для виводу
readonly RED="\033[0;31m"
readonly GREEN="\033[0;32m"
readonly YELLOW="\033[1;33m"
readonly BLUE="\033[0;34m"
readonly RESET="\033[0m"
# Налаштування логування
readonly LOG_FILE="/var/log/lamp-install.log"
exec 1> >(tee -a "$LOG_FILE")
exec 2> >(tee -a "$LOG_FILE" >&2)
# Функція для виводу повідомлень
log() {
local type=$1
local message=$2
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
case $type in
"INFO") echo -e "${BLUE}[INFO]${RESET} ${timestamp} - $message" ;;
"SUCCESS") echo -e "${GREEN}[SUCCESS]${RESET} ${timestamp} - $message" ;;
"ERROR") echo -e "${RED}[ERROR]${RESET} ${timestamp} - $message" ;;
"WARNING") echo -e "${YELLOW}[WARNING]${RESET} ${timestamp} - $message" ;;
esac
}
# Функція для перевірки успішності виконання команд
check_success() {
if [ $? -ne 0 ]; then
log "ERROR" "$1"
exit 1
fi
}
# Функція для перевірки доступності порту
check_port() {
local port=$1
if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null ; then
log "WARNING" "Порт $port вже використовується"
return 1
fi
return 0
}
# Функція для створення резервної копії конфігурації
backup_config() {
local timestamp=$(date +%Y%m%d_%H%M%S)
local backup_dir="/root/lamp_backup_$timestamp"
log "INFO" "Створення резервної копії конфігурації..."
mkdir -p "$backup_dir"
[[ -d "/etc/apache2" ]] && cp -r /etc/apache2 "$backup_dir/"
[[ -d "/etc/mysql" ]] && cp -r /etc/mysql "$backup_dir/"
[[ -f "/etc/php/*/apache2/php.ini" ]] && cp /etc/php/*/apache2/php.ini "$backup_dir/"
log "SUCCESS" "Резервна копія створена в $backup_dir"
}
# Функція для оптимізації Apache
optimize_apache() {
log "INFO" "Оптимізація Apache..."
a2enmod expires headers deflate http2
cat > /etc/apache2/mods-available/mpm_event.conf <<EOF
<IfModule mpm_event_module>
StartServers 3
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
EOF
a2dismod mpm_prefork
a2enmod mpm_event
systemctl restart apache2
check_success "Не вдалося оптимізувати Apache"
}
# Функція для оптимізації MariaDB
optimize_mariadb() {
log "INFO" "Оптимізація MariaDB..."
cat > /etc/mysql/conf.d/optimizations.cnf <<EOF
[mysqld]
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
key_buffer_size = 32M
max_connections = 100
query_cache_size = 32M
query_cache_limit = 1M
EOF
systemctl restart mariadb
check_success "Не вдалося оптимізувати MariaDB"
}
# Функція для оптимізації PHP
optimize_php() {
log "INFO" "Оптимізація PHP..."
PHP_INI=$(php -i | grep "Loaded Configuration File" | awk '{print $5}')
sed -i 's/memory_limit = .*/memory_limit = 256M/' "$PHP_INI"
sed -i 's/max_execution_time = .*/max_execution_time = 300/' "$PHP_INI"
sed -i 's/post_max_size = .*/post_max_size = 64M/' "$PHP_INI"
sed -i 's/upload_max_filesize = .*/upload_max_filesize = 64M/' "$PHP_INI"
sed -i 's/max_input_time = .*/max_input_time = 300/' "$PHP_INI"
cat > /etc/php/*/mods-available/opcache.ini <<EOF
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1
EOF
systemctl restart apache2
check_success "Не вдалося оптимізувати PHP"
}
# Основний код
main() {
log "INFO" "Початок встановлення LAMP..."
# Створення резервної копії
backup_config
# Встановлення змінних для уникнення інтерактивних запитів
export DEBIAN_FRONTEND=noninteractive
# Генерація паролів
root_password=$(openssl rand -base64 12)
phpmyadmin_password=$(openssl rand -base64 12)
app_password=$(openssl rand -base64 12)
# Налаштування phpMyAdmin
debconf-set-selections <<EOF
phpmyadmin phpmyadmin/dbconfig-install boolean true
phpmyadmin phpmyadmin/app-password-confirm password $app_password
phpmyadmin phpmyadmin/mysql/admin-pass password $root_password
phpmyadmin phpmyadmin/mysql/app-pass password $app_password
phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2
EOF
# Перевірка портів
check_port 80 || log "WARNING" "Порт 80 зайнятий"
check_port 3306 || log "WARNING" "Порт 3306 зайнятий"
# Оновлення системи
log "INFO" "Оновлення системи..."
apt update && apt upgrade -y
check_success "Не вдалося оновити систему"
# Встановлення пакетів
log "INFO" "Встановлення пакетів..."
apt install -y apache2 mariadb-server mariadb-client php php-mysql php-mbstring php-zip php-gd php-json php-curl phpmyadmin
check_success "Не вдалося встановити пакети"
# Запуск сервісів
systemctl start mariadb apache2
systemctl enable mariadb apache2
# Налаштування MariaDB
mysql -u root <<EOF
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${root_password}');
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
EOF
# Створення користувача phpMyAdmin
mysql -u root -p"${root_password}" <<EOF
CREATE USER IF NOT EXISTS 'admin'@'localhost' IDENTIFIED BY '${phpmyadmin_password}';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF
# Оптимізації
optimize_apache
optimize_mariadb
optimize_php
# Збереження інформації
cat > /root/lamp_info.txt <<EOF
Дата встановлення: $(date)
MariaDB root password: ${root_password}
phpMyAdmin admin password: ${phpmyadmin_password}
Лог встановлення: ${LOG_FILE}
EOF
chmod 600 /root/lamp_info.txt
log "SUCCESS" "Встановлення LAMP завершено успішно!"
# Вивід інформації
echo -e "\n${GREEN}=== Інформація про встановлення ===${RESET}"
echo -e "${BLUE}Логін (phpMyAdmin):${RESET} admin"
echo -e "${BLUE}Пароль (phpMyAdmin):${RESET} ${GREEN}$phpmyadmin_password${RESET}"
echo -e "${BLUE}Пароль root (MariaDB):${RESET} ${GREEN}$root_password${RESET}"
echo -e "${BLUE}Адреса phpMyAdmin:${RESET} http://$(hostname -I | awk '{print $1}')/phpmyadmin"
echo -e "${YELLOW}Інформація про встановлення збережена в /root/lamp_info.txt${RESET}"
echo -e "${YELLOW}Лог встановлення доступний в ${LOG_FILE}${RESET}"
}
# Запуск основної функції
main