19. LAMP和LNMP服务器部署
本章简单介绍一些常见服务器软件的安装和配置,
如LAMP(Linux+Apache+MariaDB+Php)套件安装和phpwind论坛搭建,
nginx也很流行,所以也弄了一个LNMP(Linux+Nginx+MariaDB+Php)套件和Discuz!论坛,MySQL/MariaDB的Web管理界面 phpMyAdmin 见19.3.3小节。
这两个案例里面有HTTP和数据库的服务软件,
后面20章介绍了其他常见的FTP、SSH、DNS、VNC Server、Mail服务器等。
19.1 MySQL/MariaDB
MySQL是流行的跨平台的数据库管理系统,经常和Php、Apache/nginx组成网页服务平台。
MySQL公司先被Sun收购,Sun又被Oracle收购,给开源社区带来的打击不小。
因为Oracle自己是做数据库起家,不可能对这个开源竞争对手有好处,
MySQL闭源的声音越来越多。MySQL作者Michael Widenius自己创办了新公司Monty Program AB,
在MySQL基础上新创了MariaDB开源数据库。MariaDB带来更好的数据库管理特性,
更好的自由开源保障。所以openSUSE 12.3版本发布时抛弃了MySQL,
集成了新的MariaDB。MariaDB使用方式和MySQL差不多
(两个数据库包含的一堆文件名是一样的,所以不要同时装),
但性能更好。所以这里只介绍MariaDB安装配置了。
MariaDB的服务器端软件包叫mariadb,客户端叫mariadb-client,
还有个MariaDB的管理工具集叫mariadb-tools。
openSUSE默认装了前两个,建议把三个都装上。
zypper in mariadb-tools mariadb mariadb-client
装上文件之后需要初次配置。下面的安装配置都是以root命令行执行:
(1)启动MariaDB数据库服务
systemctl enable mysql.service
systemctl start mysql.service
(2)设置数据库root密码:
mysqladmin -u root password 数据库根密码
(3)进入数据库后台:
mysql -u root -p -h localhost
输入数据库根密码后就进入数据库控制台了,可以执行sql命令:
(4)设置新的普通用户名
上面登录到数据库管理控制台后,执行:
CREATE USER '普通用户名'@'%' IDENTIFIED BY '普通用户密码';
GRANT ALL PRIVILEGES ON *.* TO '普通用户名'@'%';
将上面普通用户名、普通用户密码替换成自己喜欢好的账户和密码,比如
CREATE USER 'susedb'@'%' IDENTIFIED BY 'opensuse123';
GRANT ALL PRIVILEGES ON *.* TO 'susedb'@'%';
以后就尽量用新的如susedb帐户登录使用数据库。
(5)运行安全配置
执行命令:
mysql_secure_installation
在命令行根据提示输入:
显示Enter current password for root (enter for none):
输入数据库根密码
显示Change the root password? [Y/n] : n
(已有密码,不需要重新设)
下面的全选Y,去除数据库不安全的默认设置:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
这样一些默认不安全的设置就被去除了。由于数据库root不能远程登录,
所以需要一个新的普通帐户如susedb。
(6)开放防火墙端口
如果需要远程登录数据库,那么需要把openSUSE默认的防火墙端口打开。如果只在数据库本机管理,就不需要开防火墙端口。
打开Yast----》安全和用户----》防火墙。
在设置窗口,左边选“允许的服务”,右边区域用默认的“外部区域”,
要允许的服务选“MySQL server”,点击“添加”,
然后点“下一步”,完成配置即可。
远程登录数据库就可以执行:
mysql -u susedb -p -h 数据库服务器IP
Windows下MySQL客户端也可以使用用户名、密码、数据库服务器IP登录openSUSE上的数据库服务器进行操作。
19.2 PHP
PHP,是英文超文本预处理语言Hypertext Preprocessor的缩写。
简单地说,php就是用来建设网站必不可少的计算机语言。
我们平时在上网时看到的网站大部站是用php制作的。
比如:新浪、百度、腾讯、网站公司的网站都是用php开发的。
php是一门简单易学的语言,
只要有初中以上学历的人都可以快速学习并掌握建站技术。
PHP除了核心模块,还有无数的扩展模块。比如php5-mysql是包含连接MySQL数据库函数的模块,php5-ftp是访问FTP服务器的模块,php5-gd是创建管理png、jpg、gif等各种图片的模块,php5-zip、php5-zlib、php5-bz2是访问压缩包的函数模块,
php5-pear用于管理PHP扩展和程序的集合,在Yast软件管理里面搜索php,可以看到茫茫多php5-pear打头的扩展模块。
apache2-mod_php5是用于和Apache搭建网页服务器的模块。
安装php5和常用模块执行:
zypper in php5 php5-bz2 php5-gd php5-mbstring php5-mcrypt php5-mysql php5-zip php5-zlib pwgen php5-gettext php5-pear php5-suhosin
查看php和pear内置帮助,执行
php -h
pear help
比如用户主文件夹里的hello.php文件内容:
<?php
echo "Hello world! \n"; //输出Helo world
?>
解析执行hello.php:
php -f hello.php
19.3 Apache与LAMP
Apache是最流行的Web服务器软件之一,当然也是开源跨平台的。Apache发展了很多年,现在非常强大,拥有大量的扩展模块,支持各种Web服务特性,可以做服务器集群、负载均衡。
LAMP是一个流行的Web建站平台:Linux+Apache+MySQL/MariaDB+Php/Python/Perl 。
LNMP也是类似的流行Web建站平台: Linux+Nginx+MySQL/MariaDB+Php/Python/Perl。
如果要架设LNMP平台,19.3节Apache的东西不要装,免得冲突,直接去看19.4节。
这里先简单示范一个LAMP + phpWind论坛搭建。
19.3.1 Apache安装配置
现在openSUSE Linux、MariaDB、Php都装上了,就剩Apache了。
(1)执行安装
zypper in apache2 apache2-mod_php5 apache2-doc yast2-http-server
如果要使用Python和Perl来做网页开发,
对应Apache扩展模块是apache2-mod_python和apache2-mod_perl 。
对于Servlet/JSP动态网页是通过tomcat软件支持的。
由于这里是搭建Php网站,所以不需要这些额外模块。
装php5模块和apache本身就行了。
(2)装好后启动Apache服务
systemctl enable apache2.service
systemctl start apache2.service
(3)开启防火墙80端口
Web服务器当然得开服务端口了。与前面类似的,打开
Yast----》安全和用户----》防火墙。
左边“选允许的服务”,右边添加“HTTP Server”,
如果用得到HTTPS服务,就把“HTTPS Server”一块添加开放。
(4)Yast图形界面管理
Yast还有专门的管理Apache服务器的模块,前面安装了。打开
Yast----》网络服务----》HTTP服务器。
就可以从图形界面操控Web服务器。配置比较简单,初次配置一直点下一步就行,
也可以编辑一下站点名字和管理员邮箱:
以后就都可以用这个Yast的“HTTP服务器”配置来管理服务器。
HTTP网页文档根就是/srv/www/htdocs,所以最好把/srv单独做个分区或者把根分区弄大点,免得空间不够。
现在LAMP平台就架好了,我们把hello.php复制到/srv/www/htdocs,(这个文件夹写入要root权限)
cp hello.php /srv/www/htdocs
然后在浏览器里打开网页:
http://127.0.0.1/hello.php
就可以在浏览器里看到Hello world,说明安装成功。
19.3.2 phpwind论坛
LAMP平台当然不是仅仅用来显示helloworld的。现在来装一个phpwind论坛来试试。phpwind是很流行的社区系统,可以去主页查看介绍:
http://www.phpwind.com/index.php
下载页面:
http://www.phpwind.com/index.php?m=downloads&a=downloadsphpwind
一般Windows下用GBK的包,Linux当然要用简体UTF8的包。下载下来。
参看安装教程:
http://faq.phpwind.net/answer-881
(1)设置网页文件夹权限
需要将一堆文件设置成777权限,就是所有人可以读、写、执行。
所以这里先把/srv/www/htdocs设置成 777 ,再把论坛文件放进去。
root命令行执行:
chmod 777 -R /srv/www/htdocs
(2)解压缩phpwind包,将upload内的文件捣腾到htdocs文件夹
下载的比如phpwind_v9.0_utf8.zip,解压缩到phpwind_v9.0_utf8文件夹,
然后进入里面的upload文件夹。Ctrl + A 再Ctrl + X,剪切所有文件到
/srv/www/htdocs 文件夹里。
由于默认解压缩的文件权限不是777 ,所以再执行一遍:
chmod 777 -R /srv/www/htdocs
(3)执行phpwind安装
打开浏览器,访问:
http://127.0.0.1/install.php
接受协议;
接着看到各种环境状态,这里当然是很好的状态了,没问题:
进入下一步;
输入MariaDB数据库密码,除了root,也可以用前面自己设的普通用户名如susedb。
输入phpwnd的数据库名字,可以设置为phpwnd(论坛软件自动创建叫这个名字的数据库)。
输入论坛管理员密码。输入好后点创建数据。
创建好数据论坛就成功装好了,可以发帖:
论坛主页是:
http://127.0.0.1/
论坛管理后台页面是:
http://127.0.0.1/admin.php
建议不用的时候把admin.php挪走,或者改成乱七八糟的名字。用的时候再改回来。
(4)更正/srv/www/htdocs权限
之前为安装方便,全改成777了,最好按照最小化权限重设:
chmod 755 -R /srv/www/htdocs
chmod 777 -R /srv/www/htdocs/attachment
chmod 777 -R /srv/www/htdocs/html
chmod 777 -R /srv/www/htdocs/data
这样就把LAMP + phpwind论坛架设好了。
19.3.3 phpMyAdmin
phpMyAdmin是MySQL/MariaDB数据库的管理界面,可以通过Web界面操作数据库。
由于是php语言写的,所以需要LAMP或LNMP一整套平台才跑的起来。
现在LAMP已经装好了,正好把phpMyAdmin装上,方便对数据库的管理。
zypper in phpMyAdmin
装好后就自动放在/srv/www/htdocs/phpMyAdmin/文件夹里了。在浏览器里访问:
http://127.0.0.1/phpMyAdmin/
就可以用数据库的用户名密码登录,来管理数据库。
19.4 Nginx与LNMP
与Apache相比,Nginx是后起之秀。Apache模块很多,属于大而全的服务器软件。
而Nginx以小巧高效闻名,由俄罗斯的程序设计师Igor Sysoev所开发,其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。中国大陆使用nginx网站用户有:新浪、网易、 腾讯、小米官网等。
使用Apache的体系叫LAMP,使用Nginx的当然叫LNMP了。Apache大而全的好处是有现成的 apache2-mod_php5模块,装上就什么都不用管。
而Nginx就没这类的模块,需要借助FastCGI来解析php文件。
参看:
http://www.myhack58.com/Article/sort099/sort0102/2012/33364.htm
Apache和Nginx装一个就够了,因为HTTP服务默认都占用80端口,装两个显得浪费。
这一节的内容是接着19.2节,php装好之后,安装配置LNMP平台。
19.4.1 Nginx安装
(1)Nginx没什么附加模块,直接装它本身就行了:
(好像在13.2中把nginx移到不稳定源里了,如果官方源里没有,去
http://software.opensuse.org/package/nginx
页面找 nginx)
zypper in nginx
(2)开启nginx服务
systemctl enable nginx.service
systemctl start nginx.service
(3)开放防火墙端口
由于是HTTP服务器,必须在防火墙里把80端口打开。
与19.3节类似的,打开Yast----》安全和用户----》防火墙。
左边“选允许的服务”,右边添加“HTTP Server”,
如果用得到HTTPS服务,就把“HTTPS Server”一块添加开放。
安装好nginx后,如果把前面的hello.php放在/srv/www/htdocs目录,浏览器里访问
http://127.0.0.1/hello.php
这时不会看到解析的网页,而是直接下载了hello.php文件。所以必须要继续配置。
19.4.2 php-fpm安装配置
软件包php5-fpm是用于FastCGI进程管理的PHP5模块。
LNMP平台大致的工作流程是:安装php5-fpm后,通过php-fpm启用FastCGI进程,
然后配置nginx,让nginx把php文件解析交给FastCGI进程处理,
然后nginx把解析得到网页显示出来。下面进行安装配置。
(1)安装php5-fpm
zypper in php5-fpm
(2)编辑php-fpm.conf
装了之后,在/etc/php5/fpm/目录有默认的配置文件php-fpm.conf.default,
要启用php5-fpm必须复制一个php-fpm.conf放在/etc/php5/fpm/目录:
cp /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf
文件php-fpm.conf就是实际使用的php5-fpm配置文件。
用root权限打开php-fpm.conf进行编辑:
把 ;error_log = log/php-fpm.log 一行开头的分号去掉,并改为
error_log = /var/log/php-fpm.log
保存文件。然后可以尝试在root命令行执行:
php-fpm
如果没提示ERROR,那表示配置文件没问题。
(3)启动PHP的FastCGI进程
用root命令行启动FastCGI服务:
systemctl enable php-fpm.service
systemctl start php-fpm.service
可以查看 php-fpm监听状态:
netstat -antl |grep 9000
命令行会提示:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
如果是使用负载分担,将nginx和php-fpm分别运行在两台不同服务器上的话,
需要开放防火墙的TCP 9000端口,使它们能够互通。
如果二者在同一台机器上那就无所谓。
(4)配置nginx
用root权限编辑/etc/nginx/nginx.conf ,找到其中的两段:
location / {
root /srv/www/htdocs/;
index index.html index.htm ;
}
##
##中间的一大堆不动。
##
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
第二段本来是用#注释掉的,把#去掉,这段php的配置就会生效,然后编辑如下:
location / {
root /srv/www/htdocs/;
index index.php index.html index.htm ;
}
##上一段添加了一个 index.php 的主页文件名
##中间的一大堆不动。
##下面一段改网页root位置,并把/scripts改成root一样的位置
location ~ \.php$ {
root /srv/www/htdocs;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /srv/www/htdocs$fastcgi_script_name;
include fastcgi_params;
}
编辑后保存。
(5)重启nginx
systemctl restart nginx.service
再用浏览器访问:
http://127.0.0.1/hello.php
就可以看到久违的Hello wolrd。这样LNMP平台就配置好了。
19.4.3 Discuz!论坛
这里提到的Discuz!和上一节的phpwnd、phpMyAdmin在LAMP和LNMP都可以正常运行。配置好了LAMP或LNMP平台后,可以随意装哪个论坛软件和phpMyAdmin。这里是演示方便,把Discuz!放到这来装,如果放到前面LAMP装是一样的。论坛phpwnd放到LNMP下也是一样装。
根据维基百科,Discuz!是个可免费下载的PHP网络论坛程序,简称DZ,由戴志康(Crossday)所创立,目前最新版本是X2.5。前身为Crossday Bulletin(CDB),最初改自XMB,尔后改写成为现今的Discuz!社区论坛程序,由康盛创想所有。现在Discuz!已成为大中华地区最多用户使用的论坛程序。Discuz!的源代码可免费下载,但它并不是开源软件,因为其许可证不符合开放源代码的定义。其官方网站:
http://www.comsenz.com/products/discuzx
下载地址:
http://www.comsenz.com/downloads/install/discuzx
大陆的选“简体UTF-8”,想要装繁体的也可以选“繁体UTF-8”。
(1)把论坛文件放到/srv/www/htdocs/
下载后把Discuz_X2.5_SC_UTF8.zip解压缩放到主文件夹的 Discuz_X2.5_SC_UTF8 文件夹里。
Discuz_X2.5_SC_UTF8 文件夹里有三个子文件夹:readme,upload,utility。
在root命令行执行命令把 upload里面的都移动到/srv/www/htdocs/ 文件夹:
mv /home/用户名/Discuz_X2.5_SC_UTF8/upload/* /srv/www/htdocs/
(这里/home/用户名/Discuz_X2.5_SC_UTF8是解压缩后的路径,可以根据各人自己的的改。)
然后在 /srv/www/htdocs/ 文件夹就可以看到一大堆论坛文件了。
(2)设置权限
/srv/www/htdocs/ 里面有四个子文件夹config ,data,uc_client/data,uc_server/data
里面的都需要设置777权限。执行:
chmod 777 -R /srv/www/htdocs/config/
chmod 777 -R /srv/www/htdocs/data/
chmod 777 -R /srv/www/htdocs/uc_client/data/
chmod 777 -R /srv/www/htdocs/uc_server/data/
(3)进行Discuz!论坛安装
打开浏览器,访问:
http://127.0.0.1/install/
进入安装界面,同意协议,进入环境检查界面:
一切OK,点“下一步”;
进入设置运行环境,选“全新安装 Discuz! X (含 UCenter Server)”,点“下一步”;
填写数据库用户名密码,推荐用前面新建的普通的数据库用户名密码,如susedb的用户名。
然后填写给Discuz! 用的数据库名,论坛管理员admin的新密码。
点“下一步”。
等待创建数据库表完成和数据初始化。会提示Discuz! 应用中心有一些应用,可以装一下喜欢的。
这里就不装了。直接进入论坛:
http://127.0.0.1/
其管理后台是
http://127.0.0.1/admin.php
平时不用后台时,最好把admin.php挪走,或者改成乱七八糟的名字。等到要用的时候再改回去。
LNMP平台装phpMyAdmin与上面LAMP装是一样的,就不重复了。
下一章介绍其他常见的服务器软件。
最后附上更多的参考资料:
实战Nginx与PHP(FastCGI)的安装、配置与优化
在 OpenSuse Linux 中配置安装 Nginx + MySQL + PHP(PHP-FPM)
nginx php-fpm配置
SDB:搭建LAMP服务器
新鲜体验 openSUSE 12.1下搭建Web服务器
配置http服务器(apache, nginx)支持 html5 video(ogv, webm...)
本文档翻译自
http://opensuse-guide.org/ 不当之处,还望指正
使用e-mail发送您的英文评论给 admin [at] opensuse-guide.org
或发送意见和建议给中文译者:Libitum (hello[at]libitum.org);
Winland (winland0704[at]126.com)