post | sidebar | footer

2014年9月27日 星期六

架設 nginx + php-fpm + MariaDB 於Linux Mint 17 上的筆記

Linux Mint 一直是我很喜歡的發行版之一,除了對我這個在 Windows 接觸多年的人來說相當親切,也因為是基於 Ubuntu 的發行版,讓人親切度更高。雖然 Linux Mint 可能不是架站最好的選擇,選擇 CentOS 可能更好,但對於 apt 指令的熟悉一直是讓我難以習慣 CentOS 的理由。隨然這也是藉口。

平常在用的 HTTP Server 是 nginx ,過去都架設在 Ubuntu 上,靠著 Digital Ocean 網站的詳細教學到也摸出一點心得。想必裝在 Linux Mint 上大致上也差不多,所以也來個依樣畫葫蘆,由於是筆記,所以多少會寫得很顛三倒四。加上本人對 Linux 不夠熟悉,內容若有謬誤還請多多指教。 我使用的 Linux Mint 為 Linux Mint 17 「Qiana」。 Linux Mint 的代號是依照英文字母開頭的順序去取,每一個代號都是女性名稱,並且以a結尾。這一版17版叫做Qiana,上一個版本16版為Petra。預計今年11月推出的17.1版為Rebecca。所以17.1的下一版一定是S開頭a結尾的女性名字。Linux Mint 17 基於 Ubuntu 14.04 LTS (Trusty Tahr),於今年5月31日發表。由於基於Ubuntu的長期支援版本,這一版Linux Mint 17也是長期支援版本,原廠會提供技術支援與更新至2019年4月。如果不是那麼愛變更版本的人,Linux Mint 17一套可以撐5年,加上可免費取得,實在很划算。

Linux Mint 的安裝過程就不說了。而 Linux Mint 也和 Ubuntu 一樣,有多種桌面系統的分支。甚至對應媒體採訪需求,還具備了 no-codecs 的分支。我選擇的是 Cinnamon no-codecs (32-bit) 版,坦白說有無 codecs 只是 100MB 的差別。桌面系統儘管不同,核心是一樣的。安裝過程也不會有太大變化。

至於為什麼選擇nginx + php-fpm + MariaDB,而不是一般的Apache + php + MySQL,這也只是個人的喜好,MariaDB為MySQL的同源表親,是最近很紅的資料庫系統,據說與MySQL的相容性很高,這點讓我很想玩玩看。

再次說明,內容純屬筆記,我只是留個記錄,方便有需要的時候擷取。

首先是安裝 nginx


sudo apt-get update
sudo apt-get install nginx



接著是 MariaDB

sudo apt-get install mariadb-server

安裝過程中需要設定 root 密碼(不可空白),另一個問題按Yes就可以了

確認一下 MariaDB 運作情況,順便看看版本。
sudo service mysql status

然後進行安全安裝程式
sudo mysql_secure_installation

首先要輸入 MariaDB 的root 密碼。

接下來會問是否更改 root 密碼,不用改密碼就輸入「N」然後ENTER,接下來分別會問:

  • 是否刪除 anonymous(匿名) 使用者帳戶。
  • 是否不允許遠端超級用戶登錄
  • 是否刪除測試資料庫並接駁它
  • 立刻重新載入權限表格

這幾個問題通通Yes過去或ENTER過去就行。

接著安裝PHP
sudo apt-get install php5-fpm php5-mysql

為了更好的安全性,我們需要一個小設定
sudo nano /etc/php5/fpm/php.ini

接著用Ctrl + w 進入搜尋功能,尋找「cgi.fix_pathinfo」

預設為 cgi.fix_pathinfo=0
需改為 cgi.fix_pathinfo=1
打完存檔(Ctrl+o)離開(Ctrl+x)。

php設定結束,將服務重新啟動。
sudo service php5-fpm restart

接著修改 nginx 設定以對應 php-fpm
sudo nano /etc/nginx/sites-available/default

(進入修改前記得備份default這個檔案)
將 index index.html index.htm; 這一行
改成 index index.php index.html index.htm;

將 server_name localhost; 裡的 localhost 改成自己的 IP 或申請的網址(隨便打點什麼也OK)

接著將這部分加入(將原檔中該行前面的 #號 刪除也行)
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
然後在「location ~ \.php$ {」與關門的「}」之間加入下列幾行
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;

打完存檔,重新啟動 nginx
sudo service nginx restart

如果要測試php是否正確啟動,可以用知名的phpinfo函數試試。
剛剛的default檔當中提到,nginx的網頁目錄為/usr/share/nginx/html/
所以我們要在這麼目錄裡丟下一個含有phpinfo函數的php檔。
sudo nano /usr/share/nginx/html/info.php

在空白檔案中貼上


<?php
phpinfo();
?>

存檔退出

打開瀏覽器,在網址列輸入「http://(你的IP或網址)/info.php)」
如果可以看到php的各種除錯訊息與Server資訊,就表示php可正常運作。
當然,為了安全起見,這個檔案確認可運作後一定要迅速移除,以免有心人掌握你的伺服器情報。

sudo rm /usr/share/nginx/html/info.php


至此, nginx + php-fpm + MariaDB 架設完畢


"Another Note"

sudo apt-get install php5 php5-memcache memcached build-essential
sudo pecl install memcache


sudo apt-get install phpmyadmin
sudo ln -s /usr/share/phpmyadmin/ /usr/share/nginx/html/
sudo service nginx restart

架設Wordpress最新中文版

cd ~
wget http://tw.wordpress.org/latest-zh_TW.tar.gz
tar xzvf latest.tar.gz

mysql -u root -p
CREATE DATABASE (資料庫名);
CREATE USER (使用者帳號)@localhost IDENTIFIED BY '(使用者密碼)';
GRANT ALL PRIVILEGES ON (資料庫名).* TO (帳號)@localhost;
FLUSH PRIVILEGES;
exit

sudo apt-get update
sudo apt-get install php5-gd libssh2-php

cd ~/wordpress
cp wp-config-sample.php wp-config.php
nano wp-config.php

. . .
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpressuser');

/** MySQL database password */
define('DB_PASSWORD', 'password');
. . .


sudo mkdir -p /var/www/html
sudo rsync -avP ~/wordpress/ /var/www/html/
cd /var/www/html/
sudo chown -R (Linux帳號):www-data /var/www/html/*
mkdir wp-content/uploads
sudo chown -R :www-data /var/www/html/wp-content/uploads

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/wordpress
sudo nano /etc/nginx/sites-available/wordpress

server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

root /var/www/html;
index index.php index.html index.htm;

server_name your_domain.com;

location / {
# try_files $uri $uri/ =404;
try_files $uri $uri/ /index.php?q=$uri&$args;
}

error_page 404 /404.html;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}


sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

sudo rm /etc/nginx/sites-enabled/default

sudo service nginx restart
sudo service php5-fpm restart

沒有留言:

張貼留言