LAMP環境部署物聯網項目

今天來在LAMP環境下搭建一個PHP項目,開始以前,先來普及下物聯網常識:php

物聯網,即Internet of Things,簡寫IOT。讓全部能行使獨立功能的普通物體實現互聯互通的網絡,經過物聯網能夠用中心計算機對機器、設備、人員進行集中管理、控制,實現物物相連。近幾年物聯網在運輸、物流、健康醫療、智能環境(家庭、辦公、工廠)等領域都在迅速發展,前景打好。

B哥最近研究一個物聯網項目:基本功能就是要在web網站和手機app端實時監控硬件上發來的數據,用於分析、集中管理與控制,硬件是基於ARM的,web端是用php開發的,基本功能能夠跑起來,如今主要在這基礎上實現本身的功能。上一節B哥已經在雲服務器上搭建好LAMP環境(linux上安裝LAMP筆記),接下來就要把web項目部署好服務器上。遇到了不少問題,在此一一記錄。html

image

其中項目代碼結構以下:前端

image

先把項目傳到服務器上,而後解壓:java

cd /var/www/html
unzip AdminIOT
#先把目錄下文件權限改成777
chmod -R 777 AdminIOT

用如下命令查看httpd、php、mariadb的版本:python

rpm -qa|grep -P "httpd|php|maria"

分別爲2.4.六、5.4.1六、5.5.56mysql

image

配置apache服務器的時候httpd-vhosts.conf文件在/usr/share/doc/httpd-2.4.6目錄下linux

(windows上好像直接在conf/extra/下),web

因而在/etc/httpd/conf/httpd.conf中加入:面試

include /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf,spring

結果啓動時報錯了。因而就把

/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf文件複製到/etc/httpd/conf/extra目錄下:

#建立目錄
mkdir -p /etc/httpd/conf/extra
#複製
cp /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf /etc/httpd/conf/extra

而後在extra下的httpd-vhosts.conf中添加以下配置:

  • DocumentRoot 爲項目代碼路徑;
  • ServerName 服務別名,這裏設置爲域名,可是得在host文件裏配置對應的IP,IP即爲當前節點IP;
<VirtualHost *:80>
   ServerName www.mysmallsoup.com
   DocumentRoot "/var/www/html/AdminIOT/public"
   DirectoryIndex index.php
   <Directory "/var/www/html/AdminIOT/public">
       AllowOverride All
       Require all granted
       Options all
   </Directory>
   ErrorLog "/var/log/httpd/dummy-host2.example.com-error_log"
   CustomLog "/var/log/httpd/dummy-host2.example.com-access_log" common
</VirtualHost>

image

而後在http.conf配置文件中包含httpd-vhosts.conf文件:

cd /etc/httpd/conf
vim httpd.conf
#打開文件後在文件末尾加入如下配置:
Include conf/extra/httpd-vhosts.conf

image

而後將域名綁定IP:

vim /etc/hosts

加入IP 域名,以下:

120.79.147.88 www.mysmallsoup.com

而後從新啓動httpd服務器:

systemctl restart httpd

注:若是直接在windows上用域名訪問,得在windows的host里加IP 域名對應關係,可是加了之後訪問會報以下錯,由於域名得先備案才能用。因此下面都用IP訪問。

image

而後在本地windows瀏覽器裏訪問http://120.79.147.88:80地址,報錯:

date(): It is not safe to rely on the system's timezone settings:

image

而後在查到:

實際上,從 PHP 5.1.0 ,當對使用date()等函數時,若是timezone設置不正確,在每一次調用時間函數時,都會產生E_NOTICE 或者 E_WARNING 信息。而又在php5.1.0中,date.timezone這個選項,默認狀況下是關閉的,不管用什麼php命令都是格林威治標準時間,可是PHP5.3中好像若是沒有設置也會強行拋出了這個錯誤的,解決此問題,只要本地化一下,就好了。

而咱們使用的是PHP5.4版本,而後在php.ini文件中加入時區的配置:

vim /etc/php.ini#加入以下配置:date.timezone = "Asia/Shanghai"

image

加入之後,保存退出,從新啓動apache服務,刷新頁面,錯誤就解決了。

image

到這一步,說明項目部署流程已經打通,可是如今須要登陸,那麼確定要在數據庫裏面先存入用戶名密碼等一些數據。接下來,先給數據庫裏導入些初始化數據。

數據庫導入數據:

先從新啓動數據庫:

systemctl restart mariadb

而後試着在本地windows上用Navicat數據庫管理工具導入sql腳本,用於數據庫的初始化(建庫、數據插入等),我習慣性的把端口寫爲3306(數據庫默認端口),而後去鏈接,發現報錯了:

image

而後去查看3306端口是否監聽:

netstat -anp | grep 3306

查不到東西,說明3306端口沒有監聽,這就奇怪了。而後登錄數據庫:

mysql -uroot -p數據庫密碼

登錄進去查看數據庫端口:

show variables like 'port';

image

發現查到的端口居然是0,而後又查了資料,發現是啓動數據庫的時候加了skip-networking致使的,啓動時用了以下命令:

mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

--skip-networking=0表示監聽配置端口,默認監聽3306,等於1或者--skip-networking不賦值表示跳過端口監聽,此時監聽0,網絡不可訪問數據庫,只能數據庫節點訪問。能夠經過如下命令查看:

show variables like 'skip_networking';

image

發現是ON,說明開啓了skip_networking,接下來咱們要關掉它。

查看mysql進程:

ps -ef | grep mysql

[圖片上傳中...(image-3ac06c-1571321042895-17)]

而後殺掉進程,從新啓動數據庫:

kill 12080
mysqld_safe --user=mysql --skip-grant-tables --skip-networking=0 &

而後再來查看3306端口是否監聽:

netstat -anp | grep 3306

image

發現端口正常監聽,而後登錄數據庫,查看:

image

發現port爲3306,skip_networking爲OFF,此時再在windows上鍊接數據庫,就ok了。

鏈接上數據庫後,就能夠導入sql文件了:

image

導入之後,打開剛纔的web登錄頁面,輸入用戶名和密碼,發現驗證碼圖片看不見:

image

而後去看運行日誌:

cd /var/www/html/AdminIOT/runtime/log/201806
tailf 10.log

而後刷新驗證碼,報錯Call to undefined function Thinkimagecreate()

image

而後查看以下的說法:

在php中imagecreate函數是一個圖形處理函數,主要用於新建一個基於調色板的圖像了,而後在這個基礎上咱們能夠建立一些圖形數字字符之類的,但這個函數須要GD庫支持,若是沒有開啓GD庫使用時會提示Call to undefined function imagecreate()錯誤。

那就試着安裝一下GD庫吧,執行yum安裝gd命令,而後從新啓動apachce服務以使安裝後的GD庫生效。

yum -y install php-gd
systemctl restart httpd

而後刷新頁面,驗證碼就能夠正常顯示了。登錄進去之後,又報錯了:Call to undefined function thinkmb_strlen()。

image

網上有人說,遇到上述錯誤,是未開啓php_mbstring拓展,即找到php.ini裏的

;extension=php_mbstring.dll把前面的;去掉,可是找了發現沒有這個擴展配置,多是由於版本較高的緣由。在/etc/php.d目錄下也沒找到此擴展,而後就用yum安裝一個吧,而後重啓apache服務:

yum install -y php-mbstring
systemctl restart httpd

重啓之後登陸頁面後這個錯誤就沒了,可是又報另外一個錯誤:

could not find driver

image

而後安裝php-mysql,安裝好後,重啓apache服務:

yum install php-mysql.x86_64
systemctl restart httpd

從新登陸頁面,這個錯誤也過去了。又報另外一個錯誤:

SQLSTATE[28000] [1045] Access denied for user 'iotadmin'@'localhost' (using password: YES)。

image

而後登錄數據庫,受權iotadmin用戶訪問權限:

grant all privileges on adminiot.* to 'iotadmin'@'localhost' identified by 'iotadmin';
flush privileges;

執行完之後,再次刷新頁面,報錯就過去了。接下來的又是另外一個錯,錯誤以下圖:

image

進後臺去看運行日誌10.log,報錯以下:

cd /var/www/html/AdminIOT/runtime/log/201806/
tailf 10.log

image

找到代碼Base.php的198行,以下:

image

代碼報錯:Arbitrary expressions in empty are allowed in PHP 5.5 only less,

大概意思就是說「不一樣類型的表達式用empty判空只有PHP5.5才」,而服務器上安裝的是PHP5.4版本,因此就報這個錯。這裏不妨換一種方式寫,只要邏輯是同樣的。那就改爲了這樣,原來的寫法先註釋掉。

image

而後把文件替換到服務器對應路徑下,重啓apache服務,刷新頁面,一切OK。

image

到這裏web項目就正常跑起來了。一路走下來,步步是坑啊,作一下筆記,記錄一下坑,之後確定會用到的。



本公衆號免費提供csdn下載服務,海量IT學習資源,若是你準備入IT坑,勵志成爲優秀的程序猿,那麼這些資源很適合你,包括但不限於java、go、python、springcloud、elk、嵌入式 、大數據、面試資料、前端 等資源。同時咱們組建了一個技術交流羣,裏面有不少大佬,會不定時分享技術文章,若是你想來一塊兒學習提升,能夠公衆號後臺回覆【2】,免費邀請加技術交流羣互相學習提升,會不按期分享編程IT相關資源。


掃碼關注,精彩內容第一時間推給你

image

相關文章
相關標籤/搜索