Centos7 下 nginx1.14+php7.2+mysql5.6+swoole

虚拟机安装完centos7后(网络方式为桥接)后:
  vi /etc/sysconfig/network-scripts/ifcfg-ens33
  修改:
    ONBOOT=yes
  保存退出。 service network restart,现在网络应该就通了,可以ping ip
  查看自己的ip 可以用ipaddr
  用 ifconfig 查看当前网络连接信息。如果 找不到此命令,估计 /sbin/ 里面就没有这个命令。
  yum install -y net-tools
  然后就可以用 ifconfig 了。 

     将ip固定:
       修改 BOOTPROTO=static
            IPADDR=你要用的ip
            NETMASK=子网掩码
            GATEWAY=网关
            #NM_CONTROLLED=no

  保存。 service network restart。再用ifconfig看就变了。
  (NM_CONTROLLED=no表示该接口不通过网络管理器进行管理,而是通过配置文件管理,这个我没写也可以,看情况吧)。
  ping baidu.com 如果报找不到,但是 ping 百度ip 可以通,那么说明dns解析有问题。
    配置dns解析:
      cd /etc/NetworkManager
      vi NetworkManage.conf
      增加 dns=none
     vi /etc/resolv.conf 
       新增dns 配置
       #主 DNS
       nameserver 114.114.114.114
       #备DNS
       nameserver 8.8.4.4
   service network restart 就好了。再ping baidu.com 应该就可以通了。

   安装图像化界面:(建议不要安装)
    # yum groupinstall "GNOME Desktop" "Graphical Administration Tools"
    # ln -sf /lib/systemd/system/runlevel5.target /etc/systemd/system/default.target
    # reboot
---------------------------------------------------------------------------
   Centos6 中防火墙使用的是 iptables
   Cnetos7 中防火墙使用的是 fireware
     打开端口命令如下:
       firewall-cmd --zone=public --add-port=80/tcp --permanent 
      命令含义:
        --zone            #作用域
        --add-port=80/tcp #添加端口,格式为:端口/通讯协议
        --permanent       #永久生效
    重启防火墙:
      systemctl restart firewalld.service
    关闭防火墙:
      systemctl stop firewalld.service
    查看已经开放的端口:
      firewall-cmd --list-ports
    查看监听的端口:
      netstat -nltp
      如果指定监听8080端口,netstat -nltp|grep 8080

---------------------------------------------------------------------
安装东西前确定gcc,gcc-c++已安装,这个库涉及到后面的编译。

yum install -y gcc gcc-c++ 
groupadd www
useradd -g www www -M -s /sbin/nologin    #-M不建立家目录,-s /sbin/nologin 不让登录主机
cat /etc/passwd

安装nginx:(nginx1.14.x)
  官网有安装示例。
 (http://nginx.org/en/docs/configure.html 有configure 的详细说明,包括默认路径,比 --help 全) 
   ./configure --help
  根据上面的内容,要的直接选中右键paste 就直接到下面去了

  ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --without-http_gzip_module --with-pcre
  #--with-http_realip_module --with-http_stub_status_module --with-http_sub_module 
   这几个视需求而定。
  1.报错
    ./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre= option.
    解决:需要安装 pcre-devel
          yum install -y pcre-devel
  2.报错
    ./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl= option.
    解决:需要安装 openssl-devel
         yum install -y openssl-devel
  3.报错
    --with-gzip_module ...
    解决: yum install -y zlib-devel 

 再次构建,构建后: echo $? (为0则没出现过错)
  make & make install

  然后找到 可执行文件 nginx,./nginx 运行nginx
    ps -ef|grep nginx  查看是否已经启动
    也可以用: netstat -nltp|grep 80
  访问本地,正常则返回nginx的欢迎页面。不正常则找不到,查看80端口是否打开:
    firewall-cmd --list-ports       看是否有80端口 
    没打开则打开。 
    firewall-cmd --zone=public --add-port=80/tcp --permanent

-------------------------------------------------------------------------
安装mysql:
groupadd mysql
useradd -g mysql mysql -M -s /sbin/nologin

mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz:
(二进制文件的安装)官网有安装示例

可以先安装,碰到问题了再装依赖; yum install -y cmake perl-devel autoconf
tar xf mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.6.41-linux-glibc2.12-x86_64 /usr/local/mysql
chown -R mysql:mysql mysql
cd mysql
./scripts/mysql_intall_db --user=mysql
安装初始化完毕(如果原本存在的 /etc/my.cnf有问题,可以删掉,这样就直接访问/usr/local/mysql/my.cnf了)
启动 support_files/mysql.server
进入数据库:./bin/mysql -uroot ,也可以 1.cp mysql /usr/bin/ 然后直接 mysql -uroot
此时的数据库登录不要账号密码,可以用这个 delete from mysql.user where user='';
然后 : update mysql.user set Password=PASSWORD('密码') where user="root"
再不用密码就登录不进去了。
登录:mysql -uroot -p密码


下面是非二级制文件安装的:(这个没有测试过)
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql.sock \
-DMYSQL_USER=mysql \
-DEFAULT_CHARSET=utf8 \
-DEFAULT_COLLATION=utf8_general_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \      
-DWITH_INNOBASE_STORAGE_ENGINE=1 \     
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_EMEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1

查看构建错误: echo $?
安装成功后,初始化数据库:
mysql/script/mysql_install_db --datadir=/usr/local/mysql/data/ --basedir=/usr/local/mysql/ --user=mysql
没报错,有两个ok就初始化完成。
  mysql/support-files 中有实例的配置文件
  移动一个你想要的到 mysql/etc/  里面,并改名为my.cnf
启动数据库:
  mysql/support-files/mysql.server 
  rm -f /etc/my.cnf        #删掉系统自带的配置文件,删掉后就找 mysql/etc/my.cnf了
  netstat -n|tp
这是用mysql 提示找不到:
 两种解决办法: 1.cp mysql /usr/bin/
          2.添加环境变量
 mysql #进去了,但现在还不能用,还有安全性问题
 进入script下有个 mysql_secure_installation 运行它。

--------------------------------------------------------------------------
安装php:(php-7.2.9)
 下面的配置是摘抄的:
  ./configure --prefix=/usr/local/php --with-curl --with-freetype-dir --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --with-libxml-dir --with-mysqli --with-openssl --with-pcre-regex --with-pdo-mysql --with-pdo-sqlite --with-pear --with-png-dir --with-jpeg-dir --with-xmlrpc --with-xsl --with-zlib --with-bz2 --with-mhash --enable-fpm --enable-bcmath --enable-libxml --enable-inline-optimization --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvsem --enable-sysvshm --enable-xml --enable-zip

 下面的配置是自己看 ./configure --help,自己一个一个选的:
  ./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-config-file-path=/usr/local/php/etc --with-libxml-dir --with-xmlrpc --with-openssl --with-pcre-regex --with-zlib --with-zlib-dir --enable-bcmath --with-bz2 --with-curl --with-libxml-dir --with-pcre-dir --with-gd --with-jpeg-dir --with-png-dir --with-zlib-dir  --with-gettext --with-mhash --enable-mbstring --with-mysqli --enable-pcntl --with-pdo-mysql --with-pdo-sqlite --with-zlib-dir --enable-shmop --with-libxml-dir --with-openssl-dir --enable-soap --enable-sockets --with-iconv-dir --enable-zip --with-pcre-dir --with-libzip --enable-mysqlnd --with-pear

  下面的依赖是网上找的:
      yum -y install openssl
      yum -y install openssl-devel
      yum -y install curl
      yum -y install curl-devel
      yum -y install libjpeg
      yum -y install libjpeg-devel
      yum -y install libpng
      yum -y install libpng-devel
      yum -y install freetype
      yum -y install freetype-devel
      yum -y install pcre
      yum -y install pcre-devel
      yum -y install libxslt
      yum -y install libxslt-devel
      yum -y install bzip2
      yum -y install bzip2-devel

 下面装的依赖是自己报错试出来的:
  我们来看看配置会报哪些错:然后安装依赖
    yum install -y libxml2-devel bzip2-devel curl-devel libwebp-devel libjpeg-devel libpng-devel freetype-devel 

    yum remove libzip  (yum安装的版本太低,所以编译安装)
    然后libzip的版本要求是>= 0.11
    然后找个目录下载安装新版本:
    wget https://nih.at/libzip/libzip-1.2.0.tar.gz
    tar -zxvf libzip-1.2.0.tar.gz
    cd libzip-1.2.0
    ./configure
    make
    make install
    安装完新版的libzip后可能系统找不到,手动复制下:
    cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h

   前面安装nginx 时已经安装了 openssl-devel,pcre-devel,zlib-devel
   php部分我们又安装了 curl-devel libwebp-devel libjpeg-devel libpng-devel freetype-devel libxml2-devel bzip2-devel 
                      还有对版本有要求 >=0.11 的 libzip(编译安装)
   make (没报错就进行下一步)
   make install

   cp php-fpm.conf.default php-fpm.conf (进程配置文件)
   到源码安装包里:(开发用 development 就够了,生产环境用 production)
   cp php.ini-development  /usr/local/php/etc/php.ini
   cd /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
   
   cd sbin
   ./php-fpm
  netstat -nltp
  会发现有个 9000 端口的 php-fpm,那么启动成功。
----------------------------------------------------------------------------------------------------------------
配置nginx 将其与 php连接起来:
/usr/local/nginx/conf/nginx.conf
  user www www
  打开 location ~ \.php${
    root           /usr/local/nginx/html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    include        fastcgi_params;

  }
  然后看路径 root 要不要配置(根据你的情况而定)
/usr/local/nginx/sbin/nginx -s reload
然后网页访问看能不能访问到 php 文件。
如果不能访问,将上面的 fastcgi_param 后面的 /scripts 改为 $document_root 然后重载再试试。
(看下 根目录要不要将 root的改为www,这个视情况而定)
SUCCESS!

************到此处为止,nginx1.14(stable)+php7.2.9+mysql5.6(二进制版本) 搭建完成。
--------------------------------------------------------------------------------------
 Centos7 下的 nginx,php,mysql 开机自启动:
   nginx:
    vi /lib/systemd/system/nginx.service 文件(创建文件)
      [Unit]
      Description=nginx
      After=network.target
      [Service]
      Type=forking
      ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
      ExecReload=/usr/local/nginx/sbin/nginx -s reload
      ExecStop=/usr/local/nginx/sbin/nginx -s quit
      PrivateTmp=true
      [Install]
      WantedBy=multi-user.target

   php:
    vi /lib/systemd/system/php-fpm.service 文件(创建文件)  
      [Unit]
      Description=php-fpm
      After=network.target
      [Service]
      Type=forking
      ExecStart=/usr/local/php/sbin/php-fpm
      ExecStop=/bin/pkill -9 php-fpm
      PrivateTmp=true
      [Install]
      WantedBy=multi-user.target

   mysql:
    vi /lib/systemd/system/mysql.service 文件(创建文件) 
      [Unit]
      Description=MySQL Server
      #Documentation=man:mysqld(8)
      #Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
      After=network.target
      After=syslog.target

      #[Install]
      #WantedBy=multi-user.target

      [Service]
      User=mysql
      Group=mysql
      ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf
      LimitNOFILE = 5000
      #Restart=on-failure
      #RestartPreventExitStatus=1
      #PrivateTmp=false

   [Unit]:服务的说明
    Description:描述服务
    After:描述服务类别
    [Service]服务运行参数的设置
    Type=forking是后台运行的形式
    ExecStart为服务的具体运行命令
    ExecReload为重启命令
    ExecStop为停止命令
    PrivateTmp=True表示给服务分配独立的临时空间
    注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
    [Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

   先关闭nginx,php-fpm:直接kill 掉吧
   然后使用以下命令开启
        systemctl start nginx.service
        systemctl start php-fpm.service
        systemctl start mysql.service

   开机成功,将服务加入开机启动
      systemctl enable nginx.service       #注意后面不能跟空格
      #Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

      systemctl enable php-fpm service 
      #Created symlink from /etc/systemd/system/multi-user.target.wants/php-fpm.service to /usr/lib/systemd/system/php-fpm.service.

      systemctl enable mysql.service

   重启系统,查看运行的服务。
   systemctl list-units --type=service           #查看运行的服务
---------------------------------------------------------------------------
Swoole:
   swoole官网:www.swoole.com
  Swoole:面向生产环境的 PHP 异步网络通信引擎
   是PHP开发人员可以编写高性能的异步并发 TCP,UDP,UnixSocket,HTTP,WebSocket服务。
   Swoole可以广泛的应用于互联网,移动通信,企业软件,云计算,网络游戏,物联网(IOT),车联网,智能家居等领域。使用PHP+Swoole作为网络通信框架,可以使企业IT
   研发团队的效率大大提升,更专注于开发创新产品。

  如何学习swoole
    查看文档
    实现swoole特性的功能点
    多看看其他现有的swoole案例代码(github,开源中国)

   下载安装swoole:
    进入www.swoole.com点击下载,然后会跳转界面,选取克隆下载地址:https://gitee.com/swoole/swoole.git
    linux 上安装git后:
    git clone https://gitee.com/swoole/swoole.git
    下载后是已经解压好的源码
    源码安装,发现这里面没有 configure,此时运行装好的phpize
    执行命令:/usr/local/php/bin/phpize
    这是再看,发现swoole下面有了 configure,还有一些其他改变

    ./configure --with-php-config=/usr/local/php/bin/php-config
      然后 make
      然后 make install
         出现:Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
         这个路径说的是扩展的路径。
         进入后打印如下:[root@bogon no-debug-non-zts-20170718]# ll
                 total 9944
                 -rwxr-xr-x. 1 root root 3581556 Apr  5 01:00 opcache.a
                 -rwxr-xr-x. 1 root root 1971952 Apr  5 01:00 opcache.so
                 -rwxr-xr-x. 1 root root 4622688 Apr  5 09:47 swoole.so
         所以说最终的扩展是 .so 文件。

          在swoole源码安装包里面有 example,进入,这里面都是使用swoole的例子。
              cd server 。 打开 echo.php,查看
             直接 php echo.php
                 报错,原因是扩展文件的加载还要看php.ini里面的 extension=
             在php.ini中加上 extension=swoole ,然后 php -m 就可以看到加载的模块swoole了(这里说明一下,只有在指定的扩展目录下面有相应的.so文件,并且php.ini里面添加了配置,php -m才能查看到该扩展)
             再次运行 php echo.php
             然后查看此端口:netstat -anp|grep 9501
               得到结果:tcp        0      0 0.0.0.0:9501            0.0.0.0:*               LISTEN      32898/php
             ctrl+c 取消掉运行程序后再次 netstat -anp|grep 9501   发现没有了,消失了

          查看端口号:
          netstat -anp|grep 9501

          telnet 127.0.0.1 9501


   
 

你可能感兴趣的:(php,linux)