阿里云(ECS)Centos服务器LNMP环境搭建

阿里云( ECS ) Centos7 服务器 LNMP 环境搭建

前言

第一次接触阿里云是大四的时候,当时在校外公司作兼职,关于智能家居项目的,话说当时俺就只有一个月左右的 php 后台开发经验(仍是由于无心中选修了一门电子商务的课程,要作课程设计逼迫出来的),由于公司没人接触事后台开发,因此我这个菜鸟就硬着头皮上了。刚开始入门我把精力放在公司业务功能实现上,所用的服务器环境是别人已经配置好的,就是把代码在本地写好,经过 ftp 上传到服务器目录,是用 postman 插件测试一下接口就好了,开发到最后阶段问题来了,由于是智能家居项目,对智能设备的数据的实时性要求很高,须要有一种推送机制当数据变化时及时推送给控制网关,而不能 让控制 网关一直轮询服务器数据是否发生变化,当时“年幼”, 懂不得 什么技术,百度了一下,最后选定了Comet :基于 HTTP 长链接的“服务器推”技术 方案,(这个方案如今想来不是很合适的,最合适应该是 MQTT 技术,当时这个不温不火,竟然没百度到),搭建 comet 服务,须要从新译 Nginx 服务器,并且是从源码编译安装,参考 Nginx Push Stream Module , 从那时才开始使用 Xshell 和 Putty 工具链接服务器,而后什么经验也没有, Linux 的基本操做命令也不知道,一顿百度和谷歌,乱起八糟的配置,结果仍是把平台搭建好了,如今想来,像搭建服务器环境这些东西仍是系统的整理一下比较好,否则用一次忘一次,百度到的文章也没本身亲历写的文章安心。故事讲完了,进入正题。php

首先你得有一个阿里云服务器,阿里云最近推出一个云翼计划 ,学生能用极低的几个选一台配置也是极低的 ECS 云服务器,手痒的我毫无犹豫入了一台,购买的时候选择的镜像是 Centos7_64bit (选择 centos 也是道听途说学到的经验),接下来就是要配置环境了,刚开始没经验使用的是 一键安装配置教程 这个已经知足基本要求了,至少我把目前给公司作的一个云平台放上去运行一切 OK 。可是这个毕竟定制化水平比较低,本身掌握从零配置仍是很须要的,因此接下来要一点 一点 配置了。永远记住最让人放心的配置方法就是参考官方文档(英语渣渣瞬间:smile:)。永远记住最让人放心的配置方法就是参考官方文档。永远记住最让人放心的配置方法就是参考官方文档
以我目前涉世不深的经验, Linux 下安装软件有两种方式:html

  1. 经过软件包管理器 rpm 或 yum 工具命令安装
  2. 下载源码编译安装

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 来安装配置软件,由于从源码安装配置软件至关复杂,没必要画蛇添足。因此本文大多采用第一种方式来安装软件。node

在正式安装配置以前,还得理解一个概念: yum 源,这个大概至关于 windows 或者手机系统里面的应用中心、软件市场之类的东西, Linux 系统添加 yum 源后就能够直接在线下载 rpm 安装包了。这里推荐几个经常使用的源: epel,remi,rpmforge , webtatic 。 这些源 自己也是一个 rpm 安装包(就像流氓 360 手机助手也是要下载安装同样),须要下载安装。下面提供这几个源的官方网站,(第三方下载地址也颇多,仍是官方最保险)mysql

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/linux

接下来就是安装 yum 源了,这里我只安装了 epel,remi ,在后面的安装配置 php 会用到。使用终端模拟器链接到服务器(最经常使用 Xshell 或者 putty, 这两个工具不会使用?百度咯, 毕竟苦逼程序员 ,本身动手,丰衣足食)。nginx

安装 epel (这个源貌似很重要,我看到不少源和软件包依赖这个源)打开上面对应的地址。在页面找到下图所示的介绍。程序员

 

这里我用的是 Centos7 系统,选择选择第一项,鼠标放在连接上,右键复制下载连接 ,
https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
接下来有两种选择,一是将这个rpm包下载到服务器 ( 是用 wget 命令或者下载到 本地经过 ftp 软件上传到服务器 ) 再用 rpm 命令或者 yum 命令安装,或者直接在线安装(直接在线安装的缺点是有时真心从服务器下载不了包)。web

 

# wget  https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -ivh  epel-release-latest-7.noarch.rpm

 

 或者直接sql

# 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_ 百度文库