VPS的环境配置
以前博客挂在空间上,也快到期了,刚好换个VPS玩玩。一方面方便翻墙,一方面也当做是一个练手。买的是洛杉矶的一个供应商,刚出的,希望不要硬盘损坏、中途跑路什么的。以下是本人的学习体会,在整个过程中,又长见识了。
VPS的OpenVZ和Xen:
Xen和Openvz同样是虚拟化主机技术,区别在于Xen是半虚拟化技术,它并不是一个真正的虚拟机,而是相当于自己运行了一个内核的实例,可以 自由的加载内核模块,虚拟的内存和IO,稳定而且可预测。Openvz则是操作系统级别的虚拟化技术,是底层操作系统上的一层应用,这意味着易于理解和低 权重开销,一般来说也意味着更优的性能。
为什么大家都会认为openvz过分压榨性能呢?我认为是因为openvz配置起来比较灵活,给黑心 openvz服务商改低限制的机会。
比如mediatemple,号称512M内存的dv方案,kmemsize才12M,不了解的人看了512M觉得很哈皮啊,可是使用的时候一般这512M能分到你手里一半就不错了。此消彼长,所以才会有xen 能更好地利用机器性能的错觉。
总之就是,OpenVZ是共享内存的,此消彼长,你的内存容量那个值,是最大值。如果你买的是128M的,实际上你只用了120M,那么剩下的8M就会分配给你的更吃内存的邻居。理论上,如果一个母鸡(实体机)上按照这个容量划分下去,也不会有什么问题,但是VPS商不干啊,他总是尽可能的多卖VPS,而且还很好卖(得益于天朝的功夫墙啊)。
LNMP安装
以前都是LAMPP,无奈VPS的内存珍贵啊,一分钱一分货。后者Nginx+PHP-FPM在内存方面的控制更优,这种组合近来越来越流行。连PHP得官方网站都换上了Nginx。网上搜了下Centos下安装nginx+php-fpm,出来的千篇一律的免编译,几分钟完美安装LNMPP,安装你妹啊,给的idcfree.com源都失效了,全是一样的东西。而官方的Nginx还是0.8.x,比现在旧的太多。这里不得不说说,rpm安装和yum。以前老搞不清楚是啥玩意。在Linux上安装,一般都是用编译的。但是这个对软件的管理,不方便。每次软件一升级,你就得重新编译一遍。当然,删除的时候,只要你记得你的文件位置,一个一个去删,就好,他没有Windows的注册表,也不会有垃圾文件的产生。
在这种情况下,软件包的管理就成了问题。Red Hat Enterprise Linux就搞了个RPM(Redhat Package Mangeage)的软件管理的东西。他的原理是,既然,你用的系统,跟我用的系统一样的,我在我系统上编译好了二进制文件,直接解包到你的系统里面不就可以了 。多好的思想,然后包的记录,包含软件的版本信息等都管理在本地的一个数据库中。
Rpm常用的命令如下:
安装 rpm –ivh xx.stable.rpm 后面包的地址,可以使网络地址
查询
rpm –qa: 查询所有的已经安装的软件
rpm –qi xxx 查询xxx软件的情况
rpm –ql xxx 查询xxx都有哪些文件,分布在哪里
后来又踊跃出了很多活跃的社区,里面编译了各种各样的软件(开源好),yum安装应运而生。常用的几个命令
Yum search xxx 查查有木有xxx软件
Yum install xxx 安装
Yum remove xxx 卸载
要在线yum安装,就得有更新源哇,所以我们要配置这个东西,否则系统不知道去哪里更新。插一句,为什么系统知道软件哪个新,哪个旧呢?这要归功于严格的软件命名方式。具体的去查看鸟哥的书。
系统的更新源放在/etc/yum.repos.d下
CentOS-Base.repo 等等都是更新源,这里不得不暂停一下,说一下:
Epel 这个叫第三方源。由于Centos是后妈养的(Redhat的免费版),为了不涉及版权问题,redhat将很多的软件都去掉了,所以,Centos的Base那几个默认的软件源的软件非常少,里面的软件虽然稳定,但是非常的old。而Epel则是一个非常活跃的社区,里面好多好多软件啊。网上百度出来的,又全是失效的epel.rpm,相当恶心,可以去这个页面看最新的安装地址。http://fedoraproject.org/wiki/EPEL ,下载页面http://mirrors.sohu.com/fedora-epel/5/i386/repoview/epel-release.html
我们可以安装
Rpm –ivh http://mirrors.sohu.com/fedora-epel/5/i386/epel-release-5-4.noarch.rpm
然后 yum search nginx php-fpm发现还是没有php-fpm。后来找到另外一个更新源http://centos.alt.ru/repository/centos/5/ 这里面有php-fpm。添加的方法是,在/etc/yum.repos.d/目录下,新建一个文件,写上
[CentALT]
name=CentALT Packages for Enterprise Linux 5 - $basearch
baseurl=http://centos.alt.ru/repository/centos/5/$basearch/
enabled=1
gpgcheck=0
前提是先启用启用 EPEL repo ,然后导入rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL。接下来就是让Nginx能和php进行通信。以前的方式是通过cgi,是php作为apache的mod来进行启动的。适用了php-fpm以后,则可以独立出来,具有更高的效率。具体的配置是:
location ~ .*\.php$ {
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
}
按照网上的说法是,fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;这样设置,总是报错(firebug下看到是404错误),No input file specified,那应该是找不到文件。可是文件明明就在,而且在cli模式下面,可以正常运行,html文件也没问题,奇了怪了。其实就是上面那句话坑了人。不知道为何,$document_root这个东西,没有赋值。改了以后,一切ok。
下面再说说Linux系统的那些东西:
关于profile bashrc bash_profile 之间的区别和联系,也得唠叨下,以前总是分不清这些东西,添加一个环境变量,不知道加到哪个文件里,以下内容来源于网络。
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置. /etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取. ~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件. ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取.(每个用户都有一个.bashrc文件,在用户目录下) ~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系. ~/.bash_profile 是交互式、login 方式进入 bash 运行的 ~/.bashrc 是交互式 non-login 方式进入 bash 运行的 通常二者设置大致相同,所以通常前者会调用后者。
在登录Linux时要执行文件的过程如下:
在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、 ~/.bash_login或 ~/.profile文件中的其中一个,
执行的顺序为:~/.bash_profile、 ~/.bash_login、 ~/.profile。
如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。
因为在 ~/.bash_profile文件中一般会有下面的代码:
if [ -f ~/.bashrc ] ; then
. ./bashrc
fi
~/.bashrc中,一般还会有以下代码:
if [ -f /etc/bashrc ] ; then
. /bashrc
fi
所以,~/.bashrc会调用 /etc/bashrc文件。最后,在退出shell时,还会执行 ~/.bash_logout文件。
你以为这就完了吗?没有,因为能够yum安装的最新的php-fpm的php版本是5.2.17,也就是目前php空间、一键安装包什么的,所使用的版本,我对去年的那个php由于hash设计缺陷导致的ddos还记忆犹新,那个太厉害了。所以,我决定,自己编译php,安装一个新的稳定的版本。具体的编译参数放在最后面。Php的设置,我还是比较熟悉的,一些危险的函数,该禁用的禁用。
唠叨了很多,总结下,拿到一台新的VPS,我们可以做下面的事情。
Vi ~/.bashrc
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
export LS_OPTION='--color=auto'
alias ls='ls $LS_OPTION'
alias ll='ls $LS_OPTION -l'
alias vi='vim'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
Fi
Vi ~/.vimrc
syntax on
以上设置可以让你很方便的使用系统。
接着安装 nginx
Yum install nginx
Vi /etc/inginx/nginx.conf
location ~ .*\.php$ {
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/web/htdocs$fastcgi_script_name;
include fastcgi_params;
}
然后编译php,并以php-fpm的方式运行
./configure --prefix=/usr --with-config-file-path=/etc --disable-pdo --disable-cgi --without-sqlite --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-zlib --with-openssl --with-gd --enable-gd-native-ttf -with-mysql=/usr --with-mysql-sock=/var/lib/mysql/mysql.sock --enable-sockets --disable-pcntl --enable-sysvsem --enable-sysvshm --enable-sysvmsg --enable-zip --without-pear --disable-phar --without-pspell --disable-fileinfo
Make & makeinstall
期间,发生了很多错误,可以看下面的提示信息,比如说fileinfo相关的东西,导致了安装失败(编译成功),查了下,这东西不重要,因此禁用它。注意记住最后安装成功以后的信息。然后是安装apc,这里下次可以编译的时候,直接带上,先安装apc,再编译php时候指定apc目录,现在我只好以动态so的方式加载。下载apc,进入目录,phpize
然后,./configure –with-php-config=/usr/php-config
然后make & make install ,然后加入php.ini extension=apc.so,同样的方法安装curl扩展。
extension=curl.so
extension=apc.so
[APC]
apc.stat=0
apc.shm_size=50
apc.ttl=86400
现在终于告以段落。
期间还发生一些诡异的事情,那就是我怎么改动php.ini文件,都无效。因为我安装的目录是/usr,我想配置文件应该是/usr/etc/php.ini, 但是改动都不生效,我以为是新版的php将ini的文件,全部写入了php-fpm.conf,改动这个固然有效,但是也不是办法。
后来我发现,Configuration File (php.ini) Path /etc,而Loaded Configuration File 这一栏无值,我突然想起来,我编译的时候,指定了php.ini的路径,但是后来在/etc这个指定的目录下,没有php.ini文件(我以为make install的时候回自己拷贝过去),导致了乌龙。
看到这个,真爽啊。
[mysql] 相关命令:
MySQL 赋予用户权限命令的简单格式可概括为:
grant select,insert,update,delete,index,create,alert on testdb.* to username@'localhost' identified by 'password';
虽然不知道是什么,但是看起来很高级的的样子
多少钱
12$/年