Skip to Content

用SliTaz搭建开发用的Web服务环境

labrador 的头像
之前我一直都是用免费的网站空间(比如000webhost)来调试新写的网站程序,等效果满意再放到正式使用的收费空间上。开始的时候这样做挺合理,一来无需自己搭建环境,二来配置方法也和收费空间类似,可以省去不少学习成本。 但时间久了,网站越变越复杂,免费空间的一些局限都慢慢开始暴露出来。终于有一天我发现寻找一个各方面都能符合要求的免费空间比自己动手还要困难,于是决定自己搭建一个Web服务环境。

搭建的目标机器是一个处于半退休状态的P4 1.9G / 512MB RAM的电脑,没有硬盘,系统只能装在2G的U盘上。虽然这样的配置对主流的发行版如Ubuntu来说也够用了,但显然还是运行资源耗费少的小型发行版更合理一些。最终没有用我更为熟悉的Puppy Linux,而选择了SliTaz作为平台的主要原因是SliTaz的服务端软件更为齐全,用SliTaz上很不错的包管理工具很快就能把这些软件都装上。

下面介绍一下搭建和配置这个Web服务环境的一些要点。

SliTaz

SliTaz可以用tazusb以类似于Puppy中的精简(frugal)模式的方式将rootfs.gz镜像文件安装到U盘上,从U盘启动之后再完整的解压到内存中运行。这样的好处是速度快,但SliTaz没有类似Puppy“个人文件”的机制,如果需要保存对系统的改变,则须用tazusb重新构建一个rootfs.gz镜像;另一方面,这种方式也比较消耗内存,考虑到运行Web服务环境对内存要求较高,还是用slitaz-installer将SliTaz完全安装到U盘上更加合理。

我的这台老爷机只能支持以USB-FDD方式从U盘启动,而且启动分区只能是FAT16格式。所以我用了类似于Puppy的Ghost镜像中的技术,将U盘分为两个分区,一个FAT16分区用于放置启动管理器GRUB4DOS和内核,另一个ext2分区用于放SliTaz系统。

SliTaz以完全方式安装之后就没有了initrd阶段(实际上rootfs.gz镜像就是将系统一直保持在initrd阶段,这与unipup的概念类似),而完全依赖内核来寻找根分区。但内核在这方面的功能非常简陋,它只会根据你给的内核参数root来挂载根分区,如果在挂载的时存储设备还没有初始化完成,那么内核立刻就会kernel panic,所以用U盘完全安装方式启动,还需要增加rootdelay和rootwait让内核等待USB存储设备初始化完成,下面是我用的menu.lst
color yellow/brown light-green/black
timeout 3
title SliTaz GNU/Linux (cooking) (Kernel vmlinuz-2.6.25.5-slitaz)
find --set-root /vmlinuz-2.6.25.5-slitaz
kernel /vmlinuz-2.6.25.5-slitaz panic=20 rootwait=30 rootdelay=8 root=/dev/sda2
另外一个问题是如果启动时有多个U盘都插在电脑上,虽然BIOS是以USB口的顺序来决定先启动哪一个,但在内核中,谁是/dev/sda、谁是/dev/sdb却是根据哪个设备先初始化完成来决定的。如果两个U盘初始化速度差不多,每次启动占据/dev/sda的可能都不一样,这样用固定的内核参数root=/dev/sda2就不一定能指向正确的根分区。有些系统可以用UUID来选择根分区,但这其实是initrd提供的功能,内核本身只认识/dev/sd*这种形式,所以要解决这个问题也只能依靠initrd了。这里有我做的一个简单的initrd.gz,它可以自动寻找硬盘或者U盘上的SliTaz分区,然后将其作为根分区来启动,下面是其中最重要的init启动脚本:
#!/bin/sh

mount -t proc proc /proc

for i in 5 4 3 2 1 0; do
    sleep 3
    for dev in `fdisk -l | grep 'Linux$' | grep -o '^/dev/[^ ]*'`; do
        mount -o ro "$dev" /mnt || continue
        if [ -f /mnt/etc/slitaz-release ]; then
            found="$dev"
            break;
        fi
	umount "$dev"
    done
    if [ -n "$found" ]; then
        mount -o remount,rw "$found" /mnt
        umount /proc
        exec switch_root /mnt /sbin/init
    fi
done

exec /bin/sh >/dev/console 2>&1
它的原理非常简单,就是在一定时间内轮询各个分区,直到找到有/etc/slitaz-release文件的分区,如果最终没有找到,则运行root shell让你手动挂载根分区,以避免kernel panic。在menu.lst了这个initrd.gz之后,kernel中的几个root开头的参数就不起作用了。当然,如果不存在启动时同时插着两个U盘的情况,就完全没有必要用这个initrd,直接用内核参数控制就可以了。

除了USB启动时的这个问题,SliTaz的安装过程总得来说很简单,之后也不需要有太多的配置,如果用的是本站上的中文SliTaz,安装完之后就有中文环境了。

Web服务器

SliTaz的源里有Apache和Lighttpd两种Web服务器,相对来说Lighttpd更精简、速度也更快,比较符合我期望的环境。在SliTaz下安装很简单,可以用X桌面右下角的SliTaz包管理器,或者在命令行下运行:
tazpkg get-install lighttpd lighttpd-modules
Lighttpd的配置文件不太复杂,下面是我修改/etc/lighttpd/vhosts.conf,其中增加了一个Virtual host。
$HTTP["host"] =~ "(^|\.)test.cnbits.co.cc$" {
  server.document-root = "/var/www/puppy/"
  server.errorlog = "/var/log/lighttpd/test.cnbits.co.cc-error.log"
  accesslog.filename = "/var/log/lighttpd/test.cnbits.co.cc-access.log"
  url.rewrite-final = (
    "^/system/test/(.*)$" => "/index.php?q=system/test/$1",
    "^/([^.?]*)\?(.*)$" => "/index.php?q=$1&$2",
    "^/([^.?]*)$" => "/index.php?q=$1"
  )
}
这个配置的后半部分url.rewrite-final是为了支持drupal的Clean URL,功能上相当于Apache的Rewrite Engine。

PHP

用tazpkg安装php、php-common、php-gd和php-mysql这三个包,还有其它一些php的插件,各位根据需要安装。为了提高php运行速度,还可以在lighttpd中打开fastcgi,方法是修改/etc/lighttpd/lighttpd.conf,加入
server.modules += (
  "mod_fastcgi",
)

fastcgi.map-extensions = ( ".php3" => ".php", ".php4" => ".php", ".php5" => ".p
hp" )
fastcgi.server = ( ".php" => (( 
  "bin-path" => "/usr/bin/php-cgi",
  "socket" => "/tmp/php.socket"
  )))
其它也没什么需要修改的了。

数据库

安装mysql、mysql-client和libmysqlclient。为了减小mysql数据所占的体积,可以去掉mysql的binary log和innodb功能,它们对我来说没有用处。方法:在/etc/my.cnf中注释掉log-bin=mysql-bin,加入skip-innodb

另外还可以安装phpmyadmin,这个东西有个配置文件在/etc/phpmyadmin/config.inc.php,但其实它只是一个演示,不起任何作用的,只有把这个文件放到/usr/share/phpmyadmin目录下才会有用。虽然这种设置方式有其安全性方面的考虑,但显得非常怪异,不符合一般Unix程序/etc目录放配置、/usr/share目录放演示的惯例。我后来没有使用phpmyadmin,感觉用mysql-client直接输入SQL指令就足够用了。

远程登录

SliTaz已经自带了dropbear,一个轻量级的ssh服务器,不需要怎么配置就能用。如果希望启动电脑时就启动dropbear,则将其加入/etc/rcS.conf文件中的RUN_DAEMONS变量中,其他服务程序也是同样的做法。另外在X环境下也可以用tazctrlbox来完成。dropbear和emacs的TRAMP兼容得不好,列目录时会出现ANSI Color Codes,原因不详,不过架个FTP服务器就行了,也不一定非要scp来传文件的。

SliTaz的源里也有x11-vnc,可以提供X界面的远程VNC访问。但我更喜欢ssh的X11 forwarding一点。下面是我从Ubuntu中访问那台Web服务器桌面所用的脚本,需要安装Xephyr,这样可以不干扰本地的桌面管理器。
Xephyr -ac -screen 1024x768 :5 2>/dev/null &
DISPLAY=:5.0 ssh -X -l tux test.cnbits.co.cc openbox-session

FTP

安装pure-ftpd。之后我修改了/etc/init.d/pure-ftpd,去掉了OPTIONS中的-A参数,这样用普通权限用户如tux登录后也能访问到除$HOME以外的目录。

其它

我还编译了一个transmission的Web服务端运行在这个电脑上面,这样它也兼任BT下载机啦,呵呵。SliTaz源中的transmission没有独立的Web服务端,必须要运行那个GTK程序才行,不是特别方便。

总结

安装完所有的这些服务软件之后,SliTaz的体积增加到200MB,如果用lzma压缩成rootfs.gz,估计体积在60MB左右。SliTaz论坛上有一位网友做了SliTaz LAMP,这个iso只有23MB,我没有测试,目前还是完全安装这种模式对我来说更合适。

Puppy上也有专门的Web服务环境包,可以在这里下载,它用的是Puppy自带的Hiawatha web服务器。

总得来说,因为SliTaz的包管理器很方便,我觉得在SliTaz上建立Web服务器还是相当容易的,在配置方面需要的工作量不大,安装完成后体积也还是相当袖珍。
#2950
不错哦
#2998
牛人啊.
#3609
我想请问一下大侠,“SliTaz已经自带了beardrop”
是不是只要把beardrop 加入到 启动变量表里
我已经这样子做了,但是使用怎么样的命令才能看到这项服务已经启动
因为我现在用PUTTY无法连接到SLITAZ上。

谢谢大侠帮我解决。
#3610
labrador 的头像
运行netstat -nat,如果出现
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN 
那就说明ssh服务已经打开了。
#3613
那该用什么软件进行连接呢,老大,PUTTY怎么连不成功啊!
#3625
labrador 的头像
确定服务已经打开了?可以用putty,注意不能用root登录,只能用tux。
#3633
对不起啊,我实在是很差劲,想问一问,为什么不能用root呢
#3634
labrador 的头像
这出于安全性的考虑,一般ssh服务器都不会开root访问的。因为绝大部分unix系统都有root帐号,如果默认允许root登录,这就可能给暴力破解密码留下机会;但如果不允许root登录,那么攻击者就必须同时猜对用户名和密码,这样难度就大多了。
#3642
尊敬的老大,十分感谢您的回答。

最近已经对您做的SLITAZ着了迷,装了一个服务器,也开通了SSH服务器
友情提醒一下,SSH服务名应该是dropbear,你的文中刚好反过来了

为了方便网站管理,我又装了PURE—FTPD及PURE—FTPD-EXTRAS
可是我想使用PURE—FTPD的虚拟用户管理方式

在默认情况下怎么也打不开,请问怎么样才能使用pure-ftpd的虚拟用户管理方式啊


万分感谢
#3643
labrador 的头像
多谢,是我写错了,已经修正。

不太清楚pureftpd的配置,不过网上应该有很多手册的。
#3645
已经解决问题了,是因为slitaz安装包里的PURE—FTPD没有编绎支持虚拟用户。看来得换系统
#3646
labrador 的头像
也可以自己编译个pure-ftpd。
#3689
自已编绎不太会啊,!
#4079
搭建各类论坛时,上传文件均不能大于64K
据说与HTTP服务器的一个参数HTTP请求字节有关系统,
请问在哪儿调整,我是用的LIGHTTPD
#4084
labrador 的头像
看看是不是被php限制了,不过我印象中默认限制是2M
#4089
PHP.ini我已经调整了,但无效,我仔细观察了一下,应该是HTTP服务器中有关HTTP服务请求字节的问题。就是不知道怎么调,
#4270
我还是楼上那个,由于LIGHTTPD达不到我的要求,故打算换成APACHE
,可是我安装了好几次安装不上,看了一下/var/log/apache/error_log
好象是SSL方面的问题,请问该怎么样解决啊,
如果您方便的法,教我们一下如何在SLITAZ下安装APACHE啊
谢谢
#5160
tux@slitaz:~$ ssh 192.168.1.250
The authenticity of host '192.168.1.250 (192.168.1.250)' can't be established.
RSA key fingerprint is bd:bf:10:c5:8d:76:01:21:a3:c0:bd:30:b7:ab:98:16.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.250' (RSA) to the list of known hosts.

Secure login on SliTaz GNU/Linux powered by Dropbear SSH server.
's password:
Permission denied, please try again.
's password:
密码为空也不行吗?但是我添加了一用户后也还是不行,不知何解
#7750
我用的slitaz-3.0-base,按照楼主的方法弄,现在碰到两个问题,一是安装php之后lighttpd不工作,原因我已经找到了;二是解决第一个问题之后php不工作,不知道为什么。
第一个问题的原因就是安装php之后,php安装程序自动在lighttpd.conf添加了下面这行代码,注释掉这行代码lighttpd就能工作了:
server.modules = (   
  "mod_fastcgi",   
)  

第二个问题php不工作,我没找到原因,在/var/www/下面写了个phpinfo.php,然后用浏览器访问直接看到phpinfo.php的源代码了。
请问这个php要怎么设置才能工作,谢谢
#16407
都是高手,我不会编程也不懂,只能看,用着安全就性

发表新评论

  • 你可以在文本中使用BBCode标记语言。 URL会自动被转为链接。

更多关於格式化选项的信息

CAPTCHA
请验证您是否是机器人。
Image CAPTCHA
Enter the characters shown in the image.