CentOS 7下LAMP一键安装

技术 8459 次围观 19 次吐槽

LAMP

前不久 CentOS 更新到版本 CentOS 7.0.1406,为了支持此版本,LAMP 一键安装脚本做了大量的更新和测试,并遇到了不少问题,在此一一记录下来。
由于 CentOS 7 将 service 重定向为 systemctl ,导致开机自启动脚本有的需要重写,这个过程也耗费了不少时间测试。同时,原先在 CentOS 6 存在的一些依赖包,在 CentOS 7 中不存在了,比如 libc-client-devel,这是安装 php-imap 扩展所必须的依赖,少了它编译 PHP 的扩展 imap 时必然会出错,于是只能手动编译安装 imap-2007f ,并指定 imap 扩展的路径。
去掉了一些在新旧 CentOS 都不存在的依赖包,比如 libmcrypt-devel,并全部编译安装最新版。

其中一些最主要的更新,列举如下。
1、获取公网 IP 的方式变更
在 CentOS 7 中,默认没有安装 ifconfig ,也就是依赖包 net-tools,所以将原来从 ifconfig 获取 IP 变更为 curl 外链来获取 IP。
所以,安装本脚本,务必要保证联网。

2、手动安装一些依赖包
这些依赖包包括 pcre、libiconv、libmcrypt、mcrypt、re2c、libedit、imap。
在 CentOS 5 中 pcre 版本过低会导致编译 Apache 失败;MySQL 要使用 readline 功能,编译安装 libedit;PHP 的扩展 imap,依赖 libc-client 共享库,编译安装 imap-2007f 等等。
其中有些报错信息网上查到也语焉不详,尤其是中文网站。所以在此列举一下。
编译 PHP 时出错:
configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.
就是 imap 扩展缺少依赖包导致的。编译安装 imap-2007f 步骤:

wget ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz
tar -zxf imap-2007f.tar.gz
cd imap-2007f
make lr5 PASSWDTYPE=std SSLTYPE=unix.nopwd EXTRACFLAGS=-fPIC IP=4
rm -rf /usr/local/imap-2007f/
mkdir /usr/local/imap-2007f/
mkdir /usr/local/imap-2007f/include/
mkdir /usr/local/imap-2007f/lib/
cp c-client/*.h /usr/local/imap-2007f/include/
cp c-client/*.c /usr/local/imap-2007f/lib/
cp c-client/c-client.a /usr/local/imap-2007f/lib/libc-client.a

备注:在 64 位下编译时 make 参数需要带 EXTRACFLAGS=-fPIC ,在 32 位下则不需要。
同时,在 CentOS 7 下编译 PHP 的 imap 扩展时,添加如下参数:

--with-imap=/usr/local/imap-2007f 
--with-imap-ssl

在 CentOS 6 下编译时,由于已经安装了依赖包 libc-client-devel ,所以参数如下:

--with-imap
--with-imap-ssl
--with-kerberos

3、新增一些判断函数
增加了一些判断函数,比如是否为 64 位,是否为 CentOS 7 等。

4、更新启动脚本
Apache 的启动脚本 /etc/init.d/httpd 变更,拷贝于 /usr/local/apache/bin/apachectl 文件,同时为了 /etc/init.d/httpd status 能够使用,新增了配置文件 /usr/local/apache/conf/extra/httpd-info.conf 。

5、CentOS 7 下可能会遇到的问题
安装 LAMP 完成后,无法用 IP 访问网站。查看进程也发现了 httpd 和 mysqld 也启动了,防火墙貌似也关闭了,ping 也没问题,但就是无法访问。
经过一番排查,还真就是 CentOS 7 最新的 firewalld 引起的问题。这时就要用经典的 iptables-services 来替代 firewalld 了。

yum -y install iptables-services
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables

6、PHP组件支持
到目前为止,我所见过的 LAMP、LNMP、LANMP 等一键安装脚本,对 PHP 组件的支持都不全面,有很多缺失的,最典型的就是 imap、ldap。
为了支持这些组件,我做了大量的改进和测试。这里放一张 PHP 探针截图,支持所有组件,以及 4 种第三方组件。
PHP ext

虽然 LAMP 一键安装脚本已经做了大量测试,但还是会有不完善的地方,如果你在使用过程中遇到问题,可反馈至 https://teddysun.com/lamp ,提交评论,或者附带安装日志 lamp.log 发送邮件至 i[at]teddysun.com。

转载请注明:秋水逸冰 » CentOS 7下LAMP一键安装

发表评论
取消评论
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
表情

已有评论 (19)

  1. 大神 这中安装脚本是什么语言呢?自动安装脚本,有没有可以学习的教材呢?
    mtr20152年前 (2015-07-19)回复
    • Linux Shell。入门教材有《鸟哥的私房菜》系列
      秋水逸冰2年前 (2015-07-19)回复
    • 叫Bash
      LjxPrime2年前 (2015-07-22)回复
  2. 我刚修改了httpd.conf里的DocumentRoot "/opt/www" [[email protected] bin]# ./apachectl start AH00112: Warning: DocumentRoot [/data/www/default/] does not exist
    冷月夜2年前 (2014-12-06)回复
    • 修改文件错了。 修改 /usr/local/apache/conf/extra/httpd-vhosts.conf 里的 DocumentRoot 才对。
      秋水逸冰2年前 (2014-12-07)回复
  3. 老大,能否修改网站的根目录啊?data/所在空间分区很小,多谢
    冷月夜2年前 (2014-12-06)回复
  4. 忘了说,环境是centos 6.6 32bit,内存128m 有不需要编译安装的脚本吗?为何这些脚本都是编译安装的?
    zhenxianbo2年前 (2014-11-14)回复
    • 128M的就别编译安装了,本站有个 yum 安装的脚本,适用。
      秋水逸冰2年前 (2014-11-14)回复
      • 博客逛了这么多次,还真没注意到这项。谢谢。
        zhenxianbo2年前 (2014-11-14)回复
  5. 出错了 [ 70%] Built target slave Linking CXX executable pfs_connect_attr-t collect2: ld terminated with signal 9 [Killed] make[2]: *** [storage/perfschema/unittest/pfs_connect_attr-t] Error 1 make[1]: *** [storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/all] Error 2 make: *** [all] Error 2 Installing MySQL failed
    zhenxianbo2年前 (2014-11-14)回复
  6. 测试可用,安装了2遍,总觉得Centos7还不是很完善,打算降回6.5,另外问一下别的问题,用opendns+shadowsocks导致很多网站解析到美国IP怎么解?比如搜狐都不好看,用dnsmasq把.sohu.com都指定到大陆IP才解决
    tankren3年前 (2014-08-19)回复
    • CentOS 7 改变较大,需要一段时间来适应。解决方案就是国内网站不用 Shadowsocks 解析其 DNS,参考此文(google 被墙,需翻),去搜索一下吧。
      秋水逸冰3年前 (2014-08-20)回复
  7. 为什么我安装好了之后,网站无法访问呢,这是Press any key to start...or Press Ctrl+C to cancel 错误:未安装软件包 httpd 错误:未安装软件包 mysql 错误:未安装软件包 php 已加载插件:fastestmirror 参数 httpd 没有匹配 不删除任何软件包 已加载插件:fastestmirror 参数 mysql 没有匹配 不删除任何软件包 已加载插件:fastestmirror 参数 php 没有匹配 不删除任何软件包 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.unifiedlayer.com * extras: centos-distro.cavecreek.net * updates: mirror.hmc.edu 软件包 ntp-4.2.6p5-18.el7.centos.x86_64 已安装并且是最新版本 无须任何处理 19 Aug 18:06:04 ntpdate[8311]: ntpdate [email protected] Wed Jun 18 21:20:36 UTC 2014 (1) Looking for host cn.pool.ntp.org and service ntp host found : news.neu.edu.cn transmit(202.118.1.81) receive(202.118.1.81) transmit(202.120.2.101) 结尾是 Congratulations, LAMP install completed! Your Default Website: http://23.244.65.206 Default WebSite Root Dir: /data/www/default Apache Dir: /usr/local/apache PHP Dir: /usr/local/php MariaDB root password:gaojunchao MariaDB data location:/usr/local/mariadb/data Installed Apache version: httpd-2.4.10  Installed MariaDB version: mariadb-5.5.39  Installed PHP version: php-5.4.31  Installed phpMyAdmin version: phpMyAdmin-4.2.7-all-languages  Start time: 2014年 08月 19日 星期二 18:06:11 CST Completion time: 2014年 08月 19日 星期二 18:38:45 CST (Use: 32  minutes) Welcome to visit:https://teddysun.com/lamp Enjoy it!
    baiyou3年前 (2014-08-19)回复
    • 有些 VPS 默认是开启防火墙的,所以就可能是没有对 80 端口放行导致的问题。修改 /etc/sysconfig/iptables ,对 80 ,3306 端口放行即可。 或者直接关闭防火墙,执行 service iptables stop
      秋水逸冰3年前 (2014-08-20)回复
  8. 还是先用centos6.x吧
    hamen3年前 (2014-08-17)回复
    • 这么做是明智的,毕竟 CentOS 7 刚出来,用于生产环境的话遇到问题都找不到解决方案。
      秋水逸冰3年前 (2014-08-18)回复
  9. 老大好好努力
    漫步者3年前 (2014-08-14)回复
  10. 为什么配图和我的一模一样
    Tammy3年前 (2014-08-13)回复