1. 程式人生 > >LAMP環境部署物聯網專案

LAMP環境部署物聯網專案

今天來在LAMP環境下搭建一個PHP專案,開始之前,先來普及下物聯網常識:

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

B哥最近研究一個物聯網專案:基本功能就是要在web網站和手機app端實時監控硬體上發來的資料,用於分析、集中管理與控制,硬體是基於ARM的,web端是用php開發的,基本功能可以跑起來,現在主要在這基礎上實現自己的功能。上一節B哥已經在雲伺服器上搭建好LAMP環境(linux上安裝LAMP筆記),接下來就要把web專案部署好伺服器上。遇到了很多問題,在此一一記錄。

其中專案程式碼結構如下:

先把專案傳到伺服器上,然後解壓:

cd /var/www/html
unzip AdminIOT
#先把目錄下檔案許可權改為777
chmod -R 777 AdminIOT

用以下命令檢視httpd、php、mariadb的版本:

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

分別為2.4.6、5.4.16、5.5.56

配置apache伺服器的時候httpd-vhosts.conf檔案在/usr/share/doc/httpd-2.4.6目錄下

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

於是在/etc/httpd/conf/httpd.conf中加入:

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

結果啟動時報錯了。於是就把

/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>

然後在http.conf配置檔案中包含httpd-vhosts.conf檔案:

cd /etc/httpd/conf
vim httpd.conf
#開啟檔案後在檔案末尾加入以下配置:
Include conf/extra/httpd-vhosts.conf

然後將域名繫結IP:

vim /etc/hosts

加入IP 域名,如下:

120.79.147.88 www.mysmallsoup.com

然後重新啟動httpd伺服器:

systemctl restart httpd

注:如果直接在windows上用域名訪問,得在windows的host里加IP 域名對應關係,但是加了以後訪問會報如下錯,因為域名得先備案才能用。所以下面都用IP訪問。

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

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

然後在查到:

實際上,從 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"

加入以後,儲存退出,重新啟動apache服務,重新整理頁面,錯誤就解決了。

到這一步,說明專案部署流程已經打通,但是現在需要登入,那麼肯定要在資料庫裡面先存入使用者名稱密碼等一些資料。接下來,先給資料庫裡匯入些初始化資料。

資料庫匯入資料:

先重新啟動資料庫:

systemctl restart mariadb

然後試著在本地windows上用Navicat資料庫管理工具匯入sql指令碼,用於資料庫的初始化(建庫、資料插入等),我習慣性的把埠寫為3306(資料庫預設埠),然後去連線,發現報錯了:

然後去檢視3306埠是否監聽:

netstat -anp | grep 3306

查不到東西,說明3306埠沒有監聽,這就奇怪了。然後登陸資料庫:

mysql -uroot -p資料庫密碼

登陸進去檢視資料庫埠:

show variables like 'port';

發現查到的埠竟然是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';

發現是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

發現埠正常監聽,然後登陸資料庫,檢視:

發現port為3306,skip_networking為OFF,此時再在windows上連線資料庫,就ok了。

連線上資料庫後,就可以匯入sql檔案了:

匯入以後,開啟剛才的web登陸頁面,輸入使用者名稱和密碼,發現驗證碼圖片看不見:

然後去看執行日誌:

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

然後重新整理驗證碼,報錯Call to undefined function Think\imagecreate()

然後檢視如下的說法:

在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 think\mb_strlen()。

網上有人說,遇到上述錯誤,是未開啟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

然後安裝php-mysql,安裝好後,重啟apache服務:

yum install php-mysql.x86_64
systemctl restart httpd

重新登入頁面,這個錯誤也過去了。又報另一個錯誤:

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

然後登陸資料庫,授權iotadmin使用者訪問許可權:

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

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

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

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

找到程式碼Base.php的198行,如下:

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

大概意思就是說“不同型別的表示式用empty判空只有PHP5.5才”,而伺服器上安裝的是PHP5.4版本,所以就報這個錯。這裡不妨換一種方式寫,只要邏輯是一樣的。那就改成了這樣,原來的寫法先註釋掉。

然後把檔案替換到伺服器對應路徑下,重啟apache服務,重新整理頁面,一切OK。

到這裡web專案就正常跑起來了。一路走下來,步步是坑啊,做一下筆記,記錄一下坑,以後肯定會用到的。



本公眾號免費提供csdn下載服務,海量IT學習資源,如果你準備入IT坑,勵志成為優秀的程式猿,那麼這些資源很適合你,包括但不限於java、go、python、springcloud、elk、嵌入式 、大資料、面試資料、前端 等資源。同時我們組建了一個技術交流群,裡面有很多大佬,會不定時分享技術文章,如果你想來一起學習提高,可以公眾號後臺回覆【2】,免費邀請加技術交流群互相學習提高,會不定期分享程式設計IT相關資源。


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

相關推薦

LAMP環境部署聯網專案

今天來在LAMP環境下搭建一個PHP專案,開始之前,先來普及下物聯網常識: 物聯網,即Internet of Things,簡寫IOT。讓所有能行使獨立功能的普通物體實現互聯互通的網路,通過物聯網可以用中心計算機對機器、裝置、人員進行集中管理、控制,實現物物相連。近幾年物聯網在運輸、物流、健康醫療、智慧環境

源碼編譯安裝LAMP環境部署Discuz

liunx技術分享1)源碼編譯apryum install -y pcre-devel gcc openssl-devel 安裝編譯過程需要的依賴包cd /usr/src 切換到此目錄wget -c http://archive.apache.org/dist/apr/apr-1.4.5.tar.gz tar

LAMP環境部署:Apache源碼安裝+MySQL二進制安裝+PHP源碼安裝+Nginx源碼安裝

aca org 依賴 關系 -a 創建 mbstring 環境部署 user Apache 版本:2.2.27 MySQL 版本:5.5.54-linux2.6-x86_64PHP 版本:5.3.27一、源碼安裝Apache1、首先安裝上傳工具2、上傳LAM

雲程式設計和軟體環境聯網的關鍵技術

1、雲和網路平臺的特性 1、1雲的功能和平臺的特性 1、2 網格和雲的公共傳統特性 1、2、1 工作流在真實的應用中工作流按需連線多個雲和非雲服務。 1、2、2 資料傳輸在商業雲中(較少程度上,在商業雲之外)資料傳輸的成本(時間和金錢)經常被認為是使用雲的一個難點。如果商

PHP Lamp環境部署

首先,第一步選擇雲伺服器:        工欲善其事必先利其器,想要搭建網站伺服器是必不可少的,當下比較流行的雲伺服器有阿里雲、騰訊雲、百度雲等等...我選的是百度雲,因為個人部落格網站訪問量不會很高,所以配置上選用個人使用者的配置就可

從端到雲——工業聯網專案全棧快速開發實踐

從去年伊始,國內外一些大公司都先後推出了面向物聯網領域的平臺產品,如微軟 Azure 平臺的 IoT Hub、阿里雲平臺的物聯網開發套件、百度雲平臺的物接入 IoT Hub、物解析 IoT Parser 和物管理 IoT Device 等等,但上述公司的產品從平

我的聯網專案(十三) 2.0平臺架構體系

準確的來說,1.0平臺的單體應用架構沒有網際網路專案架構一說,傳統的MVC開發模式,簡單的小作坊操作流程,對於每個開發人員來說,只需要關注業務的功能模組實現而已。在1.0平臺運營的半年時間裡面,除了業務本身的需求爆炸性的增長,要求開發的迭代迅速,並且每次升級都不應該傷筋動骨,

linux下安裝LAMP環境部署lamp下mysql的遠端連線

一.linux下LAMP(linux+apache+mysql+php)環境安裝   這個網上有挺多教程,我用的是一鍵安裝LAMP(oneinstack軟體),教程連結如下:http://bbs.qcloud.com/thread-8480-1-1.html  按照這個教程

聯網專案開發(理論)

理論知識:軟體的生命週期等 軟體工程組成三要素:軟體工程方法、軟體工程工具、軟體工程過程 軟體生命週期:分析-設計-編碼測試(白盒測試-單元測試)-執行維護 生命週期模型:瀑布模型-原型模型–螺旋模型(迭代遞增)等。 瀑布模型:開發完畢才能看到系統結果–

我的聯網專案(三)平臺架構

介紹下目前整個軟體開發團隊的配套成員 技能 人數 android 1 ios 1 前端 1 美工 1 java 2  以上就是我們這個專案的人員搭配,我除了專案上的管理,更多的是在做業務需求,系統架構,平臺建設,然後也頂多算半個開發人員參與在寫程式碼。 一 系統架構 從

實現一個《 從下位機到藍芽模組通訊到Android客戶端 》的完整聯網專案

實現一個從“下位機到藍芽模組通訊到Android客戶端”的完整物聯網專案。 歷經一個月,終於把這門課程完完整整的錄製出來,這個專案也是我在大學期間的一個實

利用 esp8266 搭建簡單聯網專案

接[上一篇部落格](https://www.cnblogs.com/ZhengBlogs/p/esp8266_1.html),這次還是關於 **esp8266** --> **物聯網** # 一、雲端資料監控:DHT11 + NodeMcu +Dweet.io 1. 接上一篇部落格的接線及相關配置不變( DH

聯網MQTT協議分析和開源Mosquitto部署驗證

-h etc 遙感 並且 傳輸 物聯網平臺 發布消息 情況 all 在《物聯網核心協議—消息推送技術演進》一文中已向讀者介紹了多種消息推送技術的情況,包括HTTP單向通信、Ajax輪詢、Websocket、MQTT、CoAP等,其中MQTT協議為IBM制定並力推

ansible集中化自動管理(部署LAMP環境)

ansible module ansible module ansible模塊##ansible集中化自動管理目標:1、生成公鑰,並上傳ssh的公鑰到被控端主機 2、在ansible的主控端配置本地yum源和網絡yum源 3、安裝ansible,用ansible上傳yum源目錄到被控端主機

lamp生產環境部署

tro 時也 顯示 sca express 系列 res stc oracl 1. LAMP介紹 LAMP=Linux+Apache(httpd)+MySQL(MairaDB)+PHP(Python) 1.1 Web資源類型 靜態資源:原始形式與相應內容一致(html,cs

LAMP基礎環境部署

lamp一鍵部署 標題索引企業需求生產環境編寫目標腳本編寫一.企業需求 業務需求頻繁基於LAMP或LNMP部署業務系統,出於方便實施和自動化管理,編寫LAMP部署腳本,實現一鍵安裝部署,後續配合腳本Saltstack批量執行。二.生產環境 Linux:Centos6.9 Apache:htt

CentOS 7.4 yum方式安裝LAMP環境,並部署WordPress,使用XCache優化性能

yum lamp wordpress centos7 一、安裝LAMP環境:# yum -y install httpd mariadb-server php-mysql php程序包版本:httpd:2.4.6mariadb-server:5.5.56php-mysql(PHP連接MySQL

CentOS 6.9 yum方式安裝LAMP環境,並部署Discuz

lamp discuz 一、安裝LAMP環境:# yum -y install httpd mysql-server php-mysql php程序包名稱及版本:httpd:2.2.15mysql-server:5.1.73php-mysql(php連接mysql時需要用到的驅動):5.3.3php:

centos下部署LAMP環境(Linux+Apache+mysql+php)(轉載文章:https://www.cnblogs.com/apro-abra/p/4862285.html)

roo -s -c ice 自己 sql all p地址 iptable 一:安裝apache 1.安裝yum -y install httpd2.開啟apache服務systemctl start httpd.service3.設置apache服務開機啟動systemct

部署lamp環境

www 對話 ddr src 劃分 ati str figure set 一、安裝centos7 #參考https://www.cnblogs.com/wcwen1990/p/7630545.html 1、使用虛擬機安裝centOS7作為服務器,打開vmware works