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环境部署GLPI资源管理系统
搭建LAMP环境部署GLPI资源管理系统 一.关闭防火墙和Selinux [root@localhost ~]# systemctl disable --now firewalld [root@loc ...
- 搭建LAMP环境部署opensns微博网站
搭建LAMP环境部署opensns微博网站 实验环境 centos7 ip: 192.168.121.17 一.关闭防火墙和selinux [root@localhost ~]# systemctl ...
- 搭建LAMP环境部署Nextcloud私人网盘
搭建 LAMP 环境部署 Nextcloud 私人网盘 前言 Nextcloudd 是一个开源的.基于本地的文件共享和协作平台,它允许您保存文件并通过多个设备(如PC.智能手机和平板电脑)访问它们. ...
- k8s-生产环境部署django项目k8s-dashboard管理系统
1. k8s-生产环境部署django项目k8s-dashboard管理系统 gitee地址: https://gitee.com/scajy/django-k8s-dashboard.git 部署架 ...
- 生产环境部署Django项目
生产环境部署Django项目 1. 部署架构 IP地址 安装服务 172.16.1.251 nginx uwsgi(sock方式) docker mysql5.7 redis5 Nginx 前端We ...
- 【Angular】学习笔记-环境部署、项目建立相关
Angular官网>搭建环境 首先要安装Node.js.官网>Download 一直next就好了. 安装node.js的目的是使用npm这些命令啦 然后这里推荐下载使用git SCM 也 ...
- 搭建LAMP环境部署Ecshop电商网站
实战-部署Ecshop电商网站 实验环境 Centos7 ip:192.168.121.17 一.关闭防火墙和selinux [root@localhost ~]# systemctl stop fi ...
- lamp环境部署脚本
关于lamp环境的安装脚本,直接复制即可使用 注:apache2.2.X 版本和apache2.4.X版本 本人推荐兼容性版本安装 apache2.4.25 + apr1.5.2 + apr-util ...
- linux系统LAMP环境部署
一.安装虚拟机 二.安装CentOS7 注意:以下安装,用的root权限. 三.安装Apache 1.安装 yum -y install httpd 2.开启apache服务 systemctl st ...
随机推荐
- 2020Pycharm安装教程!最新2020pycharm安装!如何安装Pycharm2020版本!如何安装Pycharm!如何安装2020Pycharm!2020Pycharm永久激活!
本教程仅用作个人学习,请勿用于商业获利,造成后果自负!!! Pycharm安装 在这插一个小话题哈,Pycharm只是一个编译器,并不能代替Python,如果要使用Python,还是需要安装Pytho ...
- JQuery学习笔记之手网琴效果
这种东西在网上多的是,最近在学JQuery,所以就写了个随笔 <!DOCTYPE html> <html lang="en"> <head> & ...
- 谁是狸猫谁是太子?--戏说java构造器
故事背景 <狸猫换太子>在我国民间文学中很出名,故事剧情大致如下:北宋第三位皇帝宋真宗赵恒年长无子,他的两个妃子刘妃与李妃同时怀了身孕.真宗召见二人,各赐信物,并声明哪个生了儿子就立谁为皇 ...
- 前端基础-BOM和DOM学习
JavaScript分为 ECMAScript,BOM,DOM. BOM:是指浏览器对象模型,使JavaScript有能力与浏览器进行对象. DOM:是指文档对象模型,通过它,可以访问HTML文档的所 ...
- 2018年秋招总结篇(Java)
博主开始找工作是10月10号,感觉可以出去找找工作,然后就去了,参加了多场面试.笔试,现在总结一下 1.笔试篇 String StringBuffer StringBuilder的区别? HashMa ...
- 品Spring:bean工厂后处理器的调用规则
上一篇文章介绍了对@Configuration类的处理逻辑,这些逻辑都写在ConfigurationClassPostProcessor类中. 这个类不仅是一个“bean工厂后处理器”,还是一个“be ...
- 23种设计模式之责任链模式(Chain of Responsibility Pattern)
责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请求的类型,对请求的发送者和接收者进行解耦.这种类型的设计模式属于行为型模式. ...
- SpringBootSecurity学习(09)网页版登录配置Session共享
场景 当后台项目由部署在一台改为部署在多台以后,解决session共享问题最常用的办法就是把session存储在redis等缓存中.关于session和cookie概念这里就不再赘述了,在spring ...
- 深入探究js中的隐式变量声明
前两天遇到的问题,经过很多网友的深刻讨论,终于有一个相对可以解释的通的逻辑了,然后我仔细研究了一下相关的点,顺带研究了一下js中的隐式变量. 以下文章中提到的隐式变量都是指没有用var,let,con ...
- 猿说python
一.简介 知识改变命运,程序改变世界.互联网时代潜移默化的改变着我们的生活,伴随技术的进步,我想下一个时代应该属于人工智能和机器学习,属于python. pytho ...