zoukankan      html  css  js  c++  java
  • 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 
      

    后续会继续更新

  • 相关阅读:
    Java虚拟机(第二版) 学习笔记之Class类文件的结构
    JVM之深入浅出之垃圾收集算法
    Java虚拟机(第二版) 学习笔记之OutOfMemoryError
    Java虚拟机(第二版) 学习笔记
    平滑加权轮询负载均衡(轮询)算法
    java AQS(AbstractQueuedSynchronizer)同步器详解
    mybatis Interceptor拦截器代码详解
    aspectj编程简介
    Java并发编程阅读笔记-Java监视器模式示例
    我们该怎么结合日志做优化
  • 原文地址:https://www.cnblogs.com/YangJieCheng/p/13430798.html
Copyright © 2011-2022 走看看