分页: 1 / 1

OpenBSD4.8 stable+Apache 1.3+Mysql+PHP (chroot环境)

发表于 : 2010-11-10 14:52
leo
安装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
Installing MySQL system tables...
101109 18:20:36 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
OK
Filling help tables...
101109 18:20:36 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
OK
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/local/bin/mysqladmin -u root password 'new-password'
/usr/local/bin/mysqladmin -u root -h 123.my.domain password 'new-password'
Alternatively you can run:
/usr/local/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
Please report any problems with the /usr/local/bin/mysqlbug script!
#
运行Mysql

代码: 全选

# mysqld_safe &
[1] 6869
# 101109 18:44:31 mysqld_safe Logging to '/var/mysql/123.my.domain.err'.
101109 18:44:31 mysqld_safe Starting mysqld daemon with databases from /var/mysql
#
设定本地mysql的root密码

代码: 全选

# mysqladmin -u root password 'gobsd.org'
这里还需要大致地说一下,在/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
要让数据库的字符集编码默认是UTF-8,还要修改一下/etc/my.cnf文件,必须包含如下的内容:

代码: 全选

[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
init_connect='SET NAMES utf8'
此外基本设置里的

代码: 全选

max_allowed_packet = 1M
有些小了,会影响到每个帖子的容量,你可以略加调整。

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

代码: 全选

# skip-networking
前面的注释符去掉变成这样:

代码: 全选

skip-networking
然后保存退出。

在login.conf里增加相关项:
默认情况下,用户_mysql和mysqld进程运行的登录级别是"daemon",在一台非常繁忙的服务器上,将让用户_mysql和mysqld进程运行在自己的登录级别上很明智。
例如调整打开文件等,你必须将下列内容加入到/etc/login.conf文件内,以便登录时mysql有自己的登录级别,否则其无法运行。

代码: 全选

mysql:\
:openfiles-cur=1024:\
:openfiles-max=2048:\
:tc=daemon:
然后重建login.conf.db文件

代码: 全选

# cap_mkdb /etc/login.conf
设置MySQL开机自动启动
在/etc/rc.local里加入如下内容:

代码: 全选

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
重新启动系统后:

代码: 全选

# top
load averages:  0.31,  0.15,  0.06                                           123.my.domain 21:03:45
22 processes:  21 idle, 1 on processor
CPU states:  0.0% user,  0.0% nice,  0.2% system,  0.2% interrupt, 99.7% idle
Memory: Real: 52M/88M act/tot  Free: 1161M  Swap: 0K/2047M used/tot
  PID USERNAME PRI NICE  SIZE   RES STATE     WAIT      TIME    CPU COMMAND
12898 _mysql     2    0  299M   45M sleep     poll      0:01  0.00% mysqld
28298 root       2    0 3288K 2496K sleep     select    0:00  0.00% sshd
13511 root      18    0  636K  468K idle      pause     0:00  0.00% sh
13835 root      28    0  532K 1412K onproc    -         0:00  0.00% top
14459 _syslogd   2    0  596K  684K idle      poll      0:00  0.00% syslogd
 3407 root      18    0  580K  440K sleep     pause     0:00  0.00% ksh
22877 root       2    0 1108K 1496K sleep     select    0:00  0.00% sendmail
12372 root       2    0  420K  716K idle      select    0:00  0.00% inetd
 8273 root       3    0  224K  772K idle      ttyin     0:00  0.00% getty
17305 _pflogd    4    0  696K  316K sleep     bpf       0:00  0.00% pflogd
    1 root      10    0  524K  312K idle      wait      0:00  0.00% init
11846 root       3    0  416K  772K idle      ttyin     0:00  0.00% getty
21981 root       3    0  316K  768K idle      ttyin     0:00  0.00% getty
31884 root       3    0  444K  776K idle      ttyin     0:00  0.00% getty
15492 root       3    0  472K  772K idle      ttyin     0:00  0.00% getty
18076 root       2    0  576K  664K idle      netio     0:00  0.00% syslogd
12144 root       2    0  452K  808K idle      select    0:00  0.00% cron
 7969 root       2    0  632K  408K idle      netio     0:00  0.00% pflogd
 1415 root       2    0  788K 1184K idle      select    0:00  0.00% sshd
 7666 _dhcp      2    0  608K  224K idle      poll      0:00  0.00% dhclient
15612 _dhcp      2    0  440K  972K idle      poll      0:00  0.00% dhcpd
17396 root       2    0  560K  308K idle      poll      0:00  0.00% dhclient
测试Mysql服务器:

代码: 全选

# mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.48-log OpenBSD port: mysql-server-5.1.48
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
建立一个UTF-8编码的数据库:

代码: 全选

CREATE DATABASE `gobsdorg` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
分配用户leo具有数据库gobsdorg的所有权限,操作是本地,密码为gobsd:

代码: 全选

mysql> grant all on gobsdorg.* to leo@localhost identified by 'gobsd'; 
Query OK, 0 rows affected (0.00 sec)
这里注意,论坛真正运行时并不需要全部的权限,安装完成后读者请根据自己所用软件的要求来自行消减该用户权限。
退出mysql:

代码: 全选

mysql> quit
Bye
#
安装php5-mysql
注意:别忘了具体提示做ln

代码: 全选

# export PKG_PATH=/linghua/packages/i386/
# pkg_add php5-mysql
php5-mysql-5.2.13p0:libiconv-1.13p1: ok
php5-mysql-5.2.13p0:gettext-0.18.1: ok
php5-mysql-5.2.13p0:libxml-2.7.6: ok
php5-mysql-5.2.13p0:php5-core-5.2.13p0: ok
php5-mysql-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-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
# ln -s /var/www/conf/modules.sample/php5.conf \
>         /var/www/conf/modules
# ln -fs /var/www/conf/php5.sample/mysql.ini \
>         /var/www/conf/php5/mysql.ini
#
原来在 4.7 里的这步似乎可以不做了。
并建立一个 /var/www/tmp目录,并将其属性设置为777:
代码:
# mkdir /var/www/tmp
# chmod 777 /var/www/tmp
解除php限制,编辑 /var/www/conf/php.ini
找到:

代码: 全选

; Maximum size of POST data that PHP will accept.
post_max_size = 8M
这会限制每个帖子的大小,放大一些吧,我是改为50M。
找到:

代码: 全选

; Maximum allowed size for uploaded files.
upload_max_filesize = 2M
这会限制上传文件大小,请自己根据需要修改
找到:

代码: 全选

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20
一次最多上传的文件数,请自行修改。
还有两个我是一般要修改的:

代码: 全选

short_open_tag = On
display_errors = On
这里请注意,配置文档里强烈建议在生产环境里关闭第二条选项,而以日志文档的方式代替,我打开这个只是因为每种论坛程序需要的php模块可能略有差别,有时候可能因为缺少模块安装过程无法继续或运行不正常,这无法在这里一一列举了,而且就我所尝试的程序也很有限,大家在实际应用中应该结合自己的情况并具体错误提示找出适合的php5插件,一旦你确认运行无误后请自行将第二个参数修改为Off。

安装php5的其他模块:

代码: 全选

# 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-mbstring-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-mcrypt-5.2.13p0:libltdl-1.5.26p0: ok
php5-mcrypt-5.2.13p0:libmcrypt-2.5.8p1: ok
php5-mcrypt-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:libgpg-error-1.9: ok
php5-xsl-5.2.13p0:libgcrypt-1.4.6: 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: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-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-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
#
安装mod_zip

代码: 全选

# pkg_add mod_gzip
mod_gzip-1.3.26.1ap4: ok
--- +mod_gzip-1.3.26.1ap4 -------------------
To finish the install of mod_gzip-1.3.26.1ap4, you need
to enable the module using the following command
  /usr/local/sbin/mod_gzip-enable
Also, copy the following file into your Apache config:
/usr/local/share/examples/mod_gzip/mod_gzip.conf.sample
The manual is found at /usr/local/share/doc/mod_gzip
If you already have Apache running on your machine,
you should not use "apachectl restart" - instead,
you should fully stop and then start the server.
#
安装phpMyAdmin

代码: 全选

# pkg_add phpMyAdmin
phpMyAdmin-3.3.4:png-1.2.44: ok
phpMyAdmin-3.3.4:t1lib-5.1.0p2: ok
phpMyAdmin-3.3.4:jpeg-8b: ok
phpMyAdmin-3.3.4:php5-gd-5.2.13p0: ok
phpMyAdmin-3.3.4: ok
--- +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
--- +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/gd.ini \
>         /var/www/conf/php5/gd.ini
# cd /var/www/htdocs
# ln -s ../phpMyAdmin /var/www/htdocs/phpMyAdmin
设置apache
OpenBSD系统自带了修补过的apache1.3,所以我们只需在/etc/rc.conf.local里加上如下内容,系统每次启动时就可以自动启动apache了:

代码: 全选

httpd_flags=""
如果你需要ssl连接,请自行参照用户手册,这里就不再展开讨论了。
修改 /var/www/conf/httpd.conf 文件中的下列内容:
将原内容:

代码: 全选

DirectoryIndex index.html
修改为:

代码: 全选

DirectoryIndex index.php
并删除或改名index.html文件;
如果两个文件全需要,则修改为:

代码: 全选

DirectoryIndex index.php index.html
让MySQL运行在chroot环境内
因为OpenBSD自带的apcahe是chroot在 /var/www 目录内的,所以我们必须将MySQL运行所需的部件设置在这个目录下。根据FAQ上的说明:

代码: 全选

# mkdir -p /var/www/var/run/mysql
然后授权:

代码: 全选

# chown -R _mysql:_mysql /var/www/var/run/mysql/
因为运行环境变化了,还需要修改一下默认的mysql配置文件 /etc/my.cnf,把下面socket的地址更换为:/var/www/var/run/mysql/
原先的内容:

代码: 全选

# The following options will be passed to all MySQL clients 
[client] 
#password = your_password 
port = 3306 
socket = /var/run/mysql/mysql.sock 
# Here follows entries for some specific programs 
# The MySQL server 
[mysqld]
port = 3306 
socket = /var/run/mysql/mysql.sock
更换后的内容:

代码: 全选

# The following options will be passed to all MySQL clients 
[client] 
#password = your_password 
port = 3306 
socket = [color=red]/var/www[/color]/var/run/mysql/mysql.sock 
# Here follows entries for some specific programs 
# The MySQL server 
[mysqld] 
port = 3306 
socket = [color=red]/var/www[/color]/var/run/mysql/mysql.sock
剩下有关mysql数据库的安全优化请参仔细阅读安装文档或翻阅以前的帖子,因为除了版本号几乎没有变化,这里就不详细说明了。

还有就是如果你需要添加对PDO的支持,需要安装下面两个模块,有关PDO的支持,我是在4.9的i386平台上测试的,如果你的版本或平台不同请自行更换路径。

代码: 全选

# export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/snapshots/packages/i386/
# pkg_add php5-pdo_mysql
php5-pdo_mysql-5.2.17: ok
--- +php5-pdo_mysql-5.2.17 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/pdo_mysql.ini to
/var/www/conf/php5/pdo_mysql.ini.
ln -fs /var/www/conf/php5.sample/pdo_mysql.ini \
        /var/www/conf/php5/pdo_mysql.ini
# ln -fs /var/www/conf/php5.sample/pdo_mysql.ini \
>         /var/www/conf/php5/pdo_mysql.ini
# pkg_add php5-pdo_dblib
php5-pdo_dblib-5.2.17:libtasn1-2.9: ok
php5-pdo_dblib-5.2.17:iodbc-3.52.6p0: ok
php5-pdo_dblib-5.2.17:lzo2-2.04: ok
php5-pdo_dblib-5.2.17:gnutls-2.10.4: ok
php5-pdo_dblib-5.2.17:freetds-0.82.1pre20100728p3: ok
php5-pdo_dblib-5.2.17: ok
--- +php5-pdo_dblib-5.2.17 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/pdo_dblib.ini to
/var/www/conf/php5/pdo_dblib.ini.
ln -fs /var/www/conf/php5.sample/pdo_dblib.ini \
        /var/www/conf/php5/pdo_dblib.ini
# ln -fs /var/www/conf/php5.sample/pdo_dblib.ini \
>         /var/www/conf/php5/pdo_dblib.ini
#

虚拟主机设置(探讨)
我们这里讨论最简单的早期虚拟主机设置方式,自然大家也可以采用单个IP地址提供多个虚拟主机的的方案,以及利用Rewrite的URL重写功能实现大批量(例如十万以上)的虚拟主机设置,但是这不在本文的讨论范围之内,我也没有这方面的经验,如果您有需求请自行参阅apache相关文档,也欢迎有经验的朋友不吝赐教、传授一下具体的设置操作步骤。

我们这里假设是单台服务器,双接口,IP地址分别为为192.168.1.70和192.168.1.71,分别提供gobsd.org和9971.us的web服务,先在 /var/www/htdocs的目录下建立相关的虚拟主机目录,本例中我们分别为gobsd.org和9971.us建立单独的目录/var/www/htdocs/gobsd.org和/var/www/htdocs/9971.us。
然后在 /var/www/conf/httpd.conf里加上:

代码: 全选

<VirtualHost 192.168.1.70:80>
ServerAdmin [email protected]
DocumentRoot /var/www/htdocs/gobsd.org
ServerName gobsd.org
ErrorLog logs/gobsd.org-error_log
CustomLog logs/gobsd.org_log common
</VirtualHost>
<VirtualHost 192.168.1.71:80>
ServerAdmin [email protected]
DocumentRoot /var/www/htdocs/9971.us
ServerName 9971.us
ErrorLog logs/9971.us-error_log
CustomLog logs/9971.us_log common
</VirtualHost>
#<VirtualHost _default_:*>
#</VirtualHost>

如果您没有自己的DNS服务器,但是想在本地尝试或验证一下这个方案是否可行,也可以用hosts的方式,也就是在服务器和客户端主机上将gobsd.org和9971.us设置为192.168.1.70和192.168.1.71这样的内网IP地址。

最后是开启apache的Rewrite功能了,Rewrite模块在默认的httpd里并没有加载,而且实际上已经编译进去了。如果你的网站需要这样的功能也不能因噎废食,这样开启:
只需要在/var/www/conf/httpd.conf文件里开启Mod_rewrite模块,去掉下面这行的注释符

代码: 全选

# LoadModule rewrite_module       /usr/lib/apache/modules/mod_rewrite.so
并且将所有的

代码: 全选

AllowOverride None
修改为

代码: 全选

AllowOverride ALL
根据lionux兄的说明,改一个就可以了,原帖在这里,我没有时间测试,大家测试后请反馈一下。
再把定制的.htaccess文件传到所需的目录下。

发表于 : 2010-11-10 17:56
neolkc
不错!~ 呵呵

发表于 : 2011-03-07 13:57
junfengfan
openbsd4.8 +apache2 +php+ mysql ?能不能成功?

发表于 : 2011-03-07 23:33
leo
这个问题你似乎留了很长时间了,也没提自己问题出在哪里,所以让人无法回答,我新开一个主题吧。

你好,这个问题总想知道步骤?

发表于 : 2011-03-08 22:15
junfengfan
我并不想钻牛角尖。可是总想知道到底它的安装步骤上什么,因为感觉通过pkd_add安装通不过。想知道的是:请您们把具体安装过程写下来,就如同你们上面写的openbsd+apache1.3.29+php+mysql的详细过程一样,顺祝工作顺利~~~~

发表于 : 2011-03-08 22:31
leo
apache2和mysql的安装可以用pkg_add, 你说的安装通不过,我的理解可能是(下次别让回答的人猜你的问题好吗?)php的问题,因为默认的port系统里面的php部分是针对OpenBSD系统自带的apache 1.3配置的,你需要自行修改php部分的源代码。

发表于 : 2011-03-08 22:37
junfengfan
修改php源代码 这个对我有点难~~但你还是给我提供了思路。谢谢~~

发表于 : 2011-03-08 22:47
leo
实际上只需要修改Makefile文件,我会单独开一个主题说明如何设置apache2的OAMP环境,这里是讨论apache 1.3的帖子,放在这里不合适。