阿里云( ECS ) Centos7 服务器 LNMP 环境搭建
前言
第一次接触阿里云是大四的时候,当时在校外公司做兼职,关于智能家居项目的,话说当时俺就只有一个月左右的 php 后台开发经验(还是因为无意中选修了一门电子商务的课程,要做课程设计逼迫出来的),因为公司没人接触过后台开发,所以我这个菜鸟就硬着头皮上了。刚开始入门我把精力放在公司业务功能实现上,所用的服务器环境是别人已经配置好的,就是把代码在本地写好,通过 ftp 上传到服务器目录,是用 postman 插件测试一下接口就行了,开发到最后阶段问题来了,因为是智能家居项目,对智能设备的数据的实时性要求很高,需要有一种推送机制当数据变化时及时推送给控制网关,而不能 让控制 网关一直轮询服务器数据是否发生变化,当时“年幼”, 懂不得 什么技术,百度了一下,最后选定了Comet :基于 HTTP 长连接的“服务器推”技术 方案,(这个方案现在想来不是很合适的,最合适应该是 MQTT 技术,当时这个不温不火,居然没百度到),搭建 comet 服务,需要重新译 Nginx 服务器,而且是从源码编译安装,参考 Nginx Push Stream Module , 从那时才开始使用 Xshell 和 Putty 工具连接服务器,然后什么经验也没有, Linux 的基本操作命令也不知道,一顿百度和谷歌,乱起八糟的配置,结果还是把平台搭建好了,现在想来,像搭建服务器环境这些东西还是系统的整理一下比较好,不然用一次忘一次,百度到的文章也没自己亲历写的文章安心。故事讲完了,进入正题。
首先你得有一个阿里云服务器,阿里云最近推出一个云翼计划 ,学生能用极低的几个选一台配置也是极低的 ECS 云服务器,手痒的我毫无犹豫入了一台,购买的时候选择的镜像是 Centos7_64bit (选择 centos 也是道听途说学到的经验),接下来就是要配置环境了,刚开始没经验使用的是 一键安装配置教程 这个已经满足基本要求了,至少我把目前给公司做的一个云平台放上去运行一切 OK 。但是这个毕竟定制化水平比较低,自己掌握从零配置还是很需要的,所以接下来要一点 一点 配置了。永远记住最让人放心的配置方法就是参考官方文档(英语渣渣瞬间:smile:)。永远记住最让人放心的配置方法就是参考官方文档。永远记住最让人放心的配置方法就是参考官方文档
以我目前涉世不深的经验, Linux 下安装软件有两种方式:
- 通过软件包管理器 rpm 或 yum 工具命令安装
- 下载源码编译安装
rpm 是由红帽公司开发的软件包管理方式,使用 rpm 我们可以方便的进行软件的安装、查询、卸载、升级等工作(可以看成是 windows 系统控制面板里的卸载 / 安装程序功能)。但是 rpm 软件包之间的依赖性问题往往会很繁琐 , 尤其是软件由多个 rpm 包组成 时。 Yum (全称为 Yellow dog Updater, Modified )是一个在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端软件包管理器。基 於 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
来源: < http://zhidao.baidu.com/link?url=MnhQzDG9I7Q7CAh5xbCCRVGVA07m9vqa6wa0Di7DXOgbIHFHTTH4OsM-XLl19cytx_I6-hOQ7Or3q8SkxdWA5_ >
一般如果官方不提供安装 包或者 需要扩展第三方的模块(比如上面说的需要在 Nginx 集成 comet 功能),我们才选择方法 2 来安装配置软件,因为从源码安装配置软件相当复杂,不必多此一举。所以本文大多采用第一种方式来安装软件。
在正式安装配置之前,还得理解一个概念: yum 源,这个大概相当于 windows 或者手机系统里面的应用中心、软件市场之类的东西, Linux 系统添加 yum 源后就可以直接在线下载 rpm 安装包了。这里推荐几个常用的源: epel,remi,rpmforge , webtatic 。 这些源 本身也是一个 rpm 安装包(就像流氓 360 手机助手也是要下载安装一样),需要下载安装。下面提供这几个源的官方网站,(第三方下载地址也颇多,还是官方最保险)
EPEL - FedoraProject
http://fedoraproject.org/wiki/EPEL
Remi's RPM repository
http://rpms.famillecollet.com/
repoforge
http://pkgs.repoforge.org/
webtatic
http://mirror.webtatic.com/
接下来就是安装 yum 源了,这里我只安装了 epel,remi ,在后面的安装配置 php 会用到。使用终端模拟器连接到服务器(最常用 Xshell 或者 putty, 这两个工具不会使用?百度咯, 毕竟苦逼程序员 ,自己动手,丰衣足食)。
安装 epel (这个源貌似很重要,我看到很多源和软件包依赖这个源)打开上面对应的地址。在页面找到下图所示的介绍。
这里我用的是 Centos7 系统,选择选择第一项,鼠标放在链接上,右键复制下载链接 ,
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
接下来有两种选择,一是将这个rpm包下载到服务器 ( 是用 wget 命令或者下载到 本地通过 ftp 软件上传到服务器 ) 再用 rpm 命令或者 yum 命令安装,或者直接在线安装(直接在线安装的缺点是有时真心从服务器下载不了包)。
# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -ivh epel-release-latest-.noarch.rpm
或者直接
# rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
或者
# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
同理安装 remi 源
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
如何检查 源是否 安装成功?
使用一下命令:
# yum repolist
这个命令会列出系统中所有存在的源。
yum 与 rpm 简单命令可以参考
http://www.cnblogs.com/trying/p/3582121.html
接下来终于要安装 Nginx 、 MySql 、 PHP 了。
1. 安装配置 Nginx( 貌似近年 Nginx 比 Apache httpd 流行点 )
nginx 与 apache 的区别:
apache 在处理用户请求时采用的是进程,若采用 prefork 的 mpms 机制, apache 在每个时刻都要保持 8 个空闲的子进程,当用户请求过多时,开启的进程较多,占用内存大,效率与 nginx 相比较低,每秒最多的并发连接请求最多不超过 3000 个。但是 apache 有个优点就是非常稳定,当一个进程死掉时,不会影响其他的用户。而 nginx 在处理用户请求时采用的是线程,而线程是共享内存的, nginx 只需要开启少量进程,多个线程就可以共享进程的内存,占用内存小, nginx 采用的是 epoll 机制(事件主动通知机制)每秒最多的并发连接请求理论可以达到 50000 个。但是 nginx 的缺点是,稳定性差,当一个进程死掉时,会影响到多个用户的使用。
来源: < http://www.centoscn.com/CentosServer/www/2013/0910/1593.html >
接下来 要到官网下载 安装包了,为什么 选择官网呢 ,因为我是一个有强迫症的程序员,一定要将软件更新到最新版本。奉 上官网地址:
nginx news
http://nginx.org/
进入官网,右侧导航 download 进入,最底下提供了 Linux 安装包,犹豫了一下,选择稳定版本吧。
Pre-Built Packages
Linux packages for stable version
Linux packages for mainline version
点击上面的链接就会进入安装介绍页面,里面介绍了安装方法。
按照方法 一:
# wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# rpm -ivh /root/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum install nginx
失败了,失败了,失败了。果断放弃
按照方法二,想在 CentOS 系统上安装 Nginx ,你得先去添加一个资源库,像这样:
vim / etc / yum.repos.d / nginx.repo (这里使用的是 vim 工具来创建这个文件,可以在本地创建再上传)
使用 vim 命令去打开 / etc / yum.repos.d / nginx.repo ,如果 nginx.repo 不存在,就会去创建一个这样的文件,打开以后按一下小 i 键,进入编辑模式,然后复制粘贴下面这几行代码,完成以后按 esc 键退出,再输入 : wq (保存并退出)
[ nginx ]
name= nginx repo
baseurl =http://nginx.org/packages/centos/$releasever/basearch/
gpgcheck = 0
enabled= 1
完成以后,我们就可以使用 yum 命令去安装 nginx 了,安装命令:
yum install nginx
安装好以后查看一下nginx 服务:
查看状态:
service nginx status
返回:
Redirecting to /bin/ systemctl status nginx.service
nginx.service - nginx - high performance web server
Loaded: loaded (/ usr /lib/ systemd /system/ nginx.service ; disabled)
Active: inactive (dead)
Docs: http://nginx.org/en/docs/
可以看到服务还没启动
再测试一下 nginx 的配置文件:
nginx -t
应该会返回:
nginx : the configuration file /etc/nginx/nginx.conf syntax is ok
nginx : configuration file /etc/nginx/nginx.conf test is successful
... syntax is ok , ... test is successful ,说明配置文件没问题,同时这个结果里你可以找到 nginx 的配置文件 nginx.conf 所在的位置。
nginx 服务启动、重启、停止命令
操纵服务,可以 使用使用 service 命令,它可以启动( start ),重启( restart ),或停止服务( stop ),比如要启动 nginx 服务:
service nginx start
service nginx restart // 这个会经常用到,每次修改 Nginx 配置文件后,都要重启生效。如果配置文件错误的话,是会启动失败的,可以使用 nginx -t 命令先测试一下配置文件
service nginx stop
配置 nginx 虚拟主机
安装完 nginx 以后,接下来就是配置虚拟主机。先进入到 nginx 配置文件目录:
cd /etc/nginx/conf.d
这个目录里有一个默认配置文件 default.conf ,可以将这个文件复制一份重命名来创建自己的虚拟主机比如 myspace.conf 。复制文件可以使用 cp 命令,像这样:
cp default.conf myspace.conf
// 后面使用的是 vim 来编辑文件的,如果不熟悉 vim 的使用方法,可以在本地编辑好再上传到指定目录。
再去编辑一下这个复制以后的配置文件,可以使用 vim 命令:
vim myspace.conf
你会看到像这样的代码:
server {
listen 80;
server_name localhost;
#charset koi8-r;
# access_log/var/log/nginx/log/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
...
}
listen 是监听的端口,默认的 80 ,如果被占用了,可以换一个端口, server_name 就是主机名,如果你有域名指向这个服务器,就填写域名,如果没有就不需要修改了。 location 里面的 root ,就是这个虚拟主机的根目录,也就是网站所在的目录。比如我们要把网站的文件放在/home/www 下面,那么这个 root 就是这个路径。在 index 后面加上一种索引文件名,也就是默认打开的文件,这里要加上一个 index.php ,这样访问 服务器就可以直接打开 root 目录下面的 index.php 了。稍后我们再去安装 php 。修改之后,看起来像这样:
server {
listen 80;
server_name localhost;
#charset koi8-r;
# access_log/var/log/nginx/log/host.access.log main;
location / {
root /home/www;
index index.php index.html index.htm;
}
...
}
这个配置文件先修改到这,稍后,我们再回来继续修改一下它。保存一下,按 esc ,输入 : wp (保存并退出)。现在虚拟主机应该就可以使用了。我们在 /home/www 目录下放置一个测试文件,比如一张图片文件。
重启 nginx 或者重新加载 nginx 可以让配置文件生效。
service nginx restart
现在,打开浏览器,输入主机 + 资源路径,看看是否能打开你指定的目录里的东西。
注意在没有配置 php 环境之前,是不能加载动态文件的。接下来配置 php 环境
2. 安装配置 php 环境
nginx 本身不能处理 PHP ,它只是个 web 服务器,当接收到请求后,如果是 php 请求,则发给 php 解释器处理,并把结果返回给客户端。 nginx 一般是把请求发 fastcgi 管理进程处理, fascgi 管理进程选择 cgi 子进程处理结果并返回被 nginx 。 PHP-FPM 是一个常用的 PHP FastCGI 管理器。要让 nginx 能够执行 php 文件,需要去安装一下 php-fpm,它直接包含在了 CentOS 资源库里,所以直接使用 yum 命令可以安装它:
yum install php-fpm
完成以后,可以检查一下 php -fpm 的运行状态,使用 service 命令:
service php-fpm status
返回:
Redirecting to /bin/ systemctl status php -fpm.service
php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service ; disabled)
Active: inactive (dead)
dead 表明服务未启动,启动完成会变成 Active: active (running), 使用下面的命令启动
php-fpm 服务启动、重启、停止命令:
service php-fpm start
service php-fpm restart
service php-fpm stop
接下来我们就可以配置 nginx 通过php-fpm 解析php 脚本 了。不过你需要修改一下nginx的配置文件,之前我们在配置虚拟主机的时候,创建了一个myspace.conf的配置文件,需要去修改下 nginx 的这个配置文件,才能去执行 php 。使用 vim 命令去编辑它:vim /etc/nginx/conf.d/myspace.conf
注意你的配置文件不一定叫myspace.conf,应该是你自己命名的配置文件。打开以后,找到下面这段字样的代码:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#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 ;
#}
这是 nginx 默认给我们的用来执行 php 的配置,从 location 开始取消注释,会让这个配置生效,然后我们还得 简单去 修改一下:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \. php $ {
# root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php ;
fastcgi_ param SCRIPT_FILENAME /home/www$fastcgi_script_name ;
include fastcgi_params ;
}
注意 root 那里仍然是被注释掉的,还有 SCRIPT_FILENAME 后面修改了一下,把 /scripts 换成了网站根目录 。保存并退出。然后重新启动 nginx:
service nginx restart
测试是否可以执行 php
现在,我们已经安装了 php-fpm ,并修改了 nginx 的配置文件让它可以去执行 php ,下面,我们得去测试一下,可以使用 php 的 phpinfo (); 函数,方法是在你的虚拟主机根目录下面,创建一个 php 文件,命名为 phpinfo.php ,然后在这个文件里输入:
<? php phpinfo (); ?>
保存文件并退出。在浏览器里打开刚才创建的这个 php 文件。打开以后,你应该能看到像下面这样的界面,如果能,说明 nginx 已经可以执行 php 了。
可以看到 Centos7 自带的 php 版本是 5.4.16 ,通过命令 php -v 也可以查看 php 版本,现在说它是旧版本也是马后炮了,实际上在安装之前,我们可以通过命令
yum list | grep php
列出安装源里包含的关于 php 的安装包列表,比如我就找到下面几项
php-dba.x86_64 5.4.16-36.el7_1 updates
php-embedded.x86_64 5.4.16-36.el7_1 updates
php-enchant.x86_64 5.4.16-36.el7_1 updates
updates 源是系统自带的,中间的版本号显示是 5.4.16 ,如果你觉得这个版本可以满足要求就按照上面的直接安装。
但是,居然不是最新版本,对于有强迫症的程序员怎么能忍。我们先 卸载旧 版本再 安装新版本。
先找出已经安装的关于 php 的软件包,使用命令:
yum list installed | grep php
或者
rpm -qa | grep php
会列出已经安装的包,有的话,我们就通过 rpm -e 命令 或者 rpm -e -- nodeps 命令来卸载掉
rpm -e 包名 // 普通删除模式
或者
rpm -e --nodeps 包名 // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
或者
yum remove 包名
删除干净过后,我们开始安装新版本, 在官网提供 的最新版本是 5.6.15 ,(对于 php7 这种划时代的大更新我还是暂时不入坑了)
PHP: Hypertext Preprocessor
http://www.php.net/
官网只 提供了源码下载,是否意味着我们只能通过源码安装,如果你准备这么做,我不准备阻止你,可以参考
CentOS 下 php 的安装与配置 [ 源码安装 ]
但是,还记得我们前面安装的 remi 源吗,使用命令
yum list | grep php
你会发现 这个源 提供了 php5.6 的安装包,其他 php7 版本也有。
这就意味着我们可以直接使用 yum 命令安装
确认安装的 php 版本
# yum list --enablerepo=remi --enablerepo=remi-php56 | grep php
安装 php5.6
# yum install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-pecl-apcu php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof php-pdo php-pear php-fpm php-cli php-xml php-bcmath php-process php-gd php-common
php-opcache 及 php-pecl-apcu 会有效的提高 php 执行速度。需要什么模块就安装哪些模块,以后还可以再增加模块
确认 php 版本
# php -v
PHP 5.6.15 (cli) (built: Oct 29 2015 14:18:11)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
with Xdebug v2.3.3, Copyright (c) 2002-2015, by Derick Rethans
在测试之前看一下 php-fpm 服务是否启动 , 可重启一下
service php-fpm restart
将前面的 phpinfo.php 放到目录下测试一下
OK 了。
3.安装配置mysql
CentOS7 的默认数据库已经不再是 MySQL 了,而是 MariaDB 。 MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。开发这个分支的原因之一是:甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的 潜在风险,因此社区采用分支的方式来避开这个风险。 MariaDB 的目的是完全兼容 MySQL ,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。
如果你会使用 MariaDB ,可以按照下面的教程安装。
CentOS7 安装配置 LEMP ( Nginx/PHP-FPM 5.6/MySQL 5.5 )网站环境过程 | 老左博客
这里我还是到 mysql官网去下载最新的 yum 安装包。
MySQL : : MySQL Downloads
http://www.mysql.com/downloads/
进入,我们选择最下方的社区版进入,左侧导航栏选择
MySQL Yum Repository
MySQL : : A Quick Guide to Using the MySQL Yum Repository
http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/#repo-qg-yum-installing
官方配置文档在上面的链接,如果不想参考英文的,直接运行下面几条命令。
第一项复制下载链接,使用下面的命令安装
# wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
# rpm -ivh mysql57-community-release-el7-7.noarch.rpm
# yum install mysql-community-server
成功安装之后重启 mysql 服务
service mysqld restart
Mysql5.7 安装过程中,给 root 用户(此 root 用户和服务器的 root 的用户是两回事)生成了一个随机密码,通过下面的命令可以查看:
# sudo grep 'temporary password' /var/log/mysqld.log
如果你想修改密码,
# mysql -u root -p
系统会提示输入密码,输入上面查询到的密码即可,输入密码后,进入 mysql 配置,使用下面的命令修改密码
alter user 'root'@'localhost' identified by '123@#ZX';
注意命令后面的是有分号的, 最后面的单引号里的就是新密码,尽量使用复杂的密码,大小写数字符号的组合,密码过于简单,会提示错误,这也是较新版本新加入的特性。配置好后,输入 quit; 退出即可。
,另外还有一些安全相关的设置,可以使用下面这行命令去配置一下,它是一个向导,问你一些问题,你要给出答案,比如是否要设置 root 用户的密码, 密码是什么等等。使用命令:
mysql_secure_installation
Enter current password for root (enter for none):
解释:输入当前 root 用户密码,默认为空,直接回车。
Set root password? [Y/n] y
解释:要设置 root 密码吗?输入 y 表示愿意。
Remove anonymous users? [Y/n] y
解释:要移除掉匿名用户吗?输入 y 表示愿意。
Disallow root login remotely? [Y/n] y
解释:不想让 root 远程登陆吗?输入 y 表示愿意。
Remove test database and access to it? [Y/n] y
解释:要去掉 test 数据库吗?输入 y 表示愿意。
Reload privilege tables now? [Y/n] y
解释:想要重新加载权限吗?输入 y 表示愿意。
不行了,我已经眼花缭乱看不清字符,再写下去就要猝死了,睡一觉压压惊。
参考:
在阿里云 CentOS 服务器( ECS )上搭建 nginx + mysql + php -fpm 环境 - 宁皓网
CentOS7 安装配置 LEMP ( Nginx/PHP-FPM 5.6/MySQL 5.5 )网站环境过程 | 老左博客
centos7 下 yum 安装 mysql
修改 MySQL 数据库中 root 用户的密码及访问权限
CentOS7 安装 MYSQL5.7.7_ 百度文库