阿里雲( 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-7.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_ 百度文庫