Centos7 部署thinkPHP项目记录

简介

最近的一个项目是一个后台管理网站,主要用到的是基于thinkPHP5的Fastadmin框架作为基础进行二次开发,由于开发环境是Windows,官方文档也有对应的教程,所以就直接用的phpstudy集成环境进行测试,期间没有任何问题,但是线上服务器是centos,这个环境配置就搞得我头皮发麻了,最后还好搞出来了,这里记录一下,以备下次再配环境的时候避开这些坑。

环境介绍

本项目所用到的环境比较多,首先PHP5.6+mysql5.7+Apache+Nginx+Tomcat+ejabberd,别问为什么用到这么多东西,它就是要搞这么多,搞就是了。从零开始,这里从服务器系统安装好开始记录。

  • 网络配置
    由于在公司担任的是“全沾工程师”职位,从扛机箱到写代码,全都得出手。电信独立ip接入后需要在路由器上配置下虚拟服务器环境、端口映射这些,一开始不懂这个,搞了好久都没把端口给开放出来,一度以为买了假服务器。具体步骤是先在浏览器打开192.168.1.1(没错,就是平时设置WiFi密码的那个),我这里用的是tplink的路由,输入密码进入后有如下几个:


    路由器配置界面.png

    我们点“应用管理”后先进入IP与MAC绑定,找到你的centos服务器的MAC地址对应的ip地址,点下绑定,然后回到“虚拟服务器”应用,进入里面有如下设置:


    端口映射.png

    然后将需要用到的端口添加到这里,常用服务器根据需要选择,也可以不选,外部端口和内部端口填要开放的端口号,比如8080啥的。ip地址就是你的服务器所在的内网地址(刚刚添加绑定的那个),协议类型根据需要选择或者直接选ALL,然后保存。到这网络配置就算能用了。
  • 服务器防火墙端口开放
    虽然路由上设置了端口,但是centos上如果开了防火墙,还是要将对应端口开放,外网才能访问得到的,具体操作我这里用的命令行的方式,其他方式也是可以的,具体操作可以Google搜索。我们开放一个端口只需要执行以下命令:
firewall-cmd --zone=public --add-port=8080/tcp --permanent    (--permanent永久生效,没有此参数重启后失效)
#重新载入
firewall-cmd --reload
#删除
firewall-cmd --zone= public --remove-port=8080/tcp --permanent

如上,执行完后8080端口就算是开放了,外网也可以访问到,前提是你部署了对应的监听应用,比如安装了Tomcat等,具体Tomcat怎么装后面会有涉及到。

  • PHP5.6安装
    为什么不用PHP7?不知道,缘分吧,Windows下装的是5.6,不想折腾,就直接用回5.7。
    1、检查是否已有PHP
yum list installed | grep php
如果有安装的PHP包,先删除他们, 如:
yum remove php* 
这是删除已php开头的文件,适用于存在很多个的时候,当然你也可以精确的打完整个文件名

2、配置安装包源

yum install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

这是centos7的配置,其他版本系统是不同滴,有需要去搜一下就有了,这里就不贴出来了。
3、安装

yum install --enablerepo=remi --enablerepo=remi-php56 php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof

4、验证

php -v

会输出版本信息,到此php安装完毕。

  • 安装 MySQL
    1、检查
    同样先检查是否存在mysql
rpm -qa|grep -i mysql
#如果有,删掉
yum remove mysql*

2、下载安装

wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
#安装
yum -y localinstall mysql57-community-release-el7-11.noarch.rpm 
yum -y install mysql-community-server
#启动
systemctl start mysqld

3、修改默认密码

#先停止mysql
systemctl stop mysqld
#设置无密码登录
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
#启动mysql
systemctl start mysqld
#登录
mysql -u root
#修改密码
UPDATE mysql.user SET authentication_string = PASSWORD('你要设置的密码') WHERE User = 'root' AND Host = 'localhost';
#刷新一下
FLUSH PRIVILEGES;
exit ;
#先停止服务
systemctl stop mysqld
#关闭无密码登录
systemctl unset-environment MYSQLD_OPTS
#启动mysql
systemctl start mysqld

重启mysql服务,一切回到了可控状态,现在你可以使用密码登录mysql了。好了,现在让我们去使用Windows连接数据库查看一番吧,总不能老是用命令行看数据库吧,太累了。愉快的打开Navicat,输入ip,输入端口,输入密码,测试连接.....wtf,连接失败,第一反应是不是去开端口?不对,端口开了。Telnet也通,咋整。Google啊。
原来Mysql为了安全性,在默认情况下用户只允许在本地登录,可是我们需要远程访问啊,整吧,show you the code:

#先在控制台把mysql打开
mysql -u root -p
#记得要输入密码
#进行授权操作:(这里可能会提示让你重置密码,然后当你按照提示进行操作
SET PASSWORD = PASSWORD('your new password');
#,又会出现另一个问题,就是你的密码可能太简单了无法通过,
#这是可以换一个辅助的密码或者直接将密码等级改为不那么严格,
#具体方法只要执行两句命令:
set global validate_password_policy=0;
set global validate_password_length=1;
然后就可以重新执行:
SET PASSWORD = PASSWORD('your new password');
)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;

#重载授权表:
FLUSH PRIVILEGES;
#退出mysql数据库:
exit;

到这里mysql应该能远程访问了,如果还有什么其他毛病,Google能把你解决掉的。
还有一个坑就是如果如果你的mysql是从5.5升级到5.6+的,以前如果有添加日期为0000-00-00类似的格式的数据,会出错,因为5.6开始日期格式不允许设为0了,我的解决办法是禁用这个属性。
首先用root账户登录进数据库

select @@sql_mode;
#把得到的结果复制出来,删除去NO_ZERO_IN_DATE,NO_ZERO_DATE这两个,再重新把新的设置进去
SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
exit;

这下就好用了。

  • Nginx安装
    我这里Nginx是用作rtmp推流用的,并不是用作web容器,所以这里是介绍Nginx安装并配置rtmp模块的。
    1、首先要安装有git
yum -y install git

2、下载nginx-rtmp-module

 git clone https://github.com/arut/nginx-rtmp-module.git

3.安装 openssl

yum -y install openssl openssl-devel

4、下载Nginx

#这里下载1.10.3版本,需要其他版本的自行更换就行了
wget http://nginx.org/download/nginx-1.10.3.tar.gz
#解压 
tar -zxvf nginx-1.10.3.tar.gz
cd nginx-1.10.3
#配置rtmp拓展,这里路径要注意下,如果你下载的rtmpmodule不是和Nginx放在同一级目录,记得改一下位置,因为我这里是放在一起,所以只需../返回上一级就能找到rtmp位置了
./configure --add-module=../nginx-rtmp-module --with-http_ssl_module
#make安装一下
make && make install

5、启动

#启动nignx
/usr/local/nginx/sbin/nginx 
#停止
/usr/local/nginx/sbin/nginx  -s stop

启动了之后在浏览器输入localhost就能看到Nginx的测试网页了。到这还没完,我要的rtmp还没配置好。
6、rtmp配置

vim /usr/local/nginx/conf/nginx.conf  

使用vim编辑配置文件
添加如下代码块,与http同级

rtmp_auto_push on; #这个好像不配也没啥影响,具体有什么用没去了解
rtmp_auto_push_reconnect 1s;#当worker被杀掉时 自动推送连接超时时间
rtmp{
  server{
    listen 1935; #监听端口,记得开放出去
    chunk_size 4000;
    application live { #rtmp推流请求路径
      live on;
      hls on;
      hls_path /usr/local/nginx/html/live;  #这个文件夹是不存在的,得自己去创建一个
      hls_fragment 5s;
    }
    }
}

保存好后重启Nginx,到此就算能用了,自己找个推流工具,将推送地址设为:rtmp://IP/live/test
就可以推上去了,这个ip是你服务器外网ip,live是前面设置的地址,最后的后缀可以自己定的,到时拉流就需要用这个区分。

7、ejabberd安装配置
我们需要用到即时通信功能,以前有试过环信等第三方提供的SDK,后来还是觉得自己管数据比较好,于是就找了这个ejabberd开源项目,使用了下还是不错的,配置简单,功能强大,平台齐全。
首先要到官网下载安装包,https://www.process-one.net/en/ejabberd/downloads/,打开选择适合自己的版本下载就是了,下载好后传到centos服务器上。然后打开控制台,cd到安装包所在目录,先给权限,然后运行安装:

chmod +x ejabberd-YY.MM-linux-x86_64-installer.run
./ejabberd-YY.MM-linux-x86_64-installer.run

首先迎来的肯定是一大堆的协议了,一直enter,最后会让你输入y or n,即是否接受协议这些老套路,肯定得yes啦,不yes又不让你装,自己写是不可能自己写的,这辈子都不可能写得出来的,也只有找些开源库用用才能勉强维持得了生活。继续,yea完之后呢就会让你设置domain啊,我是直接使用ip地址啦,还没申请域名,将就下咯,然后就是管理员和密码了,我是设为默认admin 密码自己设一个,后面登录后台用的。最后还会有一个好像是分布式部署的选项,我是选了no。安装完就完事了,然后cd到安装目录,进入bin,启动命令入下:

#启动
./ejabberdctl start
#或者使用如下命令启动,并输出启动信息
./ejabberdctl live
#停止
./ejabberdctl stop

启动后可以通过浏览器访问http//ip:5280/admin进入管理页面

ejabberd管理页面.png

现在已经可以使用ejabberd了,你可以在Windows上下载Spark,进行测试。ps:新版本要在配置文件里加一个参数,不然web端会不能登录,提示跨域。yaml配置文件port: 5282 模块下增加 http_bind: true。

  • Apache配置
    centos下Apache的安装还是很简单的,有可能有的版本已经自带Apache了,要不要卸载重装自行决定吧。
yum install httpd

Apache操作命令:


systemctl start httpd      //启动apache
systemctl stop httpd       //停止apache
systemctl restart httpd    //重启apache
systemctl enable httpd     //设置apache开机启动

-SELINUX的问题
由于我的centos默认开启了SELINUX,导致项目部署上去后没办法写文件,也就跑不起来了,搜了很久试了很多方法都不行,甚至文件夹都给到777权限了,最后才发现是SELINUX的问题,也顺利找到了解决方法:
我们先进入项目文件夹,使用命令查看你的各个文件夹的权限

ls -Z

不出意外你应该会看到下面的字段:

httpd_sys_content_t:s0 

这里,可以发现,这个

2448535-f8a14cbc3c449d11.jpg

可能是解决办法,给加个写权限试试吧,

#这里最后一个是你要给权限的文件/夹,因为我的是tp5项目,所以给的就是runtime文件夹
sudo  chcon -R -t httpd_sys_rw_content_t  /var/www/html/youpath

给完权限后再次ls -Z应该就变成了httpd_sys_rw_content_t:s0 ,多了写权限了。重启Apache,发现可以用了,hhh~。
-还有个插曲问题,刚开始部署好后,发现只有首页能进去,跳转登录页面都包not found错误,这个锅也得甩给Apache背的,一番Google之后成功解决,
a.修改Apache配置文件,在:/etc/httpd/conf/httpd.conf 将所有的AllowOverride None 的None改为 All
b.在项目根目录新建.htaccess文件,内容如下:

<IfModule mod_rewrite.c>
  Options +FollowSymlinks  
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME}   !-d
  RewriteCond %{REQUEST_FILENAME}   ! -f
  RewriteRule ^(.*)$ index.php/$1   [QSA,PT,L]
</IfModule> 

成功跳转了,到此,整个项目就成功运行起来了,后期再有什么坑再来记录下。
ps:本文只是个人记录用,如果对你有参考作用我很高兴,如果你实际操作有什么不同的结果也别惊讶,本篇文章初衷不是教程,是本着对自己下次配置有参考作用而已,当然如果你有什么问题也可以提出来,我们可以一起探讨解决的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容