CentOS安装OpenVZ并配置OpenVZ Web Panel

注意:本教程的方法建立在基于KVM构架的VPS或独立服务器上。
前提准备:VPS或服务器安装CentOS 6及以上系统。update系统,并安装vim编辑器。

1、关闭selinux并配置iptables(重要)

vim /etc/sysconfig/selinux

添加内容:

SELINUX=disabled

保存。
开放iptables的3000端口:

/sbin/iptables -I INPUT -p tcp --dport 3000 -j ACCEPT
/etc/rc.d/init.d/iptables save
/etc/init.d/iptables restart

2、安装OpenVZ

配置YUM源

cd /etc/yum.repos.d
wget http://download.openvz.org/openvz.repo
rpm --import  http://download.openvz.org/RPM-GPG-Key-OpenVZ
yum update -y

安装OpenVZ内核和vzctl、vzquota等工具

yum install  vzkernel
yum install vzctl vzquota

配置OS内核参数,进入/etc/sysctl.conf文件,修改下面两个参数

为了让VE访问外部网络,需要对IP进行转发

net.ipv4.ip_forward = 1

主要是控制对kernel系统信息的debug功能

kernel.sysrq = 1

使上面的配置文件生效

modprobe bridge
lsmod|grep bridge

现在reboot,重启后检查VZ服务是否运行

chkconfig --list vz

返回如下信息则代表正在运行

vz                0:off 1:off 2:on 3:on 4:on 5:on 6:off

启动之前可以先检查一下OpenVZ服务时候已经启动了

service vz status
service vz start

3、安装OpenVZ Web Panel

wget -O - https://raw.githubusercontent.com/sibprogrammer/owp/master/installer/ai.sh | sh

安装结束后,使用如下信息登录控制面板

http://:3000

4、添加hw-daemon.rb内容

vim /opt/ovz-web-panel/utils/hw-daemon/hw-daemon.rb

添加如下内容:

#!/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.new

via:http://www.facebooksx.com/centosopenvzopenvzwebpanel.html
挺好的实用教程,怕博主放弃,置于此。

    所有主机信息仅是为及时分享并收录,不做推荐!
    专门搜集、分享国内高速、稳定的香港、日本、韩国、新加坡、美西CN2等优质线路的主机:FastVM