Added remit to local php script

devel
Alexey Berezhok 3 days ago
parent 5d461cc39b
commit 598c9abdfb

@ -0,0 +1,169 @@
#!/opt/brepo/ruby33/bin/ruby
require 'json'
# Файл конфигурации Hestia
config_file = '/usr/local/hestia/conf/hestia.conf'
# Проверяем наличие строки LOCAL_PHP и её значение. Если она отсутствует или не равна 'yes', добавляем или заменяем её.
def ensure_local_php_enabled(config_file)
if File.exist?(config_file)
lines = File.readlines(config_file)
found = false
# Обрабатываем каждую строку
new_lines = lines.map do |line|
if line.strip.start_with?("LOCAL_PHP=")
found = true
"LOCAL_PHP='yes'"
else
line
end
end
# Если строки LOCAL_PHP не было найдено, добавляем её в конец файла
unless found
new_lines << "LOCAL_PHP='yes'\n"
end
# Записываем изменения обратно в файл
File.open(config_file, 'w') do |file|
file.puts new_lines
end
else
# Если файла не существует, создаём его и добавляем строку LOCAL_PHP='yes'
File.write(config_file, "LOCAL_PHP='yes'\n")
end
end
# Вызываем утилиту и разбираем JSON-ответ для получения списка установленных версий PHP
def get_installed_php_versions
output = `v-list-web-templates-backend json`
json_data = JSON.parse(output)
json_data.select { |version| version.start_with?("PHP-") }
end
# Вызываем утилиту и разбираем JSON-ответ для получения списка пользователей
def get_hestia_users
output = `v-list-users json`
json_data = JSON.parse(output)
json_data.keys # Возвращаем только ключи (имена пользователей)
end
# Вызываем утилиту и разбираем JSON-ответ для получения списка доменов пользователя
def get_user_domains(user)
output = `v-list-web-domains #{user} json`
json_data = JSON.parse(output)
json_data # Возвращаем весь хэш с доменами
end
# Функция для получения корректной версии PHP
def get_correct_php_version(system_php_version)
if system_php_version.length < 2
"8.2"
else
"#{system_php_version[0]}.#{system_php_version[1]}"
end
end
# Основная часть программы
begin
system_php_version = `php -r "echo str_replace('.', '', substr(phpversion(), 0, 3));"`
ensure_local_php_enabled(config_file)
INSTALLED_PHP_LIST = get_installed_php_versions
puts "Установленные версии PHP: #{INSTALLED_PHP_LIST.join(', ')}"
# Обрабатываем каждый элемент массива INSTALLED_PHP_LIST
INSTALLED_PHP_LIST.each do |php_version|
# Удаляем префикс 'PHP-' и остаёмся только с цифрами
version_number = php_version.gsub(/^PHP-/, '')
# Вызываем команду v-add-web-php с номером версии PHP
puts "Выполняем команду: v-add-web-php #{version_number}"
system("v-add-web-php", version_number)
end
# Получаем список пользователей Hestia
HESTIA_USERS_LIST = get_hestia_users
puts "Список пользователей Hestia: #{HESTIA_USERS_LIST.join(', ')}"
# Для каждого пользователя из списка выполняем действия с доменами
HESTIA_USERS_LIST.each do |user|
puts "Обрабатываем пользователя: #{user}"
# Получаем список доменов для текущего пользователя
user_domains = get_user_domains(user)
# Обрабатываем каждый домен и изменяем шаблон бэкенда
user_domains.each do |domain, details|
current_domain = domain
current_backend = details['BACKEND']
puts "Обрабатываем домен: #{current_domain}, текущий бэкенд: #{current_backend}"
# Вызываем команду для изменения шаблона бэкенда
command = ["v-change-web-domain-backend-tpl", user, current_domain, current_backend]
puts "Выполняем команду: #{command.join(' ')}"
system(*command)
end
end
# Перенастраиваем alternatives для новго PHP
correct_php_version = get_correct_php_version(system_php_version)
puts "Перенастраиваем PHP на новый путь командой: v-change-sys-php #{correct_php_version}"
system("v-change-sys-php", system_php_version)
# Список регулярных выражений для поиска пакетов, которые нужно удалить
patterns_to_remove = [
/^php\d{2}-runtime-.*$/,
/^php\d{2}-php/
]
# Получаем список установленных пакетов на системе
installed_packages = `yum list installed | grep remi`.split("\n").map { |line| line.split.first }
# Фильтруем подходящие пакеты для удаления
packages_to_remove = []
patterns_to_remove.each do |pattern|
installed_packages.each do |package|
if package.match?(pattern)
packages_to_remove << package
end
end
end
if packages_to_remove.empty?
puts "Нет подходящих пакетов для удаления."
else
puts "Следующие пакеты будут удалены:"
packages_to_remove.each_with_index { |package, index| puts "#{index + 1}. #{package}" }
print "\nВы уверены, что хотите удалить эти пакеты? (y/n): "
response = gets.chomp.downcase
if response == 'y'
# Формируем команду для удаления всех пакетов одной командой
remove_command = "yum remove -y #{packages_to_remove.join(' ')}"
system(remove_command)
puts "\nОперация завершена. Пакеты были успешно удалены."
else
puts "\nУдаление отменено пользователем."
end
end
# Перезапустим все PHP-FPM
INSTALLED_PHP_LIST.each do |php_version|
# Удаляем префикс 'PHP-' и остаёмся только с цифрами
version_number = php_version.gsub(/^PHP-/, '')
puts "Выполняем команду: systemctl restart brepo-php-fpm#{version_number}"
system("systemctl", "restart", "brepo-php-fpm#{version_number}")
end
rescue => e
puts "Произошла ошибка: #{e.message}"
end
Loading…
Cancel
Save