新系統(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; }}
解釋一下上面的配置:
- 獨立的一個伺服器配置需要用server{}包裹起來
- listen 80表示監聽80埠,也就是http訪問的默認埠,其它埠在瀏覽器上需要輸入埠號。
- server_name表示綁定的是哪個域名。
- root表示該域名訪問到路徑對應的實際文件夾
- index表示域名的path為空的時候對應訪問哪個文件,默認都是index.html、index.htm和index.php
- location /這裡是對所有路徑做路由重寫,裡面的try_files $uri $uri/ /index.php?$query_string;是laravel框架的路徑重寫配置。
- location ~ .php$是指訪問所有後綴名帶.php的路徑時候,需要執行的操作,這裡也就是配置php的fastcgi
- 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.confstorage: 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"
這裡的配置解釋如下:
- storage代表資料庫存儲在硬碟的地方,所以dbPath這個路徑需要注意許可權設置,讓mongdb有許可權可讀可寫。
- systemLog代表的是mongodb日誌存放配置。
- net下的port代表mongodb的訪問埠,默認是27017,bindIp如果不設置0.0.0.0,那麼非本機無法訪問。
- 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.iniecho "
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 語言?