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
-
可能出现的错误
-
安装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
-
error: Package requirements (sqlite3 > 3.7.4) were not met
#centos yum install libsqlite3x-devel -y
-
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
-
编译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即可。
-
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
-
php安装zip报错的解决方法
#在安装完新版的 libzip 时可能会出现打不到 zipconf.h,手动复制一下 cp /usr/local/lib/libzip/include/zipconf.h /usr/local/include/zipconf.h
-
我的阿里云内存1GB最终没有安装成功PHP7.4.7,无奈只有使用7.3了。上面的方式没有成功,等下次我在试试吧
-
-
关于生产环境是源码安装还是第三方工具安装,我在网上找了一些网友的见解地址
- 只是 lnmp 的话,自己一个一个装更好, nginx/openresty , php 可以自己编译, mysql 的话装源里面的就可以,如果要长时间运行的话,不推荐一件安装包,更新维护不太好搞
- 公司用的话可以买 cpanel , directadmin 这种带有控制面板的集成环境多好,又不用担心后门什么的,又方便管理
- 想用容器,单个服务用 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