存档在 ‘共享软件’ 分类

折腾了一个多月 Slackware 下的 LNMP(或称 LEMP)环境

2010年5月22日

一个半月前开始使用 Linode VPS,由于对 Slackware 比较感冒,所以选了 Slackware 的发行版,环境是 LAMP。

因为 LAMP 环境在 Slackware 的发行版中有对应的安装包,所以搭建 Web 服务器就比较容易了,找一个 Slackware 的 Mirror,然后就是一些列的 wget 和 intallpkg 相应的安装包。

不过最近流行 LNMP(或称 LEMP)环境,即使用 nginx 替代 Apache 作为 http 服务器,相同环境下 nginx 性能强于 Apache 很多,占用资源也少。其中 PHP 使用 PHP-FPM 即 FastCGI 模块。

网上关于搭建 LNMP 环境的参考资料绝大多数都是在 CentOS 系统下的,并且有一键安装包,出于对 Slackware 的忠诚,开始研究在 Slackware 下搭建 LNMP 环境。MySQL 决定使用 Slackware 自带的安装包,所以主要是研究 nginx 和 PHP 的编译。

不爽的是网上关于 Slackware 下的 LNMP 环境搭建的资料非常少,只找到一个 Slackware 13.0 的英文资料,但 Linode VPS 只有 12.2 版本的,多少有一些出入。此外还有版本选择问题,PHP-FPM 有多个版本,主要是对应 PHP 5.2.x 和 5.3.x,这两个版本的 PHP 编译参数有一些差异。

重要的一点是,我不想在 configure、make 之后直接 make install 来安装,这会搞乱系统,即不能卸载,这不符合我的风格,所以决定研究制作 Slackware 安装包。

此外,这个过程我不想纯手工操作,而是要写成自动化脚本,便于以后重新制作安装包。

由于以前对 Bash 脚本编程了解不多,这次折腾 LNMP 安装包,耗费时间的地方,除了研究 nginx 和 PHP 编译参数外,就是编写脚本了。前前后后写了一堆脚本,除了 LNMP 相关的脚本外,还有工作环境的初始化脚本(如 dir_colors、vim 等)、OpenVPN 自动配置脚本(自动生成服务器端密钥、服务器端配置、客户端密钥、客户端配置等)。

折腾 PHP-FPM 编译参数时候,由于 make 需要比较长的时间,一度走了弯路,即在本地使用 VMware 装了一个 Slackware 12.2 系统,除内核外与 Linode VPS 的 Slackware 配置均相同。结果经过对比,发现我在本地编译 PHP 时候比 Linode VPS 上要慢不少,我机器的 CPU 是 E8300,配置还不算低,可见 Linode VPS 配置还是非常强的,4 核 Xeon 2.5G,Linode 官方在对 CPU 描述的时候,大概意思说你的 VPS 可以使用空闲的 CPU 资源,不晓得我在 make 的时候,同一个服务器上其他的 VPS 会受多大影响。还好,我只是直接 make 来编译,而不是 make -j2、或3、或4,哈哈。

不爽的是,等我基本写好了各种脚本,重新部署一个 Slackware 系统时,发现 Linode 新近提供了 Slackware 13.0 发行版,既然有新版,就不打算用旧版了。于是又折腾了两天,修改脚本,使其适应 Slackware 13.0 的系统。

搞好 LNMP 安装包后,主要工作就是研究 nginx 的配置了,至于 PHP 的配置,比较简单,而 MySQL 优化等以后慢慢研究了。目前 nginx 已经配置好了普通虚拟主机、根目录下的 WordPress 虚拟主机,子目录下的 WordPress 还有一点点不完美,以后再研究。另外 Discuz! 的虚拟主机还没配。

截至目前,我的 FFVCL 主站、FFVCL 博客、自己博客、女儿博客都已经迁移到 Linode VPS 的 LNMP 环境下,还有一个 Discuz! 站尚待研究 nginx 配置。此外,FFVCL 的邮件使用 Google Apps 进行托管。现在可以大声对 LP 说白白了,哈哈。(LP -> Lunarpages 虚拟主机,到期时间是明天,即5月23日。)

P.S. 由于在开始研究 LNMP 时候,Linode VPS 已经启用,为了不影响正在跑的网站,额外又买了一个 Linode 节点,等环境全部搞定后,可以随时 cancel 掉,费用将按天计算,余额退回 Linode 账户内。

题外话,昨天修改域名指向时候,才发现 name.com 的 Private Whois 服务一个月前就开始收费了,标价 7.99 刀每年,现在优惠价 1.99 刀,这着实不爽啊。后来网络搜索相关资讯时,找到一个域名续费时对 Private Whois 免费的优惠码,于是把一堆域名都多续了两年费,现在域名到期时间是三年后了,至于三年后是否还需要 Private Whois 服务,到时候再说了。不过还有三个域名没续费,正在纠结是否还继续养着。

附 nginx 和 PHP 编译参数(PHP编译了尽量多的模块,呵呵)

nginx version: nginx/0.7.65
TLS SNI support enabled
configure arguments:
–user=nginx \
–group=nginx \
–with-pcre \
–prefix=/var/www \
–sbin-path=/usr/sbin/nginx \
–conf-path=/etc/nginx/nginx.conf \
–error-log-path=/var/log/nginx/error.log \
–pid-path=/var/run/nginx.pid \
–lock-path=/var/lock/nginx \
–with-rtsig_module \
–with-select_module \
–with-poll_module \
–with-http_ssl_module \
–with-http_realip_module \
–with-http_addition_module \
–with-http_xslt_module \
–with-http_sub_module \
–with-http_dav_module \
–with-http_flv_module \
–with-http_gzip_static_module \
–with-http_random_index_module \
–with-http_secure_link_module \
–with-http_stub_status_module \
–with-http_perl_module \
–http-log-path=/var/log/nginx/access.log \
–http-client-body-temp-path=/var/tmp/nginx/client_body_temp \
–http-proxy-temp-path=/var/tmp/nginx/proxy_temp \
–http-fastcgi-temp-path=/dev/shm \
–without-mail_pop3_module \
–without-mail_imap_module \
–without-mail_smtp_module

PHP Version => 5.2.13
Build Date => May 20 2010 16:31:02
Configure Command =>
./configure \
–enable-fpm \
–enable-force-cgi-redirect \
–enable-pcntl \
–enable-sigchild \
–enable-fastcgi \
–enable-pcntl \
–enable-sigchild \
–enable-discard-path \
–with-xmlrpc \
–disable-ipv6 \
–enable-inline-optimization \
–prefix=/usr \
–libdir=/usr/lib \
–with-libdir=lib \
–sysconfdir=/etc \
–disable-safe-mode \
–disable-magic-quotes \
–enable-zend-multibyte \
–enable-mbregex \
–enable-tokenizer=shared \
–with-config-file-scan-dir=/etc/php \
–with-config-file-path=/etc/nginx \
–enable-mod_charset \
–with-layout=PHP \
–enable-sigchild \
–enable-xml \
–with-libxml-dir=/usr \
–enable-simplexml \
–enable-spl \
–enable-filter \
–disable-debug \
–with-openssl=shared \
–with-pcre-regex=/usr \
–with-zlib=shared,/usr \
–enable-bcmath=shared \
–with-bz2=shared,/usr \
–enable-calendar=shared \
–enable-ctype=shared \
–with-curl=shared \
–with-curlwrappers \
–with-mcrypt=shared,/usr/bin \
–enable-dba=shared \
–with-gdbm=/usr \
–with-db4=/usr \
–enable-dbase=shared \
–enable-exif=shared \
–enable-ftp=shared \
–with-gd=shared \
–with-jpeg-dir=/usr \
–with-png-dir=/usr \
–with-zlib-dir=/usr \
–with-xpm-dir=/usr \
–with-freetype-dir=/usr \
–with-t1lib=/usr \
–enable-gd-native-ttf \
–enable-gd-jis-conv \
–with-gettext=shared,/usr \
–with-gmp=shared,/usr \
–with-iconv=shared \
–with-ldap=shared \
–enable-mbstring=shared \
–enable-hash \
–with-mhash=shared,/usr \
–with-mysql=shared,/usr \
–with-mysqli=shared,/usr/bin/mysql_config \
–enable-pdo=shared \
–with-pdo-mysql=shared,/usr \
–with-pdo-sqlite=shared,/usr \
–with-pspell=shared,/usr \
–with-mm=/usr \
–enable-shmop=shared \
–with-snmp=shared,/usr \
–enable-soap=shared \
–enable-sockets \
–with-sqlite=shared \
–enable-sqlite-utf8 \
–with-regex=php \
–enable-sysvmsg \
–enable-sysvsem \
–enable-sysvshm \
–enable-wddx=shared \
–with-xsl=shared,/usr \
–enable-zip=shared \
–with-tsrm-pthreads \
–enable-shared=yes \
–enable-static=no \
–with-gnu-ld \
–with-pic \
–with-fpm-conf=/etc/nginx/php-fpm.conf \
–with-fpm-log=/var/log/php-fpm.log \
–with-fpm-pid=/var/run/php-fpm.pid \
–build=i486-slackware-linux

启用CodeCoolie.com域名,同时主机转移到Linode VPS

2010年4月21日

两周前搞到了CodeCoolie.com域名,然后买了Linode的VPS主机,这几天一直在折腾VPS,昨天晚上把博客也迁移过来了。

下面的帖子原文发表在CNSW论坛,此处略有删节。

《两年半前的“梦想”——志在必得的CodeCoolie.com抢注过程》

http://www.cnsw.org/bbs/thread-98500-1-5.html

【缘起】

两年半前,经朋友介绍,在CNSW论坛注册了用户。注册论坛前,在网上各处用过的马甲(不包括临时性马甲)不少,但都不想用在CNSW,于是苦思冥想,想出了CodeCoolie这个ID,遂注册。

【两年半前的手工“抢注”】

注册论坛后,突然想看看马甲同名域名是否能注册,结果发现处于赎回宽限期,遂开始关注,并学习域名以及相关抢注信息,并且由于计算马虎,在域名掉下来前一天就开始熬夜,但熬了两夜,结果当然是没能注册到了。然后这个域名貌似就被加入了那种广告联盟,好像叫域名停靠domain park吧。

虽然当时就知道有专业的域名抢注代理公司,但当时离职一年半,经济紧张,哪里有米找代理公司抢注啊。

【两年半后终于到手】

前几天,即4月1日,查询几个域名,无意中又查了下这个domain,发现状态为pendingDelete,立即产生了一定兴趣,但并没有马上想花钱抢注,只是心里想,要是能注册到多好啊。

YY了几天后,即4月6日上午,突然有欲望想搞到,花钱点钱就花点钱吧,毕竟这个ID自己还是非常喜欢的。于是随手搜了一下,随便找了个抢注代理,下了 backorder单。

下单之后,对这个domain的拥有欲望越来越强,于是继续Google学习抢注,得知我先找的那个代理虽是资历较老的老大,但若志在必得,最好三大家抢注代理商都下backorder单,思考良久,咬咬牙,接连又在其他两家代理商下了单。然后做好打算,若无旁人参与,直接抢得,那是最好,若是有旁人参与bid,则我只加最低一档竞价,最后是否得到就靠天意了。

打定主意之后,就在CNSW论坛灌水,然后睡觉,不过睡的也挺晚,凌晨2点才睡。早上醒来,看手机短信,看到凌晨5:22招行信用卡消费69$的短信,知道已经得手了!吃过早饭,打开电脑,收邮件,收到NameJet发来的Order Confirmation,告知三个工作日后可以拿到,不过通常用不上三天。

【抢注过程简要说明】

关于域名状态,可以参考下面这个图,很不错。在域名pendingDelete 5天期限到了之后,域名才最终被删除,貌似国内称为“掉下来”,即drop。不同的域名类型具体删除时间不同。在域名掉下来那一瞬间,如果是好米(搞域名的管domain叫米),将有很多很多的抢注者(代理),所以好米,凭手工抢注到几乎是不可能的。其实代理商并不是自己抢注,好像都是和域名注册商结成的联盟,由域名原所在注册商负责搞到,然后再转给抢注代理商,最后交给成功抢注者。如果抢到米的代理商处,抢注者多余一个,则开始竞拍,价高者得。

我前后在三个比较大的代理商处下单。

1、Pool.com 注册账号即扣掉60$,网上查询到,说是预授权,类似住酒店时候的房费押金,到时候如果抢注不到,会退回信用卡内。
2、SnapNames.com 注册账号扣掉1$,这个不清楚是验证信用卡,还是注册费。backorder费用是59$。
3、NameJet.com (eNom旗下)注册账号扣掉1$,同上,也不清楚是否验证信用卡,还是注册费。backorder费用是69$。

最后由NameJet抢注得到。1$+69$=70$哇咧哇咧

域名生命周期图
域名生命周期图

写了两周多的PHP邮件一对一群发系统

2010年3月13日

由于我的控件给客户升级的时候是发送邮件,最开始时候是手工使用BCC暗送模式群发,结果有一次疏忽,把邮件列表粘贴到To里面了,结果那组客户互相都知道了邮件地址,很是抱歉。好在客户比较少,影响不大,大家也比较不错,也没追究我责任啥的:-)

刚开始只一个Converter控件,还好说,后来多了Player控件,然后二者组合,加上二进制版、源码版,以及国内和海外需要分开发送,3 * 2 * 2 = 12 组!

手工发送麻烦不说,费时费力还容易出错,所以找了个一对一群发软件,即GroupMail来发升级,感觉还可以,但有两个小问题:1、是要发12组,要创建12个邮件,也挺麻烦的;2、由于二进制控件包比较大(最大的一个组合有2.2M),所以在本机上发送也比较慢。

于是于是乎,我大概三周前,开始着手尝试自己写一个Web方式的邮件一对一群发系统。自己写的原因也有二:1、是网上看了几个Mailing系统,都比较庞杂,不喜欢,个人风格喜欢简约的;2、程序员的毛病,代码苦力的命,喜欢自己写代码玩。

对PHP还算比较熟,从刚开始接触PHP算起,也有10个年头了。而且机缘巧合,两年多前刚开始共享没收入时候,接了两次对日外包的活,用的是 CakePHP,一个源自RoR的PHP框架,感觉这个框架还不错,配合MySQL使用相当方便,只是CakePHP框架比较大,运行起来比较慢,当然,很小的访问量肯定是没问题的。而发送邮件采用了PHPMailer类库,支持多种发送方式,包括SMTP,并且支持TLS安全链接,可以使用Gmail账户发送邮件。

但我着手开始写的时候,定位就是自用,所以索性没使用MySQL来做数据存储,而是自己建立了一个文件级的数据接口,采用INI格式,这样也方便手工修改数据。但自己写数据存储接口,增加了一些工作量,加上自己比较追求简洁,虽然代码量不大,但反复修改完善,也花了不少时间,怎么也有两周多吧。其中独立函数约300行,Model不到2000行,Controller约2200行,View算代码行就更没意义了,大约600行吧。

PHP这种脚本类的语言,写起来比较容易,加上使用CakePHP框架,就更加简单了,按照MVC的模式,也利于思考,只是PHP一段时间不用,API都忘光,好多都是用到时候Google之,CakePHP以前使用也没深入了解,代码达到预期效果,就“妥了”,这次一边写代码,一边查看CakePHP在线手册,或者直接看框架源码,多少比以前能多利于了一些框架提供的便利处,但貌似也只是仅仅利用了一少部分而已,感觉CakePHP还有很多的封装好的便利性没用到。

现在系统还很简陋,比如不支持HTML格式邮件,不支持Ajax方式,虽然这些都不难实现,但逻辑层面已经完善,并且目前来说PHP或说CakePHP也不是主业,还是不要过多耗费时间为好。

目前系统基本可以正常工作,并且满足了自己的初始需求,即:1、方便性,Web方式比GUI桌面方式灵活,无需多言;2、快速性,因为系统运行在网络主机上,发邮件时候直接使用主机自己的邮件服务,所以不存在网络传输瓶颈,发邮件的过程几乎不需要时间。目前系统工作方式是刷新一次页面,发送一封邮件,可以手动刷新,也可以自动刷新。如果是刷新一次页面,发送多封邮件,那就更快了。

下面贴张本系统“处女发”的截图

开始使用 Google Analytics

2010年1月10日

作为典型的技术人员——代码苦力,对于营销推广方面非常弱,并且也不喜欢推广工作,只是简单了解了一下SEO,网站参照一些SEO Tips做了应对,其次是玩了玩Google Webmaster Tools,网站提交方面也只提交了2、3个下载站而已,现在则更懒,只更新Torry.net这一个下载站了,除此外也没什么别的推广,所以基本上是“靠天吃饭”。

可是天灾人祸接连不断啊,上顿挨不到下顿的,于是开始学习推广方面的知识,打算首先从Google Analytics入手,并深入学习SEO,提高网站质量,再找几个质量好的下载站提交一下,最后,根据各方情况,考虑尝试一下AdWords。