阿里雲的雲服務器(ECS)能夠選擇多種操做系統,打算用它運行 Drupal 或者 WordPress ,你最好選擇 Linux 系統,這篇文章的演示是基於阿里雲的 CentOS 操做系統的服務器。咱們在上面搭建一個 nginx + mysql + php-fpm 的環境,這就是常說的 LNMP 。咱們不過多解釋什麼是什麼,而是着重講流程與方法,想了解具體的細節,去搜索下吧:)這個手冊是在阿里雲上測試的,不過應該也適用於其它使用 CentOS 系統的服務器。php
背景
寧皓網的《 CentOS:在阿里雲上運行網站 》這個課程裏面演示了在阿里雲服務器上搭建 AMP 環境,也就是 Apache + MySQL + PHP,而且介紹了 Linux 系統的基本的操做,還有文件目錄權限的問題。這些很是重要,能夠先看看。html
此次想用 Nginx 代替 Apache 服務器,寧皓網如今用的是 Apache 服務器,最近出了點問題。因此想更換服務器的系統,而且把 Web Server 換成 Nginx。順便也去學習一下環境的優化,還有打算把 memcache 也用上,也可能會加上 varnish ,我會把整個過程寫下來與大夥分享。下面開始第一步,建立一個阿里雲服務器的實例。mysql
建立服務器實例
建立一個服務器實例其實就是去購買一臺相應配置的雲服務器。註冊並登陸到阿里雲的網站,在 產品服務 裏選擇 雲服務器 ECS ,點擊頁面上的 當即購買。能夠 包年包月 的購買,也能夠 按量付費,也就是用多少花多少,不過這種方式不支持網站的備案。nginx
肯定後,能夠按須要去配置服務器,建議最初能夠選擇最低配置,由於後續升級也很是容易。選擇 CPU,內存,帶寬,不一樣的配置價格不一樣。你還要選擇 地域 ,也就是雲服務器所在的地方,目前只有 青島 與 杭州。再去選擇操做系統,這篇文章所作的測試用的是 CentOS 6.3 64 位。須要的話能夠再增長一塊數據盤,默認會帶一個系統盤,一共 20 G ,足夠咱們測試用了。web
點擊 當即購買,預覽一下所選的服務器,而後 提交訂單。sql
選擇支付方式,而後點擊 確認支付。數據庫
注意支付之後,可能會等一小會兒訂單才能生效。至少我是等了一下子,也多是由於我用的手機版的支付寶。支付成功之後,打開你的我的帳戶頁面,選擇 管理控制檯,在這裏,你能夠找到購買的雲服務器。雲服務器默認的 root(超級管理員) 用戶的密碼,會發送到你的手機上,你也能夠點擊 修改密碼,去修改 root 用戶密碼。apache
在這個界面,你還能夠 中止 或 重啓 去服務器。也能夠找到你的服務器的公衆的 IP 地址。我購買的這臺服務器地址是 218.244.147.196,使用這個地址配合 root 用戶和密碼,你可使用工具登陸到服務器,對它進行遠程管理,好比安裝軟件,修改設置,重啓服務等等。vim
遠程控制你的服務器
遠程控制 Linux 類型的系統的服務器,好比 CentOS 系統的服務器,通常不像 Windows 服務器那樣,使用圖形界面的遠程控制。咱們須要使用命令行工具,遠程鏈接到服務器,而後使用命令去控制服務器。Windows 用戶可使用 Putty ,Mac 用戶可使用系統自帶的終端工具。而後用 ssh 命令,鏈接到你的服務器。像這樣:centos
ssh root@218.244.147.196
@ 左邊的 root 是鏈接時使用的用戶的名字,@ 右邊的數字是你的服務器的 IP 地址。這行命令的意思就是,使用 root 用戶,登陸到 218.244.147.196 這臺服務器上。回車之後,會提示你輸入 root 用戶的密碼(這個密碼阿里雲會發送到你手機上)。
安裝 Nginx
想在 CentOS 系統上安裝 Nginx ,你得先去添加一個資源庫,像這樣:
vim /etc/yum.repos.d/nginx.repo
使用 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
應該會返回:
nginx is stopped (nginx 已中止)
再測試一下 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
服務啓動之後,你就能夠在瀏覽器上使用服務器的 IP 地址,或者指向這個地址的域名訪問服務器指定的目錄了。你會看到相似下面的這些文字。
Welcome to nginx! If you see this page, the nginx web server is successfully installed and working. Further configuration is required. For online documentation and support please refer to nginx.org. Commercial support is available at nginx.com. Thank you for using nginx.
配置 nginx 虛擬主機
安裝完 nginx 之後,第一件想到的事應該就是去建立虛擬主機,虛擬主機容許咱們在同一臺服務器上運行多個網站,咱們能夠爲不一樣的域名綁定不一樣的目錄,訪問這個域名的時候,會打開對應目錄裏面的東西。以前介紹過爲 Apache 服務器建立虛擬主機,下面來看一下爲 nginx 配置虛擬主機。先進入到 nginx 配置文件目錄:
cd /etc/nginx/conf.d
複製這個目錄裏的 default.conf ,複製之後的名字可使用你的虛擬主機名字。好比建立一個 nginx.ninghao.net 的虛擬主機。複製文件可使用 cp 命令,像這樣:
cp default.conf nginx.ninghao.net.conf
再去編輯一下這個複製之後的配置文件,可使用 vim 命令:
vim nginx.ninghao.net.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; } ... }
server_name 就是主機名,也就是跟這個虛擬主機綁定在一起的域名,我事先把 nginx.ninghao.net 指向了服務器,這個虛擬主機就是爲它準備的,因此,server_name 後面的東西就是 nginx.ninghao.net 。緊接着 server_name 下面能夠是一個 root,就是這個虛擬主機的根目錄,也就是網站所在的目錄。好比咱們要把 nginx.ninghao.net 這個網站的文件放在 /home/www/nginx.ninghao.net 下面,那麼這個 root 就是這個路徑。
而後去掉 location / 裏面的 root 這行代碼。再在 index 後面加上一種索引文件名,也就是默認打開的文件,這裏要加上一個 index.php ,這樣訪問 nginx.ninghao.net 就能夠直接打開 root 目錄下面的 index.php 了。稍後咱們再去安裝 php 。修改以後,看起來像這樣:
server { listen 80; server_name nginx.ninghao.net; root /home/www/nginx.ninghao.net; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { index index.php index.html index.htm; } ... }
這個配置文件先修改到這,稍後,咱們再回來繼續修改一下它。保存一下,按 esc ,輸入 :wp(保存並退出)。如今虛擬主機應該就可使用了。主機的域名是 nginx.ninghao.net,訪問它的時候,打開的是 /home/www/nginx.ninghao.net 這個目錄裏面的東西,你能夠在這個目錄下放點東西。
重啓 nginx 或者從新加載 nginx 可讓配置文件生效。
service nginx reload
如今,打開瀏覽器,輸入你爲虛擬主機設置的域名,看看是否能打開你指定的目錄裏的東西。
配置 php-fpm
要讓 nginx 可以執行 php 文件,須要去安裝一下 php-fpm,它直接包含在了 CentOS 資源庫裏,因此直接使用 yum 命令能夠安裝它:
yum install php-fpm
完成之後,能夠檢查一下 php-fpm 的運行狀態,使用 service 命令:
service php-fpm status
返回:
php-fpm is stopped(php-fpm 已中止)
啓動 php-fpm 一樣可使用 service 命令:
service php-fpm start
讓 nginx 能夠執行 php
如今咱們應該就可讓 nginx 去執行 php 了。不過你須要修改一下 nginx 的配置文件,以前咱們在配置虛擬主機的時候,建立了一個 nginx.ninghao.net.conf 的配置文件,須要去修改下 nginx 的這個配置文件,才能去執行 php 。使用 vim 命令去編輯它:
vim /etc/nginx/conf.d/nginx.ninghao.net.conf
注意你的配置文件不必定叫 nginx.ninghao.net.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 $document_root$fastcgi_script_name; include fastcgi_params; }
注意 root 那裏仍然是被註釋掉的,還有 SCRIPT_FILENAME 後面修改了一下,把 /scripts 換成了 $document_root 。保存並退出。而後從新啓動 nginx:
service nginx restart
測試是否能夠執行 php
如今,咱們已經安裝了 php-fpm,並修改了 nginx 的配置文件讓它能夠去執行 php,下面,咱們得去測試一下,可使用 php 的 phpinfo(); 函數,方法是在你的虛擬主機根目錄下面,建立一個 php 文件,命名爲 phpinfo.php,而後在這個文件裏輸入:
<?php phpinfo(); ?>
保存文件並退出。在瀏覽器裏打開剛纔建立的這個 php 文件。我這裏應該是 http://nginx.ninghao.net/phpinfo.php。打開之後,你應該能看到像下面這樣的界面,若是能,說明 nginx 已經能夠執行 php 了。
爲系統添加資源庫
前面咱們使用 yum 命令去安裝了一些東西,用起來很簡單,yum + 要安裝的東西 + install。 它實際上是一個資源包的管理工具,用它安裝東西的時候,會檢查這個東西所依賴的其它的東西,在安裝的同時,也會去安裝這些被依賴的東西。CentOS 自己帶了一些資源庫,但並非全部的東西都在這些資源庫裏,因此,咱們能夠給系統手工的添加一些資源庫,這樣使用 yum 命令,就能夠很方便的去安裝在資源庫裏的東西了。
在這裏能夠找到可用的資源庫:http://iuscommunity.org/pages/Repos.html ,你要根據本身的系統的版本去下載對應的資源庫,而後安裝在系統裏面。查看系統的版本能夠這樣作:
cat /etc/redhat-release
我這裏使用的是 CentOS 系統,因此返回了:
CentOS release 6.3 (Final)
說明我用的是 CentOS 6 ,而且是 64 位的,打開上面的資源庫地址,找到 Release Packages ,而後找到 CentOS 6 這個區域下面的連接,咱們用這個 epel 資源庫。打開這個地址之後,複製 Packages 下面的連接 epel-release-6-5.noarch 。而後回到咱們鏈接到服務器的終端工具,Windows 用戶應該用的是 putty 。用 cd 命令進入到一個目錄裏面,好比用戶的根目錄,能夠這樣:
cd ~
而後使用 wget 命令,把剛纔複製的連接裏的資源庫下載下來:
wget http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/epel-release-6-5.noarch.rpm
用 ls 命令能夠查看一下當前這個目錄下面的東西,你應該能夠看到 epel-release-6-5.noarch.rpm(也或者是你選擇要下載的資源庫)。下載好之後,去安裝一下:
rpm -ivh epel-release-6-5.noarch.rpm
查看一下系統裏面的資源庫:
yum repolist
你會看到 epel 這個資源庫,它就是咱們剛纔安裝的。系統裏的資源庫地址是在:/etc/yum.repos.d,在這裏,你一樣能夠找到 epel.repo。這樣咱們就可使用 yum 命令去安裝更多的東西了。
安裝 mysql
mysql 能夠管理網站用到的數據庫,WordPress 和 Drupal 也都支持 mysql 數據庫。因此咱們的 Web 運行環境裏,須要安裝一個 mysql 。以前咱們已經添加了資源庫,因此能夠直接使用 yum 命令去安裝 mysql :
yum install mysql-server
安裝完成後,使用 service 命令啓動 mysql 服務:
service mysqld start
而後咱們須要簡單配置一下 mysql ,默認安裝之後 mysql 的 root 用戶是沒有密碼的,對於生產環境來講,這確定是不行的,另外還有一些安全相關的設置,可使用下面這行命令去配置一下,它是一個嚮導,問你一些問題,你要 給出答案,好比是否要設置 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 表示願意。
安裝 php 擴展
如今,咱們有了能夠提供 web 服務的 nginx ,而且安裝了 php-fpm ,配置了 nginx 可讓它去執行 php ,也安裝了數據庫管理系統。不過在運行真正的網站的時候,咱們還須要爲 php 安裝一些額外的擴展,好比 處理 mysql 數據庫的 mysql 擴展,緩存功能的 apc 擴展,處理圖像的 gd 擴展等等。安裝它們一樣可使用 yum 命令。
yum install php-pecl-apc php-mysql php-gd php-mcrypt php-pear php-mbstring php-xmlrpc php-dom
上面安裝了一些 php 的擴展,若是你發如今安裝網站的時候提示須要安裝其它的擴展,一樣可使用 yum 命令去安裝。安裝完成之後,須要重啓一下 php-fpm :
service php-fpm restart
目錄與文件的權限問題
網站上面有些目錄或文件須要有寫入權限,這樣你得爲這些目錄和文件分配合適的權限,通常能夠把它們的擁有者設置成 php 和 nginx 使用的用戶,默認 nginx 的用戶就是 nginx ,而 php-fpm 使用的用戶默認是 apache。咱們能夠把它們改爲一個統一的用戶,能夠修改 php-fpm 的用戶爲 nginx 。你可使用下面的命令去查看一下 nginx 和 php-fpm 所使用的用戶名:
ps aux|grep php ps aux|grep nginx
修改所使用的用戶,能夠經過使用 nginx 和 php-fpm 的配置文件,nginx 的配置文件是: /etc/nginx/nginx.conf ,php-fpm 的配置文件是:/etc/php-fpm.conf,還有在 /etc/php-fpm.d/* 這個目錄裏的全部文件都是 php-fpm 的配置文件。默認這個目錄裏有一個 www.conf ,你能夠編輯這個文件來修改 php-fpm 所使用的用戶名稱。使用 vim 命令:
vim /etc/php-fpm.d/www.conf
打開文件之後你能夠搜索下關鍵詞 user 或 apache,輸入 :/user 或 :/apache ,會搜索到結果,按小 n 能夠繼續向下查找,按大 N 能夠向上查找。直到你看到:
user = apache
把它修改爲:
user=nginx
esc 退出,再輸入 :wq ,重啓下 php-fpm,這樣咱們的 nginx 服務器還有 php-fpm 會使用同一個用戶:nginx,你能夠把要能夠有寫入權限的目錄與文件的擁有者修改爲 nginx 就好了。可使用 chown 命令:
chown -R nginx 目錄名/文件名
總結
好來,如今咱們就已經擁有一臺 LNMP 環境的服務器了。這個操做手冊裏提供到的相關配置,還有不少能夠優化一下,好比 nginx 的配置文件,能夠針對 Drupal 來作一些優化。在後續的文章裏面,我會再詳細的去解釋一下這些配置文件的使用。
服務器 nginx php-fpm