前言
使用了一年的hostmonster虚拟主机服务后,终于下决心转向了VPS虚拟服务器。VPS可以让我拥有更大的资源控制权限并提供了很好的学习Linux网络系统管理的环境。本文记录在我的VPS上配置lighttpd、MySql和PHP环境,使其支持多个网站和域名并实现url地址重写,让WordPress输出可读性高的地址。
准备工作
林肯先生似乎说,如果给我6个小时砍树,我会花2个小时磨斧子。本着这种精神,必须做好安装配置前的准备工作,以免在出问题后不知所措。
保留系统初始状态
应该先对系统的当前状态进行快照,保存初始状态,这样如果出现混乱状态,可以彻底删除已安装的软件包,并回到安装前的状态。这里使用的工具是debfoster,它可以系统已经安装的软件包保存到一个keeper文件中。如果安装出现错误,可以使用debfoster根据keeper保留的软件包,删除其他软件包。首先安装debfoster并使用-q参数使其保留一份系统已安装的软件包记录。
aptitude install debfoster debfoster -q
如果安装过程中出现任何错误,可以让debfoster根据保留在/var/lib/debfoster下的keepers文件,恢复到初始状态。
debfoster -f
只安装必要的依赖软件包
为了节省VPS有限的硬盘空间,需要指定系统只安装必要的依赖软件包,而不安装推荐和建议软件包(recommended 和 suggested)。具体方法是在/etc/apt/apt.conf.d/下创建一个00minimal文件(文件名随意,前面的两个零是为了增加这个配置文件的优先级),内容如下:
APT::Install-Recommends "false"; APT::Install-Suggests "false";
这里把推荐包和建议包都设置为false。
确保/tmp目录可写
这是最主要的一步,也是最容易被忽略的一步。不知什么原因,运营商给我的VPS的/tmp目录权限错误,导致在后续安装中出现各种莫名的错误,表现为lighttpd不能启动,MySql出现root不能登录的情况,并提示
ERROR 1045: Access denied for user: ‘root@localhost’ (Using password: YES)
因此必须先检查/tmp的权限:
ls -ld /tmp/ drwxrwxrwt 4 root root 4096 May 26 10:23 /tmp/
如果不是上面所显示的权限,用chmod命令修改:
chmod 1777 /tmp
安装软件包
aptitude install mysql-server mysql-client lighttpd php5-cgi phpmyadmin
提示输入MySql root用户密码时,输入两遍密码。提示指定phpmyadmin的服务器平台时,制定lighttpd。安装完毕。
启用cgi支持
编辑php位置文件
vi /etc/php5/cgi/php.ini
把里面的 ; cgi.fix_pathinfo = 0 这一行改为
cgi.fix_pathinfo=1
启用lighttpd的fastcgi支持
lighttpd-enable-mod fastcgi /etc/init.d/lighttpd force-reload
配置lighttpd
为了让lighttpd支持可读性更好的url地址,需要编辑/etc/lighttpd/lighttpd.conf文件,启用mod_rewrite模块,也就去掉 “mod_rewrite” 前面的#符号。
要让lighttpd支持多个网站和域名,需要在/etc/lighttpd/conf-enabled为每个网站和域名创建单独的配置文件。比如本站的域名是oceanlinux.com,那么我就把它的配置文件命名为20-oceanlinux-com.conf(前面的数字关系不大),里面的内容是:
## oceanlinux.com virtual hosting
server.modules += ( "mod_simple_vhost" )
$HTTP["host"] =~ "(^|\.)oceanlinux\.com$" {
server.document-root = "/var/www/oceanlinux/"
server.indexfiles = ( "index.php", "index.html")
}
这个文件也可以写为下面这样,注意$HTTP这一行的区别。
## www.citymin.com virtual hosting
server.modules += ( "mod_simple_vhost" )
$HTTP ["host"] =~ "(www.)?oceanlinux.com" {
server.document-root = "/var/www/oceanlinux/"
server.indexfiles = ( "index.php", "index.html")
}
其中/var/www/oceanlinux/是这个博客在硬盘中实际安装的位置。如果有过个域名,只需要复制这个文件,并修改域名和安装位置。这个配置文件同时支持www开头和无需www开头的域名。
载入页面后是否要要在地址栏显示前面的www三个字母,可以在WordPress的配置界面中修改。
配置好后,重启lighttpd进程
/etc/init.d/lighttpd restart
简单优化mysql
为了节省VPS本来已经很小的内存,如果mysql用不到InnoDB,可以在配置文件中禁用它。编辑/etc/mysql/my.cnf,反注释掉:
skip-innodb
这一行前面的#号。有人还建议针对小内存VPS的mysql优化方案,比如把/etc/mysql/my.cnf文件中的若干值配置为:
key_buffer = 16K max_allowed_packet = 1M thread_stack = 64K table_cache = 4 sort_buffer = 64K net_buffer_length = 2K
但是我没有尝试,因为具体的配置不一样,直接修改并不一定能带来好的效果,还可能起到反作用。
关于phpmyadmin
phpmyadmin的确方便。这里需要提一下debian在安装phpmyadmin时的特殊设置。在Debian Lenny下,/etc/mysql 目录多了两个debian自己的文件 debian-start 和 debian.cnf。debian-start负责mysql启动时的配置,而debian.cnf则记录了debian管理mysql的用户名和密码。该文件内容如下:
# Automatically generated for Debian scripts. DO NOT TOUCH! [client] host = localhost user = debian-sys-maint password = U10Vg0BwqalKxQ7c socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] user = debian-sys-maint password = U10Vg0BwqalKxQ7c socket = /var/run/mysqld/mysqld.sock basedir = /usr
实际上,可以通过用户名debian-sys-maint和密码U10Vg0BwqalKxQ7c登录mysql进行一些管理操作。如果忘了root密码,也可以用这个用户登录mysql进行操作。
准备工作
保留初始状态,在安装过程中出现意外可以彻底删除已安装的软件包,并回到初始状态。需要的工具。
aptitude install debfoster
debfoster -q 创建keeper文件,如有故障,可以 debfoster -f来完成
准备工作
由于VPS硬盘小,因此制定系统只安装必要的依赖软件包,而不安装推荐和建议软件包。
/etc/apt/apt.conf.d
建立一个00minimal文件,内容
APT::Install-Recommends “false”;
APT::Install-Suggests “false”;
apt-preferences
准备工作
确保tmp权限是 1777
drwxrwxrwt 4 root root 4096 May 26 08:58 tmp/
2.
aptitude install mysql-server mysql-client lighttpd php5-cgi phpmyadmin
然后是输入mysql root的密码,制定phpmyadmin所用的web服务器客户端,选择lighttpd
3. 启用cgi支持
vi /etc/php5/cgi/php.ini
cgi.fix_pathinfo = 1
lighttpd-enable-mod fastcgi
4. 配置lighttpd
启用”mod_rewrite”,
配置虚拟主机 (三个配置文件)(关键是前面的www是怎么改默认的,在wp的general setting里?)
5. 优化mysql
http://articles.slicehost.com/2009/4/7/debian-lenny-installing-mysql
http://library.linode.com/databases/mysql/debian-5-lenny
6. 关于phpmyadmin
(mod_fastcgi.c.904) bind failed for: unix:/tmp/php.socket-0 Permission denied
Creating the socket in /tmp/ is a bad idea. This might have been the default in
the included example a while back, but the current one is now :
“socket” => “/var/run/lighttpd/php-fastcgi.socket”,
默认创建的mysql登入phpmyadmin的密码是:/etc/mysql/debian.cnf
如果在phpmyadmin下创建用户时,出现error 13,则是tmp不可写。【这是这两天折腾的最主要原因】
MySQL is not able to access your /tmp directory to wirte and create temporary files. Make sure /tmp is owned by root and sticky bit is set on /tmp directory. Type the following commands to fix the error:
# chown root:root /tmp
# chmod 1777 /tmp
# /etc/init.d/mysqld start
Can’t create/write to file ‘/tmp/’ (Errcode: 13)
citymin数据库的密码:
JVY47TCK44aUadwm
apt-get不会
apt-get purge –remove mysql-server mysql-client phpmyadmin
apt-get –purge remove mysql-server mysql-common mysql-client