• 手动编译PHP开发环境


    手动编译PHP开发环境

    这是一篇来自深夜加班的手稿

    问题复盘

    你有没有遇到过这样的情况,部署了集成环境,每次添加扩展的时候,总是需要找一堆的配置文件的位置(其实很多人都能熟练使用集成环境)

    你有没有遇到过这样的情况,去面试,面试官问你:有没有自己手动编译过环境? 你却回答 我一般都使用集成环境

    你有没有遇到过这样的问题,本来自己的服务器配置就很low(有的甚至使用的是vps)基本上使用lnmp或者bt或者其他等等集成环境 但是他们的优缺点十分明显

    这可能就是我现在需要手动编译环境的理由吧

    部署环境及配置

    linux centos 7.3
    阿里云香港轻量级应用服务器 34/月
    购买推荐链接:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=4jm8fecv

    目标环境

    php 7.2
    mysql 5.7.2
    nginx 1.1.8

    安装部署环境开始

    考虑到纯净安装. 所以首先我们需要一台干净的服务器(为了这个 我把博客的全部东西干掉了直接导致服务器停运24小时)

    首先我们确定安装目录

    我是在根目录部署了www目录直接使用命令

    mkdir -p /www/{lnmp,web,source} `
    

    这里创建的 www
    /lnmp存放安装软件
    /web 存放程序代码
    /source 存放安装软件

    首先安装PHP

    PHP下载网址:
    http://am1.php.net/distributions/php-7.2.1.tar.gz

    所有的操作全部在 我们自己建立的www/lnmp 下

    一、更换yum源

    这对我们很重要,因为centos 内部的源一般都是国外的站点,我使用的是阿里云的服务器 所以这里我也是用阿里云的yum源

    yum源的地址在

    /etc/yum.repos.d/
    

    将下面的默认Centos-Base.repo 进行备份

    mv /etc/yum.repos.d/Centos-Base.repo.bak
    

    进入阿里云的镜像地址:http://mirrors.aliyun.com/

    在阿里云的镜像地址找到自己对应的版本然后使用wget 进行下载

    没有wget的,提前使用yum 安装一个

    然后依次执行以下命令

    yum clean all
    yum makecache
    yum update
    

    然后在裸机上面安装必要的扩展

    
    yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel
    

    上面安装的都是必要的一些扩展

    我们还可以使用yum 对系统的内核进行更新

    yum install epel-release -y // 此步骤可以省略
    

    安装PHP

    首先切换到我们的www/lnmp目录下

    然后使用tar -zxvf php-7.2.1.tar.gz 进行解压

    解压完毕之后 我们进入 解压过的目录

    设置变量并开始源码编译:

    cp -frp /usr/lib64/libldap* /usr/lib/
    

    这里我们使用的是自定义的目录所以编译配置也需要改变

    ./configure --prefix=/www/source/php 
    --with-config-file-path=/www/source/php/etc 
    --enable-fpm 
    --with-fpm-user=www 
    --with-fpm-group=www 
    --enable-mysqlnd 
    --with-mysqli=mysqlnd 
    --with-pdo-mysql=mysqlnd 
    --enable-mysqlnd-compression-support 
    --with-iconv-dir 
    --with-freetype-dir 
    --with-jpeg-dir 
    --with-png-dir 
    --with-zlib 
    --with-openssl 
    --with-libxml-dir 
    --enable-xml 
    --disable-rpath 
    --enable-bcmath 
    --enable-shmop 
    --enable-sysvsem 
    --enable-inline-optimization 
    --with-curl 
    --enable-mbregex 
    --enable-mbstring 
    --enable-intl 
    --with-libmbfl 
    --enable-ftp 
    --with-gd 
    --enable-gd-jis-conv 
    --with-openssl 
    --with-mhash 
    --enable-pcntl 
    --enable-sockets 
    --with-xmlrpc 
    --enable-zip 
    --enable-soap 
    --with-gettext 
    --disable-fileinfo 
    --enable-opcache 
    --with-pear 
    --enable-maintainer-zts 
    --with-ldap=shared 
    --without-gdbm
    

    此处重点要考

    php7.2 去掉了很多原先php5 - php7.0的扩展 如之前的加密扩展
    mcrypt 还有很多 这里我就不一一举例了

    编译完毕之后,我们进行下一步

    make -j 4 && make install
    

    接下来需要等待大约10-20分钟 这个根据我们的服务器而定 如果觉得慢我们可以使用

    make -j 8 && make install
    

    上面两条命令都可以使用

    接下来配置php.ini 文件:

    cp php.ini-development /www/source/php/ect/php.ini
    
    cp /www/source/php/etc/php-fpm.conf.default /www/source/php/etc/php-fpm.conf
    
    cp /www/source/php/etc/php-fpm.d/www.conf.default /www/source/php/etc/php-fpm.d/www.conf
    
    

    上述是我的配置文件地址,如果你出现错误 或者找不到文件位置,请按照你自己配置的文件安装目录进行查询
    也可以使用 find 查询

    配置php.ini

    我直接贴出我修改的一些配置 仅供参考 可以根据个人情况进行调整

    expose_php = Off
    short_open_tag = ON
    max_execution_time = 30
    date.timezone = Asia/Shanghai
    extension= /www/source/php/lib/php/extensions/no-debug-zts-20170718/ldap.so
    zend_extension = /www/source/php/lib/php/extensions/no-debug-zts-20170718/opcache.so
    opcache.memory_consumption=128
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=4000
    opcache.revalidate_freq=60
    opcache.fast_shutdown=1
    opcache.enable_cli=1
    disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru
    

    配置www.conf (此处为配置php-fpm 可略)

    到了这一步的时候 我们需要建立对应的用户www

    groupadd www
    useradd -g www www
    

    然后创建存放 php-cgi.sock 的目录

    mkdir /var/run/www/
    chown -R www:www /var/run/www
    

    然后配置www.conf文件

     vim /www/source/php/etc/php-fpm.d/www.conf
    

    配置详解

    slowlog = var/log/slow.log
    listen = /var/run/www/php-cgi.sock
    

    其他的都不需要改变

    然后配置php-fpm.conf

    pid = /usr/local/php/var/run/php-fpm.pid
    

    至此php7已经安装完成。说明:禁用php函数,如果程序需要这些函数,可以取消禁止,新手建议忽略此步骤。

    创建system系统单元文件php-fpm启动脚本:
    vim /usr/lib/systemd/system/php-fpm.service
    

    直接 编写

    [Unit]
    Description=The PHP FastCGI Process Manager
    After=syslog.target network.target
    
    [Service]
    Type=simple
    PIDFile=/usr/local/php/var/run/php-fpm.pid
    ExecStart=/www/source/php/bin/php-fpm --nodaemonize --fpm-config /www/source/php/etc/php-fpm.conf
    ExecReload=/bin/kill -USR2 $MAINPID
    
    [Install]
    WantedBy=multi-user.target
    

    将php-fpm服务启动并加入开机自启动

    systemctl enable php-fpm.service
    systemctl restart php-fpm.service
    

    配置全局变量

    接下来我们就已经配置完毕了试一试php-v

    是不是突然报错 , 没有php 不要慌

    这是因为我们没有把PHP 加入全局变量的原因

    vim /etc/profile
    // 最后一行加入
    PATH=$PAHT:/www/source/php/bin
    // 保存退出
     source /etc/profile
    

    再次执行 php -v
    我们会显示

    PHP 7.2.1 (cli) (built: Jul 26 2019 10:50:53) ( ZTS )
    Copyright (c) 1997-2017 The PHP Group
    Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.2.1, Copyright (c) 1999-2017, by Zend Technologies
    

    安装mysql

    实现我们需要安装mysql 安装的一些依赖 这个大多都是使用yum安装 可以直接百度

    // 我这边直接使用
    
    yum install -y gcc gcc-c++ make sudo autoconf libtool-ltdl-devel gd-devel 
            freetype-devel libxml2-devel libjpeg-devel libpng-devel 
            openssl-devel curl-devel patch libmcrypt-devel 
            libmhash-devel ncurses-devel bzip2 
            libcap-devel ntp sysklogd diffutils sendmail iptables unzip cmake
    

    接下来创建mysql的用户组和用户

    groupadd mysql
    useradd -r mysql -g mysql
    

    下载必要的包

    安装mysql5.6的时候就已经使用cmake了 我们这里使用mysql 5.7
    还需要安装一个boost的包

    
    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20.tar.gz
    
    wget --no-check-certificate http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
    
    

    然后解压mysql 5.7
    进入mysql5.7目录

    然后将 我们下载的 boots 包 移动到 解压完毕的mysql文件夹内部

    然后我们新建一个 configure 文件夹 接下来我们将在该文件夹内 完成整套编译工作

    然后贴出我的配置

    cmake .. -DBUILD_CONFIG=mysql_release 
    -DINSTALL_LAYOUT=STANDALONE 
    -DCMAKE_BUILD_TYPE=RelWithDebInfo 
    -DENABLE_DTRACE=OFF 
    -DWITH_EMBEDDED_SERVER=OFF 
    -DWITH_INNODB_MEMCACHED=ON 
    -DWITH_SSL=bundled 
    -DWITH_ZLIB=system 
    -DCMAKE_INSTALL_PREFIX=/www/source/mysql/ 
    -DINSTALL_PLUGINDIR="/www/source/mysql/lib/plugin" 
    -DDEFAULT_CHARSET=utf8 
    -DDEFAULT_COLLATION=utf8_general_ci 
    -DWITH_EDITLINE=bundled 
    -DFEATURE_SET=community 
    -DCOMPILATION_COMMENT="MySQL Server (GPL)" 
    -DWITH_DEBUG=OFF 
    -DWITH_BOOST=..
    

    关于这些配置命令的名称 网络上都有介绍 我就不过多的讲述了

    如果出现编译失败 那么 一定要删除当前目录下的
    rm -rf CMakeCache.txt 文件

    当我们编译完成之后 执行

    make && make install
    

    接下来就是耐心等待20分钟左右

    初始化数据库

    新建数据库文件夹以及日志文件夹,并更改用户为mysql:
    mkdir /www/source/mysql/mysql_data
    mkdir /www/source/mysql/log
    chown -R mysql:mysql /www/source/mysql/mysql_data
    chown -R mysql:mysql /www/source/mysql/log
    // 在日志文件中建立 error.log 文件
    // 赋权限整个目录及其文件夹
    chmod -R 777 /www/source/mysql/log
    
    修改配置文件
    # vim /etc/my.cnf
    [mysqld]
    port=3306
    datadir=/www/source/mysql/mysql_data
    log_error=/www/source/mysql/log/error.log
    basedir=/www/source/mysql/
    // 注意:my.cnf文件有以下配置
    socket=/www/source/mysql/mysql_data/mysql.sock
    // 需要手动建立mysql.sock,并赋值读写执行权限
    chmod -R 777 mysql.sock
    
    
    初始化数据库
    /var/mysql/bin/mysqld  --initialize --user=mysql
    

    去查看刚刚创建的文件夹内 是否存在生成的文件

    配置启动文件及环境变更

    配置启动文件
    cp /var/mysql/support-files/mysql.server /etc/init.d/mysqld
    
    修改启动文件
    vim /etc/init.d/mysqld
    
    # 找到如下二行:
    basedir=
    datadir=
    # 修改为:
    basedir=/www/source/mysql/
    datadir=/www/source/mysql/mysql_data/
    

    启动mysql

    /etc/init.d/mysqld start
    

    可以看到提示,已经成功启动。当然你也可以使用systemctl来启动MySQL,但执行后,不会有任何提示。

    systemctl start mysqld
    

    然后我们将mysql 加入全局变量

    这次我试了很多方式 但是没有成功 所以 我直接建立了一个软链

    当我们执行某命令的时候 服务器首先去看/user/bin这个文件夹

    ln -s /www/source/mysql/bin /usr/bin
    

    修改mysql 密码

    从mysql5.7开始 mysql不在支持空密码登录 所以我们直接查看密码

    cat /www/source/mysql/log/error.log |grep 'A temporary password'
    2019-07-13T06:28:23.096812Z 1 [Note] A temporary password is generated for root@localhost: wa&sk371_,US
    

    后面的就是我们的mysql 密码了

    然后我们直接使用mysql登录进去

    mysql> alter user 'root'@'localhost' identified by 'your_password';
    

    ok!!!!

    安装nginx

    准备工作

    安装nginx 的时候 我们首先还需要安装3个依赖包

    pcre:在使用 nginx 的 rewrite 模块的时候,需要有pcre库的支持
    openssl:在使用ssl功能时,需要有 openssl库的支持
    zlib:在使用gzip模块时,需要有zlib库的支持。
    而这三个模块都是我们常用的,所以这3个依赖包还是要安装的。

    1、安装pcre

    首先下载这个包

    wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.36/pcre-8.36.tar.gz
    tar -zxvf pcre-8.36.tar.gz
    cd pcre-8.36
    ./configure
    make && make install
    
    2、安装 openssl
    wget https://www.openssl.org/source/openssl-1.1.0k.tar.gz
    tar -zxvf openssl-1.1.0k.tar.gz
    cd openssl-1.1.0k
    ./config
    make && make install
    
    3、安装zlib
    wget https://zlib.net/zlib-1.2.11.tar.gz
    tar -zxvf zlib-1.2.11.tar.gz
    cd zlib-1.2.11
    CFLAGS="-O3 -fPIC" ./configure
    make && make install
    

    编译nginx

    因为nginx的命令有很多 我们可以使用

    ./configure --help
    

    这里我推荐使用

    ./configure --user=www --group=www --prefix=/www/source/nginx --with-pcre=/www/lnmp/pcre-8.36 --with-zlib=/www/lnmp/zlib-1.2.11 --with-openssl=/www/lnmp/openssl-1.1.0k
    

    上面的命令是和我们下载的pcre以及openssl and zlib要关联上的 具体看你的配置

    执行完毕之后 我们执行

    make && make install
    // 然后
    ll /www/source/
    

    下面存在nginx 说明我们安装成功

    然后我们使用

    cd /www/source/nginx/conf
    
    

    到这里的时候我们基本上已经安装完毕

    本次手动编译nginx+php+mysql 就到这里

    关于nginx的配置 和 php的问题

    请继续关注我的博客

  • 相关阅读:
    PAT 1035. 插入与归并(25)
    PAT 1034. 有理数四则运算(20)
    PAT 1033. 旧键盘打字(20)
    PAT 1032. 挖掘机技术哪家强(20)
    PAT 1031. 查验身份证(15)
    PAT 1030. 完美数列(25)
    PAT 1029. 旧键盘(20)
    PAT 1028. 人口普查(20)
    PAT 1027. 打印沙漏(20)
    PAT 1026. 程序运行时间(15)
  • 原文地址:https://www.cnblogs.com/depravity/p/11307472.html
Copyright © 2020-2023  润新知