阿里雲的雲服務器(ECS)可以選擇多種操作系統,打算用它運行 Drupal 或者 WordPress ,你最好選擇 Linux 系統,這篇文章的演示是基於阿里雲的 CentOS 操作系統的服務器。我們在上面搭建一個 nginx + mysql + php-fpm 的環境,這就是常說的 LNMP 。我們不過多解釋什么是什么,而是着重講流程與方法,想了解具體的細節,去搜索下吧:)這個手冊是在阿里雲上測試的,不過應該也適用於其它使用 CentOS 系統的服務器。
背景
寧皓網的《 CentOS:在阿里雲上運行網站 》這個課程里面演示了在阿里雲服務器上搭建 AMP 環境,也就是 Apache + MySQL + PHP,並且介紹了 Linux 系統的基本的操作,還有文件目錄權限的問題。這些非常重要,可以先看看。
這次想用 Nginx 代替 Apache 服務器,寧皓網現在用的是 Apache 服務器,最近出了點問題。所以想更換服務器的系統,並且把 Web Server 換成 Nginx。順便也去學習一下環境的優化,還有打算把 memcache 也用上,也可能會加上 varnish ,我會把整個過程寫下來與大伙分享。下面開始第一步,創建一個阿里雲服務器的實例。
創建服務器實例
創建一個服務器實例其實就是去購買一台相應配置的雲服務器。注冊並登錄到阿里雲的網站,在 產品服務 里選擇 雲服務器 ECS ,點擊頁面上的 立即購買。可以 包年包月 的購買,也可以 按量付費,也就是用多少花多少,不過這種方式不支持網站的備案。
確定后,可以按需要去配置服務器,建議最初可以選擇最低配置,因為后續升級也非常容易。選擇 CPU,內存,帶寬,不同的配置價格不同。你還要選擇 地域 ,也就是雲服務器所在的地方,目前只有 青島 與 杭州。再去選擇操作系統,這篇文章所做的測試用的是 CentOS 6.3 64 位。需要的話可以再增加一塊數據盤,默認會帶一個系統盤,一共 20 G ,足夠我們測試用了。
點擊 立即購買,預覽一下所選的服務器,然后 提交訂單。
選擇支付方式,然后點擊 確認支付。
注意支付以后,可能會等一小會兒訂單才能生效。至少我是等了一會兒,也可能是因為我用的手機版的支付寶。支付成功以后,打開你的個人賬戶頁面,選擇 管理控制台,在這里,你可以找到購買的雲服務器。雲服務器默認的 root(超級管理員) 用戶的密碼,會發送到你的手機上,你也可以點擊 修改密碼,去修改 root 用戶密碼。
在這個界面,你還可以 停止 或 重啟 去服務器。也可以找到你的服務器的公眾的 IP 地址。我購買的這台服務器地址是 218.244.147.196,使用這個地址配合 root 用戶和密碼,你可以使用工具登錄到服務器,對它進行遠程管理,比如安裝軟件,修改設置,重啟服務等等。
遠程控制你的服務器
遠程控制 Linux 類型的系統的服務器,比如 CentOS 系統的服務器,一般不像 Windows 服務器那樣,使用圖形界面的遠程控制。我們需要使用命令行工具,遠程連接到服務器,然后使用命令去控制服務器。Windows 用戶可以使用 Putty ,Mac 用戶可以使用系統自帶的終端工具。然后用 ssh 命令,連接到你的服務器。像這樣:
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