#!/opt/brepo/ruby33/bin/ruby # info: utility to prepare existing server with hestiacp to use bunkerweb # do not run this script n the server, where bunkerweb was installed with hestiacp # installation # options: COMMAND # # example: v-bunkerweb-migrate migrate-nginx # # Commands: # migratenginx - move old nginx configs to the new port and path # migratetobunkerweb - create items of sites in the bunkerweb database #------------------------------------------# # Variables & Functions # #------------------------------------------# # Argument definition v_command = ARGV[0] require "/usr/local/hestia/func_ruby/global_options" load_ruby_options_defaults $HESTIA = load_hestia_default_path_from_env require "main" require "modules" require "HestiaBunkerWebApi" require 'json' unless defined?(JSON) require 'fileutils' def copy_nginx_files(src_root, dest_root) FileUtils.mkdir_p(dest_root) Dir.foreach(src_root) do |entry| next if entry == '.' || entry == '..' next if entry == 'modules' || entry == 'modules-enabled' src_path = File.join(src_root, entry) dest_path = File.join(dest_root, entry) if File.directory?(src_path) FileUtils.mkdir_p(dest_path) copy_nginx_files(src_path, dest_path) else FileUtils.cp(src_path, dest_path) end end end # Function to log and execute migration stages def log_migrate_stage(stage) log_file = '/usr/local/hestia/log/bunkerweb_migrate_stages.log' # Check if the stage has already been recorded if File.exist?(log_file) && File.readlines(log_file).any? { |line| line.strip == stage } puts "Stage #{stage} already completed, skipping." return end # Execute the stage block begin yield # Record the successful stage File.open(log_file, 'a') { |f| f.puts stage } puts "Stage #{stage} completed." rescue => e hestia_print_error_message_to_cli "Stage #{stage} failed: #{e.message}" exit 1 end end hestia_check_privileged_user load_global_bash_variables "/etc/hestiacp/hestia.conf" if $HESTIA.nil? hestia_print_error_message_to_cli "Can't find HESTIA base path" exit 1 end load_global_bash_variables "#{$HESTIA}/conf/hestia.conf" #------------------------------------------# # Verifications # #------------------------------------------# check_args 1, ARGV, "COMMAND" # Perform verification if read-only mode is enabled check_hestia_demo_mode #------------------------------------------# # Action # #------------------------------------------# case v_command.to_sym when :migratenginx log_migrate_stage('stage1') do if $BUNKERWEB.nil? hestia_change_sys_config_value("BUNKERWEB", "yes") end end log_migrate_stage('stage2') do unless system('yum install -y nginx-system') hestia_print_error_message_to_cli "Failed to install nginx-system via yum" log_event E_ARGS, $ARGUMENTS exit 1 end end log_migrate_stage('stage3') do hestia_change_sys_config_value("PROXY_PORT", "8078") hestia_change_sys_config_value("PROXY_SSL_PORT", "8079") end log_migrate_stage('stage4') do FileUtils.rm_f Dir.glob('/usr/local/hestia/nginx-system/etc/nginx/conf.d/*.conf') src_root = '/etc/nginx' dest_root = '/usr/local/hestia/nginx-system/etc/nginx' copy_nginx_files(src_root, dest_root) end #stage5 замена /etc/nginx на /usr/local/hestia/nginx-system/etc/nginx #stage6 замена портов на 8078 #stage7 проверить, нужно ли что-то менять в шаблонах #stage8 активация из запуск nginx-system when :migratetobunkerweb #TODO настройка bunkerweb else hestia_print_error_message_to_cli "unknown command" log_event E_ARGS, $ARGUMENTS exit 1 end exit 0