0%

用户界面:纯粹的GoogleDrive风格,简洁大方,用过Google Drive的朋友会很容易习惯Filerun的操作 资源占用:Filerun资源占用非常小,实际使用丝般顺滑 文件功能:支持图片预览,视频播放,文档浏览编辑,epub电子书阅读,还可以关联第三方应用对文件进行操作,比如Google Doc

Filerun安装环境需求:

PHP:5.6+,官方推荐7.0 ionCube:Filerun不开源,需要安装和PHP版本对应的版本 数据库:MySQL/MariaDB, PostgreSQL or Sqlite

下载Filerun到虚拟主机目录并授权目录

1
2
3
4
cd /home/wwwroot/filerun
wget -O FileRun.zip http://www.filerun.com/download-latest
unzip FileRun.zip
chown -R www:www /home/wwwroot/filerun

下载ionCube Loader并复制到虚拟主机根目录

1
2
3
4
cd /root
wget http://www.ioncube.com/loader-wizard/loader-wizard.zip
unzip loader-wizard.zip
mv ioncube/loader-wizard.php /home/wwwroot/filerun/ion.php

在浏览器打开http://域名/ion.php 复制ionCube安装包链接 打开php.ini

1
vi /usr/local/php/etc/php.ini

添加下面一行代码

1
zend_extension = /usr/local/php/lib/php/extensions/no-debug-non-zts-20151012/ioncube_loader_lin_7.0.so

service php-fpm restart 弄好后重新打开 http://域名/ion.php,提示安装成功后,我们需要删掉ioncube安装向导

1
rm /home/wwwroot/filerun/ion.php

另外网盘推荐开启强制https,打开nginx配置文件

1
vi /usr/local/nginx/conf/vhost/域名.conf

在80端口段里添加以下代码

1
rewrite ^(.*)$ https://$host$1 permanent;

重启nginx

1
service nginx restart

前言

玩 vps 的经常要用到端口转发用以实现更快的速度。比如 ovh 机房的网络我这里访问非常慢,用远程桌面会吐血的类型。所以就会用其他的线路作为跳板,比如洛杉矶,香港之类的。再比如如果需要一个日本 ip ,但是本地访问 linode , conoha 的日本都绕路,又慢,这时如果用一个香港的 vps 做中转,就能达到比较稳定快速的效果。

使用 iptables 的好处就是不用额外装东西,上手就可以搞。

新人说明

中继、端口转发的模型:A、B、C

A是你自己,B是中继的VPS,C是需要被中继的VPS(A要通过B来加速对C的访问,所以配置都是在B上面,配置完成后A连接B,B将流量转发给C,C再转回给B,B最后才转回给A。这就是整个过程。)

iptables配置

开启防火墙的ipv4转发

echo -e “net.ipv4.ip_forward=1” >> /etc/sysctl.conf
sysctl -p

 

单端口 端口转发

同端口 端口转发

iptables -t nat -A PREROUTING -p tcp --dport [本地端口] -j DNAT --to-destination [目标IP:目标端口] iptables -t nat -A PREROUTING -p udp --dport [本地端口] -j DNAT --to-destination [目标IP:目标端口] iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [目标端口] -j SNAT --to-source [本地服务器主网卡绑定IP] iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [目标端口] -j SNAT --to-source [本地服务器主网卡绑定IP]

以下示例,假设你的国外服务器(被中转服务器)是 1.1.1.1 ,你的SS端口是 10000 ,而你这台正在操作的VPS的主网卡绑定IP(中转服务器)是 2.2.2.2 。

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000 -j DNAT --to-destination 1.1.1.1:10000 iptables -t nat -A PREROUTING -p udp -m udp --dport 10000 -j DNAT --to-destination 1.1.1.1:10000 iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 10000 -j SNAT --to-source 2.2.2.2 iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 10000 -j SNAT --to-source 2.2.2.2

这个时候你Shadowsocks客户端填写Shadowsocks信息的时候,账号配置和端口填写都不变,只需要修改IP为中转服务器IP即可 。

不同端口 端口转发

将本地服务器(中转服务器 2.2.2.2 )的 10000 端口转发至目标IP(被中转服务器)为 1.1.1.1 的 30000 端口

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000 -j DNAT --to-destination 1.1.1.1:30000 iptables -t nat -A PREROUTING -p udp -m udp --dport 10000 -j DNAT --to-destination 1.1.1.1:30000 iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 30000 -j SNAT --to-source 2.2.2.2 iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 30000 -j SNAT --to-source 2.2.2.2

这个时候你Shadowsocks客户端填写Shadowsocks信息的时候,端口应该填 10000 而不是 30000 。

多端口 端口转发

同端口 端口转发

将本地服务器(中转服务器 2.2.2.2 )的 1000030000 端口转发至目标IP(被中转服务器)为 1.1.1.1 的 1000030000 端口

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000:30000 -j DNAT --to-destination 1.1.1.1:10000-30000 iptables -t nat -A PREROUTING -p udp -m udp --dport 10000:30000 -j DNAT --to-destination 1.1.1.1:10000-30000 iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 10000:30000 -j SNAT --to-source 2.2.2.2 iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 10000:30000 -j SNAT --to-source 2.2.2.2

这个时候你Shadowsocks客户端填写Shadowsocks信息的时候,账号配置和端口填写都不变,只需要修改IP为中转服务器IP即可 。

不同端口 端口转发

将本地服务器(中转服务器 2.2.2.2 )的 1000020000 端口转发至目标IP(被中转服务器)为 1.1.1.1 的 3000040000 端口

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10000:20000 -j DNAT --to-destination 1.1.1.1:30000-40000 iptables -t nat -A PREROUTING -p udp -m udp --dport 10000:20000 -j DNAT --to-destination 1.1.1.1:30000-40000 iptables -t nat -A POSTROUTING -d 1.1.1.1 -p tcp -m tcp --dport 30000:40000 -j SNAT --to-source 2.2.2.2 iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp -m udp --dport 30000:40000 -j SNAT --to-source 2.2.2.2

这个时候你Shadowsocks客户端填写Shadowsocks信息的时候,端口应该填 100002000 而不是 3000040000 。

保存iptables配置

CentOS 系统:

service iptables save

Debian/Ubuntu 系统:

iptables-save > /etc/iptables.up.rules

查看NAT规则

iptables -t nat -vnL POSTROUTING
iptables -t nat -vnL PREROUTING

删除NAT规则

通过上面的查看规则命令,查看规则后,确定你要删除的规则的顺序,下面的命令是删除 第一个 规则。

iptables -t nat -D POSTROUTING 1 iptables -t nat -D PREROUTING 1

配置iptables开机加载

CentOS 系统:

service iptables save
chkconfig --level 2345 iptables on

Debian/Ubuntu 系统:

iptables-save > /etc/iptables.up.rules
echo -e ‘#!/bin/bash\n/sbin/iptables-restore < /etc/iptables.up.rules’ > /etc/network/if-pre-up.d/iptables
chmod +x /etc/network/if-pre-up.d/iptables

 安全快速的「私人云盘」其实并不是遥不可及,乐于折腾的你,也许可以考虑以下 Seafile 实现私有云方案。

Seafile 介绍

安全?

Seafile 支持端到端的加密技术来保护你的数据安全,服务器端数据加密,所有的数据传输使用 HTTPS/TLS 协议。 Seafile 通过“资料库”来分类管理文件,每个资料库可单独同步,用户可「加密」资料库, 且密码不会保存在服务器端,所以即使是服务器管理员也无权?访问你的文件。

可靠?

软件可靠性:Seafile 同步算法经过 3 年的不断改进和数十万用户的使用,已经非常可靠。 文件历史和资料库镜像机制,保证了文件可随时方便的恢复到任意历史状态。 硬件可靠性:使用 VPS 的硬盘看服务商而定,其可靠性高达99.999%。本地搭建依环境与硬盘质量而定,当然也可根据需求组建 RAID 提高本地数据可靠性。

快速?

Seafile 服务器内核由 C 语言编写。运行起来小巧快速。可直接通过本地 S 盘来访问云端文件,不占用本地存储。同操作系统无缝集成,可离线修改文件。升级通过最新的软件包以及一键脚本即可完成。

null

简述安装教程

本文以 Windows 下的操作为例。macOS 因为自带终端(Terminal),可以简化安装 PuTTY 等部分步骤,请使用纯净的 CentOS 7 系统,其他系统或非纯净系统可能会出错。 若你已经熟悉部分操作,可跳跃查看文章内容。

提前准备一些工具

  1. 耐心、细心。
  2. VPS 或私有服务器,搭载 CentOS 7 或 Ubuntu 16.04 系统。(本文介绍的是使用 CentOS 7纯净系统 的安装方式)
  3. WinSCP + PuTTY (下载地址: WinSCP 下载PuTTY 下载)

登录操作 VPS

请确保你的 PuTTY 安装在默认位置即 C:\Program Files (x86)\PUTTY 下。

WinSCP登录(配置如有不同请自行更改)

WinSCP 登录

WinSCP 登录

WinSCP界面

WinSCP查看文件

WinSCP查看文件

WinSCP是一款开源的SFTP客户端,运行于Windows系统下,遵照GPL发布。 使用WinSCP可以使你更加直观的看到你的Linux服务器文件,可直接进行文件拖拽,文件编辑等操作。 此次安装 Seafile ,教程默认在ROOT路径下进行操作(SSH/PuTTY连接时候已默认处于ROOT路径下)

SSH ( PuTTY )登录

 SSH ( PuTTY )可在WinSCP中调用

SSH ( PuTTY )可在WinSCP中调用

一键脚本安装Seafile

在 PuTTY 中输入下方全部代码后,请分行运行(回车) 注:此脚本出处为 Xiaoz 博客。

1
2
wget https://raw.githubusercontent.com/helloxz/seafile/master/install_seafile.sh
chmod +x install_seafile.sh && ./install_seafile.sh

安装脚本下载

安装脚本下载

根据提示进行选择即可。

根据提示安装

根据提示安装

该脚本运行完后会在命令行中打印配置信息和管理员账号密码,请仔细阅读。

1
2
3
4
5
6
7
8
#安装目录
/home/MyCloud
#启动服务
/home/MyCloud/seafile-server/seafile.sh start
#启动服务/home/MyCloud/seafile-server/seahub.sh start
#停止服务
/home/MyCloud/seafile-server/seafile.sh stop
#停止服务 /home/MyCloud/seafile-server/seahub.sh stop

开始使用

现在你可以通过 http://ip:8000/ 访问属于你自己的私有云了,Enjoy !

网页版操作界面

网页版操作界面

 

Windows客户端

Windows客户端

搭配 Seafile 客户端,享受多平台跨越自建私有云的安全快速,不仅桌面端,手机上也可以使用 Seafile

Seafile Pro

iOS

相关文章

下载

参考链接

项目官网 Github 项目地址 官方安装教程 官方脚本简易版 小z脚本

简介

MYDM 是一款免费的、轻量级、模块化下载工具,支持 HTTP/HTTPS、FTP、Magnet、Thunder 下载协议,并且可以通过插件扩展内容,目前可选插件为:百度盘、MSDN、人人影视。

官网地址

http://mydownload.ml/

截图

非常有创意的一款下载工具

其本身只提供简单的下载功能,扩展功能由第三方插件提供,比如 MSDN 插件,就可以快速选择不同系统然后再使用 MYDM 下载。

而百度盘插件也是有独立界面:

而那个人人影视插件,青小蛙没有找到正确使用姿势,有会用的么?

另外,MYDM 集成了迅雷接口,使用 Thunder 协议时会走迅雷网络,而其它协议则走本地网络。

哎,这么多年,下载界都被迅雷惯坏了,要知道真不会有多少人白白自掏腰包买服务器和带宽帮你加速啊…

一、功能与特点 支持多种不同Linux系统 一键安装Aria2 + Caddy + YAAW 使用FileFileManager作为文件管理器 离线下载 + 视频在线播放

二、一键安装Aria2 + YAAW 1、安装wget、unzip等

Centos系统

1
yum -y install wget unzip

Debian or Ubuntu系统

1
apt-get install -y wget unzip

2、安装Aria2 + YAAW wget https://zhujiwiki.com/usr/uploads/2017/12/aria2.zip unzip aria2.zip && cd aria2 && chmod u+x *.sh && ./install_aria2.sh Aria2-YAAW1.png

注意:Aria2授权令牌建议用字母 + 数字组合,最好不要含有特殊符号,尤其是@之类的符号,以免出现不必要的问题。 Aria2-YAAW2.png

安装完成后会看到如下信息,建议将信息保存。 Aria2-YAAW3.png

三、使用Aria2 + YAAW 安装完成后输入http://IP:6080进行访问,输入您刚刚设置的用户名、密码,就可以看到YAAW。 Aria2-YAAW4.png

Aria2-YAAW5.png

点击右上角“Setting”按钮,在JSON-RPC Path那里输入安装完后显示的RPC地址:http://token:abc123@IP:6800/jsonrpc,然后保存。

Aria2-YAAW6.png

添加下载任务

只要配置没有问题的情况下,点击“Add”按钮添加一个下载任务试试。

Aria2-YAAW7.png

管理文件

输入http://IP:6080/admin进入FileManager可以看到所有文件,下载的文件保存在download目录,其它文件请不要随意修改,以免出现异常。

Aria2-YAAW8.png

四、相关命令

启动

/data/aria2/aria2.sh start

停止

/data/aria2/aria2.sh stop

重启

/data/aria2/aria2.sh restart

卸载

cd aria2-master && ./uninstall.sh

Caddy server配置文件

/data/aria2/caddy.conf

Aria2配置文件

/data/aria2/aria2.conf

离线下载目录

/data/aria2/download

via:https://www.xiaoz.me/archives/9694

五、下面是个一键安装Aria2+Ariang+Filemanager+H5aii脚本的脚本 debian测试通过

1
wget --no-check-certificate https://raw.githubusercontent.com/Thnineer/Bash/master/aria2u.sh && chmod +x aria2u.sh && bash aria2u.sh

via:http://www.hostloc.com/forum.php?mod=redirect&goto=findpost&ptid=412979&pid=5048605

为什么用HE.NET?

HE.NET是我在2004年前后就接触过的服务商,后来我的服务器都放到Theplanet,然后Theplanet的一批工程师独立创建了Softlayer,再之后Softlayer被IBM收购,再反过来收购Theplanet,我的N台服务器终于都集中到一家了。至始至终,和he.net交流询价过无数次,但是始终没能合作。

2000年前后无聊去做一个DNS工具,其实就是打算在Windows上完全从零开始实现一个带图形界面的DNS查询工具。已发布版本支持了很多常见的DNS记录类型,新版本支持一些DNSSEC(Domain Name System Security Extensions),但是后来忙别的事情,就没去耐心去做去了。做的过程要测试啊,我在DNS服务器里设置好对应的记录,然后再用我实现的工具去查询,藉此判断我的工具实现的是否正常。

虽然我的几台独立服务器都装着DNS服务,但是手动去改配置文件太麻烦,风险也高,万一搞死了就会挨骂。于是我就去找一些DNS服务商测试,找来找去,发现HE.NET对各种记录支持的最全面*。于是它就成了我测试DNS的首选服务商。

Dynamic DNS 服务商好多家,但是既然HE.NET支持,我就不舍近求远啦。

DNS和 Dynamic DNS

要说Dynamic DNS,就不得不提**DNS(域名解析服务)**;要提DNS,就不得不提域名。

简单的讲,**互联网的主机靠IP来区分,要访问一台主机上的服务(HTTP、 FTP、EMAIL、DATABASE等)我们首先要知道对方的IP地址。但是互联网的主机千千万,抽象的IP地址根本无法记忆,而域名就是给这个地址起一个好记的名字**。所以,我们就可以通过www.baidu.com这样的域名来访问到百度,通过www.taobao.com这样的域名来访问到淘宝。

而从**域名到IP的过程,就是域名解析,是由域名解析服务器(Name Server)来完成的**。

而另外一种场景就是分配给主机的IP不时的变化。 这时如果使用普通的域名解析服务,我们需要不时的修改解析记录,来将域名指向更新后的IP。这时会有一些问题存在,比如变化频繁,修改工作量大;变化时机不定,无法确定何时修改。

Dynamic DNS 很好的解决如上问题,它的基本原理就是,**当主机关联的IP变化时,自动更新解析记录**。

所以,屏蔽掉一些技术细节,通俗的讲:

  • 互联网上的主机靠IP区分和访问。
  • 域名给IP地址起了个好记的名,从域名到IP的过程就是域名解析。
  • Dynamic DNS自动更新解析记录,适合关联到主机的IP不时变化的场景。

(本小节文本来自我以前在其它网站发表的原创文章,如果你找到雷同的,没错,那就是我写的 ?)

HE.NET的Dynamic DNS

关于他们的DNS服务以及Dynamic DNS的使用细节,请参考:https://dns.he.net/

大致步骤

注册之类的非常简单,大家按提示操作即可,这里就不赘述了,只列出一些关键步骤。

  • 将要解析的域名DNS设置为HE.NET的DNS
  • 在HE.NET的DNS面板中添加域名
  • 添加对应的解析记录(比如A记录),并选取“Enable entry for dynamic dns”
  • 生成用于DDNS客户端的密码(Generate the key used for dynamic DNS updates)
  • 在主机上使用DDNS client。(设置定时任务)

操作实例

  • 将域名DNS设置为HE.NET的DNS

  • 在HE.NET的DNS面板中添加域名

  • 添加对应的解析记录

  • 生成用于DDNS client的密码

  • 设置DDNS client crontab -e 添加如下代码: */5 * * * * curl "https://dyn.dns.he.net/nic/update" -d "hostname=iot0.xxxx.com" -d "password=XXXXXX" -k 代码部分可以查阅: https://dns.he.net/
    好啦,大功告成啊。 想测试是否成功,ping一下域名,看看显示的IP 再用一些查看公网IP的工具,看一下两者是否一致就可以啦。

或者你已经设置好了NAT的端口转发以及开启了对应的HTTP服务之类的,那么直接访问域名就可以看到网站喽。是不是非常简单!

总结

本文简单介绍了域名、DNS、Dynamic DNS的原理。 并以HE.NET的DNS服务为例,为iot0.xxxx.com添加了一个Dynamic DNS的A Record。 限于篇幅,对一些技术细节只做通俗的解释,想了解对应知识的,请参阅相应的技术文档。

仅限于OpenVZ VPS,共2个,第一个手动安装,第二个自动安装。 KVM或者Xen VPS、独立服务器请使用: 1、TCP加速:BBR 一键安装 2、TCP加速:BBR 增强版 for Debian/Ubuntu

一、下面这个适用于Ubuntu 14.04 x64、Ubuntu 16.04 x64、CentOS 6 x64、CentOS 7 x64等64位系统,要求 glibc 版本 2.14 以上。

SSH下操作。 (一)、停止防火墙

1
2
systemctl disable firewalld
systemctl stop firewalld

(二)、安装BBR

1
2
3
wget https://zhujiwiki.com/usr/uploads/2017/11/ovz-bbr-installer.sh
chmod +x ovz-bbr-installer.sh
./ovz-bbr-installer.sh

需要配置的有如下几个选项: 1.需要加速的端口,即的 SS 端口。加速开启之后,流量会先经过 BBR 处理,之后再发送给后端的 SS。 2.可能需要配置 “公网接口名称”,即你服务器上具有公网 IP 的接口名称。

(三)、卸载BBR

1
./ovz-bbr-installer.sh uninstall

(四)、判断 BBR 已正常工作 ping 10.0.0.2,如果能通,说明 bbr 已经启动。

via:https://blog.kuoruan.com/116.html

二、下面是其他博主的一键安装包(LKL BBR RINETD),适用于CentOS/RHEL7+,Ubuntu15+,Debian8+:

1
curl https://zhujiwiki.com/usr/uploads/2017/11/rinetd.sh  bash

ovz-bbr-port.jpg

via:https://github.com/mixool/rinetd

仅限KVM VPS,需更换内核。其他BBR脚本: a、TCP加速:BBR 一键安装 b、TCP加速:BBR 增强版 for Debian/Ubuntu c、OpenVZ VPS 安装 Google BBR 一键脚本

安装过程如下: 1、将系统内核更换成 4.12 内核

1
rpm -ivh https://zhujiwiki.com/usr/uploads/2017/11/kernel-ml-4.12.10-1.el6.elrepo.x86_64.rpm

然后重启。

2、修改引导文件

1
vi /boot/grub/grub.conf

bbr-centos6-1.jpg 将 default=1 改成default=0,然后重新启动。

3、查看当前是否使用的是4.12.10-1的内核

1
uanme -a

bbr-centos6-2.jpg

4、更新以下文件

1
2
3
yum remove kernel-headers -y 
rpm -ivh https://zhujiwiki.com/usr/uploads/2017/11/kernel-ml-headers-4.12.10-1.el6.elrepo.x86_64.rpm
rpm -ivh https://zhujiwiki.com/usr/uploads/2017/11/kernel-ml-devel-4.12.10-1.el6.elrepo.x86_64.rpm

5、进行BBR魔改操作

1
2
3
4
5
6
7
8
9
10
yum install -y make gcc 
wget -O ./tcp_tsunami.c https://zhujiwiki.com/usr/uploads/2017/11/tcp_tsunami.c
echo "obj-m:=tcp_tsunami.o" > Makefile
make -C /lib/modules/$(uname -r)/build M=`pwd` modules CC=/usr/bin/gcc
chmod +x ./tcp_tsunami.ko
cp -rf ./tcp_tsunami.ko /lib/modules/$(uname -r)/kernel/net/ipv4
insmod tcp_tsunami.ko
depmod -a
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=tsunami" >> /etc/sysctl.conf

6、运行 sysctl -p 将内核参数生效。

7、重启。

8、查看是否成功

1
lsmod  grep tsunami

bbr-centos6-3.jpg

via:https://www.shaobing.hk/post/8.html

大家好!

随心博客已经彻底沦陷了。

现在变成一年一更新了……

上一次更新了一堆文章,结果VPS挂了,都没了,于是心灰意冷,闲置了好久……

这次想写一篇关于CentOS安装OpenVZ并配置OpenVZ Web Panel的文章,话说天下文章一大抄,抄来抄去都变了样。如何你第一次使用CentOS安装OpenVZ的话,你一定会跟我一样,被各种奇葩粘贴复制的文章弄的抓狂。好吧,今天随心就发挥特长,把所有网上的奇葩文章整合成一篇完成的教程,看了我的教程你绝对不会走弯路的,哇咔咔。

注意:本教程的方法建立在基于KVM构架的VPS或独立服务器上,其他的环境就不要试了,免得你伤心……

前提准备:VPS或服务器安装CentOS 6及以上系统。update系统,并安装vim编辑器。

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

vim /etc/sysconfig/selinux
添加内容:
SELINUX=disabled
保存

开放iptables的3000端口或vim /etc/sysconfig/iptables

/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
lsmodgrep 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

最后这个问题是所有教程都没有写的,一个非常奇葩的问题,当你安装好OWP后,你无法下载系统模版,也就无法创建VZ。哈哈,这个问题困扰了我几天,终于在github里发现了解决办法。引起这个BUG的原因就是一个重要的进程文件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 (startstoprestartstatushelp)”
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

现在就可以开始创建OVZ小鸡了,可以愉快的玩耍了!

微魔已经在网站上发布了多篇备份相关的文章,希望大家在其中已经获得了自己想要的东西,现在,微魔再补充一下Rsync备份的相关内容,提到Rsync,很多熟识Linux的朋友都不会陌生,很多Linux的镜像都是采用这种方式进行同步的。网络上更是有很多人采用了Rsync配合DNS,为网站架设多个镜像站点的案例。本文仅粗浅的介绍一个使用Rsync进行网站备份的方法,也欢迎大家补充更多内容。

首先,我们假定网站所在的服务器为A服务器,备份服务器为B服务器。安装rsync的方法就不说了,Linux直接yum/apt-get install rsync就可以了

1.用ssh-key-gen命令在A服务器上创建公钥和密钥(目的是免密码登录B服务器)

ssh-keygen -t rsa

2.在A服务器上运行ssh-copy-id命令把公钥复制到B服务器(.ssh/authorized_key)上

ssh-copy-id -i ~/.ssh/id_rsa.pub root@B服务器的ip

期间需要输入B服务器的密码

如果出现形如如下错误

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xxxxxxxx
Please contact your system administrator.
Add correct host key in /home/conbar/.ssh/known_hosts to get rid of this message.
Offending key in /home/conbar/.ssh/known_hosts:10
RSA host key for xxxxxx has changed and you have requested strict checking.
Host key verification failed.

在A服务器下运行如下命令

ssh-keygen -R B服务器的ip

3.在A服务器上尝试登录B服务器

ssh B服务器ip

如果成功就没问题了

4.A服务器建立备份脚本(本文示例是在/root下建立了backup.sh文件):

示例1(先打包再同步):

#!/bin/bash
echo “Now packing your database…”
mysqldump -uroot -p数据库密码 数据库名称> backup.sql
echo “Now your files…”
tar zcvfP backup.tar.gz 网站目录(如/home/wwwroot)
echo “rsync start…”
echo “Database file is under rsync…”
rsync -avz -e “ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null” –progress /root/backup.sql B服务器ip:/home/
echo “Now your files…”
rsync -avz -e “ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null” –progress /root/backup.tar.gz B服务器ip:/home/
echo “Complete!”

示例2(直接同步网站目录,可实现增量备份):

#!/bin/bash
echo “Now packing your database…”
mysqldump -uroot -p数据库密码 数据库名称> backup.sql
echo “rsync start…”
echo “Database file is under rsync…”
rsync -avz -e “ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null” –progress /root/backup.sql B服务器ip:/home/
echo “Now your files…”
rsync -avz -e “ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null” –progress /home/wwwroot B服务器ip:/home/
echo “Complete!”

5.为备份脚本增加运行权限

chmod +x backup.sh

运行sh backup.sh进行备份尝试

6.设置crontab(crontab -e命令)进行定期备份(每周二、周四凌晨4点开始备份)

# m h dom mon dow command
0 4 * * 1,4 /bin/bash /root/backup.sh