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 安装记录的更多相关文章

  1. Ubuntu lnmp安装记录

    参考了: Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL 在访问 info.php的时候,我显示的是502错误.后面我参考了: Ubuntu15 ...

  2. CentOS7配置Nodejs环境安装记录

    今天购买了阿里云服务器,系统选的是CentOS7,下面记录下在它上面安装Nodejs环境的过程,本次操作是直接连接的阿里云服务器的管理终端. 1.由于是纯净的环境,先通过以下命令安装nodejs编译及 ...

  3. CentOS7.4安装MySQL踩坑记录

    CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...

  4. centos7 编译安装新版LNMP环境

    centos7 编译安装新版LNMP环境 环境版本如下: 1.系统环境:Centos 7 x86_64 2.NGINX:nginx-1.11.3.tar.gz 3.数据库:mariadb-10.0.2 ...

  5. centos7 yum 安装lnmp

    centos7 yum 安装lnmp   安装7.2把7.1改成7.2就行 使用第三方扩展epel源安装php7.2 #移除旧版php [root@web02 ~]# yum remove php-m ...

  6. LNMP安装与配置之CentOS7的安装。

    LNMP与LAMP是我们常见的两种网站服务器架构.LNMP代表的就是Linux系统下Nginx+MySQL+PHP/Python,LAMP代表的则是Linux系统下Apache+MySQL+PHP/P ...

  7. CentOS7一键安装RPM版LNMP(NGINX+PHP+MySQL)环境

    转载:简书 CentOS7一键安装RPM版LNMP(NGINX+PHP+MySQL)环境 - 简书 (jianshu.com) (需要配置nginx.conf文件) 转载:csdn (35条消息) V ...

  8. centos7 yum安装配置Lnmp和负载配置

    首先配置防火墙CentOS 7.0默认使用的是firewall作为防火墙1.关闭firewall: systemctl stop firewalld.service #停止firewallsystem ...

  9. centos7下安装php+memcached简单记录

    1)centos7下安装php 需要再添加一个yum源来安装php-fpm,可以使用webtatic(这个yum源对国内网络来说恐怕有些慢,当然你也可以选择其它的yum源) [root@nextclo ...

  10. 在 CentOS7 上安装 MySQL5.7

    在 CentOS7 上安装 MySQL5.7 1 通过 SecureCRT 连接到阿里云 CentOS7 服务器: 2 进入到目录 /usr/local/ 中: cd /usr/local/ 3 创建 ...

随机推荐

  1. Consul health check pass by Spring security filter

    https://stackoverflow.com/questions/35079930/consul-health-check-pass-by-spring-security-filter By d ...

  2. Qt音视频开发20-海康sdk本地播放

    一.前言 海康sdk中包含了MP4解码播放库,对应的API函数都是PlayM4开头的,顾名思义播放MP4,海康的视频默认可以保存成MP4文件,可以用通用的播放器来播放,这就是为啥前面好多篇文章讲到的各 ...

  3. AutoCAD 2020中文版建筑设计从入门到精通下载链接

    AutoCAD 2020中文版建筑设计从入门到精通下载链接 链接:https://pan.baidu.com/s/1EgFHOSKfPrr9Xdp3bNA-pA或https://pan.baidu.c ...

  4. 开源即时通讯IM框架MobileIMSDK的鸿蒙NEXT端开发快速入门

     相关链接: ① MobileIMSDK-鸿蒙端的详细介绍 ② MobileIMSDK-鸿蒙端的开发手册new(* 精编PDF版) 一.理论知识准备 您需要对鸿蒙Next和ArkTS开发有所了解: 1 ...

  5. Angular(一) - Typescript&Angular入门熟悉

    1. Typescript 1.1 安装typescript 1.2 typescript的小例子 1.2.1 新建一个index.ts 1.2.2 编译ts成js 1.2.3 查看生成的index. ...

  6. WPF 记录鼠标、触摸多设备混合输入场景问题

    本文记录在WPF应用中鼠标.触摸混合输入,鼠标事件抬起时不会有MouseUp事件触发的问题. 事件输入我们都知道有3类:鼠标.触摸.触笔,鼠标是windows系统出来就有的事件,后面加了触笔.触摸. ...

  7. 状压 DP 做题记录

    1.普通状态压缩 DP oi-wiki I.P1896 [SCOI2005] 互不侵犯 \(f_{i,j,st}\) 表示前 \(i\) 行中放置了 \(j\) 个国王,当前行状态为 \(st\) 的 ...

  8. WPF页面中将一个控件的宽度绑定到其父级用户控件的实际宽度

    该实际场景比较常见于,当存在多个用户控件页面拼成一个窗体,因为实际控件对应窗体的宽度并不能确定,也不是那种能指定的宽度或者高度,比如窗体分导航区域和内容区域,左侧导航区域可以直接指定宽度,而右侧内容区 ...

  9. Solution -「洛谷 P8477」 「GLR-R3」春分 下界证明?!

      前情提要:在「洛谷 P8477」 「GLR-R3」春分中,我们给出了 \(\frac{7}{6}n\pm\mathcal O(1)\) 的解法,但没能给出相关的下界证明.现在我们尝试给出一个未完全 ...

  10. 前端实现 HTML 网页转 PDF 并导出🤓

    有个新需求,当点击[下载]按钮时,直接将当前 html页面下载为 PDF.通过 html2canvas + jsPDF 可实现PDF单页下载,甚至是多页下载,记录分享一下~ 最后有源码,可自取 htm ...