【阿里云ECS】LAMP开发环境的完整搭建配置过程

目录

前言

  为了顺利进行web开发,一套完整易用的开发环境是十分必要的,这可以大大提高团队的合作和开发效率。这里说的开发环境包括IDE,数据库,开发语言组件,版本控制工具等一系列内容。最近在使用的是比较流行的php开发架构,在windows下,无疑推荐WAMP + MySQL-Front + phpStorm,WAMP集成了Apache、MySQL、PHP,可以免除许多安装配置的问题。这样的环境在具体开发中是没有什么问题的,但是当项目上线并且需要版本维护时,我们还是要在Linux系统上进行部署。
  基于这样的需求,最近搭建了一套完整的LAMP环境并测试通过,可以实现代码版本控制,APP端API测试调用,项目自动化部署持续集成(CI)。包括的主要内容有:

  1.Apache组件;
  2.MariaDB组件(Centos7中替换掉了MySQL);
  3.phpMyAdmin数据库管理组件;
  4.PHP组件;
  5.GitLab搭建;
  6.GitLab-CI的配置与使用。

  为了完整实现上述过程,自然还需要一些其他组件的安装配置,比如node环境,git环境等等。
  本文将详细记录整个LAMP开发环境的搭建过程,这个过程中确实遇到了不少问题,通过官方文档,一些论坛,博客等基本得到了解决或找到了其它的解决方式。
  对于版本控制和持续集成部分,即GitLab相关的内容,会在下一篇文章中单独详细讲述。


关键词

LAMP | 部署 | Centos | Apache | MariaDB | PHP


准备工具

  部署环境:阿里云ECS Centos7.0 64bit 
  远程连接:Xshell 5
  文件传输:Xftp 5


阿里云ECS(Centos7)基本文件目录结构

阿里云上的centos包含了基本的Linux系统的必需目录。具体如下:

其中各个目录的主要作用有很多资料可以查阅,参考《鸟哥的Linux私房菜》


Apache的安装与配置

1.Centos7默认已经安装httpd服务,只是没有启动。可以通过如下命令安装
# yum install httpd

注:httpd是Apache超文本传输协议(HTTP)服务器的主程序。被设计为一个独立运行的后台进程,它会建立一个处理请求的子进程或线程池。

具体安装过程如下:


2.成功安装后,启动apache,并且设置系统让 Apache 开机自动启动。这里本来使用的是这两条命令:

1
2
# service httpd start    //启动Apache
# chkconfig httpd on //设置开机自启

但是系统给出了如下的提示:


出现这个提示的原因是CentOS7已经切换到systemd,系统指令也有所变化。之前用于启动、重启、停止各种服务的service作为向后兼容的指令还能使用,但是系统会自动重定向该指令到新的指令/bin/systemctl 来执行,并给出提示。因此,这里也就顺便对常用命令的变化做以对比和总结(以对httpd服务的操作为例):

【启动服务】
旧:# service http start
新:# systemctl start httpd

【停止服务】
旧:# service http stop
新:# systemctl stop httpd

【重启服务】
旧:# service http restart
新:# systemctl restart httpd

【重新加载】
旧:# service http reload
新:# systemctl reload httpd

【查看服务状态】
旧:# service httpd status
新:# systemctl status httpd

【设置开机自启动】
旧:# chkconfig httpd on
新:# systemctl enable httpd

【设置开机不自启动】
旧:# chkconfig httpd off
新:# systemctl disable httpd

【检查服务状态】
旧:# chkconfig httpd
新:# systemctl is-enabled httpd

【列举所有服务】
旧:# chkconfig list
新:# systemctl list-unit-files --type=service

3.最后,我们进行防火墙设置

注:SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。但是由于一般情况下没有对SELinux进行细致研究,不懂其中原理,可能还会对其他服务的使用造成影响,因此这里将其关闭。

3.1 关闭内核防火墙。使用命令:# vi /etc/selinux/config将SELINUX=enforcing 改成SELINUX=disabled
3.2 在iptables防火墙策略里设置网站运行的80端口和数据库的3306端口,使用命令:# vi /etc/sysconfig/iptables添加以下2个记录:

1
2
-A INPUT -p tcp -m tcp --sport 1024:65534 --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 1024:65534 --dport 80 -j ACCEPT

具体过程如下图所示:



MariaDB的安装与配置

注:MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。
  Centos6或早期的版本中提供的是MySQL的服务器/客户端安装包,但Centos7已使用了MariaDB替代了默认的MySQL。因此本文后续给出的是MariaDB的安装与配置过程。

  1. 使用如下命令安装MariaDB及相关组件:
    yum install mariadb mariadb-server mariadb-libs
    具体过程如下:

  2. 设置MariaDB开机自启动并重启MariaDB服务
    # systemctl enable mariadb
    # systemctl restart mariadb
    如下图所示:
  3. 配置MariaDB服务(主要是设置密码,用户账户等)
    # mysql_secure_installation
    如下图所示:



PHP的安装与配置

  1. 使用如下命令安装PHP及相关组件:

    1
    yum install php php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash
  2. 重启之前安装完成的Apache httpd服务和MariaDB服务:
    # systemctl restart httpd
    # systemctl restart mariadb

  3. Apache默认网站部署目录是/var/www/html,我们在里面创建index.php测试一下环境是否可以正常运行:
    使用命令
    1
    2
    cd /var/www/html
    vi index.php

内容如下:

1
2
3
<?php
phpinfo();
?>

4.在浏览器地址栏中输入http://阿里云ECS主机ip/index.php可以看到如下页面,说明安装配置成功。

5.【可选】PHP的版本升级
  如上图我们可以看到,PHP的版本是5.4.16。我在使用过程中,前期没有遇到什么问题。直到写图片上传服务之类的功能,在本地WAMPServer测试正常的代码部署到ECS后就会报错,错误如下:

  网上也查了一些解决方案,问题主要就是缺失curl这个类文件。提供的一些解决方案有单独编译安装这个类,再在php的配置文件中做extension,或者直接源码编译安装其他版本的PHP。感觉步骤较多,比较麻烦。因此选择了更换yum源直接升级高版本php(大于等于php5.5):
1.配置yum源:

1
2
# yum install epel-release
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

2.安装php5.6:

1
# yum install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof

3.查看php版本,看是否安装成功:
# php -v
结果如下图:

此时再在线上环境进行测试,图片服务已经可以正常使用。


phpMyAdmin的安装与配置

  至此,我们已经具备了一套基本的LAMP环境,通过在“L”上进行部署,“A”提供http服务,运行“P”的php后台代码,使用“M”提供数据存储,基本实现一个网站的功能。这里还有一个小问题,使用mariadb的命令行进行数据管理十分不便,我们可以安装phpMyAdmin进行可视化管理。

  1. 安装
    使用命令:
    # yum install phpmyadmin php-mcrypt
  2. 配置
    使用命令:
    # vi /etc/httpd/conf.d/phpMyAdmin.conf
    默认情况下,Centos7上的phpMyAdmin只允许从回环地址(127.0.0.1)访问。为了能远程连接,需要改动它的配置。我们要做的是找出并注释掉带有”Require ip XXXX”字样的4处代码,用”Require all granted”取而代之。内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    # phpMyAdmin - Web based MySQL browser written in php
    #
    # Allows only localhost by default
    #
    # But allowing phpMyAdmin to anyone other than localhost should be considered
    # dangerous unless properly secured by SSL

    Alias /phpMyAdmin /usr/share/phpMyAdmin
    Alias /phpmyadmin /usr/share/phpMyAdmin

    <Directory /usr/share/phpMyAdmin/>
    AddDefaultCharset UTF-8

    <IfModule mod_authz_core.c>
    # Apache 2.4
    <RequireAny>
    # Require ip 127.0.0.1
    # Require ip ::1
    Require all granted
    </RequireAny>
    </IfModule>
    <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order Deny,Allow
    Deny from All
    Allow from 127.0.0.1
    Allow from ::1
    </IfModule>
    </Directory>

    <Directory /usr/share/phpMyAdmin/setup/>
    <IfModule mod_authz_core.c>
    # Apache 2.4
    <RequireAny>
    # Require ip 127.0.0.1
    # Require ip ::1
    Require all granted
    </RequireAny>
    </IfModule>
    <IfModule !mod_authz_core.c>
    # Apache 2.2
    Order Deny,Allow
    Deny from All
    Allow from 127.0.0.1
    Allow from ::1
    </IfModule>
    </Directory>

    # These directories do not require access over HTTP - taken from the original
    # phpMyAdmin upstream tarball
    #
    <Directory /usr/share/phpMyAdmin/libraries/>
    Order Deny,Allow
    Deny from All
    Allow from None
    </Directory>

    <Directory /usr/share/phpMyAdmin/setup/lib/>
    Order Deny,Allow
    Deny from All
    Allow from None
    </Directory>

    <Directory /usr/share/phpMyAdmin/setup/frames/>
    Order Deny,Allow
    Deny from All
    Allow from None
    </Directory>

    # This configuration prevents mod_security at phpMyAdmin directories from
    # filtering SQL etc. This may break your mod_security implementation.
    #
    #<IfModule mod_security.c>
    # <Directory /usr/share/phpMyAdmin/>
    # SecRuleInheritance Off
    # </Directory>
    #</IfModule>
  3. 测试
    安装完成后,我们可以通过http://阿里云ECS主机ip/phpmyadmin进行访问(注:这里默认使用的是主机ip默认端口,但当后续搭建了GitLab服务后,会产生端口冲突,需要修改Apache的默认端口,这在下一篇文章中遇到时会详细阐述。)
    登录界面如下(注:用户名和密码就是上文配置MariaDB时设置的):

    主控制面板如下,在这里我们可以方便的新建数据库,数据表,查询,导入导出sql文件等等。


小结

  至此,我们就建立了一套完整的LAMP开发环境,并具备了数据库管理工具。
  现在我们就可以将新建的项目工程文件夹放在/var/www/html目录下,通过http://主机ip:port/project/index.php进行访问了。

这时可能会遇到一个问题,就是访问后页面报错,在Linux系统下网站根目录权限755;权限不足导致访问失败。这时只要更该相关目录权限即可解决,主要>是Application目录(使用thinkphp框架的工程中的一个目录),如果还不行可以尝试扩大更改权限的范围,但风险随之增大,应注意控制。

这样的LAMP开发环境有以下几个作用和好处:

  1. 开发阶段:使用Git进行版本控制,GitLab进行代码跟踪与持续集成
  2. 测试阶段:为测试人员提供最新的版本进行问题跟踪与反馈;为APP端提供接口API测试环境
  3. 运行阶段:提供给用户进行使用