- 1. 前言
- 2. 关键词
- 3. 准备工具
- 4. 阿里云ECS(Centos7)基本文件目录结构
- 5. Apache的安装与配置
- 6. MariaDB的安装与配置
- 7. PHP的安装与配置
- 8. phpMyAdmin的安装与配置
- 9. 小结
前言
为了顺利进行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的安装与配置过程。
- 使用如下命令安装MariaDB及相关组件:
yum install mariadb mariadb-server mariadb-libs
具体过程如下: - 设置MariaDB开机自启动并重启MariaDB服务
# systemctl enable mariadb
# systemctl restart mariadb
如下图所示: - 配置MariaDB服务(主要是设置密码,用户账户等)
# mysql_secure_installation
如下图所示:
PHP的安装与配置
使用如下命令安装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
重启之前安装完成的Apache httpd服务和MariaDB服务:
# systemctl restart httpd
# systemctl restart mariadb
- Apache默认网站部署目录是/var/www/html,我们在里面创建index.php测试一下环境是否可以正常运行:
使用命令1
2cd /var/www/html
vi index.php
内容如下:1
2
3
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进行可视化管理。
- 安装
使用命令:# yum install phpmyadmin php-mcrypt
配置
使用命令:# 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>测试
安装完成后,我们可以通过http://阿里云ECS主机ip/phpmyadmin
进行访问(注:这里默认使用的是主机ip默认端口,但当后续搭建了GitLab服务后,会产生端口冲突,需要修改Apache的默认端口,这在下一篇文章中遇到时会详细阐述。)
登录界面如下(注:用户名和密码就是上文配置MariaDB时设置的):
主控制面板如下,在这里我们可以方便的新建数据库,数据表,查询,导入导出sql文件等等。
小结
至此,我们就建立了一套完整的LAMP开发环境,并具备了数据库管理工具。
现在我们就可以将新建的项目工程文件夹放在/var/www/html目录下,通过http://主机ip:port/project/index.php
进行访问了。
这时可能会遇到一个问题,就是访问后页面报错,在Linux系统下网站根目录权限755;权限不足导致访问失败。这时只要更该相关目录权限即可解决,主要>是Application目录(使用thinkphp框架的工程中的一个目录),如果还不行可以尝试扩大更改权限的范围,但风险随之增大,应注意控制。
这样的LAMP开发环境有以下几个作用和好处:
- 开发阶段:使用Git进行版本控制,GitLab进行代码跟踪与持续集成
- 测试阶段:为测试人员提供最新的版本进行问题跟踪与反馈;为APP端提供接口API测试环境
- 运行阶段:提供给用户进行使用