Setup Git Repo on VPS

We can setup our own Git repo on VPS, it’s very easy. After the setup, we can access our repo as:

//clone our repo to local, we use git as username and domain as the server domain(like unieagle.net).
git clone git@domain:a_repo.git

The simple steps are as follows:

  1. add user ‘git’ on your host
  2. setup ssh access for your local computer to your host as ‘git’
  3. create and init your repo on your server
  4. access your repo in local computer

Details:

add user ‘git’ on your host

ssh login into your host as root, and do the following:

useradd -d /home/git -m git
passwd git

setup ssh access for your local computer to your host as user ‘git’

in your local computer, do the following:

if you have no rsa keys, you need to generate one first:

cd ~/.ssh
ssh-keygen -t rsa 

this will generate id_rsa and id_rsa.pub in your ~/.ssh directory

if your key name is not id_rsa you need to add your key with:

ssh-add your_custome_name_of_key

with these keys, do the following:

cat id_rsa.pub | ssh git@domain 'cat >> .ssh/authorized_keys'

then you are able to run ssh git@domain without your password if everything goes well.
if not, check your host with permissions of /home/git, it should belongs to user git.

create your own repo

this is done on your host

ssh git@domain
mkdir your_first_repo.git
cd your_first_repo.git
git --bare init

then your git repo is setup fullly

access your repo on your local computer

you can clone your repo to local using:

git clone git@domain:your_first_repo.git

then all works done. enjoy it.

Or, if you have a repo already exists in your local computer and want to using the repo on your host, just setup the remote and up stream of your local repo, it will works well, as following:

//assume you are already in your local repo directory
git remote add origin git@domain:your_first_repo.git
git push --set-upstream origin master

ubuntu用户以及组管理

ubuntu中的用户和组管理

======重要文件======
/etc/passwd
用户账户文件,每行一个用户,每行有7个字段,分别是:
登录名:有无口令:用户ID:组ID:账户备注信息:用户Home目录:登录时用户shell的名称

/etc/shadow
用户口令文件,每行一个用户,字段分别为:
登录名:加密的口令:上次更改口令距离1970.1.1的天数:口令更改后不可更改的天数:口令更改后必须再更改的天数(有效期):口令失效前警告用户的天数:口令失效后距帐号被查封的天数:帐号被封时距1970.1.1的天数:保留未用

/etc/group
组账户文件,每行一个组,字段为:
组名:组加密口令:GID:组成员列表

/etc/gshadow
组口令文件,每行一个组,字段为:
用户组:用户组加密口令:组管理员帐号:组成员列表

======常用命令======
useradd
添加用户

usermod
修改用户属性

userdel
删除用户

groupadd
添加组

groupmod
修改组账号

groupdel
删除组账号

passwd
口令维护,超级用户可以设置其他人的口令,其他用户只能设置自己的

gpasswd
组成员维护,添加、删除、管理组管理员

id
查看用户状态,包括id,所属组等。也可以查别人的。

参考:
http://my.oschina.net/zhangqingcai/blog/32094

站点备份脚本

昨天研究了mysql怎么备份,今天在昨天的基础上研究了一下tar的使用以及在此基础上的整个站点备份的方法:

tar的简单使用

  1. //将一堆文件或者文件夹创建tar
  2. tar cf atarname.tar somefile somedir
  3.  
  4. //查看tar文件包的内容
  5. tar xvf atarname.tar
  6.  
  7. //解包
  8. tar xf atarname.tar

备份站点

  1. # the directory for story your backup file.
  2. backup_dir=“/backupdir”
  3. #dirs to backup
  4. discuzRoot=“/discuzLocation”
  5.  
  6. customAvatar=“$discuzRoot/uc_server/data/avatar”
  7. attachment=“$discuzRoot/data/attachment”
  8.  
  9. TAR=“$(which tar)”
  10. $TAR cf $backup_dir/filebackup.tar $customAvatar $attachment

再加上数据库的备份文件,就ok了。不过还是觉得文件这部分还是用ftp软件的增量备份比较好。如果这样打包备份的话,一来文件比较大,二来服务器每次备份开销也大。

mysql在linux系统下的备份脚本

转自:http://os.chinaunix.net/a2006/0823/970/000000970876.shtml
空了修改修改就能备份整个站点了

脚本如下:

  1.     #!/bin/sh
  2.     # mysql_backup.sh: backup mysql databases and keep newest 5 days backup.
  3.     #
  4.     # Last updated: 20 March 2006
  5.     # ———————————————————————-
  6.     # This is a free shell script under GNU GPL version 2.0 or above
  7.     # Copyright (C) 2006 Sam Tang
  8.     # Feedback/comment/suggestions : http://www.real-blog.com/
  9.     # ———————————————————————-
  10.     # your mysql login information
  11.     # db_user is mysql username
  12.     # db_passwd is mysql password
  13.     # db_host is mysql host
  14.     # —————————–
  15.     db_user=“root”
  16.     db_passwd=“”
  17.     db_host=“localhost”
  18.     # the directory for story your backup file.
  19.     backup_dir=“”
  20.     # date format for backup file (dd-mm-yyyy)
  21.     time=“$(date +”%d-%m-%Y“)”
  22.     # mysql, mysqldump and some other bin’s path
  23.     MYSQL=“$(which mysql)”
  24.     MYSQLDUMP=“$(which mysqldump)”
  25.     MKDIR=“$(which mkdir)”
  26.     RM=“$(which rm)”
  27.     MV=“$(which mv)”
  28.     GZIP=“$(which gzip)”
  29.     # check the directory for store backup is writeable
  30.     test ! w $backup_dir >> echo “Error: $backup_dir is un-writeable.” >> exit 0
  31.     # the directory for story the newest backup
  32.     test ! “$backup_dir/backup.0/” >> $MKDIR “$backup_dir/backup.0/”
  33.     # get all databases
  34.     all_db=“$($MYSQL -u $db_user -h $db_host -p$db_passwd -Bse ‘show databases’)”
  35.     for db in $all_db
  36.     do
  37.      $MYSQLDUMP u $db_user h $db_host p$db_passwd $db | $GZIP 9 > “$backup_dir/backup.0/$time.$db.gz”
  38.     done
  39.     # delete the oldest backup
  40.     test “$backup_dir/backup.5/” >> $RM rf “$backup_dir/backup.5”
  41.     # rotate backup directory
  42.     for int in 4 3 2 1 0
  43.     do
  44.      if(test “$backup_dir”/backup.“$int”)
  45.      then
  46.      next_int=`expr $int + 1`
  47.      $MV “$backup_dir”/backup.“$int” “$backup_dir”/backup.“$next_int”
  48.      fi
  49.     done

第一次写Apache2的RewriteRule(用于域名泛解析)

在研究了正则表达式和apache的rewrite模块之后,写了第一个rewriterule,实现的功能是:
将所有的对:
name1.name2.dom.com/someResource
的访问都定向到服务器目录:
/server/name2/name1/someResource
其中name1和someResource是可变部分。对于name1,相当于实现了三级域名的泛解析。

那么在VirtualHost块下是这么写的:
//打开重写模块,这个的好处在于不需要重写的的时候,只把on改成off就让下面的代码全部失效了,不用一句一句注释
RewriteEngine on
//判断继续下一步的条件是请求的url的服务器部分(http://之后到第一个/之前,变量名是%{HTTP_HOST})
//是不是长得像name1.name2.dom.com

RewriteCond %{HTTP_HOST} ^[^.]+.name2.dom.com$
//重写访问的地址,将"/someResource"改为:"name1.name2.dom.com/someResource"
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
//再重写一次,将"name1.name2.dom.com/someResource",改写为"/server/name2/name1/someResource"
//其中每个()匹配的字符串都可以用$1这样的变量名来引用,()的定义是从左到右编号的(从1开始)
//第一个()是:([^.]+),在这里匹配的是"name1"字符串,也就相当于$1="name1"
//第二个()是:(.),在这里匹配的是"/someSource",也就相当于$2="/someSource"
//所以重写的结果"/server/name2/$1$2"翻译出来就是"/server/name2/name1/someSource"。也就是我们的目标地址

RewriteRule ^([^.]+).name2.dom.com(.
) /server/name2/$1$2

正则表达式

想学正则表达式很久了,今天终于看了看。因为在apache中的rewrite中需要用正则表达式去匹配url。
后面链接的一篇文章讲得很详细了,就不复制粘贴了,以后有学习心得之类的再补充在此。

一篇好文章可以看看:
http://manual.phpv.net/regular_expression.htmlX104X
另外一个来自百度百科的条目,其中有正则表达式各个字符的含义
正则表达式字符含义在此

在objective-c中使用的方式如下:(这个例子检测文本text中的url)

  1.     NSString *text = [info objectForKey:@“text”];
  2.     NSString *urlDetected = nil;
  3.     {//url detection
  4.         //if there is a link of this feed, such as video share, the text is like:@”sometexthttp://somelocation”. And the url link is only contained in this text.
  5.         NSRegularExpression *regExp = [NSRegularExpression regularExpressionWithPattern:@“(http|https|ftp)\\://([a-zA-Z0-9\\.\\-]+(\\:[a-zA-Z0-9\\.>amp;%\\$\\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\\-]+\\.)*[a-zA-Z0-9\\-]+\\.[a-zA-Z]{2,4})(\\:[0-9]+)?(/[^/][a-zA-Z0-9\\.\\,\\?\\’\\\\/\\+>amp;%\\$#\\=~_\\-@]*)*” options:NSRegularExpressionCaseInsensitive error:nil];
  6.         NSRange matchedUrlRange = [regExp rangeOfFirstMatchInString:text options:0 range:NSMakeRange(0, text.length)];
  7.         if (matchedUrlRange.location != NSNotFound) {
  8.             urlDetected = [text substringWithRange:matchedUrlRange];
  9.         }
  10.     }

【转】ubuntu安装pptpd来架设VPN服务器

转自:http://www.cnblogs.com/youlechang123/archive/2011/09/29/2195013.html
今天用此法尝试了一下,很顺利就ok了

—————–一下是原文——————–
这篇文章是以前写的了,不过那个网址好像由于fan墙两个字被拦截屏蔽了,一打开就整个域名被屏蔽几十秒,把敏感字做了处理好像还不行,重新发一次,NND,有兴趣打开试下看看:ubuntu架设VPN服务器

Linux下的VPN服务器软件主要是pptpd和openvpn,pptpd架设好后在windows下建个VPN连接就可以fan墙了,比较简单,这里说下ubuntu下安装配置pptpd。首先安装pptpd这个VPN服务器软件,ssh连接登录后用下面这个命令:

sudo apt-get install pptpd

安装好了在webmin的网络这一栏里就可以看到pptp vpn server这项了。

安装完了需要对相关文件进行配置修改,用webmin上的文件管理或ssh端用vi命令修改都行。

第一步:

方法一:ssh连接修改/etc/pptpd.conf这个文件

vi /etc/pptpd.conf

找到#localip 192.168.0.1和#remoteip 192.168.0.234-238,192.168.0.245这两行,把前面的#号去掉,然后保存就行了。

这里,localip 是 VPN 链接成功后服务器的 ip 地址, remoteip 则客户端的可分配 ip 地址范围。下面是我的配置:

(Recommended)

localip 192.168.0.1

remoteip 192.168.0.234-238,192.168.0.245

or

localip 192.168.0.234-238,192.168.0.245

localip 192.168.0.234-238,192.168.0.245

remoteip 192.168.1.234-238,192.168.1.245

方法二:用webmin的pptpd服务器项修改,点击webmin网络>PPTP VPN Server>PPTP Server Options,加上localip和romoteip就行了,如下图

第二步:

然后再要编辑/etc/ppp/pptpd-options这个文件,为vpn指定DNS服务器, 你可以找到你服务器用的DNS服务器地址,或者直接使用Google Public DNS:

vi /etc/ppp/pptpd-options

找到ms-dns这项,去掉前面的#号,修改成google提供的DNS,很好记哈

ms-dns 8.8.8.8

ms-dns 8.8.4.4

修改好后保存。

第三步:

接下来建立vpn账号和密码了,可以直接在webmin的pptp vpn server选项里修改,修改文件也行。

方法一:点击webmin里的网络>PPTP VPN Server>PPP Accounts>Create new PPP account,就可以创建新的账号和密码了。

webmin创建VPN账号

方法二:修改/etc/ppp/chap-secrets文件,按一行四列添加账号、服务器名、密码和IP限制。即第一列是用户名,第二列是服务器名(默认写pptpd 即可,注意与 pptpd-options 文件保持一致),第三列是密码,第四列是 IP 限制(不做限制用 * )。如创建一个名为test,密码为123,不限制登录IP的VPN账号:

test pptpd 123 *

修改好后保存行了。

最后重启pptpd服务,就可以生效了。

到了这一步,正常的话在XP里建立个VPN连接应该可以连接上了,但还不能访问外网,还需要另外的配置。但是如果连接不上VPN服务器的话,那就是碰上传说中的人品问题了,我就碰到过,明明所有步骤都做了,但是就是不能连接上,然后就胡乱折腾,看运气什么时候能折腾好了。

继续下一步,第四步:

修改/etc/sysctl.conf 这个文件,把ipv4 forward开启,方法是找到/etc/sysctl.conf这个文件里的这一行#net.ipv4.ip_forward=1后,去掉net.ipv4.ip_forward=1前面的#号,使他生效,然后保存,运行命令sysctl –p.

root@s:~# sysctl -p

运行命令后会显示这样的一行,那就表示修改生效了。

net.ipv4.ip_forward = 1

这样,vpn 服务器就算是搭建成功了。

重启pptpd后如果还不能访问外网,那么就要再来一步。

第五步:

使用iptables建立一个NAT, 用下面的命令:

apt-get install iptables (如果已经安装iptables,这一步就不用了)

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

上面的24表示子网掩码,代表24个1.

OK,到了这一步就应该可以用VPN了哈。如果不能,我也不知是哪里出问题了。

如果要防止重启服务器后iptables丢失,先运行

iptables-save > /etc/iptables-rules

然后修改/etc/network/interfaces 文件,在eth0 下面加入

pre-up iptables-restore < /etc/iptables-rules

这样,服务器重启后,就能自动挂载规则了。

好了,有了VPN,墙再高也不怕了哈。

wordpress开启多站点支持

wordpress 3.0 开始就支持多站点了,不过默认是关闭的。
开启的方式也很简单,那就是在 wp-config.php文件最后添加一句

define('WP_ALLOW_MULTISITE', true);

之后就能在”工具(tools)”里面多出来一项”设置网络(networks)”,照着一步一步做就ok了。

如果采用子域名的方式,需要开启apache的rewrite。

对于apache1,开启方式是反注释掉httpd.conf中对应的语句。有一句
#Load什么什么rewrite什么的
去掉前面的#就可以了

对于apache2,执行
sudo a2enmod rewrite
就可以了

WordPress更新插件需要FTP权限的问题

WordPress在发现其所在目录的所有者和进程所有者不一致时会跳转到一个页面让填写ftp信息。解决办法如下:

运行
ps -aux
查看httpd进程或者apache2进程的用户名,比如我看见是www-data

切换到Wordpress的安装路径,比如wordpress安装在位置/www/wordpress ,就切换到/www目录,执行:
chown -R www-data:www-data wordpress

然后就OK了。