分类目录归档:centos/nginx/apache

巧用svn实现跨平台多服务器即时文件同步

气象项目,因为气象网站对于数据的实时性非常高,按以往的设计理念,采用多台服务器做负载均衡。文件的同步面临着一个问题,因为如果采用定时更新数据的话,一定会有一个时间上的延迟。这样的话,也许对于一个重点靠实时数据为目的的网站会是一个严重的问题,这类网站损失不起几十秒及至几分钟的数据延时。而且在文件同步的软件选择上也挺麻烦的,因为要做到跨平台,很多同步软件要么是windows的要么只支持linux

后来想来完全可以通过svn为实现文件的同步,svn在windows及linux都能非常快捷的部署,而且文件的同步效率较高,还能保存文件的历史版本,关键的是svn支持命令行操作,可以很方便的集成到网站和其它其它语言开发的软件中。

现初步的思路是(后端服务器的集群):

一台后端主服务器A(安装svn服务器、客户端,mysql服务器,nginx 网站服务器,php-cgi,气象数据的获取分析入库程序,生成html程序)

一台或多台后端分服务器B (安装svn客户端,nginx 网站服务器,php-cgi)

1、外网的一台windows气象服务器svn上传数据至服务器A 的svn【版本库1】。

2、上传完毕后通知A服务器分析气象数据并入库。

3、然后在网站目录生成html文件及图片。

4、接着通过svn客户端把网站目录上传至本身svn服务器的【版本库2】。

5、最后通知后端的分服务器B,在内网从svn服务器获取网站目录全部文件的最新版本。

 

从而实现即时的网站数据同步。

用nginx的反向代理做负载均衡

未命名-1.jpg

最近一个项目,网站的流量会比较大,但具体大到什么程序还没有估计,所以先用二台服务器做集群,实现负载均衡。因为网站是门户网站,都是生成的html静态页面,和少量的php,所以采用nginx做反向代理来处理海量访问,同时也方便增加新的服务器做负载均衡。

前端服务器A,利于nginx的反向代理提供对外网的web服务。

台后端主服务器B,利用nginx为前端服务器B提供反向代理服务,提供数据库服务、数据获取服务、数据同步服务的服务器。

其它后端服务器(以后增加),利用nginx为前端服务器A提供反向代理服务,同时自动从后端主服务器B获取数据。

在linux服务器上通过网页执行svn更新命令

般都采用独立服务器(这里主要是指linux服务器),都喜欢安装svn进行代码管理,并且也是通过svn来上传更新网站。传统的方法都是每次更新到运行服务器都要远程ssh执行命令或一个具体的脚本

其实有还有更好的办法,一直以来,我就是用这种办法更新网站的。。

在apache或是nginx开一个密码保护的虚拟主机。把下面php文件扔进去

当上传完svn时。打开php文件,点击更新就ok了。

如果需要做得更加安全的话。那就再在下面那段php里加上个密码访问就好了

XML/HTML代码
  1. <?php  
  2. header("Cache-Control:no-cache,must-revalidate");   
  3. echo ‘<a href="?go=svnweb">更新网站全部数据</a><br />‘;   
  4. echo ‘<a href="?go=svnimages">更新网站图片数据</a><br />‘;   
  5. echo ‘<hr />‘;   
  6.   
  7.   
  8. if($_GET[‘go’]==’svnweb’){   
  9.     echo ‘update web data….<br>‘;   
  10.     $handle = popen(‘/usr/bin/svn up –username xxx –password xxxxxxx svn://localhost/web1 /var/www/web1/’, ‘r’);   
  11.     $read = stream_get_contents($handle);//需要 PHP5 或更高版本      
  12.     echo "<pre>";   
  13.     printf($read);      
  14.     echo "</pre>";      
  15.     pclose($handle);      
  16. }elseif($_GET[‘go’]==’svnimages’){   
  17.     echo ‘update web images….<br>‘;   
  18.     $handle = popen(‘/usr/bin/svn up –username xxx –password xxxxxxx svn://localhost/web1 /var/www/web1/images’, ‘r’);   
  19.     $read = stream_get_contents($handle);   
  20.     echo "<pre>";   
  21.     printf($read);   
  22.     echo "</pre>";   
  23.     pclose($handle);   
  24. }   
  25. ?>  

mysql未知道root密码情况下五步修改root密码

1.停止MySQL的服务。

2.进入命令窗口,然后进入MySQL的安装目录,比如我的安装目录是d:\mysql,进入d:\mysql\bin

3.跳过权限检查启动MySQL,

mysqld –skip-grant-tables

4. 然后,重新打开一个窗口,用空密码方式使用root用户登录 MySQL;

mysql -h localhost -u root

5. 修改root用户的密码;

mysql> update mysql.user set passWord=PASSWORD(’新密码’) where User=’root’;
mysql> flush privileges;
mysql> quit

定制ubuntu desktop livecd 自己做发行版[转载]

最近看到论坛很多朋友抱怨: 每次重装ubuntu之后,都要重复安装中文支持,配置系统等工作。如果能定制ubuntu的livecd,事先把这些工作做了,就可以省下不少时间了。

这可以通过定制ubuntu-livecd的iso来实现,为什么不选alternate,先看它们的区别:
ubuntu-8.04-alternate-i386.iso VS ubuntu-8.04-livecd-i386.iso
alternate里面是一大堆的按顺序排列的包,安装时可以选择desktop,server,然后根据选择安装不同的包。
livecd里面最大的文件是一个文件系统映像,即filesystem.squashfs,其实就是squashfs格式的压缩包。

下面以 ubuntu-8.04-desktop-i386.iso为例,在ubuntu-804测试通过:

1。 取出iso里面的所有内容

代码:
sudo mkdir  oldiso   newiso
sudo mount  ubuntu-8.04-desktop-i386.iso  oldiso  -o  loop
sudo  cp  oldiso/*   newiso/     -rp
sudo  umount  oldiso 


这个时候,newiso里面就是原来iso的全部内容。

2。 解压filesystem.squashfs,必须解压到linux分区, 它位于newiso/casper/filesystem.squashfs

代码:
sudo unsquashfs newiso/casper/filesystem.squashfs


耐心等待,解压出来是一个squashfs-root目录,大小约是原来的3倍左右,新安装的系统是不是差不多是这个大小呢?

3。开始定制系统

代码:
sudo cp /etc/resolv.conf   squashfs-root/etc   
sudo  chroot  squashfs-root     


默认的shell可能是sh,输入/bin/bash 就可以了, 这时候可以像在正常系统一样,用apt-get等命令,当然没有图形界面。
有些程序需要proc,所以这里先挂载上。

代码:
mount none  /proc   -t proc


代码:
 apt-get  update 
sudo apt-get  install  language-pack-gnome-zh  language-pack-zh   ttf-arphic-uming  ttf-wqy-zenhei  ## 安装中文支持,和中文字体


…….
还有用apt-get 删除不用的软件,例如oo,游戏等就不多说了,最后记得

代码:
apt-get clean     ##删除文件列表包
autoremove    ##删除旧版本包
rm   /etc/resolv.conf   
umount  /proc

搞定之后,按ctrl+d 退出系统!!!

4.生成安装软件列表
sudo chroot squashfs-root dpkg-query -W –showformat=’${Package} ${Version}\n’ | sudo tee newiso/casper/filesystem.manifest
sudo cp -v newiso/casper/filesystem.manifest{,-desktop}

5. 重新压缩映像。
删掉原来newiso/casper/filesystem.squashfs,还是先备份吧。。
sudo mksquashfs squashfs-root newiso/casper/filesystem.squashfs ##等待一段时间

6. 编辑diskdefines,这里定义一些版本信息。
nano newiso/README.diskdefines
$ cat README.diskdefines
#define DISKNAME Ubuntu 8.04.1 "Hardy Heron" – Release i386
#define TYPE binary
#define TYPEbinary 1
#define ARCH i386
#define ARCHi386 1
#define DISKNUM 1
#define DISKNUM1 1
#define TOTALNUM 0
#define TOTALNUM0 1

7. 生成各个文件的md5值.
sudo -s
(cd newiso && find . -type f -print0 | xargs -0 md5sum > md5sum.txt)
exit

8. 重新制作iso
cd newiso
sudo mkisofs -r -V "my ubuntu" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o "../myubuntu-804-livecd-iso" .
cd ../ ### 这才是最重要的

定制好的iso文件是:myubuntu-804-livecd-iso, 先用虚拟机器试试吧。。 kvm/qemu用以下命令:
sudo kvm -cdrom myubuntu-804-livecd-iso -localtime -m 300 ##300是分配的内存

ubuntu 9.04 用wine安装fireworks等windows下的软件

1、先把win下的中文字体(主要是simsun)都拷到
$HOME/.wine/drive_c/windows/Fonts
2、再新建一个纯文本文件,例如叫 zh.reg,加入以下内容

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes]
"Arial"="simsun"
"Arial CE,238"="simsun"
"Arial CYR,204"="simsun"
"Arial Greek,161"="simsun"
"Arial TUR,162"="simsun"
"Courier New"="simsun"
"Courier New CE,238"="simsun"
"Courier New CYR,204"="simsun"
"Courier New Greek,161"="simsun"
"Courier New TUR,162"="simsun"
"FixedSys"="simsun"
"Helv"="simsun"
"Helvetica"="simsun"
"MS Sans Serif"="simsun"
"MS Shell Dlg"="simsun"
"MS Shell Dlg 2"="simsun"
"System"="simsun"
"Tahoma"="simsun"
"Times"="simsun"
"Times New Roman CE,238"="simsun"
"Times New Roman CYR,204"="simsun"
"Times New Roman Greek,161"="simsun"
"Times New Roman TUR,162"="simsun"
"Tms Rmn"="simsun"

3、运行 regedit zh.reg

screenshot-1.png

windows下安装免apache的svn服务器

一般情况下,如果是自己在本地架设一个svn用于本地代码的版本管理的话,就完全没必要再去安装一个apache

1,下载svn客户端 TortoiseSVN-1.4.5 

     安装完毕后需重启机器

     重启完毕,新建一个文件夹用于存放svn版本库  例如 D:\svnprojects

     在D:\svnprojects 新建一个文件夹用于存入一个项目的版本 例如 phpd 路径:D:\svnprojects\phpd

     在phpd下点右键 TortoiseSVN -> Create repository hear (在这里创建一个版本库)

     svn1.jpg

     svn2.jpg

     生成版本库所需文件!

2,下载svn-win32-1.5.4.zip 服务端
(官网下载:http://subversion.tigris.org/files/documents/15/44095/svn-win32-1.5.4.zip

     全部解压至一个文件名 例如: D:\svn 

    运行里输入命令 D:\svn\bin\svnserve.exe –service -r D:\svnprojects

    注意:运行后,请不要关闭dos窗口!关闭dos窗口即关闭svn服务器

    到这里svn已经启动了,在ie地址栏里直接输入svn://localhost/phpd 应该就可以打开svn浏览器进行浏览了,

    但是现在还没有权限进行里面文件的操作

3,设置版本库权限

     进入D:\svnprojects\phpd\conf 中,打开svnserve.conf

     查找到下面三行,去除前面的#  注意:这三行前面不能有空格
     设为匿名用户不能访问 如需访问,改回read

     anon-access = none
     auth-access = write
     password-db = passwd

     编辑 passwd 文件 
     [users] 下面左边用户右边密码 一行一个用户!

     现在已经设置好了版本库phpd的权限,当然还有详细的组权限待,请参考相关资料!

4,把svn加入windows服务 以后就可以开机启动svn server了!

在命令行里直接输入:

sc create svn binpath= "D:\svn\bin\svnserve.exe –service -r D:\svnprojects"   displayname= "SubVersion Server" depend= Tcpip start= auto

建立名为svn的windows服务

sc start svn

启动svn服务

sc delete svn  (删除svn服务!如果不需要svn成为windows服务的话,就可以删除svn的服务!) 

show一下我的vps

vps位于美国 固定IP(74.63.91.170)

购买些vps主要是为了学习linux服务器方面知识,并且用来放置几个小流量的企业网站

国内打开速度还行,平均ping的延迟在250ms左右

硬件:

128m内存  (最大可用内存390m)

1.2G可用CPU

软件:

ubuntu + Nginx +PHP5 +Mysql +Vsftpd

10个php-cgi线程 1个nginx线程

mysql关闭InnoDB的支持 从开机占100多m的内存降到了40m左右

占用内存76m  (128m内存还有50多m的可用内存,不过ssh看的话有390m.不知道以哪个为准了)

vps.jpg

 

nginx中SaBlog rewrite规则

 server {
     listen   80;
     server_name  www.phpd.cn *.phpd.cn;
     access_log  /var/log/nginx/phpd.access.log;
     root   /home/phpd/www;
     rewrite ^/show-([0-9]+)-([0-9]+)\.html$ /index.php?action=show&id=$1&page=$2 last;
     rewrite ^/category-([0-9]+)-([0-9]+)\.html$ /index.php?action=index&cid=$1&page=$2 last;
     rewrite ^/archives-([0-9]+)-([0-9]+)\.html$ /index.php?action=index&setdate=$1&page=$2 last;
     rewrite ^/(archives|search|reg|login|index|links)\.html$ /index.php?action=$1 last;
     rewrite ^/(comments|tagslist|trackbacks|index)-([0-9]+)\.html$ /index.php?action=$1&page=$2 last;

     location / {
         index  index.php index.html index.htm;
     }
     location ~ \.php$ {
         fastcgi_pass   127.0.0.1:9000;
         fastcgi_index  index.php;
         fastcgi_param SCRIPT_FILENAME /home/phpd/www$fastcgi_script_name;
         include /etc/nginx/fastcgi_params;
     }
 }