CentOs7 lnmp 安装记录

CentOs7 lnmp 安装记录

安装php

  • 选择安装目录

    # eg:/usr/src
    cd /usr/src
    
  • 安装必要的源

    yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel curl curl-devel libicu libicu-devel libmcrypt  libmcrypt-devel freetype freetype-devellibmcrypt libmcrypt-devel ncurses-devel bison bison-devel sqlite-devel
    
  • 下载php

    #  安装自己的版本安装,也可使用wget下载
    curl -o https://www.php.net/distributions/php-7.4.7.tar.gz
    # OR curl -o php.tar.gz http://php.net/get/php-7.4.7.tar.gz/from/this/mirror -L
    
  • 创建php源码目录

    # 多版本的话,建议多级创建
    mkdir -p php/7.4.7
    
  • 编译安装并贴上参考编译命令

    # 切换到源码目录
    cd php/7.4.7
    # 执行下面的命令
    
    # 注意php7.4.7已经不支持gd库了,“--with-gd”,得改成“--enable-gd”
    #enable-fpm 这里有个有趣的知识
    # FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的
    # 如果禁止它,我们可以想想php web的工程流程
    ./configure --prefix=/usr/local/php --with-config-file-path=/etc/php --enable-soap --enable-mbstring=all --enable-sockets --enable-fpm  --with-freetype-dir=/usr/include/freetype2/freetype --with-jpeg-dir=/usr/lib64 --with-zlib --with-iconv --enable-libxml --enable-xml  --enable-intl --enable-zip --enable-gd --enable-pcntl --enable-bcmath --enable-maintainer-zts --with-curl --with-mcrypt --with-openssl  --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd
    
  • 可能出现的错误

    1. 安装PHP7.4找不到包 No package 'oniguruma' found错误

      oniguruma是什么?

      ​ oniguruma是一个处理正则表达式的库,我们之所以需要安装它,

      是因为在安装php7.4的过程中,mbstring的正则表达式处理功能对这个包有依赖性

      安装

      #centos 可以先通过 yum search oniguruma 命令搜索对应的缺失库,发现还未收录,因而采用源码编译的方式。
      #centos 或者使用yum install oniguruma-devel -y
      wget https://github.com/kkos/oniguruma/releases/download/v6.9.5_rev1/onig-6.9.5-rev1.tar.gz -O onig-6.9.5.tar.gz 
      tar -zxvf onig-6.9.5.tar.gz 
      cd onig-6.9.5/ 
      autoreconf -vfi 
      ./configure 
      make && make install
      
    2. error: Package requirements (sqlite3 > 3.7.4) were not met

      #centos
      yum install libsqlite3x-devel -y 
      
    3. virtual memory exhausted: Cannot allocate memory

      [root@Byrd byrd]# free -m
      total used free shared buffers cached
      Mem: 512 108 403 0 0 28
      -/+ buffers/cache: 79 432
      Swap: 0 0 0
      [root@Byrd ~]# mkdir /opt/images/
      [root@Byrd ~]# rm -rf /opt/images/swap
      [root@Byrd ~]# dd if=/dev/zero of=/opt/images/swap bs=1024 count=2048000
      2048000+0 records in
      2048000+0 records out
      2097152000 bytes (2.1 GB) copied, 82.7509 s, 25.3 MB/s
      [root@Byrd ~]# mkswap /opt/images/swap
      mkswap: /opt/images/swap: warning: don't erase bootbits sectors
      on whole disk. Use -f to force.
      Setting up swapspace version 1, size = 2047996 KiB
      no label, UUID=59daeabb-d0c5-46b6-bf52-465e6b05eb0b
      [root@hz mnt]# swapon /opt/images/swap
      [root@hz mnt]# free -m
      total used free shared buffers cached
      Mem: 488 481 7 0 6 417
      -/+ buffers/cache: 57 431
      Swap: 999 0 999

      内存太小,增加内存可以解决。

      使用完毕后可以关掉swap:

      [root@hz mnt]# swapoff swap
      
      
      
      [root@hz mnt]# rm -f /opt/images/swap
      

      swap文件也可以不删除,留着以后使用,关键是你的虚拟机硬盘够用。

      很多哥们在购买服务器的时候、前期都会买配置比较低的服务器以节省成本、内存往往会购买一个GB的服务器、那么这个时候在搭建PHP环境的时候可能会出现内存不够的情况、因为编译过程是一个内存消耗较大的动作

      问题描述

      由于我个人也从以前BAE迁往自己的云主机、近期就遇到一个这样的问题、在1GB内存centos操作系统中、在编译安装php时日志中有如下错误记录

      virtual memory exhausted: Cannot allocate memory
      make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1
      

      解决方案

      开始时的解决方法是先将很多的进程关闭、比如httpd、ftpd、sendmail等等、释放出了一部分内存后、再进行编译、仍然得到同样的编译错误

      后来百度谷歌了很久才找到解决问题的方法、而且是在php.net上找到的解决方法、原文链接是 https://bugs.php.net/bug.php?id=48809

      根据上方中提到的方法将php安装配置文件中加了引号中的配置(不包括引号)“--disable-fileinfo” 后终于编译通过、这里分享出来供参考、希望一些朋友在遇到这个问题的时候不会只想到加内存、最后的命令如下(注意回车)

      ./configure --prefix=/usr/local/php705 --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-xmlrpc 
      --with-xsl --with-zlib --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-xml --enable-zip 
      --disable-fileinfo
      make && make install
      
      
    4. 编译PHP7 make时出现错误:undefined reference to `libiconv_close’

      编辑Makefile文件,找到变量EXTRA_LIBS,并在末尾添上-liconv

      EXTRA_LIBS = -lcrypt -lz -lexslt -lcrypt -lrt -lmcrypt -lltdl -lstdc++ -lpng -lz -ljpeg -
      lcurl -lz -lrt -lm -ldl -lnsl -lrt -lxml2 -lz -lm -lssl -lcrypto -lcurl -lxml2 -lz -lm -l
      ssl -lcrypto -lfreetype -lz -lbz2 -licui18n -licuuc -licudata -lm -licuio -lxml2 -lz -lm
      -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lxslt
       -lxml2 -lz -lm -lssl -lcrypto -lcrypt -liconv
      

      再次执行make即可。

    5. php-7.3.4 configure: error: Please reinstall the libzip distribution

      # 参考:https://blog.csdn.net/cat_less/article/details/89050488
      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 -j4 && make install
      
    6. php安装zip报错的解决方法

      #在安装完新版的 libzip 时可能会出现打不到 zipconf.h,手动复制一下
      cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
      
    7. 我的阿里云内存1GB最终没有安装成功PHP7.4.7,无奈只有使用7.3了。上面的方式没有成功,等下次我在试试吧

  • 关于生产环境是源码安装还是第三方工具安装,我在网上找了一些网友的见解地址

  1. 只是 lnmp 的话,自己一个一个装更好, nginx/openresty , php 可以自己编译, mysql 的话装源里面的就可以,如果要长时间运行的话,不推荐一件安装包,更新维护不太好搞
  2. 公司用的话可以买 cpanel , directadmin 这种带有控制面板的集成环境多好,又不用担心后门什么的,又方便管理
  3. 想用容器,单个服务用 systemd-nspawn 就可以了。
    用 docker 很可能会引入一些安全问题…

配置php

  • mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket 配置

    **通过 php -i | grep mysql.default_socket[mysqli.default_socket、pdo_mysql.default_socket] **

    在通过控制台进入 MySQL, 输入命令: STATUS, 查找 UNIX socket 值

    比对是否相同

    #mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 5.7.11 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
    
    mysql> STATUS
    --------------
    mysql  Ver 14.14 Distrib 5.7.11, for osx10.9 (x86_64) using  EditLine wrapper
    
    Connection id:        8
    Current database:    
    Current user:        root@localhost
    SSL:            Not in use
    Current pager:        less
    Using outfile:        ‘‘
    Using delimiter:    ;
    Server version:        5.7.11 MySQL Community Server (GPL)
    Protocol version:    10
    Connection:        Localhost via UNIX socket
    Server characterset:    utf8
    Db     characterset:    utf8
    Client characterset:    utf8
    Conn.  characterset:    utf8
    UNIX socket:        /var/lib/mysql/mysql.sock
    Uptime:            8 days 15 hours 1 min 17 sec
    
    Threads: 2  Questions: 21  Slow queries: 0  Opens: 114  Flush tables: 1  Open tables: 0  Queries per second avg: 0.000
    --------------
    

    这时候, 你对比 mysql.default_socket、mysqli.default_socket、pdo_mysql.default_socket 和 通过 MySQL UNIX socket 发现不一样, 这就是 mysql_connect(); 警告的原因: PHP 配置 mysql 有问题.

    替换它们三[mysql已经不需要了]

    sed -i "s/mysqli.default_socket =/mysqli.default_socket = \/var\/lib\/mysql\/mysql.sock/" /etc/php/php.ini
    
    sed -i "s/pdo_mysql.default_socket=/pdo_mysql.default_socket = \/var\/lib\/mysql\/mysql.sock/" /etc/php/php.ini
    

    或者修改my.cnf的socket:

    [client]  
    socket=/var/lib/mysql/mysql.sock  
      
    [mysqld]  
    socket=/var/lib/mysql/mysql.sock 
    

后续会继续更新

你可能感兴趣的:(CentOs7 lnmp 安装记录)