樹莓派使用apt-get安裝配置Nginx+PHP7+MySQL(MariaDB)附帶部分細節
最近使用樹莓派搞定了一個小專案,現在樹莓派閒置了,正好拿來做一個小型Web伺服器進行功能測試。沒想到配置的過程比我想象的複雜,好多小細節是用雲伺服器的時候沒遇見過的。我已經嘗試寫的很簡潔了,各位可以根據需要有選擇的食用。
0.環境說明
- 裝置:樹莓派Raspberry Pi 3b
- 映象:raspbian-stretch-lite (2017-11-29)
- 閘道器:普通路由器NETGEAR R6220
- 接入方式:有線接入
1.配置系統
- 燒錄工具:Win32DiskImager
- 燒錄完成後在boot分割槽建立一個名稱為”ssh”的檔案,用記事本建立,沒有後綴名。
- 初次登入使用者名稱
pi
raspberry
,修改密碼sudo passwd pi
。 - (自選)安裝編輯工具vim:
apt-get install vim
。 - 更新軟體庫並更新軟體
apt-get update
和apt-get upgrade
。 - 個人建議全程使用root許可權安裝軟體。
2.安裝Nginx
我使用的映象竟然預裝了Apache2,我都懷疑我用的是不是lite版。可能是我沒什麼見識吧。我不喜歡用這個,所以我將其完整刪除了。參考shell如下:
apt-get remove --purge apache* -y
apt-get autoremove --purge -y
安裝Nginx參考shell如下:
apt-get install nginx
Nginx的配置先放一下,全部安裝之後講。
3.安裝PHP7及其部分外掛
如果使用apt-get直接安裝,預設安裝的是5.6版本的php,如果希望安裝PHP7,參考以下shell:
apt-get install software-properties-common
add-apt-repository ppa:ondrej/php
apt-get update
apt-get install php7.0 php7.0-fpm php7.0-mysql php7.0-common
- 前兩行是在安裝php7的ppa源
- 更新源列表後才可安裝PHP7(PHP7.0和PHP7.1通用)
- 最後一行安裝了PHP7.0主體,與Nginx對接的php7.0-fpm外掛,與mysql對接的php7.0-mysql外掛,常用函式工具php7.0-common外掛。
PHP的配置也有點複雜,放在後面講。
4.安裝MySQL(MariaDB)
使用apt-get命令安裝的MySQL預設是MariaDB發行版,我不是很會改,貌似只能編譯安裝才能避免這個問題。我比較懶,只能接受了。還好差別不大。
安裝MySQL(MariaDB)的shell命令參考如下:
apt-get install mysql-server mysql-client
5.配置Nginx+PHP7+MySQL(MariaDB)
5.1.重啟服務shell
/etc/init.d/nginx restart
/etc/init.d/php7-fpm restart
service mysql restart
Nginx和php-fpm也可以用service重啟,但是。。。我不習慣
5.2.配置php-fpm
此處需要選擇Nginx連線到php服務的形式,tcp模式或者socket模式。
首先要找到www.conf
檔案,這個檔案不好找,不同的平臺會導致檔案位置不同。
我的檔案位置在/etc/php/7.0/fpm/pool.d
,網上的教程還有在etc/php-fpm.d
的。
編輯www.conf
檔案參考:
vim /etc/php/7.0/fpm/pool.d/www.conf
找到引數listen = /run/php/php7.0-fpm.sock
如果引數對應的是XXXX.sock說明php-fpm是通過socket模式與Nginx聯絡的。
如果引數對應的是127.0.0.1說明php-fpm是通過socket模式與Nginx聯絡的。
可以根據自己的需要進行修改,請記住該引數,這將會在配置Nginx時用到。
5.3.配置Nginx
不知道為啥,apt-get安裝出來的Nginx比yum安裝出來的配置檔案寫的更分散,各種include
正常情況下配置檔案nginx.conf
就可以了,但是我的平臺上nginx.conf
檔案中引入了sites-enabled
資料夾中的全部配置檔案,這就很。。。煩
修改配置檔案nginx.conf
參考:
#在http{}內有
#include /etc/nginx/conf.d/*.conf;
#include /etc/nginx/sites-enabled/*;
#我建議修改為
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
以default
檔案為模版,在sites-enabled資料夾下建立網站配置檔案,shell參考如下:
cp default my.conf
vim my.conf
配置站點資訊,參考如下:
#個人建議在server{}中刪除root和index
location / {
root /home/www;
index index.php index.html;
try_files $uri $uri/ =404;
}
location ~\.php$ {
root /home/www;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;#socket mode
#fastcgi_pass 127.0.0.1:9000;#tcp mode
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
注意!!注意!!
fastcgi_pass
一定要對應我上述的php-fpm連線方式,如果是tcp模式,請修改為對應的地址和埠。否則會出現502 Bad Gateway
。
Tip:
若測試時出現404 Not found
,一般情況都是root對應的路徑設定錯誤。
若測試時出現502 Bad Gateway
,一般情況都是fastcgi_pass對應的模式設定錯誤。
在配置後儲存配置檔案,在root對應的資料夾下建立測試檔案,重啟Nginx,嘗試使用主機的IP訪問。
建議先使用<?php phpinfo();?>
進行測試,若不成功。。。請自習加油調整配置
Nginx的配置可以參考我的另一篇文章:http://blog.csdn.net/qq_36731677/article/details/77376140
5.4.配置MySQL(MariaDB)
我把我遇到的問題和解決方案都分條寫在下面了,可有選擇性的食用。
- php連線mysql失敗:安裝php7.0-mysql外掛,在mysql內分配正確的使用者名稱和許可權(請自行百度)。
- shell登入mysql:
mysql -u root -p
預設無密碼,直接回車。 - 允許遠端連線:在mysql內執行命令,參考
UPDATE mysql.user SET host=% WHERE user='root';FLUSH PRIVILEGES;
- 遠端連線發生100061錯誤:
- 編輯
my.ini
檔案(在MariaDB中為my.cnf
,我的在/etc/mysql
資料夾中,然後檔案告訴我它直接引入了兩個檔案,淦) - 找到
[mysqld]
欄位(不是[mysql]欄位)(在MariaDB中需要在/etc/mysql/mariadb.conf.d
資料夾中的50-server.cnf
中找到) - 修改其中的bind-address為
bind-address = 0.0.0.0
- 儲存並重啟mysql服務後生效
- 編輯
完結
經過這一波折騰後,我的小型站點就可以在樹莓派上運行了,感覺還是很美滋滋的。
過一段可能會考慮在樹莓派上安裝一個NAS服務,充分發掘其價值。