Last update at :2024-05-13,Edit by888u
Note: The method in this tutorial is based on a VPS or independent server based on KVM architecture. Prerequisite preparation: CentOS 6 or above is installed on the VPS or server. Update the system and install the vim editor.
1. Turn off selinux and configure iptables (important)
vim /etc/sysconfig/selinuxAdd content:
SELINUX=disabledSave. Open port 3000 of iptables:
/sbin/iptables -I INPUT -p tcp --dport 3000 -j ACCEPT /etc/rc.d/init.d/iptables save /etc/init.d/iptables restart2. Install OpenVZ
Configure YUM source
cd /etc/yum.repos.d wget http://download.openvz.org/openvz.repo rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ yum update -yInstall the OpenVZ kernel and tools such as vzctl and vzquota
yum install vzkernel yum install vzctl vzquotaConfigure OS kernel parameters, enter the /etc/sysctl.conf file, and modify the following two parameters
In order for VE to access the external network, the IP needs to be forwarded
net.ipv4.ip_forward = 1Mainly controls the debugging function of kernel system information
kernel.sysrq = 1Enable the above configuration file to take effect
modprobe bridge lsmod|grep bridgeReboot now and check whether the VZ service is running after restarting
chkconfig --list vzIf the following information is returned, it means it is running
vz 0:off 1:off 2:on 3:on 4:on 5:on 6:offBefore starting, you can check that the OpenVZ service has been started
service vz status service vz start3. Install OpenVZ Web Panel
wget -O - https://raw.githubusercontent.com/sibprogrammer/owp/master/installer/ai.sh | shAfter installation, use the following information to log in to the control panel
http://:30004. Add hw-daemon.rb content
vim /opt/ovz-web-panel/utils/hw-daemon/hw-daemon.rbAdd the following content:
#!/usr/bin/env ruby require 'webrick' require 'xmlrpc/server.rb' # workaround for clients with incorrect DNS records Socket.do_not_reverse_lookup = true ENV['PATH'] += ':/usr/sbin' DAEMON_VERSION = '1.3' CURRENT_DIR = File.expand_path(File.dirname(__FILE__)) + '/' CONFIG_FILE = CURRENT_DIR + 'hw-daemon.ini' PID_FILE = CURRENT_DIR + 'hw-daemon.pid' LOG_FILE = CURRENT_DIR + 'hw-daemon.log' SSL_CERT_FILE = CURRENT_DIR + "/certs/server.crt" SSL_PKEY_FILE = CURRENT_DIR + "/certs/server.key" $SERVER_ADDRESS = "0.0.0.0" $SERVER_PORT = 7767 $AUTH_KEY = "" $DEBUG = false $LOG = WEBrick::Log.new(LOG_FILE) $SSL_ENABLE = false $SSL_CERT = '' $SSL_PKEY = '' $THREADS = {} class HwDaemonApiHandler < XMLRPC::WEBrickServlet def version DAEMON_VERSION end def exec(command, args = '') output = `#{command} #{args} 2>&1` exit_code = $? $LOG.debug("Exec command: #{command} #{args}; code: #{exit_code}; output:\n#{output}") { 'exit_code' => exit_code >> 8, 'output' => output } end def job(command, args = '') job_id = generate_id t = Thread.new do result = self.exec(command, args) $THREADS[job_id]['result'] = result end $THREADS[job_id] = { 'thread' => t } { 'job_id' => job_id } end def job_status(job_id) found = $THREADS.has_key?(job_id) result = '' if found alive = $THREADS[job_id]['thread'].alive? result = $THREADS[job_id]['result'] unless alive end { 'found' => found, 'alive' => alive, 'result' => result } end def write_file(filename, content) File.open(filename, 'w') { |file| file.write(content) } $LOG.debug("Writing file: #{filename}") end def service(request, response) WEBrick::HTTPAuth.basic_auth(request, response, '') do |user, password| user == 'admin' && password == $AUTH_KEY end super end def handle(method, *params) $LOG.debug("Execute method: #{method}") super end private def generate_id symbols = [('0'..'9'),('a'..'f')].map{ |i| i.to_a }.flatten (1..32).map{ symbols[rand(symbols.length)] }.join end end class HwDaemonUtil def initialize check_environment if (0 == ARGV.size) do_help end load_config $LOG.level = WEBrick::Log::DEBUG if $DEBUG if $SSL_ENABLE require 'webrick/https' $SSL_CERT = OpenSSL::X509::Certificate.new(File.open(SSL_CERT_FILE).read) if File.readable?(SSL_CERT_FILE) $SSL_PKEY = OpenSSL::PKey::RSA.new(File.open(SSL_PKEY_FILE).read) if File.readable?(SSL_PKEY_FILE) end command = ARGV[0] case command when 'start' do_start when 'stop' do_stop when 'restart' do_restart when 'status' do_status else do_help end end def check_environment if RUBY_VERSION !~ /1\.8\..+/ puts "Ruby #{RUBY_VERSION} is not supported." exit(1) end if !File.exists?('/proc/vz/version') puts "Daemon should be run on the server with OpenVZ." exit(1) end end def do_start puts "Starting the daemon..." servlet = HwDaemonApiHandler.new servlet.add_handler("hwDaemon", servlet) servlet.set_default_handler do |name, *args| raise XMLRPC::FaultException.new(-99, "Method #{name} missing or wrong number of parameters!") end server = WEBrick::HTTPServer.new( :Port => $SERVER_PORT, :BindAddress => $SERVER_ADDRESS, :Logger => $LOG, :SSLEnable => $SSL_ENABLE, :SSLVerifyClient => ($SSL_ENABLE ? OpenSSL::SSL::VERIFY_NONE : nil), :SSLCertificate => $SSL_CERT, :SSLPrivateKey => $SSL_PKEY, :SSLCertName => [ [ "CN", WEBrick::Utils::getservername ] ] ) server.mount('/xmlrpc', servlet) ['INT', 'TERM'].each { |signal| trap(signal) { server.shutdown } } WEBrick::Daemon.start do write_pid_file server.start delete_pid_file end end def do_stop if (File.exists?(PID_FILE)) pid = File.read(PID_FILE) $LOG.debug("Killing process with PID #{pid.to_i}") Process.kill('TERM', pid.to_i) end puts "Daemon was stopped." end def do_restart do_stop do_start end def do_status if (File.exists?(PID_FILE)) puts "Daemon is running." else puts "Daemon is stopped." exit(1) end end def do_help puts "Usage: ruby hw-daemon.rb (start|stop|restart|status|help)" exit(1) end def load_config file = File.new(CONFIG_FILE, 'r') while (line = file.gets) key, value = line.split('=', 2).each { |v| v.strip! } case key when 'address' $SERVER_ADDRESS = value when 'port' $SERVER_PORT = value when 'key' $AUTH_KEY = value when 'ssl' $SSL_ENABLE = true if value == 'on' when 'debug' $DEBUG = true if value == 'on' end end file.close end def write_pid_file open(PID_FILE, "w") { |file| file.write(Process.pid) } end def delete_pid_file if File.exists?(PID_FILE) File.unlink PID_FILE end end end HwDaemonUtil.newvia: http://www.facebooksx.com/centosopenvzopenvzwebpanel.html It’s a very good and practical tutorial. I’m afraid that bloggers will give up, so I put it here.
Recommended site search: Which high-defense game server is the best, Hong Kong server rental, how to buy virtual host, Ningbo server, Hong Kong virtual host space, in domain name registration, domain name query, IP address, foreign virtual host, domain name price, < /p>
发表评论