Compare commits
21 Commits
23f6ec50d7
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 96cb2655ca | |||
| 62439ddad1 | |||
| a7beaff4c2 | |||
| cbb3db2364 | |||
| 84cfec7057 | |||
| d1a26b9c1e | |||
| ac4c9b515d | |||
| 7663b5b04e | |||
| f4f875bfc7 | |||
| 1217a079ce | |||
| 1c72b07027 | |||
| 285b6b64b9 | |||
| 96bdbc94f6 | |||
| 4ed747aa7a | |||
| 1b5673aef1 | |||
| 21dd04a4b4 | |||
| 277a61358d | |||
| a22ade5ec8 | |||
| e8501ea69b | |||
| b23eb8f5d6 | |||
| 977ed493b0 |
646
install.sh
646
install.sh
@@ -48,9 +48,12 @@ cleanup_apache_config() {
|
|||||||
if [ -f /etc/apache2/ports.conf ]; then
|
if [ -f /etc/apache2/ports.conf ]; then
|
||||||
cp /etc/apache2/ports.conf /etc/apache2/ports.conf.backup.$(date +%Y%m%d_%H%M%S)
|
cp /etc/apache2/ports.conf /etc/apache2/ports.conf.backup.$(date +%Y%m%d_%H%M%S)
|
||||||
|
|
||||||
grep -v "^Listen\s\+.*80$" /etc/apache2/ports.conf > /etc/apache2/ports.conf.tmp || true
|
grep -v "^Listen\s\+.*:80$" /etc/apache2/ports.conf > /etc/apache2/ports.conf.tmp || true
|
||||||
echo "Listen *:80" >> /etc/apache2/ports.conf.tmp
|
grep -v "^Listen\s\+80$" /etc/apache2/ports.conf.tmp > /etc/apache2/ports.conf.tmp2 || true
|
||||||
mv /etc/apache2/ports.conf.tmp /etc/apache2/ports.conf
|
|
||||||
|
echo "Listen *:80" >> /etc/apache2/ports.conf.tmp2
|
||||||
|
mv /etc/apache2/ports.conf.tmp2 /etc/apache2/ports.conf
|
||||||
|
rm -f /etc/apache2/ports.conf.tmp
|
||||||
fi
|
fi
|
||||||
|
|
||||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
@@ -58,11 +61,32 @@ cleanup_apache_config() {
|
|||||||
if [ -f "$HTTPD_CONF" ]; then
|
if [ -f "$HTTPD_CONF" ]; then
|
||||||
cp "$HTTPD_CONF" "${HTTPD_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
|
cp "$HTTPD_CONF" "${HTTPD_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
|
||||||
|
|
||||||
grep -v "^Listen.*:80" "$HTTPD_CONF" > "${HTTPD_CONF}.tmp" || true
|
grep -v "^Listen.*:80$" "$HTTPD_CONF" > "${HTTPD_CONF}.tmp" || true
|
||||||
echo "Listen *:80" >> "${HTTPD_CONF}.tmp"
|
grep -v "^Listen 80$" "${HTTPD_CONF}.tmp" > "${HTTPD_CONF}.tmp2" || true
|
||||||
mv "${HTTPD_CONF}.tmp" "$HTTPD_CONF"
|
|
||||||
|
echo "Listen 80" >> "${HTTPD_CONF}.tmp2"
|
||||||
|
mv "${HTTPD_CONF}.tmp2" "$HTTPD_CONF"
|
||||||
|
rm -f "${HTTPD_CONF}.tmp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "/etc/httpd/conf.d/php-fpm.conf" ]; then
|
||||||
|
log_info "Очистка PHP-FPM конфигурации от LoadModule директив..."
|
||||||
|
|
||||||
|
cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF'
|
||||||
|
<FilesMatch \.php$>
|
||||||
|
SetHandler "proxy:unix:/var/opt/remi/php83/run/php-fpm/www.sock|fcgi://localhost"
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
DirectoryIndex index.php index.html index.htm
|
||||||
|
|
||||||
|
<Files "*.php">
|
||||||
|
Require all granted
|
||||||
|
</Files>
|
||||||
|
EOF
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
log_success "Конфигурация Apache очищена от дубликатов"
|
||||||
}
|
}
|
||||||
|
|
||||||
check_component() {
|
check_component() {
|
||||||
@@ -190,7 +214,7 @@ check_existing_installation() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$altcor_installed" = true ]; then
|
if [ "$altcor_installed" = true ]; then
|
||||||
echo -e "${GREEN}✓ ALTCOR УЖЕ УСТАНОВЛЕН${NC}"
|
log_error "Altcor уже установлен"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Обнаружена рабочая установка Altcor со следующими компонентами:"
|
echo "Обнаружена рабочая установка Altcor со следующими компонентами:"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -260,7 +284,7 @@ check_existing_installation() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
elif [ "$components_installed" = true ]; then
|
elif [ "$components_installed" = true ]; then
|
||||||
echo -e "${YELLOW}⚠ ОБНАРУЖЕНЫ СУЩЕСТВУЮЩИЕ ВЕБ-КОМПОНЕНТЫ${NC}"
|
log_warning "Обнаружен существующие Веб-компоненты"
|
||||||
echo ""
|
echo ""
|
||||||
echo "На вашем сервере уже установлены следующие компоненты:"
|
echo "На вашем сервере уже установлены следующие компоненты:"
|
||||||
echo ""
|
echo ""
|
||||||
@@ -340,15 +364,7 @@ check_existing_installation() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
else
|
else
|
||||||
echo -e "${GREEN}✓ СИСТЕМА ГОТОВА К УСТАНОВКЕ${NC}"
|
log_success "Система готова к установке"
|
||||||
echo ""
|
|
||||||
echo "Компоненты для установки:"
|
|
||||||
echo "• Apache веб-сервер"
|
|
||||||
echo "• PHP 8.3"
|
|
||||||
echo "• MariaDB база данных"
|
|
||||||
echo "• Redis кеш-сервер"
|
|
||||||
echo "• LibreOffice"
|
|
||||||
echo ""
|
|
||||||
log_info "Начинаем чистую установку Altcor..."
|
log_info "Начинаем чистую установку Altcor..."
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@@ -399,6 +415,15 @@ full_uninstall() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proceed_with_installation() {
|
proceed_with_installation() {
|
||||||
|
|
||||||
|
log_step "Установка необходимых зависимостей для генерации пароля..."
|
||||||
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
apt install -y openssl >/dev/null 2>&1
|
||||||
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
|
$PKG_MANAGER install -y openssl >/dev/null 2>&1
|
||||||
|
fi
|
||||||
|
|
||||||
DB_PASSWORD=$(generate_password)
|
DB_PASSWORD=$(generate_password)
|
||||||
|
|
||||||
log_step "Остановка конфликтующих сервисов..."
|
log_step "Остановка конфликтующих сервисов..."
|
||||||
@@ -445,7 +470,6 @@ proceed_with_installation() {
|
|||||||
apt install -y software-properties-common lsb-release ca-certificates curl wget gnupg2 apt-transport-https unzip >/dev/null 2>&1
|
apt install -y software-properties-common lsb-release ca-certificates curl wget gnupg2 apt-transport-https unzip >/dev/null 2>&1
|
||||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
$PKG_MANAGER update -y >/dev/null 2>&1
|
$PKG_MANAGER update -y >/dev/null 2>&1
|
||||||
$PKG_MANAGER install -y epel-release >/dev/null 2>&1 || true
|
|
||||||
$PKG_MANAGER install -y curl wget gnupg2 unzip >/dev/null 2>&1
|
$PKG_MANAGER install -y curl wget gnupg2 unzip >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
log_success "Система обновлена, базовые пакеты установлены"
|
log_success "Система обновлена, базовые пакеты установлены"
|
||||||
@@ -528,10 +552,21 @@ proceed_with_installation() {
|
|||||||
log_step "Установка дополнительных компонентов (Redis, LibreOffice)..."
|
log_step "Установка дополнительных компонентов (Redis, LibreOffice)..."
|
||||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
apt install -y redis-server libreoffice default-jre >/dev/null 2>&1
|
if apt install -y redis-server libreoffice default-jre >/dev/null 2>&1; then
|
||||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
log_success "Дополнительные компоненты установлены"
|
||||||
$PKG_MANAGER install -y redis libreoffice
|
else
|
||||||
|
echo "Ошибка установки пакетов для Debian/Ubuntu"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
|
if $PKG_MANAGER install -y hostname redis libreoffice >/dev/null 2>&1; then
|
||||||
|
log_success "Дополнительные компоненты установлены"
|
||||||
|
else
|
||||||
|
echo "Ошибка установки пакетов для RHEL/CentOS"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
log_success "Дополнительные компоненты установлены"
|
log_success "Дополнительные компоненты установлены"
|
||||||
|
|
||||||
log_step "Установка PHP 8.3 и расширений..."
|
log_step "Установка PHP 8.3 и расширений..."
|
||||||
@@ -547,15 +582,9 @@ proceed_with_installation() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
if [ "$DISTRO" = "fedora" ]; then
|
|
||||||
PHP_PACKAGES="php php-cli php-common php-mysqlnd php-curl php-gd \
|
|
||||||
php-mbstring php-xml php-zip php-opcache php-intl \
|
|
||||||
php-bcmath php-fpm"
|
|
||||||
else
|
|
||||||
PHP_PACKAGES="php83-php-cli php83-php-common php83-php-mysqlnd php83-php-curl php83-php-gd \
|
PHP_PACKAGES="php83-php-cli php83-php-common php83-php-mysqlnd php83-php-curl php83-php-gd \
|
||||||
php83-php-mbstring php83-php-xml php83-php-zip php83-php-opcache php83-php-intl \
|
php83-php-mbstring php83-php-xml php83-php-zip php83-php-opcache php83-php-intl \
|
||||||
php83-php-bcmath php83-php-fpm"
|
php83-php-bcmath php83-php-fpm"
|
||||||
fi
|
|
||||||
|
|
||||||
if ! $PKG_MANAGER install -y $PHP_PACKAGES >/dev/null 2>&1; then
|
if ! $PKG_MANAGER install -y $PHP_PACKAGES >/dev/null 2>&1; then
|
||||||
log_error "Не удалось установить PHP 8.3 и/или его расширения."
|
log_error "Не удалось установить PHP 8.3 и/или его расширения."
|
||||||
@@ -586,27 +615,11 @@ proceed_with_installation() {
|
|||||||
APACHE_CONF="/etc/httpd/conf.d/000-default.conf"
|
APACHE_CONF="/etc/httpd/conf.d/000-default.conf"
|
||||||
WEBSERVER_USER="apache"
|
WEBSERVER_USER="apache"
|
||||||
|
|
||||||
rm -f /etc/httpd/conf.d/php.conf
|
rm -f /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php-fpm.conf 2>/dev/null || true
|
||||||
|
|
||||||
if [ "$DISTRO" = "fedora" ]; then
|
|
||||||
cat > "/etc/httpd/conf.d/php.conf" << 'EOF'
|
|
||||||
LoadModule php_module modules/libphp.so
|
|
||||||
LoadModule rewrite_module modules/mod_rewrite.so
|
|
||||||
|
|
||||||
<FilesMatch \.php$>
|
|
||||||
SetHandler application/x-httpd-php
|
|
||||||
</FilesMatch>
|
|
||||||
|
|
||||||
DirectoryIndex index.php index.html
|
|
||||||
EOF
|
|
||||||
else
|
|
||||||
log_info "Настройка PHP-FPM для Apache..."
|
log_info "Настройка PHP-FPM для Apache..."
|
||||||
|
|
||||||
cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF'
|
cat > "/etc/httpd/conf.d/php-fpm.conf" << 'EOF'
|
||||||
LoadModule proxy_module modules/mod_proxy.so
|
|
||||||
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
|
|
||||||
LoadModule rewrite_module modules/mod_rewrite.so
|
|
||||||
|
|
||||||
<FilesMatch \.php$>
|
<FilesMatch \.php$>
|
||||||
SetHandler "proxy:unix:/var/opt/remi/php83/run/php-fpm/www.sock|fcgi://localhost"
|
SetHandler "proxy:unix:/var/opt/remi/php83/run/php-fpm/www.sock|fcgi://localhost"
|
||||||
</FilesMatch>
|
</FilesMatch>
|
||||||
@@ -625,32 +638,45 @@ EOF
|
|||||||
|
|
||||||
sed -i 's/^user = .*/user = apache/' "$PHP_FPM_CONF"
|
sed -i 's/^user = .*/user = apache/' "$PHP_FPM_CONF"
|
||||||
sed -i 's/^group = .*/group = apache/' "$PHP_FPM_CONF"
|
sed -i 's/^group = .*/group = apache/' "$PHP_FPM_CONF"
|
||||||
|
|
||||||
sed -i 's/^listen = .*/listen = \/var\/opt\/remi\/php83\/run\/php-fpm\/www.sock/' "$PHP_FPM_CONF"
|
sed -i 's/^listen = .*/listen = \/var\/opt\/remi\/php83\/run\/php-fpm\/www.sock/' "$PHP_FPM_CONF"
|
||||||
sed -i 's/^;listen.owner = .*/listen.owner = apache/' "$PHP_FPM_CONF"
|
sed -i 's/^;listen.owner = .*/listen.owner = apache/' "$PHP_FPM_CONF"
|
||||||
sed -i 's/^;listen.group = .*/listen.group = apache/' "$PHP_FPM_CONF"
|
sed -i 's/^;listen.group = .*/listen.group = apache/' "$PHP_FPM_CONF"
|
||||||
sed -i 's/^;listen.mode = .*/listen.mode = 0660/' "$PHP_FPM_CONF"
|
sed -i 's/^;listen.mode = .*/listen.mode = 0660/' "$PHP_FPM_CONF"
|
||||||
|
|
||||||
log_info "PHP-FPM пул настроен"
|
log_info "PHP-FPM пул настроен для RHEL/CentOS/Fedora"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p /var/opt/remi/php83/run/php-fpm
|
mkdir -p /var/opt/remi/php83/run/php-fpm
|
||||||
chown apache:apache /var/opt/remi/php83/run/php-fpm
|
chown apache:apache /var/opt/remi/php83/run/php-fpm
|
||||||
|
|
||||||
|
HTTPD_CONF="/etc/httpd/conf/httpd.conf"
|
||||||
|
log_step "Очистка дублирующихся Listen директив..."
|
||||||
|
|
||||||
|
cp "$HTTPD_CONF" "${HTTPD_CONF}.backup.$(date +%Y%m%d_%H%M%S)"
|
||||||
|
|
||||||
|
sed -i '/^Listen.*:80$/d' "$HTTPD_CONF"
|
||||||
|
sed -i '/^Listen 80$/d' "$HTTPD_CONF"
|
||||||
|
|
||||||
|
if ! grep -q "^Listen 80$" "$HTTPD_CONF"; then
|
||||||
|
echo "Listen 80" >> "$HTTPD_CONF"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
log_success "Listen директивы очищены"
|
||||||
fi
|
fi
|
||||||
log_success "Модули Apache настроены"
|
log_success "Модули Apache настроены"
|
||||||
|
|
||||||
log_step "Создание конфигурации виртуального хоста..."
|
log_step "Создание конфигурации виртуального хоста..."
|
||||||
mkdir -p "$WEBROOT"
|
mkdir -p "$WEBROOT"
|
||||||
|
|
||||||
SERVER_IP=$(hostname -I | awk '{print $1}')
|
SERVER_IP=$(hostname -I | awk '{print $1}')
|
||||||
|
|
||||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||||
cat > "$APACHE_CONF" <<EOF
|
cat > "$APACHE_CONF" <<EOF
|
||||||
<VirtualHost *:80>
|
<VirtualHost *:80>
|
||||||
DocumentRoot $WEBROOT
|
DocumentRoot $WEBROOT
|
||||||
ServerName localhost
|
ServerName localhost
|
||||||
ServerAlias www.localhost $SERVER_IP $(hostname -f) $(hostname -s)
|
ServerAlias www.localhost $SERVER_IP $(hostname -f) $(hostname -s)
|
||||||
|
DirectoryIndex index.php index.html
|
||||||
|
|
||||||
<Directory $WEBROOT>
|
<Directory $WEBROOT>
|
||||||
Options -Indexes +FollowSymLinks
|
Options -Indexes +FollowSymLinks
|
||||||
@@ -695,12 +721,13 @@ if [ "$DISTRO_FAMILY" = "debian" ]; then
|
|||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
cat > "$APACHE_CONF" <<EOF
|
cat > "$APACHE_CONF" <<EOF
|
||||||
<VirtualHost *:80>
|
<VirtualHost *:80>
|
||||||
DocumentRoot $WEBROOT
|
DocumentRoot $WEBROOT
|
||||||
ServerName localhost
|
ServerName localhost
|
||||||
ServerAlias www.localhost $SERVER_IP $(hostname -f 2>/dev/null || hostname) $(hostname -s 2>/dev/null || hostname)
|
ServerAlias www.localhost $SERVER_IP $(hostname -f 2>/dev/null || hostname) $(hostname -s 2>/dev/null || hostname)
|
||||||
|
DirectoryIndex index.php index.html
|
||||||
|
|
||||||
<Directory $WEBROOT>
|
<Directory $WEBROOT>
|
||||||
Options -Indexes +FollowSymLinks
|
Options -Indexes +FollowSymLinks
|
||||||
@@ -748,41 +775,16 @@ EOF
|
|||||||
log_success "Конфигурация виртуального хоста создана"
|
log_success "Конфигурация виртуального хоста создана"
|
||||||
|
|
||||||
cleanup_apache_config
|
cleanup_apache_config
|
||||||
# log_step "Настройка Apache для прослушивания всех интерфейсов..."
|
|
||||||
# if [ "$DISTRO_FAMILY" = "debian" ]; then
|
|
||||||
# if ! grep -q "Listen.*:80" /etc/apache2/ports.conf; then
|
|
||||||
# echo "Listen *:80" >> /etc/apache2/ports.conf
|
|
||||||
# elif grep -q "Listen 127.0.0.1:80" /etc/apache2/ports.conf && ! grep -q "Listen \*:80\|Listen 0.0.0.0:80" /etc/apache2/ports.conf; then
|
|
||||||
# sed -i 's/Listen 127.0.0.1:80/Listen *:80/' /etc/apache2/ports.conf
|
|
||||||
# fi
|
|
||||||
# awk '!seen && /^Listen.*:80$/{seen=1; print "Listen *:80"; next} !/^Listen.*:80$/{print}' /etc/apache2/ports.conf > /etc/apache2/ports.conf.tmp && mv /etc/apache2/ports.conf.tmp /etc/apache2/ports.conf
|
|
||||||
|
|
||||||
# elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
|
||||||
# HTTPD_CONF="/etc/httpd/conf/httpd.conf"
|
|
||||||
|
|
||||||
# if ! grep -q "Listen.*:80" "$HTTPD_CONF"; then
|
|
||||||
# echo "Listen *:80" >> "$HTTPD_CONF"
|
|
||||||
# elif grep -q "Listen 127.0.0.1:80" "$HTTPD_CONF" && ! grep -q "Listen \*:80\|Listen 0.0.0.0:80" "$HTTPD_CONF"; then
|
|
||||||
# sed -i 's/Listen 127.0.0.1:80/Listen *:80/' "$HTTPD_CONF"
|
|
||||||
# fi
|
|
||||||
# awk '!seen && /^Listen.*:80$/{seen=1; print "Listen *:80"; next} !/^Listen.*:80$/{print}' "$HTTPD_CONF" > "$HTTPD_CONF.tmp" && mv "$HTTPD_CONF.tmp" "$HTTPD_CONF"
|
|
||||||
# fi
|
|
||||||
# log_success "Apache настроен для прослушивания всех интерфейсов"
|
|
||||||
|
|
||||||
log_step "Настройка PHP.ini..."
|
log_step "Настройка PHP.ini..."
|
||||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||||
PHP_INI_PATH="/etc/php/8.3/apache2/php.ini"
|
PHP_INI_PATH="/etc/php/8.3/apache2/php.ini"
|
||||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
if [ "$DISTRO" = "fedora" ]; then
|
|
||||||
PHP_INI_PATH="/etc/php.ini"
|
PHP_INI_PATH="/etc/php.ini"
|
||||||
else
|
|
||||||
if [ -f "/etc/opt/remi/php83/php.ini" ]; then
|
if [ -f "/etc/opt/remi/php83/php.ini" ]; then
|
||||||
PHP_INI_PATH="/etc/opt/remi/php83/php.ini"
|
PHP_INI_PATH="/etc/opt/remi/php83/php.ini"
|
||||||
elif [ -f "/opt/remi/php83/root/etc/php.ini" ]; then
|
elif [ -f "/opt/remi/php83/root/etc/php.ini" ]; then
|
||||||
PHP_INI_PATH="/opt/remi/php83/root/etc/php.ini"
|
PHP_INI_PATH="/opt/remi/php83/root/etc/php.ini"
|
||||||
elif [ -f "/etc/php.ini" ]; then
|
|
||||||
PHP_INI_PATH="/etc/php.ini"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -794,13 +796,11 @@ EOF
|
|||||||
sed -i 's/;*max_execution_time = .*/max_execution_time = 300/' "$PHP_INI_PATH"
|
sed -i 's/;*max_execution_time = .*/max_execution_time = 300/' "$PHP_INI_PATH"
|
||||||
sed -i 's/;*memory_limit = .*/memory_limit = 256M/' "$PHP_INI_PATH"
|
sed -i 's/;*memory_limit = .*/memory_limit = 256M/' "$PHP_INI_PATH"
|
||||||
sed -i 's/;*max_input_vars = .*/max_input_vars = 3000/' "$PHP_INI_PATH"
|
sed -i 's/;*max_input_vars = .*/max_input_vars = 3000/' "$PHP_INI_PATH"
|
||||||
|
|
||||||
sed -i 's/;*opcache.enable=.*/opcache.enable=1/' "$PHP_INI_PATH"
|
sed -i 's/;*opcache.enable=.*/opcache.enable=1/' "$PHP_INI_PATH"
|
||||||
sed -i 's/;*opcache.enable_cli=.*/opcache.enable_cli=1/' "$PHP_INI_PATH"
|
sed -i 's/;*opcache.enable_cli=.*/opcache.enable_cli=1/' "$PHP_INI_PATH"
|
||||||
sed -i 's/;*opcache.memory_consumption=.*/opcache.memory_consumption=128/' "$PHP_INI_PATH"
|
sed -i 's/;*opcache.memory_consumption=.*/opcache.memory_consumption=128/' "$PHP_INI_PATH"
|
||||||
sed -i 's/;*opcache.revalidate_freq=.*/opcache.revalidate_freq=2/' "$PHP_INI_PATH"
|
sed -i 's/;*opcache.revalidate_freq=.*/opcache.revalidate_freq=2/' "$PHP_INI_PATH"
|
||||||
sed -i 's/;*opcache.max_accelerated_files=.*/opcache.max_accelerated_files=4000/' "$PHP_INI_PATH"
|
sed -i 's/;*opcache.max_accelerated_files=.*/opcache.max_accelerated_files=4000/' "$PHP_INI_PATH"
|
||||||
|
|
||||||
sed -i 's/;*expose_php = .*/expose_php = Off/' "$PHP_INI_PATH"
|
sed -i 's/;*expose_php = .*/expose_php = Off/' "$PHP_INI_PATH"
|
||||||
sed -i 's/;*display_errors = .*/display_errors = Off/' "$PHP_INI_PATH"
|
sed -i 's/;*display_errors = .*/display_errors = Off/' "$PHP_INI_PATH"
|
||||||
sed -i 's/;*log_errors = .*/log_errors = On/' "$PHP_INI_PATH"
|
sed -i 's/;*log_errors = .*/log_errors = On/' "$PHP_INI_PATH"
|
||||||
@@ -840,114 +840,26 @@ EOF
|
|||||||
log_error "Веб-сервер НЕ МОЖЕТ читать db_config.php"
|
log_error "Веб-сервер НЕ МОЖЕТ читать db_config.php"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "$WEBROOT/db_config.php" ]; then
|
|
||||||
log_error "Не удалось создать файл db_config.php"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! sudo -u $WEBSERVER_USER test -r "$WEBROOT/db_config.php"; then
|
|
||||||
log_warning "Веб-сервер не может прочитать db_config.php, исправляем права..."
|
|
||||||
chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php"
|
|
||||||
chmod 644 "$WEBROOT/db_config.php"
|
|
||||||
fi
|
|
||||||
|
|
||||||
DOWNLOAD_URL="https://cloud.altcor.ru/setup/download.php"
|
DOWNLOAD_URL="https://cloud.altcor.ru/setup/download.php"
|
||||||
TEMP_DOWNLOAD="/tmp/web_files_$(date +%s)"
|
|
||||||
|
|
||||||
create_fallback_index() {
|
create_fallback_index() {
|
||||||
cat > "$WEBROOT/index.php" << 'EOF'
|
cat > "$WEBROOT/index.php" << 'EOF'
|
||||||
<?php
|
<?php
|
||||||
require_once __DIR__ . '/db_config.php';
|
echo "<!DOCTYPE html><html lang='ru'><head><meta charset='UTF-8'><title>Сервер готов</title>";
|
||||||
|
echo "<style>body{font-family:sans-serif;margin:40px;}.ok{color:green;}.fail{color:red;}</style></head><body>";
|
||||||
echo "<!DOCTYPE html>";
|
|
||||||
echo "<html lang='ru'>";
|
|
||||||
echo "<head>";
|
|
||||||
echo "<meta charset='UTF-8'>";
|
|
||||||
echo "<meta name='viewport' content='width=device-width, initial-scale=1.0'>";
|
|
||||||
echo "<title>Сервер готов к работе</title>";
|
|
||||||
echo "<style>";
|
|
||||||
echo "body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; margin: 40px; background: #f5f5f5; }";
|
|
||||||
echo ".container { max-width: 800px; margin: 0 auto; background: white; padding: 40px; border-radius: 10px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }";
|
|
||||||
echo "h1 { color: #2c5282; margin-top: 0; }";
|
|
||||||
echo ".status { padding: 15px; margin: 10px 0; border-radius: 5px; }";
|
|
||||||
echo ".success { background: #c6f6d5; color: #22543d; border-left: 4px solid #38a169; }";
|
|
||||||
echo ".warning { background: #fef5e7; color: #744210; border-left: 4px solid #ed8936; }";
|
|
||||||
echo "</style>";
|
|
||||||
echo "</head>";
|
|
||||||
echo "<body>";
|
|
||||||
echo "<div class='container'>";
|
|
||||||
echo "<h1>Сервер готов к работе</h1>";
|
echo "<h1>Сервер готов к работе</h1>";
|
||||||
echo "<div class='status success'>";
|
|
||||||
echo "<strong>PHP " . phpversion() . " работает</strong><br>";
|
|
||||||
echo "Время сервера: " . date('Y-m-d H:i:s T') . "<br>";
|
|
||||||
echo "Document Root: " . $_SERVER['DOCUMENT_ROOT'];
|
|
||||||
echo "</div>";
|
|
||||||
|
|
||||||
try {
|
|
||||||
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USER, DB_PASS);
|
|
||||||
echo "<div class='status success'>";
|
|
||||||
echo "<strong>База данных подключена</strong><br>";
|
|
||||||
echo "База данных: " . DB_NAME . "<br>";
|
|
||||||
echo "Хост: " . DB_HOST;
|
|
||||||
echo "</div>";
|
|
||||||
} catch (PDOException $e) {
|
|
||||||
echo "<div class='status warning'>";
|
|
||||||
echo "<strong>Проблема с БД:</strong> " . htmlspecialchars($e->getMessage());
|
|
||||||
echo "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "<div class='status warning'>";
|
|
||||||
echo "<strong>Диагностика конфигурации БД:</strong><br>";
|
|
||||||
|
|
||||||
if (file_exists(__DIR__ . '/db_config.php')) {
|
if (file_exists(__DIR__ . '/db_config.php')) {
|
||||||
echo "✓ Файл db_config.php существует<br>";
|
|
||||||
echo "✓ Размер файла: " . filesize(__DIR__ . '/db_config.php') . " байт<br>";
|
|
||||||
echo "✓ Права доступа: " . substr(sprintf('%o', fileperms(__DIR__ . '/db_config.php')), -4) . "<br>";
|
|
||||||
|
|
||||||
if (is_readable(__DIR__ . '/db_config.php')) {
|
|
||||||
echo "✓ Файл читаемый<br>";
|
|
||||||
|
|
||||||
try {
|
|
||||||
require_once __DIR__ . '/db_config.php';
|
require_once __DIR__ . '/db_config.php';
|
||||||
echo "✓ Файл успешно подключен<br>";
|
try {
|
||||||
echo "✓ DB_HOST: " . (defined('DB_HOST') ? DB_HOST : 'НЕ ОПРЕДЕЛЕН') . "<br>";
|
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASS);
|
||||||
echo "✓ DB_USER: " . (defined('DB_USER') ? DB_USER : 'НЕ ОПРЕДЕЛЕН') . "<br>";
|
echo "<p class='ok'>✓ Подключение к базе данных '" . DB_NAME . "' успешно.</p>";
|
||||||
echo "✓ DB_NAME: " . (defined('DB_NAME') ? DB_NAME : 'НЕ ОПРЕДЕЛЕН') . "<br>";
|
} catch (PDOException $e) {
|
||||||
} catch (Exception $e) {
|
echo "<p class='fail'>✗ Не удалось подключиться к БД: " . htmlspecialchars($e->getMessage()) . "</p>";
|
||||||
echo "✗ Ошибка подключения файла: " . htmlspecialchars($e->getMessage()) . "<br>";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "✗ Файл НЕ читаемый<br>";
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
echo "✗ Файл db_config.php НЕ существует<br>";
|
echo "<p class='fail'>✗ Файл db_config.php не найден.</p>";
|
||||||
}
|
}
|
||||||
echo "</div>";
|
echo "</body></html>";
|
||||||
|
|
||||||
// Теперь пробуем подключиться к БД
|
|
||||||
if (file_exists(__DIR__ . '/db_config.php') && is_readable(__DIR__ . '/db_config.php')) {
|
|
||||||
try {
|
|
||||||
require_once __DIR__ . '/db_config.php';
|
|
||||||
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME . ";charset=" . DB_CHARSET, DB_USER, DB_PASS);
|
|
||||||
echo "<div class='status success'>";
|
|
||||||
echo "<strong>База данных подключена</strong><br>";
|
|
||||||
echo "База данных: " . DB_NAME . "<br>";
|
|
||||||
echo "Хост: " . DB_HOST;
|
|
||||||
echo "</div>";
|
|
||||||
} catch (PDOException $e) {
|
|
||||||
echo "<div class='status warning'>";
|
|
||||||
echo "<strong>Проблема с БД:</strong> " . htmlspecialchars($e->getMessage());
|
|
||||||
echo "</div>";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
echo "<div class='status warning'>";
|
|
||||||
echo "<strong>Не удалось загрузить конфигурацию БД</strong>";
|
|
||||||
echo "</div>";
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "</div>";
|
|
||||||
echo "</body>";
|
|
||||||
echo "</html>";
|
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -955,7 +867,7 @@ EOF
|
|||||||
find "$WEBROOT" -type f ! -name "db_config.php" -delete 2>/dev/null || true
|
find "$WEBROOT" -type f ! -name "db_config.php" -delete 2>/dev/null || true
|
||||||
|
|
||||||
if curl -f -L --max-time 30 -o "$WEBROOT/index.php" "$DOWNLOAD_URL" 2>/dev/null; then
|
if curl -f -L --max-time 30 -o "$WEBROOT/index.php" "$DOWNLOAD_URL" 2>/dev/null; then
|
||||||
if ! head -n 1 "$WEBROOT/index.php" | grep -q "<?php" && ! grep -q "<?php" "$WEBROOT/index.php" 2>/dev/null; then
|
if ! grep -q "<?php" "$WEBROOT/index.php" 2>/dev/null; then
|
||||||
create_fallback_index
|
create_fallback_index
|
||||||
log_warning "Скачанный файл не является PHP-скриптом, создана резервная страница"
|
log_warning "Скачанный файл не является PHP-скриптом, создана резервная страница"
|
||||||
else
|
else
|
||||||
@@ -967,232 +879,251 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
log_step "Настройка прав доступа к файлам..."
|
log_step "Настройка прав доступа к файлам..."
|
||||||
chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/index.php"
|
|
||||||
chmod 644 "$WEBROOT/db_config.php"
|
|
||||||
chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/db_config.php"
|
|
||||||
|
|
||||||
cat > "$WEBROOT/.htaccess" << 'EOF'
|
cat > "$WEBROOT/.htaccess" << 'EOF'
|
||||||
|
|
||||||
<Files "*.conf">
|
<Files "*.conf">
|
||||||
Require all denied
|
Require all denied
|
||||||
</Files>
|
</Files>
|
||||||
|
|
||||||
<Files ".env">
|
<Files ".env">
|
||||||
Require all denied
|
Require all denied
|
||||||
</Files>
|
</Files>
|
||||||
|
|
||||||
<IfModule mod_deflate.c>
|
<IfModule mod_deflate.c>
|
||||||
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/json application/xml
|
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
<IfModule mod_expires.c>
|
<IfModule mod_expires.c>
|
||||||
ExpiresActive On
|
ExpiresActive On
|
||||||
ExpiresByType image/jpg "access plus 1 month"
|
ExpiresDefault "access plus 1 month"
|
||||||
ExpiresByType image/jpeg "access plus 1 month"
|
|
||||||
ExpiresByType image/gif "access plus 1 month"
|
|
||||||
ExpiresByType image/png "access plus 1 month"
|
|
||||||
ExpiresByType image/svg+xml "access plus 1 month"
|
|
||||||
ExpiresByType text/css "access plus 1 month"
|
|
||||||
ExpiresByType application/javascript "access plus 1 month"
|
|
||||||
ExpiresByType text/javascript "access plus 1 month"
|
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
<IfModule mod_headers.c>
|
<IfModule mod_headers.c>
|
||||||
Header always set X-Content-Type-Options nosniff
|
Header always set X-Content-Type-Options nosniff
|
||||||
Header always set X-Frame-Options DENY
|
Header always set X-Frame-Options DENY
|
||||||
Header always set X-XSS-Protection "1; mode=block"
|
|
||||||
</IfModule>
|
</IfModule>
|
||||||
|
|
||||||
RewriteEngine On
|
RewriteEngine On
|
||||||
# RewriteCond %{REQUEST_FILENAME} !-f
|
|
||||||
# RewriteCond %{REQUEST_FILENAME} !-d
|
|
||||||
# RewriteRule ^(.*)$ index.php [QSA,L]
|
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
chown -R $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT"
|
chown -R $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT"
|
||||||
chmod -R 755 "$WEBROOT"
|
find "$WEBROOT" -type d -exec chmod 755 {} \;
|
||||||
chmod 644 "$WEBROOT/.htaccess" 2>/dev/null || true
|
find "$WEBROOT" -type f -exec chmod 644 {} \;
|
||||||
chmod 600 "$WEBROOT/db_config.php"
|
chmod 600 "$WEBROOT/db_config.php" 2>/dev/null || true
|
||||||
log_success "Права доступа настроены"
|
log_success "Права доступа настроены"
|
||||||
|
|
||||||
|
log_info "Текущий пользователь: $CURRENT_USER"
|
||||||
|
|
||||||
log_step "Настройка базы данных MariaDB..."
|
log_step "Настройка базы данных MariaDB..."
|
||||||
|
|
||||||
|
# Проверка и запуск MariaDB
|
||||||
if ! systemctl is-active --quiet mariadb; then
|
if ! systemctl is-active --quiet mariadb; then
|
||||||
log_error "MariaDB не запущен. Попытка запуска..."
|
log_info "MariaDB не запущен. Попытка запуска..."
|
||||||
systemctl start mariadb
|
systemctl start mariadb
|
||||||
sleep 3
|
sleep 3
|
||||||
|
|
||||||
if ! systemctl is-active --quiet mariadb; then
|
if ! systemctl is-active --quiet mariadb; then
|
||||||
log_error "Не удалось запустить MariaDB"
|
log_error "Не удалось запустить MariaDB"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log_info "Выполнение базовой настройки безопасности MariaDB..."
|
CURRENT_USER=$(logname 2>/dev/null || whoami)
|
||||||
|
log_info "Текущий пользователь: $CURRENT_USER"
|
||||||
|
|
||||||
if mysql -u root -e "SELECT 1;" >/dev/null 2>&1; then
|
# Функция для безопасного выполнения SQL с детальными ошибками
|
||||||
log_info "Первичная настройка MariaDB (подключение без пароля доступно)..."
|
execute_sql_safe() {
|
||||||
|
local connection_cmd="$1"
|
||||||
|
local description="$2"
|
||||||
|
local sql_commands="$3"
|
||||||
|
|
||||||
MYSQL_SECURE_SCRIPT="/tmp/mysql_secure_$(date +%s).sql"
|
log_info "$description"
|
||||||
cat > "$MYSQL_SECURE_SCRIPT" << MYSQL_SCRIPT
|
|
||||||
-- Устанавливаем пароль для root
|
|
||||||
ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD';
|
|
||||||
|
|
||||||
-- Удаляем анонимных пользователей
|
local temp_file="/tmp/mysql_commands_$$.sql"
|
||||||
DELETE FROM mysql.user WHERE User='';
|
local error_file="/tmp/mysql_error_$$.log"
|
||||||
|
|
||||||
-- Удаляем root-доступ с удаленных хостов
|
echo "$sql_commands" > "$temp_file"
|
||||||
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
|
|
||||||
|
|
||||||
-- Удаляем тестовую базу данных
|
if eval "$connection_cmd < '$temp_file'" 2>"$error_file"; then
|
||||||
DROP DATABASE IF EXISTS test;
|
rm -f "$temp_file" "$error_file"
|
||||||
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
|
log_success "Выполнено: $description"
|
||||||
|
return 0
|
||||||
-- Создаем нашу базу данных
|
|
||||||
CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
|
|
||||||
-- Даем права на новую базу данных
|
|
||||||
GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
|
|
||||||
|
|
||||||
-- Применяем изменения
|
|
||||||
FLUSH PRIVILEGES;
|
|
||||||
MYSQL_SCRIPT
|
|
||||||
|
|
||||||
if mysql -u root < "$MYSQL_SECURE_SCRIPT" >/dev/null 2>&1; then
|
|
||||||
log_success "Первичная настройка MariaDB выполнена успешно"
|
|
||||||
else
|
else
|
||||||
log_error "Не удалось выполнить первичную настройку MariaDB"
|
log_error "Ошибка: $description"
|
||||||
rm -f "$MYSQL_SECURE_SCRIPT"
|
if [[ -s "$error_file" ]]; then
|
||||||
|
cat "$error_file" | head -5 >&2
|
||||||
|
fi
|
||||||
|
rm -f "$temp_file" "$error_file"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция создания базы данных (минимальный набор команд)
|
||||||
|
create_database_only() {
|
||||||
|
local connection_cmd="$1"
|
||||||
|
local sql="CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
||||||
|
|
||||||
|
if execute_sql_safe "$connection_cmd" "Создание базы данных ALTCor" "$sql"; then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Функция для проверки подключения
|
||||||
|
test_connection() {
|
||||||
|
local user="$1"
|
||||||
|
local password="$2"
|
||||||
|
local connection_params=""
|
||||||
|
|
||||||
|
if [[ -n "$password" ]]; then
|
||||||
|
connection_params="-u $user -p$password"
|
||||||
|
else
|
||||||
|
connection_params="-u $user"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mysql $connection_params -e "SELECT 1;" >/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Основная логика - пробуем разные способы подключения
|
||||||
|
DB_CONFIGURED=false
|
||||||
|
|
||||||
|
log_info "Попытка подключения к MariaDB..."
|
||||||
|
|
||||||
|
# 1. Попробуем подключиться как root без пароля
|
||||||
|
if test_connection "root" ""; then
|
||||||
|
log_success "Подключение как root без пароля успешно"
|
||||||
|
|
||||||
|
if create_database_only "mysql -u root"; then
|
||||||
|
log_success "База данных создана"
|
||||||
|
DB_CONFIGURED=true
|
||||||
|
|
||||||
|
# Попробуем установить пароль (не критично если не получится)
|
||||||
|
log_info "Попытка установки пароля для root..."
|
||||||
|
local sql="ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD'; FLUSH PRIVILEGES;"
|
||||||
|
if echo "$sql" | mysql -u root >/dev/null 2>&1; then
|
||||||
|
log_success "Пароль root установлен"
|
||||||
|
else
|
||||||
|
log_info "Не удалось установить пароль, но база данных создана"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Попробуем подключиться как root с паролем
|
||||||
|
elif test_connection "root" "$DB_PASSWORD"; then
|
||||||
|
log_success "Подключение как root с паролем успешно"
|
||||||
|
|
||||||
|
if create_database_only "mysql -u root -p$DB_PASSWORD"; then
|
||||||
|
log_success "База данных проверена/создана"
|
||||||
|
DB_CONFIGURED=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. Попробуем подключиться как текущий пользователь
|
||||||
|
elif test_connection "$CURRENT_USER" ""; then
|
||||||
|
log_success "Подключение как $CURRENT_USER без пароля успешно"
|
||||||
|
|
||||||
|
if create_database_only "mysql -u $CURRENT_USER"; then
|
||||||
|
log_success "База данных создана пользователем $CURRENT_USER"
|
||||||
|
DB_CONFIGURED=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 4. Попробуем подключиться как текущий пользователь с паролем
|
||||||
|
elif test_connection "$CURRENT_USER" "$DB_PASSWORD"; then
|
||||||
|
log_success "Подключение как $CURRENT_USER с паролем успешно"
|
||||||
|
|
||||||
|
if create_database_only "mysql -u $CURRENT_USER -p$DB_PASSWORD"; then
|
||||||
|
log_success "База данных создана пользователем $CURRENT_USER"
|
||||||
|
DB_CONFIGURED=true
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 5. Попробуем через sudo
|
||||||
|
elif sudo mysql -e "SELECT 1;" >/dev/null 2>&1; then
|
||||||
|
log_success "Подключение через sudo успешно"
|
||||||
|
|
||||||
|
if create_database_only "sudo mysql"; then
|
||||||
|
log_success "База данных создана через sudo"
|
||||||
|
DB_CONFIGURED=true
|
||||||
|
|
||||||
|
# Попробуем установить пароль через sudo
|
||||||
|
log_info "Попытка установки пароля через sudo..."
|
||||||
|
local sql="ALTER USER 'root'@'localhost' IDENTIFIED BY '$DB_PASSWORD'; FLUSH PRIVILEGES;"
|
||||||
|
if echo "$sql" | sudo mysql >/dev/null 2>&1; then
|
||||||
|
log_success "Пароль root установлен через sudo"
|
||||||
|
else
|
||||||
|
log_info "Пароль не удалось установить, но база создана"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
else
|
||||||
|
log_error "Не удалось подключиться к MariaDB ни одним из способов"
|
||||||
|
log_info ""
|
||||||
|
log_info "Попробуйте выполнить настройку вручную:"
|
||||||
|
log_info "1. Проверьте статус MariaDB: sudo systemctl status mariadb"
|
||||||
|
log_info "2. Запустите мастер настройки: sudo mysql_secure_installation"
|
||||||
|
log_info "3. Создайте базу данных вручную:"
|
||||||
|
log_info " sudo mysql -e \"CREATE DATABASE ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\""
|
||||||
|
log_info "4. Или создайте отдельного пользователя:"
|
||||||
|
log_info " sudo mysql -e \"CREATE USER 'altcor'@'localhost' IDENTIFIED BY 'password';\""
|
||||||
|
log_info " sudo mysql -e \"CREATE DATABASE ALTCor; GRANT ALL ON ALTCor.* TO 'altcor'@'localhost';\""
|
||||||
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
rm -f "$MYSQL_SECURE_SCRIPT"
|
|
||||||
|
|
||||||
elif mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then
|
# Проверяем результат
|
||||||
log_info "MariaDB уже настроен с текущим паролем..."
|
if [[ "$DB_CONFIGURED" == "true" ]]; then
|
||||||
|
log_success "База данных настроена успешно"
|
||||||
|
|
||||||
MYSQL_UPDATE_SCRIPT="/tmp/mysql_update_$(date +%s).sql"
|
# Финальная проверка - можем ли мы подключиться к созданной базе
|
||||||
cat > "$MYSQL_UPDATE_SCRIPT" << MYSQL_SCRIPT
|
if mysql -u root -e "USE ALTCor; SELECT 'OK' as status;" >/dev/null 2>&1; then
|
||||||
CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
log_success "Подключение к базе ALTCor как root работает"
|
||||||
GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
|
elif mysql -u root -p"$DB_PASSWORD" -e "USE ALTCor; SELECT 'OK' as status;" >/dev/null 2>&1; then
|
||||||
FLUSH PRIVILEGES;
|
log_success "Подключение к базе ALTCor как root с паролем работает"
|
||||||
MYSQL_SCRIPT
|
elif mysql -u "$CURRENT_USER" -e "USE ALTCor; SELECT 'OK' as status;" >/dev/null 2>&1; then
|
||||||
|
log_success "Подключение к базе ALTCor как $CURRENT_USER работает"
|
||||||
if mysql -u root -p"$DB_PASSWORD" < "$MYSQL_UPDATE_SCRIPT" >/dev/null 2>&1; then
|
|
||||||
log_success "База данных ALTCor создана/обновлена"
|
|
||||||
else
|
else
|
||||||
log_error "Не удалось обновить базу данных"
|
log_info "База создана, но требуется проверка подключения"
|
||||||
rm -f "$MYSQL_UPDATE_SCRIPT"
|
fi
|
||||||
|
else
|
||||||
|
log_error "Не удалось настроить базу данных"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
rm -f "$MYSQL_UPDATE_SCRIPT"
|
|
||||||
|
|
||||||
else
|
log_success "Настройка базы данных завершена"
|
||||||
log_error "Не удалось подключиться к MariaDB ни с пустым паролем, ни с текущим паролем"
|
|
||||||
log_info "Попытка сброса пароля root в MariaDB..."
|
|
||||||
|
|
||||||
systemctl stop mariadb
|
|
||||||
|
|
||||||
mysqld_safe --skip-grant-tables --skip-networking &
|
|
||||||
MYSQLD_SAFE_PID=$!
|
|
||||||
|
|
||||||
sleep 5
|
|
||||||
|
|
||||||
MYSQL_RESET_SCRIPT="/tmp/mysql_reset_$(date +%s).sql"
|
|
||||||
cat > "$MYSQL_RESET_SCRIPT" << MYSQL_SCRIPT
|
|
||||||
USE mysql;
|
|
||||||
UPDATE user SET password=PASSWORD('$DB_PASSWORD') WHERE User='root';
|
|
||||||
UPDATE user SET plugin='mysql_native_password' WHERE User='root';
|
|
||||||
FLUSH PRIVILEGES;
|
|
||||||
MYSQL_SCRIPT
|
|
||||||
|
|
||||||
if mysql -u root < "$MYSQL_RESET_SCRIPT" >/dev/null 2>&1; then
|
|
||||||
log_info "Пароль root сброшен"
|
|
||||||
|
|
||||||
kill $MYSQLD_SAFE_PID 2>/dev/null || true
|
|
||||||
sleep 2
|
|
||||||
killall mysqld_safe 2>/dev/null || true
|
|
||||||
killall mysqld 2>/dev/null || true
|
|
||||||
sleep 3
|
|
||||||
|
|
||||||
systemctl start mariadb
|
|
||||||
sleep 3
|
|
||||||
|
|
||||||
if systemctl is-active --quiet mariadb && mysql -u root -p"$DB_PASSWORD" -e "SELECT 1;" >/dev/null 2>&1; then
|
|
||||||
MYSQL_FINAL_SCRIPT="/tmp/mysql_final_$(date +%s).sql"
|
|
||||||
cat > "$MYSQL_FINAL_SCRIPT" << MYSQL_SCRIPT
|
|
||||||
CREATE DATABASE IF NOT EXISTS ALTCor CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
GRANT ALL PRIVILEGES ON ALTCor.* TO 'root'@'localhost';
|
|
||||||
FLUSH PRIVILEGES;
|
|
||||||
MYSQL_SCRIPT
|
|
||||||
|
|
||||||
if mysql -u root -p"$DB_PASSWORD" < "$MYSQL_FINAL_SCRIPT" >/dev/null 2>&1; then
|
|
||||||
log_success "MariaDB настроен после сброса пароля"
|
|
||||||
else
|
|
||||||
log_error "Не удалось создать базу данных после сброса пароля"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
rm -f "$MYSQL_FINAL_SCRIPT"
|
|
||||||
else
|
|
||||||
log_error "MariaDB не запустился после сброса пароля"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
log_error "Не удалось сбросить пароль root в MariaDB"
|
|
||||||
kill $MYSQLD_SAFE_PID 2>/dev/null || true
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
rm -f "$MYSQL_RESET_SCRIPT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
log_success "База данных настроена"
|
|
||||||
|
|
||||||
log_step "Проверка конфигурации Apache..."
|
log_step "Проверка конфигурации Apache..."
|
||||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||||
if ! apache2ctl configtest >/dev/null 2>&1; then
|
if ! apache2ctl configtest 2>/dev/null; then
|
||||||
log_error "Конфигурация Apache содержит ошибки."
|
log_error "Ошибка в конфигурации Apache"
|
||||||
apache2ctl configtest
|
apache2ctl configtest
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
if ! httpd -t >/dev/null 2>&1; then
|
if ! httpd -t 2>/dev/null; then
|
||||||
log_error "Конфигурация Apache (httpd) содержит ошибки."
|
log_error "Ошибка в конфигурации Apache"
|
||||||
httpd -t
|
httpd -t
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
log_success "Конфигурация Apache проверена"
|
log_success "Конфигурация Apache корректна"
|
||||||
|
|
||||||
|
|
||||||
log_step "Запуск и включение сервисов..."
|
log_step "Запуск и включение сервисов..."
|
||||||
|
|
||||||
if command -v getenforce >/dev/null 2>&1 && [ "$(getenforce)" != "Disabled" ]; then
|
if command -v getenforce >/dev/null 2>&1 && [ "$(getenforce)" != "Disabled" ]; then
|
||||||
log_info "Настройка SELinux..."
|
log_info "Настройка SELinux..."
|
||||||
setsebool -P httpd_can_network_connect 1 >/dev/null 2>&1 || true
|
setsebool -P httpd_can_network_connect 1 >/dev/null 2>&1 || true
|
||||||
setsebool -P httpd_execmem 1 >/dev/null 2>&1 || true
|
|
||||||
semanage fcontext -a -t httpd_exec_t "/var/opt/remi/php83/run/php-fpm/www.sock" >/dev/null 2>&1 || true
|
semanage fcontext -a -t httpd_exec_t "/var/opt/remi/php83/run/php-fpm/www.sock" >/dev/null 2>&1 || true
|
||||||
restorecon -R /var/www/html >/dev/null 2>&1 || true
|
restorecon -R /var/www/html >/dev/null 2>&1 || true
|
||||||
restorecon -R /var/opt/remi/php83/run/php-fpm/ >/dev/null 2>&1 || true
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
||||||
systemctl restart apache2 >/dev/null 2>&1
|
systemctl restart apache2 >/dev/null 2>&1
|
||||||
systemctl enable apache2 >/dev/null 2>&1
|
systemctl enable apache2 >/dev/null 2>&1
|
||||||
WEBSERVER_SERVICE="apache2"
|
WEBSERVER_SERVICE="apache2"
|
||||||
|
|
||||||
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
elif [ "$DISTRO_FAMILY" = "rhel" ]; then
|
||||||
if [ "$DISTRO" != "fedora" ]; then
|
|
||||||
log_info "Запуск PHP-FPM..."
|
log_info "Запуск PHP-FPM..."
|
||||||
systemctl stop php83-php-fpm >/dev/null 2>&1 || true
|
systemctl restart php83-php-fpm >/dev/null 2>&1
|
||||||
systemctl start php83-php-fpm >/dev/null 2>&1
|
|
||||||
systemctl enable php83-php-fpm >/dev/null 2>&1
|
systemctl enable php83-php-fpm >/dev/null 2>&1
|
||||||
|
|
||||||
sleep 3
|
sleep 2
|
||||||
|
|
||||||
if ! systemctl is-active --quiet php83-php-fpm; then
|
if ! systemctl is-active --quiet php83-php-fpm; then
|
||||||
log_error "PHP-FPM не запустился"
|
log_error "PHP-FPM не запустился"
|
||||||
systemctl status php83-php-fpm --no-pager -l
|
systemctl status php83-php-fpm --no-pager -l
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
|
||||||
systemctl restart httpd >/dev/null 2>&1
|
systemctl restart httpd >/dev/null 2>&1
|
||||||
systemctl enable httpd >/dev/null 2>&1
|
systemctl enable httpd >/dev/null 2>&1
|
||||||
@@ -1200,74 +1131,26 @@ MYSQL_SCRIPT
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
systemctl restart mariadb >/dev/null 2>&1
|
systemctl restart mariadb >/dev/null 2>&1
|
||||||
systemctl restart redis-server >/dev/null 2>&1 || systemctl restart redis >/dev/null 2>&1 || true
|
|
||||||
|
|
||||||
systemctl enable mariadb >/dev/null 2>&1
|
systemctl enable mariadb >/dev/null 2>&1
|
||||||
|
systemctl restart redis-server >/dev/null 2>&1 || systemctl restart redis >/dev/null 2>&1 || true
|
||||||
systemctl enable redis-server >/dev/null 2>&1 || systemctl enable redis >/dev/null 2>&1 || true
|
systemctl enable redis-server >/dev/null 2>&1 || systemctl enable redis >/dev/null 2>&1 || true
|
||||||
|
|
||||||
log_success "Все сервисы запущены и добавлены в автозагрузку"
|
log_success "Все сервисы запущены и добавлены в автозагрузку"
|
||||||
|
|
||||||
log_step "Настройка брандмауэра..."
|
log_step "Настройка брандмауэра..."
|
||||||
if command -v ufw >/dev/null 2>&1 && ufw status | grep -q "Status: active"; then
|
if command -v ufw >/dev/null 2>&1 && ufw status | grep -q "Status: active"; then
|
||||||
log_info "Открываем порт 80 в UFW..."
|
log_info "Открываем порт 80 в UFW..."
|
||||||
ufw allow 80/tcp >/dev/null 2>&1 || true
|
ufw allow 80/tcp >/dev/null 2>&1
|
||||||
elif command -v firewall-cmd >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
|
elif command -v firewall-cmd >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
|
||||||
log_info "Открываем порт 80 в firewalld..."
|
log_info "Открываем порт 80 в firewalld..."
|
||||||
firewall-cmd --permanent --add-service=http >/dev/null 2>&1 || true
|
firewall-cmd --permanent --add-service=http >/dev/null 2>&1
|
||||||
firewall-cmd --reload >/dev/null 2>&1 || true
|
firewall-cmd --reload >/dev/null 2>&1
|
||||||
elif command -v iptables >/dev/null 2>&1; then
|
|
||||||
log_info "Открываем порт 80 в iptables..."
|
|
||||||
iptables -I INPUT -p tcp --dport 80 -j ACCEPT >/dev/null 2>&1 || true
|
|
||||||
fi
|
fi
|
||||||
log_success "Брандмауэр настроен"
|
log_success "Брандмауэр настроен"
|
||||||
|
|
||||||
log_step "Финальная проверка работоспособности..."
|
log_step "Финальная проверка работоспособности..."
|
||||||
if ! systemctl is-active --quiet $WEBSERVER_SERVICE; then
|
|
||||||
log_error "Веб-сервер не запущен"
|
|
||||||
systemctl status $WEBSERVER_SERVICE --no-pager -l
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! systemctl is-active --quiet mariadb; then
|
cat > "$WEBROOT/test.php" << EOF
|
||||||
log_error "MariaDB не запущен"
|
<?php echo "PHP " . phpversion() . " работает!"; ?>
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
PHP_WORKS=false
|
|
||||||
if php -r "echo phpversion();" >/dev/null 2>&1; then
|
|
||||||
PHP_WORKS=true
|
|
||||||
elif [ -f "/opt/remi/php83/root/usr/bin/php" ] && /opt/remi/php83/root/usr/bin/php -r "echo phpversion();" >/dev/null 2>&1; then
|
|
||||||
PHP_WORKS=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$PHP_WORKS" = false ]; then
|
|
||||||
log_error "PHP не работает корректно"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$DISTRO_FAMILY" = "rhel" ] && [ "$DISTRO" != "fedora" ]; then
|
|
||||||
if ! systemctl is-active --quiet php83-php-fpm; then
|
|
||||||
log_error "PHP-FPM не запущен"
|
|
||||||
systemctl status php83-php-fpm --no-pager -l
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -S "/var/opt/remi/php83/run/php-fpm/www.sock" ]; then
|
|
||||||
log_warning "Сокет PHP-FPM не найден"
|
|
||||||
ls -la /var/opt/remi/php83/run/php-fpm/ 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! mysql -u root -p"$DB_PASSWORD" -e "USE ALTCor; SELECT 1;" >/dev/null 2>&1; then
|
|
||||||
log_error "Не удается подключиться к базе данных ALTCor"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat > "$WEBROOT/test.php" << 'EOF'
|
|
||||||
<?php
|
|
||||||
echo "PHP " . phpversion() . " работает!";
|
|
||||||
echo "\nВремя: " . date('Y-m-d H:i:s');
|
|
||||||
?>
|
|
||||||
EOF
|
EOF
|
||||||
chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/test.php"
|
chown $WEBSERVER_USER:$WEBSERVER_USER "$WEBROOT/test.php"
|
||||||
|
|
||||||
@@ -1285,18 +1168,16 @@ EOF
|
|||||||
log_step "Сохранение учетных данных..."
|
log_step "Сохранение учетных данных..."
|
||||||
DB_CREDENTIALS_FILE="/root/.db_password"
|
DB_CREDENTIALS_FILE="/root/.db_password"
|
||||||
cat > "$DB_CREDENTIALS_FILE" << EOF
|
cat > "$DB_CREDENTIALS_FILE" << EOF
|
||||||
|
|
||||||
DB_HOST=localhost
|
DB_HOST=localhost
|
||||||
DB_USER=root
|
DB_USER=root
|
||||||
DB_PASSWORD=$DB_PASSWORD
|
DB_PASSWORD=$DB_PASSWORD
|
||||||
DB_NAME=ALTCor
|
DB_NAME=ALTCor
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
chmod 600 "$DB_CREDENTIALS_FILE"
|
chmod 600 "$DB_CREDENTIALS_FILE"
|
||||||
log_info "Учетные данные сохранены в $DB_CREDENTIALS_FILE"
|
log_info "Учетные данные сохранены в $DB_CREDENTIALS_FILE"
|
||||||
|
|
||||||
ALL_IPS=$(hostname -I | tr ' ' '\n' | grep -v '^$' | head -5)
|
ALL_IPS=$(hostname -I | tr ' ' '\n' | grep -v '^$' | head -5)
|
||||||
EXTERNAL_IP=$(curl -s ifconfig.me 2>/dev/null || echo "недоступен")
|
EXTERNAL_IP=$(curl -s icanhazip.com 2>/dev/null || echo "недоступен")
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
if [ "$REINSTALL" = true ]; then
|
if [ "$REINSTALL" = true ]; then
|
||||||
@@ -1310,7 +1191,7 @@ EOF
|
|||||||
while IFS= read -r ip; do
|
while IFS= read -r ip; do
|
||||||
[ -n "$ip" ] && echo " • http://$ip/"
|
[ -n "$ip" ] && echo " • http://$ip/"
|
||||||
done <<< "$ALL_IPS"
|
done <<< "$ALL_IPS"
|
||||||
if [ "$EXTERNAL_IP" != "недоступен" ] && [ "$EXTERNAL_IP" != "" ]; then
|
if [ "$EXTERNAL_IP" != "недоступен" ] && [ ! -z "$EXTERNAL_IP" ]; then
|
||||||
echo " • http://$EXTERNAL_IP/ (внешний IP)"
|
echo " • http://$EXTERNAL_IP/ (внешний IP)"
|
||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
@@ -1325,15 +1206,10 @@ EOF
|
|||||||
echo " • Конфигурация БД: $WEBROOT/db_config.php"
|
echo " • Конфигурация БД: $WEBROOT/db_config.php"
|
||||||
echo " • Логи Apache: /var/log/apache2/ или /var/log/httpd/"
|
echo " • Логи Apache: /var/log/apache2/ или /var/log/httpd/"
|
||||||
echo ""
|
echo ""
|
||||||
echo " Дополнительная информация:"
|
|
||||||
echo " • Учетные данные БД: $DB_CREDENTIALS_FILE"
|
|
||||||
echo " • Для удаления: ./install.sh -u"
|
|
||||||
echo " • Для переустановки: ./install.sh -r"
|
|
||||||
echo ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if [[ $EUID -ne 0 ]]; then
|
if [[ $EUID -ne 0 ]]; then
|
||||||
log_error "Запустите этот скрипт вместе с sudo."
|
log_error "Запустите этот скрипт с правами sudo."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1366,9 +1242,7 @@ elif [ "$REINSTALL" = true ]; then
|
|||||||
echo ""
|
echo ""
|
||||||
log_step "Начинаем переустановку Altcor..."
|
log_step "Начинаем переустановку Altcor..."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
full_uninstall
|
full_uninstall
|
||||||
|
|
||||||
proceed_with_installation
|
proceed_with_installation
|
||||||
else
|
else
|
||||||
check_result=0
|
check_result=0
|
||||||
|
|||||||
Reference in New Issue
Block a user