洛杉矶独服Xen安装记

感谢威化鱼的洛杉矶独服~~~不过因为IP太少了所以只能开2台啦~~~留言即有机会获得撒~~~

前几天鱼少在群里说要开免费小鸡给大家,但是由于他严重的拖延症,这个计划一直没能实施。。。于是,今天晚上他丢了一台洛杉矶的独服给我,让我弄一下Xen Server,然后开几个VPS给大家玩玩~

于是乎,先用自己的Azure开了一个Windows的虚拟机,下载Xen Server 6.2的ISO,登录IPKVM,安装Java,连上服务器,挂在ISO,开始安装。。。

Xen Server的安装还是蛮简单的,基本上没有太大的难度。很快就弄好了。

但是之后在装Xen System的时候出了问题,官方提供的自动配置脚本是失效的!!!在这卡了好久,找客服不理,一怒之下不干了!!!决定自己装!!!

接下来就是毫无难度的下载一个Xen Center,下载系统镜像,建虚拟机。。。

弄好之后我还是觉得Esx比Xen方便。。。唉。。。

PS:本次的VPS绝对不保证长久。。。可能哪天一高兴我就给重装成Esx了。。。大家练手即可!等稳定下来会另作通知的。

PS:由于IP实在太少,数量减少到两台。。。另外我实在是对国人写的控制面板无语。。。罢了罢了。。。放弃。。。

 

好了,开奖结果公布,开奖使用random.org提供的随机数发生器。这是结果截图:

p1 p2

恭喜幽静森林和佐恩中奖!请尽快在群里联系我吧~

[转]定时自动备份网站和数据库的脚本

转自:http://www.lovelucy.info/auto-backup-website-shell-script.html

更新:随着时间推移备份文件越来越多,在同一个目录中难以组织管理。1.1版增加按年月创建目录存放备份文件。

1、备份网站

#!/bin/sh
# File:    /home/backup_shell/backup_web.sh
# Author:  lovelucy
# Version: 1.1

# Some vars
BIN_DIR="/usr/bin"
BCK_DIR="/backup"
WEB_DIR="/var/www/html"
DATE=`date +%F`
DATE_YEAR=`date +%Y`
DATE_MONTH=`date +%m`

# Make Dir
if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH
then
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
else
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
    mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH
fi

# Backup
tar -czf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/web_$DATE.tar.gz  $WEB_DIR

2、备份数据库

#!/bin/sh
# File:    /home/backup_shell/backup_db.sh
# Author:  lovelucy
# Version: 1.1

# Database info
DB_USER="root"
DB_PASS="db_password"
DB_NAME="db_name"

# Some vars
BIN_DIR="/usr/bin"
BCK_DIR="/backup"
DATE=`date +%F`
DATE_YEAR=`date +%Y`
DATE_MONTH=`date +%m`

# Make Dir
if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH
then
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
else
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
    mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH
fi

# Backup
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BCK_DIR/$DATE_YEAR/$DATE_MONTH/${DB_NAME}_dump_$DATE.gz

3、备份网站日志

#!/bin/sh
# File:    /home/backup_shell/backup_log.sh
# Author:  lovelucy
# Version: 1.1

# Some vars
BIN_DIR="/usr/bin"
BCK_DIR="/backup"
LOG_ERROR="/var/log/web-error_log"
LOG_ACCESS="/var/log/web-access_log"
DATE=`date +%F`
DATE_YEAR=`date +%Y`
DATE_MONTH=`date +%m`

# Make Dir
if test -d $BCK_DIR/$DATE_YEAR/$DATE_MONTH
then
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH exists."
else
    echo "directory $BCK_DIR/$DATE_YEAR/$DATE_MONTH does not exists. make dir..."
    mkdir -p $BCK_DIR/$DATE_YEAR/$DATE_MONTH
fi

# Backup
tar -czf $BCK_DIR/$DATE_YEAR/$DATE_MONTH/log_$DATE.tar.gz  $LOG_ERROR $LOG_ACCESS

# Clear logs
echo > $LOG_ERROR
echo > $LOG_ACCESS

4、设置cron定时执行

$ crontab -e

此时会启动默认编辑器vim,添加以下内容

# backup log *daily*
59 3 * * * /home/backup_shell/backup_log.sh
# backup database *weekly*
1 4 * * 5 /home/backup_shell/backup_db.sh
# backup web files *monthly*
5 4 1 * * /home/backup_shell/backup_web.sh

保存后,默认会在/var/spool/cron目录下生成一个以当前用户名命名的文件。以上内容意义为:每一行由空格分割为6部分,依次为“分钟”、“小时”、“日”、“月”、“星期”、“要执行的程序”。故上面的设置是

  • 每天3点59分执行backup_log.sh脚本
  • 每个星期5的4点1分执行backup_db.sh脚本
  • 每个月1号的4点5分执行backup_web.sh脚本

备份操作可能消耗大量资源和时间,应该设置在凌晨访问量小、系统负载低的时候运行。如果有独立的服务器存储备份文件,还可以在脚本中增加ftp或者email传送备份文件到远程服务器的功能。

[转]自动备份网站并同步到 Dropbox

转自:http://www.lovelucy.info/backup-website-and-sync-to-dropbox.html

之前写过一篇博客,记录了 定时自动备份网站和数据库 的脚本,不过只是将 VPS 上的数据打包保存在了本机的一个目录下,要知道真正的容灾备份需要至少在 3 个不同的物理节点上都有一份拷贝的。Email 发送备份文件在数据超多的情况下不太实际,而出于成本考虑我不想为了一个 VPS 又购买另一个来用作 FTP。不禁想到 DropBox,它无疑是很好的选择——基于 Amazon S3 的云存储保证了可靠性,免费的容量已经足够用,也不必担心数据被审查。

一、设置 Dropbox

Dropbox 提供了丰富的 API,使得我们不必使用官方庞大的客户端,而用一些简单轻量的脚本即可直接上传文件。

Dropbox-Uploader 就是这样一个第三方的脚本,并且它已经开源在了 Github。我们将此脚本下载到 VPS 中,即可使用。

$ wget https://raw.github.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh
$ chmod +x dropbox_uploader.sh
$ ./dropbox_uploader.sh

运行脚本,根据提示设置自己的 Dropbox 应用 API,然后按照步骤设置,就可以使用其命令上传和下载文件了。

dropbox_app_create

二、同步备份脚本

脚本根据自己的 VPS 配置进行一些修改。

#!/bin/bash
# 一些配置
DROPBOX_DIR=/$(date +%Y-%m-%d) # Dropbox 目录,根目录 / 是你已经创建的 app 目录
MYSQL_USER="root"
MYSQL_PASS="password"
MYSQL_DB=('wordpress' 'project2')
BACK_DATA=/root/backup-data # 备份文件保存在本地的目录
DATA=/var/www # 需要备份的网站文件

# 定义备份文件名
DataBakName=Database_$(date +"%Y-%m-%d").tar.gz
WebBakName=Web_$(date +%Y-%m-%d).tar.gz
OldData=Database_$(date -d -6day +"%Y-%m-%d").tar.gz
OldWeb=Web_$(date -d -6day +"%Y-%m-%d").tar.gz
# Dropbox 里 30 天以上的旧数据可以清除
Old_DROPBOX_DIR=/$(date -d -30day +%Y-%m-%d) 
# 清理本地保存了 6 天的备份
echo -ne "Delete local data of 6 days old..."
rm -rf $BACK_DATA/$OldData $BACK_DATA/$OldWeb
echo -e "Done"

cd $BACK_DATA
# 导出 MySQL 数据库,并压缩
echo -ne "Dump mysql..."
for db in ${MYSQL_DB[@]}; do
    (/usr/bin/mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db}.sql)
done
tar zcf $BACK_DATA/$DataBakName *.sql
rm -rf $BACK_DATA/*.sql
echo -e "Done"

# 备份网站文件
echo -ne "Backup web files..."
cd $DATA
tar zcf $BACK_DATA/$WebBakName *
echo -e "Done"

cd $BACK_DATA
# 开始上传到 Dropbox
echo -e "Start uploading..."
./dropbox_uploader.sh upload  $BACK_DATA/$DataBakName $DROPBOX_DIR/$DataBakName
./dropbox_uploader.sh upload  $BACK_DATA/$WebBakName $DROPBOX_DIR/$WebBakName

# 清理 Dropbox 里 30 天前的旧数据
./dropbox_uploader.sh delete $Old_DROPBOX_DIR/

echo -e "Thank you! All done."

然后使用 crontab,让此脚本每几天定时自动运行,网站的所有数据就会安全地备份到 Dropbox 了。其他注意事项,可以参考我之前的一篇 定时自动备份网站和数据库

PHP发送UTF-8编码中文邮件发件人和标题乱码

标题乱码

当我们使用下面的PHP语句发送中文电子邮件的时候,会发现邮件的标题是乱码,而邮件正文却是正确的,如何才能使得邮件标题不是乱码呢?

$subject = stripslashes($the_post['Title']);
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/plain; charset=utf-8\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$message = stripslashes(strip_tags($the_post['Content']));
mail($to, $subject, $message, $headers);

先用函数base64_encode() — 使用 MIME base64 对数据进行编码

标题字符串前加编码类型例如: =?UTF-8?B?

标题字符串后加:?=

例如:

$subject = "=?UTF-8?B?".base64_encode($subject)."?=";

将上面一句添加到代码之中,这样,发送的中文邮件标题就不是乱码了。

 

收件人那行都是乱码

$headers = 'To: "=?utf-8?B?' . base64_encode("测试") . '?="  '. "\r\n";
$headers = 'From: "=?utf-8?B?' . base64_encode("测试") . '?="  '. "\r\n";

像这样,确定取出来的数据为utf-8,然后将数据用base64编码。