美文网首页我爱编程
Centos7 部署thinkPHP项目记录

Centos7 部署thinkPHP项目记录

作者: 涉川gw | 来源:发表于2018-08-04 11:25 被阅读0次

    简介

    最近的一个项目是一个后台管理网站,主要用到的是基于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:本文只是个人记录用,如果对你有参考作用我很高兴,如果你实际操作有什么不同的结果也别惊讶,本篇文章初衷不是教程,是本着对自己下次配置有参考作用而已,当然如果你有什么问题也可以提出来,我们可以一起探讨解决的。

    相关文章

      网友评论

        本文标题:Centos7 部署thinkPHP项目记录

        本文链接:https://www.haomeiwen.com/subject/zinxvftx.html