OpenBSD 4.8+nginx+mysql+php+vbulletin

在OpenBSD环境下搭建各种服务器的相关讨论。

版主: lionuxchenjun天地乾坤

回复
头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

OpenBSD 4.8+nginx+mysql+php+vbulletin

帖子 leo » 2010-11-24 12:37

本文严重参考了young_king兄的ONMP第二版的内容,这篇文章网上转载的太多了,已经很难找到原始出处了,有的还故意隐藏了原始出处,鄙视一下这种行为,因为如果原作者对原文进行了修正,是无法通知转载者的,大家浏览时会发现,同样的标题有的内容已经似是而非、都有点驴唇不对马嘴了——所以有时对不加分析、消化地盲目转载真是无可奈何呀,建议读者阅读时先自己尝试,不要盲目照搬。

我的环境OpenBSD 4.8发行版,平台amd64,未安装任何packages:

代码: 全选

login as: root
root@192.168.8.12's password:
Last login: Tue Nov 23 15:24:54 2010
OpenBSD 4.8-stable (JiaRun.MP) #1: Sat Nov  6 13:18:34 MDT 2010
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
# pkg_info
#

这里我们采用OpenBSD推荐的package模式安装所需软件,如果你熟悉ONMP的安装步骤可以一次性地安装好所有的软件,为了解释清楚一些,我们这里分别安装:

代码: 全选

# export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.8/packages/amd64/
# pkg_add nginx
Ambiguous: nginx could be nginx-0.7.67-passenger nginx-0.7.67
# pkg_add nginx-0.7.67
nginx-0.7.67:pcre-8.02p1: ok
nginx-0.7.67: ok
--- +nginx-0.7.67 -------------------
Documentation on nginx can be found on the wiki:
        http://wiki.nginx.org/
[color=royalblue]You may want to put the following into your /etc/rc.local:[/color]
[color=royalblue]# start nginx[/color]
[color=royalblue]if [ -x /usr/local/sbin/nginx ]; then[/color]
[color=royalblue]echo -n ' nginx'; /usr/local/sbin/nginx[/color]
[color=royalblue]fi[/color]
[color=royalblue]#[/color]

因为是web服务器,所以要随系统自动启动,根据软件的提示(上面蓝色部分),将下列内容添加到/etc/rc.local的里面:

代码: 全选

# start nginx
if [ -x /usr/local/sbin/nginx ]; then
        echo -n ' nginx'; /usr/local/sbin/nginx
fi

安装php5-fastcgi

代码: 全选

# pkg_add php5-fastcgi
php5-fastcgi-5.2.13p0:libiconv-1.13p1: ok
php5-fastcgi-5.2.13p0:gettext-0.18.1: ok
php5-fastcgi-5.2.13p0:libxml-2.7.6: ok
php5-fastcgi-5.2.13p0: ok
#

安装mysql-server

代码: 全选

# pkg_add mysql-server
mysql-server-5.1.48:mysql-client-5.1.48: ok
mysql-server-5.1.48:p5-Net-Daemon-0.43: ok
mysql-server-5.1.48:p5-PlRPC-0.2018p0: ok
mysql-server-5.1.48:p5-DBI-1.609: ok
mysql-server-5.1.48:p5-DBD-mysql-4.014: ok
mysql-server-5.1.48: ok
--- +mysql-server-5.1.48 -------------------
You can find detailed instructions on how to install a database
in /usr/local/share/doc/mysql/README.OpenBSD.
#

创建默认的数据库

代码: 全选

# /usr/local/bin/mysql_install_db

启动mysql数据库

代码: 全选

# mysqld_safe &
这里说明一下,最后的 & 符号是让mysql进程在后台运行,如果你在虚拟机里测试时可能会出现运行时MySQL无法切换到后台,直接按CTRL+C断开,此时MYSQL会仍在后台运行,不必担心。

设定本地root密码

代码: 全选

# mysqladmin -u root password 'gobsd.org'

设置MySQL的配置文件my.cnf
这里还需要大致地说一下,在/usr/local/share/mysql/目录里包含了一系列MySQL的简单的配置文件:
my-small.cnf 内存小于64M仅运行MySQL服务器的主机使用这个配置文件。
my-medium.cnf 内存在32-64M之间,主要运行MySQL服务,或128M以上,MySQL和web服务器一起运行时使用这个配置文件。
my-large.cnf 内存是512M的重要运行MySQL使用这个配置文件。
my-innodb-heavy-4G.cnf 内存是1-2G,主要运行MySQL使用这个配置文件。
my-huge.cnf 内存4G以上,主要运行MySQL的主机使用这个配置文件。
读者请根据自己的情况用上述文件中的一个替换 /etc/my.cnf文件,如果你有特殊的需要,例如要修改socket或端口请自行调整。
我们呢假设主机是内存是512M,用my-media.cnf,所以使用下面的命令替换原来的My.cnf文件:

代码: 全选

cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf

此外,要注意一下mysql数据库的编码,要使Mysql数据库的字符集编码默认是UTF-8,还要修改一下/etc/my.cnf文件,必须包含如下的内容:

代码: 全选

[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
init_connect='SET NAMES utf8'

还有为了适应论坛需要,下面的值要修改一下,请读者根据自己的情况来做,我是修改为:

代码: 全选

max_allowed_packet = 10M

需要注意的安全设置:如果你的MySQL仅用于基于PHP的web服务器,或者说你的MYSQL数据库和WEB服务器在一台主机上,那么禁用TCP连接对安装MySQL来说是比较安全的。
具体做法是编辑 /etc/my.cnf 文件,将里面的内容

代码: 全选

# skip-networking
前面的注释符去掉,也就是改成:

代码: 全选

skip-networking
这里解释一下,如果你开启了OpenSSH, 这样设置并不影响数据库备份和还原,因为你可以ssh到服务器上运行mysql命令,但是如果你原来用其它操作系统上来的习惯就是先关闭ssh, 那么你备份数据库可能最好的方式就是用类似免费的MySQL GUI Tools或者商业软件Navicat了(实际上这玩意还不如前者好用),此时你非但不能打开这个选项,而且还要在防火墙上开启mysql的远程通讯端口——注意开启这个端口并非因为web服务器和mysql服务器位于不同的主机,而是因为你需要远程备份msyql数据库,原因前面已经说明了,脚本备份大数据库时不保险,不过你要是相信这类软件,这里也可以开启。—— 出了问题,别怪我没有提醒你。

设置Mysql的登录级别:将下列内容加入到/etc/login.conf文件内

代码: 全选

mysql:\
       :openfiles-cur=1024:\
       :openfiles-max=2048:\
       :tc=daemon:
友情提示,有的朋友可能会出现下面的出错:

代码: 全选

mysqlsu: no such login class: mysql

别太手懒了,从论坛上直接拷贝会有不可见的无效字符,上面的文字用手打就没有这个错误提示了。:p
然后重建login.conf.db文件

代码: 全选

# cap_mkdb /etc/login.conf

设置MySQL开机自动启动
在/etc/rc.local里加入如下内容,我是加在nginx启动之前,如果你想试试加在后面怎样,请自便:

代码: 全选

if [ -x /usr/local/bin/mysqld_safe ] ; then 
su -c mysql root -c '/usr/local/bin/mysqld_safe >/dev/null 2>&1 &' 
echo -n ' mysql' 
fi

因为更改了mysql的设置,所以这里重新启动一下mysql或重新启动计算机

安装php5-GD, 这个个人根据自己的情况吧,我就喜欢使用ImageMagick。此外请注意,因为php5的相关packages各自之间有依赖,例如,假设你先安装phpMyAdmin,则php5-GD这个packgaes会最为依赖包自动安装上。

代码: 全选

# pkg_add php5-gd-5.2.13p0
php5-gd-5.2.13p0:jpeg-8b: ok
php5-gd-5.2.13p0:t1lib-5.1.0p2: ok
php5-gd-5.2.13p0:png-1.2.44: ok
php5-gd-5.2.13p0:php5-core-5.2.13p0: ok
php5-gd-5.2.13p0: ok
--- +php5-core-5.2.13p0 -------------------
To enable the php5 module please create a symbolic
link from /var/www/conf/modules.sample/php5.conf
to /var/www/conf/modules/php5.conf.
ln -s /var/www/conf/modules.sample/php5.conf \
        /var/www/conf/modules
The recommended php configuration has been installed
to /var/www/conf/php.ini.
--- +php5-gd-5.2.13p0 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/gd.ini to
/var/www/conf/php5/gd.ini.
ln -fs /var/www/conf/php5.sample/gd.ini \
        /var/www/conf/php5/gd.ini
#
根据提示运行命令

代码: 全选

# ln -s /var/www/conf/modules.sample/php5.conf \
>         /var/www/conf/modules
# ln -fs /var/www/conf/php5.sample/gd.ini \
>         /var/www/conf/php5/gd.ini

安装phpMyAdmin

代码: 全选

# pkg_add phpMyAdmin
phpMyAdmin-3.3.4:libltdl-1.5.26p0: ok
phpMyAdmin-3.3.4:libmcrypt-2.5.8p1: ok
phpMyAdmin-3.3.4:php5-mcrypt-5.2.13p0: ok
phpMyAdmin-3.3.4:php5-mysql-5.2.13p0: ok
phpMyAdmin-3.3.4:php5-mbstring-5.2.13p0: ok
phpMyAdmin-3.3.4: ok
--- +php5-mbstring-5.2.13p0 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/mbstring.ini to
/var/www/conf/php5/mbstring.ini.
ln -fs /var/www/conf/php5.sample/mbstring.ini \
        /var/www/conf/php5/mbstring.ini
--- +php5-mcrypt-5.2.13p0 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/mcrypt.ini to
/var/www/conf/php5/mcrypt.ini.
ln -fs /var/www/conf/php5.sample/mcrypt.ini \
        /var/www/conf/php5/mcrypt.ini
--- +php5-mysql-5.2.13p0 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/mysql.ini to
/var/www/conf/php5/mysql.ini.
ln -fs /var/www/conf/php5.sample/mysql.ini \
        /var/www/conf/php5/mysql.ini
--- +phpMyAdmin-3.3.4 -------------------
The phpMyAdmin has been installed into /var/www/phpMyAdmin
You should point this to the DocumentRoot of your web-server:
   # ln -s ../phpMyAdmin /var/www/htdocs/phpMyAdmin
(make sure you use a relative symlink since Apache is chrooted)
You can ensure you have a working install by accessing:
http://<localhost>/phpMyAdmin/index.php
#
根据提示运行:

代码: 全选

# ln -fs /var/www/conf/php5.sample/mbstring.ini \
>         /var/www/conf/php5/mbstring.ini
# ln -fs /var/www/conf/php5.sample/mcrypt.ini \
>         /var/www/conf/php5/mcrypt.ini
# ln -fs /var/www/conf/php5.sample/mysql.ini \
>         /var/www/conf/php5/mysql.ini
原本这里根据提示应该做一个relative symlink, 也就是这样:

代码: 全选

# ln -s ../phpMyAdmin /var/nginx/html/phpMyAdmin
但这是为了OpenBSD自带的已经被系统chroot的apache准备的,我们使用的服务器是Nginx,并不在chroot环境里(当然你也可以设置成chroot的Nginx, 网上也有相应的教程。)所以这里不用这样设置,修改为:

代码: 全选

# ln -fs /var/www/phpMyAdmin /var/nginx/html/phpMyAdmin
安装其它组件:

代码: 全选

# pkg_add php5-core php5-mysql php5-mysqli php5-mbstring php5-soap php5-gd php5-curl php5-bz2 php5-mcrypt php5-mhash php5-xsl
php5-mysqli-5.2.13p0: ok
php5-soap-5.2.13p0: ok
Ambiguous: php5-gd could be php5-gd-5.2.13p0 php5-gd-5.2.13p0-no_x11
php5-curl-5.2.13p0:libidn-1.11: ok
php5-curl-5.2.13p0:curl-7.20.0: ok
php5-curl-5.2.13p0: ok
php5-bz2-5.2.13p0:bzip2-1.0.5: ok
php5-bz2-5.2.13p0: ok
php5-mhash-5.2.13p0:mhash-0.9.9.9: ok
php5-mhash-5.2.13p0: ok
php5-xsl-5.2.13p0:sqlite3-3.6.23p0: ok
php5-xsl-5.2.13p0:python-2.5.4p5: ok
php5-xsl-5.2.13p0:libgpg-error-1.9: ok
php5-xsl-5.2.13p0:libgcrypt-1.4.6: ok
php5-xsl-5.2.13p0:libxslt-1.1.26: ok
php5-xsl-5.2.13p0: ok
--- +php5-bz2-5.2.13p0 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/bz2.ini to
/var/www/conf/php5/bz2.ini.
ln -fs /var/www/conf/php5.sample/bz2.ini \
        /var/www/conf/php5/bz2.ini
--- +php5-curl-5.2.13p0 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/curl.ini to
/var/www/conf/php5/curl.ini.
ln -fs /var/www/conf/php5.sample/curl.ini \
        /var/www/conf/php5/curl.ini
--- +php5-mhash-5.2.13p0 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/mhash.ini to
/var/www/conf/php5/mhash.ini.
ln -fs /var/www/conf/php5.sample/mhash.ini \
        /var/www/conf/php5/mhash.ini
--- +php5-mysqli-5.2.13p0 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/mysqli.ini to
/var/www/conf/php5/mysqli.ini.
ln -fs /var/www/conf/php5.sample/mysqli.ini \
        /var/www/conf/php5/mysqli.ini
--- +php5-soap-5.2.13p0 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/soap.ini to
/var/www/conf/php5/soap.ini.
ln -fs /var/www/conf/php5.sample/soap.ini \
        /var/www/conf/php5/soap.ini
--- +php5-xsl-5.2.13p0 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/xsl.ini to
/var/www/conf/php5/xsl.ini.
ln -fs /var/www/conf/php5.sample/xsl.ini \
        /var/www/conf/php5/xsl.ini
--- +python-2.5.4p5 -------------------
If you want to use this package as your default system python, as root
create symbolic links like so (overwriting any previous default):
 ln -sf /usr/local/bin/python2.5 /usr/local/bin/python
 ln -sf /usr/local/bin/python2.5-config /usr/local/bin/python-config
 ln -sf /usr/local/bin/pydoc2.5  /usr/local/bin/pydoc

按提示运行:

代码: 全选

# ln -fs /var/www/conf/php5.sample/bz2.ini \
>         /var/www/conf/php5/bz2.ini
# ln -fs /var/www/conf/php5.sample/curl.ini \
>         /var/www/conf/php5/curl.ini
# ln -fs /var/www/conf/php5.sample/mhash.ini \
>         /var/www/conf/php5/mhash.ini
# ln -fs /var/www/conf/php5.sample/mysqli.ini \
>         /var/www/conf/php5/mysqli.ini
# ln -fs /var/www/conf/php5.sample/soap.ini \
>         /var/www/conf/php5/soap.ini
# ln -fs /var/www/conf/php5.sample/xsl.ini \
>         /var/www/conf/php5/xsl.ini
#

安装spawn-fcgi

代码: 全选

# pkg_add spawn-fcgi
spawn-fcgi-1.6.3p0: ok
让fastcgi随系统自动,需要在/etc/rc.local里加上如下的内容:

代码: 全选

# Start php-fastcgi
if [ -x /usr/local/bin/spawn-fcgi ] ; then
   echo -n 'Starting php-fastcgi...'
   /usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www -f /usr/local/bin/php-fastcgi > /v$
   echo "DONE"
fi

此外有关开机启动fastcgi的方法,建议大家也看一下这里:http://wiki.nginx.org/PHPFcgiExample

编辑mg /var/www/conf/php.ini,打开下面的选项:

代码: 全选

short_open_tag = On

接下来就是调整调整nginx的配置了,请读者根据自己的需要编辑/etc/nginx/nginx.conf文件以满足要求,懒得读英文的直接参看http://www.51chongdian.net/bbs/thread-16584-1-1.html 这里,我修改的不太多,也提供在这里吧,欢迎大家指正。

此外,感觉Nginx并没有像大家说的那样神乎其神,fastcgi的内存占用比较大。详附件,而且经与做主机的朋友探讨,得出的说法是Nginx的I/O负载较大,并不优于apcahe2, 所以目前在西方国家真正在空间上使用的并不是很多(尽管上升势头很猛,而且程序优势很明显),反倒是感觉国内的朋友们比较热衷,不过这也许是国外对NGINX的设置优化的不到位或不了解吧。毕竟第一版英文读物刚刚出版。总之,感觉在OpenBSD平台上,也许Nginx并不能发挥出其真正的功力(原因大家上网查查就知道了,说来话长)。此外我对young_king兄原文中的一些观点也持保留态度,这也是这篇文章内容比较少的原因。
此外和大家探讨,每个人的服务器运行环境不同,凡事不可一概而论,有些对我来说是必须的东西,可能对大家无所谓,有些我认为没有必要的地方,可能您恰恰认为是精华所在,这个仁者见仁、智者见智了,请读者自行参考斟酌,最后再次感谢young_king兄的ONMP第二版的内容,描述的非常详尽,非常适合我这样没有接触过Nginx的朋友阅读。

最后请注意,web的root目录是 /var/nginx/html, 将你的站点内容上传到这里就OK了。
我测试的社区程序只有vbulletin3.84中文版,所以这篇文章称为OpenBSD+Nginx+Mysql+PHP+Vbulletin也许更合适一些。但是我还是觉得OpenBSD自带的apache1.3更适合于安装vbulletin这种论坛环境,此外有关Msyql和PHP的安全设置问题,此外如果你要选用sendmail发送信件,需要在 /var/www/conf/php.ini里面设置sendmail的路径等,请读者自行参阅这里原来的帖子或直接参考原文手册,在此不再赘述了。
附件
rc.local.tar.gz
(563 Bytes) 下载 668 次
nginx.tar.gz
(1.12 KiB) 下载 626 次
Capture.PNG

wosl2001
钾 K
帖子: 13
注册时间: 2011-01-09 17:16

帖子 wosl2001 » 2011-01-09 17:44

自带的apache1.3出了并发连接限制 其他都挺好的
尘羽星翔!

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

帖子 leo » 2011-03-10 21:17

young_king兄在CU上有blog, 东西不少,喜欢的朋友自行消化: http://blogold.chinaunix.net/u2/81136/

junfengfan
铜 Cu
帖子: 236
注册时间: 2010-02-03 18:37

回复: OpenBSD 4.8+nginx+mysql+php+vbulletin

帖子 junfengfan » 2011-12-07 10:49

openbsd5 安装nginx 出现下列提示是什么意思?

# pkg_add -iv nginx > /home/nginx
Ambiguous: choose package for nginx
a 0: <None>
1: nginx-1.0.4
2: nginx-1.0.4-passenger
Your choice: 1
cannot fetch initial working directory: No such file or directory at /usr/libdata/perl5/OpenBSD/PackageRepository.pm line 159
cannot fetch initial working directory: No such file or directory at /usr/libdata/perl5/OpenBSD/Temp.pm line 38

junfengfan
铜 Cu
帖子: 236
注册时间: 2010-02-03 18:37

回复: OpenBSD 4.8+nginx+mysql+php+vbulletin

帖子 junfengfan » 2011-12-07 11:53

开机出现
starting php-fastcgi …… spawn-fcgi child exited with :127

/var/nginx/html/test.php
<?php
phpinfo();
?>
 不能出现结果,php不能被解析

junfengfan
铜 Cu
帖子: 236
注册时间: 2010-02-03 18:37

回复: OpenBSD 4.8+nginx+mysql+php+vbulletin

帖子 junfengfan » 2011-12-07 18:52

# Start php-fastcgi
if [ -x /usr/local/bin/spawn-fcgi ] ; then
echo -n 'Starting php-fastcgi...'
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www -f /usr/local/bin/php-fastcgi-5.3 > /v$
echo "DONE"
fi
改后不出错了,

junfengfan
铜 Cu
帖子: 236
注册时间: 2010-02-03 18:37

回复: OpenBSD 4.8+nginx+mysql+php+vbulletin

帖子 junfengfan » 2011-12-07 19:05

http://x.x.x.x/phpMyAdmin
出现下列提示

缺少 mysql 扩展。请检查 PHP 配置

junfengfan
铜 Cu
帖子: 236
注册时间: 2010-02-03 18:37

回复: OpenBSD 4.8+nginx+mysql+php+vbulletin

帖子 junfengfan » 2011-12-07 21:23

junfengfan 写了:http://x.x.x.x/phpMyAdmin
出现下列提示

缺少 mysql 扩展。请检查 PHP 配置
主要是 /etc/php-5.2/目录下没有mysql.ini ,mcrypt.ini 而这些都在 
/etc/php-5.2.sample/ 目录下面

ln -fs /etc/php-5.2.sample/mysql.ini \
/etc/php-5.2/mysql.ini


ln -fs /etc/php-5.2.sample/mcrypt.ini \
/etc/php-5.2/mcrypt.ini

就再也没有提示了,成功了

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: OpenBSD 4.8+nginx+mysql+php+vbulletin

帖子 leo » 2011-12-07 21:31

如果版本升级,例如是从OpenBSD 4.8升级到5.0,建议今后重新开一个帖子,这样便于讨论。
此外php5.2.x到5.3.x的升级变动很大,语法有变化,有些扩展也内置了,详细请看php主页,此外我记得phpMyAdmin原来还和php-5.3.x不兼容,不知道目前如何了,我最近很少用phpMyAdmin了,感觉用mysql命令更快捷和安全,大数据库用phpMyadmin或者php程序备份有风险,例如vbulletin 4,已经去掉了原来在vbulletin 3里的自带备份、还原功能,建议直接用mysql命令备份和还原,这个网上有过详细讨论,可以找找。
我个人目前认为还是直接shell上去用命令行稳妥。

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 30 访客