博采众长,精于一技。Live for love, work for dream.

Ubuntu 安装 Redis,并配置开机启动

1、下载安装Redis:
cd /tmp
wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz
tar -zxf redis-2.4.6.tar.gz
cd redis-2.4.6
make
sudo make install

2. 配置init脚本:
wget https://github.com/ijonas/dotfiles/raw/master/etc/init.d/redis-server
wget https://github.com/ijonas/dotfiles/raw/master/etc/redis.conf
sudo mv redis-server /etc/init.d/redis-server
sudo chmod +x /etc/init.d/redis-server
sudo mv redis.conf /etc/redis.conf

3. 初始化用户和日志路径
第一次启动Redis前,建议为Redis单独建立一个用户,并新建data和日志文件夹
sudo useradd redis
sudo mkdir -p /var/lib/redis
sudo mkdir -p /var/log/redis
sudo chown redis.redis /var/lib/redis
sudo chown redis.redis /var/log/redis

4、设置开机自动启动,关机自动关闭
update-rc.d redis-server defaults

5、启动Redis:
/etc/init.d/redis-server start

Nginx 502 Bad Gateway错误及解决方案收集

1.FastCGI worker进程数是否不够

通过命令查看服务器上一共开了多少的 php-cgi 进程

ps -fe |grep "php" | grep -v "grep" | wc -l
使用如下命令查看已经有多少个php-cgi进程用来处理tcp请求

netstat -anop | grep "php" | grep -v "grep" | wc -l
接近配置文件中设置的数值,表明worker进程数设置太少

2.FastCGI执行时间过长

根据实际情况调高以下参数值

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

3.FastCGI Buffer不够

nginx和apache一样,有前端缓冲限制,可以调整缓冲参数

fastcgi_buffer_size 32k;
fastcgi_buffers 8 32k;

这个一般你能在日志中看到:upstream sent too big header while reading response header from upstream
意思就是反馈回来的头部信息太大,好多是Firefox浏览时才出现,是它的插件引起的。

4.Proxy Buffer不够

如果你用了Proxying,试试调整

proxy_buffer_size 16k;
proxy_buffers 4 16k;

精简debian linux VPS系统

1.首先,进行系统升级:
apt-get update && apt-get upgrade
2.完全多余的软件
apt-get -y purge apache2-* bind9-* xinetd samba-* nscd-* portmap sendmail-* sasl2-bin
3.多余的系统组件
apt-get -y purge lynx memtester unixodbc python-* odbcinst-* sudo tcpdump ttf-*
4.清理系统
apt-get autoremove && apt-get clean

这样就完成了,free -m 看看内存占用怎么样吧。

多余软件说明:

  • apache2-* //apache服务器,我们一般自己重装或者换Nginx等等
  • bind9-* //dns服务器,我们一般不在自己VPS上搭建DNS服务器,果断卸掉
  • xinetd //xinetd是服务守护进程,比如平时ftp服务器未开启,发现有人访问21端口则自动启动ftp服务器。VPS不需要
  • samba-* //samba能让linux系统使用windows的共享功能,VPS显然不需要
  • nscd-* //DNS缓存软件,同bind9,不需要
  • portmap //端口转发,一般Web服务器不需要
  • sendmail-* //发送邮件用,一般程序都使用php-sendmail,不需要这个
  • sasl2-bin //一个权限程序,不光占用资源,还容易在建立系统账户时候出错,果断删掉

多余的系统组件(不会自启动,但是占用硬盘,也许还会造成冲突什么的):
  • lynx //文本浏览器,一般人系用不到滴~~
  • memtester //测试内存有没有坏,我没那么无聊……
  • unixodbc odbcinst-* //odbc数据库,主要给windows用,做网站一般用不到
  • python-* //大名鼎鼎的Python语言,如果正常玩linux很可能用到,但是Web服务器是用不到的
  • sudo //让授权过的普通用户获得root权限,VPS不需要
  • tcpdump //TCP抓包,你用么?
  • ttf-* //桌面环境用的字体,我们只要命令行……

解决OpenVZ的ArchLinux升级问题

由于Archlinux的内核已经升级到3.0了,但是母机内核仍旧是2.6.*,OpenVZ不允许VPS的内核版本比母机高。所以会报错:FATAL: kernel too old

解决办法:在/etc/pacman.conf文件增加如下内容
[glibc-vps]
Server = http://dev.archlinux.org/~ibiru/openvz/glibc-vps/i686

这时候,你可以执行 pacman -Syu 进行升级,但是千万不要急着重启。一旦重启,将会出现另一个问题,连接不上SSH,并报如下错误。
PTY allocation request failed on channel 0

在重启之前,在 /etc/fstab 文件加入如下内容
none            /dev/pts      devpts    defaults        0   0
或者将以下脚本添加到/etc/rc.local
rm -rf /dev/ptmx
mknod /dev/ptmx c 5 2
chmod 666 /dev/ptmx
umount /dev/pts
rm -rf /dev/pts
mkdir /dev/pts
mount /dev/pts

用Duplicity备份你的VPS

一直想对VPS进行一次备份,苦于没有找到比较好的办法,所以一直搁置。这次,经过一番周折,终于找到了VPS备份利器--Duplicity
Duplicity是一个使用Python语言实现的文件增量备份工具,其利用rsync底层类库,实现仅把文件中变化了的数据存入增量备份包的工作方式(类似给文件生成Patch补丁的方式),调用pgp对数据包进行签名和加密,而且支持本地文件系统、远端ftp、ssh/scp、rsync、WebDAV、WebDAVs、HSi以及Amazon S3等非常丰富的备份存储介质。
安装很简单
apt-get install duplicity

这里放出我自己写的两个VPS备份脚本。
1.备份MySQL数据库(同时导出多个数据库到一个目录并进行压缩,最后删除7天前的备份,以节省空间)
backup_mysql.php
#! /usr/bin/php -q
<?php
ini_set
('memory_limit''-1');

$db_user 'root';
$db_pass 'your_password';
$backup_dbs = array('test','db1','db2');
$backup_dir '/home/rebill/VPS/backup';
$mysqldump_shell '/usr/local/mysql/bin/mysqldump';

function 
diffTime() {
  global 
$startingTime;
  return 
time() - $startingTime " secs.";
}


$mysqlDumpTab = array($mysqldump_shell,
              
"--add-drop-table",
              
"--add-drop-database",
              
"--complete-insert",
              
"--create-options",
              
"--comments",
              
"--opt",
              
"--quote-names",
              
"--skip-extended-insert",
              
"-u $db_user",
              
"--password='$db_pass'"
              
);
echo 
"MySQL Backup. backing up database\n";    
foreach(
$backup_dbs as $db){
    
$mysqlDump implode(' '$mysqlDumpTab);
    
$mysqlDump .= " --databases $db";
    
    
$sql_file $backup_dir"/" $db "_" date('Y-m-d'). ".sql";
    
// Dump a whole database
    
$startingTime time();
    echo 
"[mysqldump] dumping database $db.sql\n";
    
$mysqlDumpCommand $mysqlDump " > " $sql_file;
    
system($mysqlDumpCommand$retValue);
    if (
$retValue != 0) { echo "$db mysqldump Error!\n"; exit(-1); }
    echo 
"[mysqldump] export over in "diffTime(), "\n";
    
    
// Compress it
    
$startingTime time();
    
$gzipCmd "gzip -9 " $sql_file;
    echo 
"[gzip] $gzipCmd\n";
    
system($gzipCmd$retValue);
    if (
$retValue != 0) { echo "$sql_file Compress Error!\n"; exit(-1); }
    echo 
"[gzip] compression done in "diffTime(), "\n";
}

// Delete old files (7 days ago)
echo "Delete old files...\n";
$delCmd "find $backup_dir -type f -mtime +7 | xargs rm -f";
system($delCmd$retValue);
if (
$retValue != 0) { echo "Delete Error!\n"; exit(-1); }
echo 
"Done!\n";

return 
0;

2.duplicity备份VPS数据(如果你不喜欢Web数据和MySQL数据分开备份,你可以使用--include命令同时备份多个目录)
duplicity_backup.sh
#!/bin/bash
#
# Set GnuPG passphrase
#
export PASSPHRASE=rebill.info

#
# Backup Config
#
REMOTE_SERVER="192.168.0.2"
REMOTE_USER="root"
REMOTE_PASS="your_password"
REMOTE_WEB_DIR="/root/vps_backup/web"
REMOTE_DB_DIR="/root/vps_backup/db"
LOCAL_WEB_DIR="/home/wwwroot/"
LOCAL_DB_DIR="/home/db_backup/"

#
# Backup Web Data
#
duplicity $LOCAL_WEB_DIR scp://$REMOTE_USER:$REMOTE_PASS@$REMOTE_SERVER/$REMOTE_WEB_DIR

#
# Backup DB Data
#
duplicity $LOCAL_DB_DIR scp://$REMOTE_USER:$REMOTE_PASS@$REMOTE_SERVER/$REMOTE_DB_DIR

PS.具体参数请根据自己情况自行更改。

duplicity的更多用法请参考duplicity的手册:http://duplicity.nongnu.org/duplicity.1.html

返回顶部