標籤:

新系統(ubuntu)搭建php7.1+nginx+mongodb3.2線上環境

準備

先更新本機內置的程序。

sudo apt-get updatesudo apt-get upgrade

再判斷系統是否內置了add-apt-repository命令,如果沒有執行下列命令安裝

sudo apt-get install software-properties-common

git

安裝一下git程序,很多地方會用到

sudo apt-get install git

設置一下自己的git名字和郵箱

git config --global user.name "你的名字或昵稱"git config --global user.email "你的郵箱"

php

添加最新php的源,然後安裝php

sudo add-apt-repository ppa:ondrej/phpsudo apt-get updatesudo apt-get install php7.1 php7.1-common php7.1-fpm php7.1-dev sudo apt-get install php7.1-mbstring php7.1-xml

安裝結束之後就可以執行php -i命令查看到php-cli的信息

不過要配合nginx的話,需要用php-fpm來管理php的進程。

service php7.1-fpm startservice php7.1-fpm stopservice php7.1-fpm restart

nginx

直接安裝nginx

sudo apt-get install nginx

nginx的操作命令如下:

service nginx startservice nginx stopservice nginx restart

查看nginx使用的config配置文件或者軟重啟的命令是

nginx -tnginx -s reload

一般配置文件在/etc/nginx目錄下。

不過要配置一個新的網站,不需要在nginx.conf里添加,只需要在sites-enabled文件夾下加一個對應文件即可(文件名隨意)

cd /etc/nginx/sites-enabledtouch demo

上面的demo文件是隨便命名,用vi打開

vim demo

然後添加下面的內容

server { listen 80; server_name demo.com; root /home/www/demo/public; index index.html index.htm index.php; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass unix:/run/php/php7.1-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }}

解釋一下上面的配置:

  1. 獨立的一個伺服器配置需要用server{}包裹起來
  2. listen 80表示監聽80埠,也就是http訪問的默認埠,其它埠在瀏覽器上需要輸入埠號。
  3. server_name表示綁定的是哪個域名。
  4. root表示該域名訪問到路徑對應的實際文件夾
  5. index表示域名的path為空的時候對應訪問哪個文件,默認都是index.html、index.htm和index.php
  6. location /這裡是對所有路徑做路由重寫,裡面的try_files $uri $uri/ /index.php?$query_string;是laravel框架的路徑重寫配置。
  7. location ~ .php$是指訪問所有後綴名帶.php的路徑時候,需要執行的操作,這裡也就是配置php的fastcgi
  8. fastcgi里的最重要部分是fastcgi_pass,它代表nginx伺服器如何與php通信,這裡的unix:/run/php/php7.1-fpm.sock;是php7.1-fpm啟動後生成的套接字文件,可以和nginx通信。

mongodb

導入mongodb的公鑰

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

看一下自己的系統版本是多少

cat lsb-release | grep "description" -i

如果是16.x的話執行

echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

如果是15或者是14的話執行

echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

安裝mongodb

sudo apt-get updatesudo apt-get install -y mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools

安裝結束之後就能使用mongodb的server和本地shell了,不過先要配置一下。

默認配置文件是/etc/mongod.conf

storage: dbPath: /var/lib/mongodb journal: enabled: truesystemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.lognet: port: 27017 bindIp: 0.0.0.0#security: #authorization: "enabled"

這裡的配置解釋如下:

  1. storage代表資料庫存儲在硬碟的地方,所以dbPath這個路徑需要注意許可權設置,讓mongdb有許可權可讀可寫。
  2. systemLog代表的是mongodb日誌存放配置。
  3. net下的port代表mongodb的訪問埠,默認是27017,bindIp如果不設置0.0.0.0,那麼非本機無法訪問。
  4. security和它下面的都加了#號注釋掉,這個是開啟用戶名和密碼驗證,暫時不開啟。

mongodb的操作命令如下:

service start mongodservice stop mongodservice restart mongod

先啟動mongod,然後輸入mongo命令看是否能連接到本機mongodb伺服器,如果不能,表示mongodb server沒有正常啟動,注意排查dbPath等路徑的許可權,例如可以設置資料庫文件的owner

sudo chown -R mongodb:mongodb /var/lib/mongodb

mongo命令啟動shell之後,可以設置一下資料庫的用戶名密碼

創建root級的超級用戶,用戶名密碼可更改

use admindb.createUser({ user: "root", pwd: "123456", roles: [ { role: "__system", db: "admin" } ]})

root級別的超級用戶一般不會直接使用,針對單個資料庫級別的管理員更實用。

假設資料庫名為demo,那麼創建一個demo的管理員

use demodb.createUser({ user: "demo", pwd: "abcdefg", roles: [ { role: "dbOwner", db: "demo" } ]})

配置完畢之後可以用

db.auth("demo","abcdefg")

來驗證一下是否設置成功,返回1就是成功

然後再編輯/etc/mongod.conf文件,刪除掉

#security: #authorization: "enabled"

之前的兩個#號,service mongod restart之後,安全用戶配置成功。

php擴展

ubuntu源里沒有php7.1-mongodb,所以需要自己安裝

sudo pecl install mongodb

這裡的pecl命令是安裝php7.1-dev的時候帶來的。

擴展會自動下載並安裝,不過開啟擴展需要手動添加一下。

php-cli的配置文件在/etc/php/7.1/cli/php.ini

php-fpm的配置文件路徑和php-cli不同,/etc/php/7.1/fpm/php.ini

echo "
extension=mongodb.so"
| sudo tee /etc/php/7.1/cli/php.ini echo "
extension=mongodb.so"
| sudo tee /etc/php/7.1/fpm/php.ini

此時再重啟php-fpm,就可以正常看到phpinfo里有mongodb了。

composer

直接用php下載並安裝composer

php -r "copy("https://getcomposer.org/installer", "composer-setup.php");"php -r "if (hash_file("SHA384", "composer-setup.php") === "e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae") { echo "Installer verified"; } else { echo "Installer corrupt"; unlink("composer-setup.php"); } echo PHP_EOL;"php composer-setup.php --install-dir=/usr/sbin --filename=composerphp -r "unlink("composer-setup.php");"

安裝結束後輸入composer檢查是否安裝成功,其中安裝地址指定為/usr/sbin,也可以設置為其它地方。

項目代碼

直接通過git clone https……下拉代碼。

如果是laravel項目,需要進入項目之後,composer install一下。

並且配置好.env文件的環境,寫上資料庫賬號和密碼。

項目的完整路徑要在nginx的/etc/nginx/sites-enabled/demo里寫上,並加上自己想要訪問的域名。

結束之後軟重啟nginx

nginx -s reload

項目已經可以線上訪問了。

開機自動啟動

可以通過修改 /etc/rc.local文件來管理啟動項。

service mongodb startservice php7.1-fpm startservice nginx start

推薦閱讀:

PHP 浮點型與整型比較的小坑
檢測 PHP 應用的代碼複雜度
手把手編寫自己的 PHP MVC 框架實例教程
如何在Mac上優雅的開發PHP項目?
如何看待Facebook 的 HHVM 引擎將轉用 Hack 語言?

TAG:PHP | Ubuntu |