centos7.5.1804源码编译安装lnmp

  1. 查看linux信息
    1.1 查看版本号
    lsb_release -a
    LSB Version: :core-4.1-amd64:core-4.1-noarch
    Distributor ID: CentOS
    Description: CentOS Linux release 7.5.1804 (Core)
    Release: 7.5.1804
    Codename: Core
    1.2 查看操作系统位数
    getconf LONG_BIT
    64
  2. 准备阶段
    2.1 创建目录,用于存放源码包
    mkdir -p /usr/local/lnmp_download # 创建多级目录,目录已存在,不会报错
    cd !$ # 进入上一次使用的路径
    2.2 安装C语言编译器:gcc、安装C++编译器:gcc-c++、安装gcc编译器:make
    yum -y install  gcc gcc-c++ make
    2.3 查看动态链接库的路径是否完整 - 不清楚作用
    [root@主机名 lnmp_download]# cat /etc/ld.so.conf
    include ld.so.conf.d/*.conf
    
  3. 安装nginx1.14.0
    3.1 安装openssl(用于ngxin的ssl)、openssl-devel(开发者调用openssl需要)、psmisc(管理/proc目录的程序;/proc是一个虚拟文件系统,例如系统内核、进程、外部设备及网络状态等)
    yum -y install openssl openssl-devel psmisc
    # 重新输入yum -y install openssl openssl-devel psmisc,查看版本号
    Package 1:openssl-1.0.2k-12.el7.x86_64 already installed and latest version
    Package 1:openssl-devel-1.0.2k-12.el7.x86_64 already installed and latest version
    Package psmisc-22.20-15.el7.x86_64 already installed and latest version
    3.2 安装GeoIP(根据用户IP精确的获得用户地理位置信息)、GeoIP-devel
    yum search GeoIP # 如果能搜索到GeoIP,则直接安装
    yum -y install GeoIP GeoIP-devel
    # 如果搜不到这个依赖就下面手动安装 - 未测试
    [root@主机名 download]# wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.6.tar.gz
    [root@主机名 download]# tar -zxvf GeoIP-1.4.6.tar.gz
    [root@主机名 download]# cd GeoIP-1.4.6
    [root@主机名 GeoIP-1.4.6]# ./configure
    [root@主机名 GeoIP-1.4.6]# make && make install
    [root@主机名 GeoIP-1.4.6]# cd ..
    [root@主机名 download]# wget 		http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
    [root@主机名 download]# mv GeoIP.dat.gz /usr/local/share/GeoIP/
    3.3 yum安装pcre(用于nginx的rewrite,是一个Perl库,包括 perl 兼容的正则表达式库;Perl,一种功能丰富的计算机程序语言)
    yum -y install pcre pcre-devel # 因为configure需要执行pcre的源码目录,所以不使用这种安装方式
    # 重新输入yum -y install pcre pcre-devel,查看版本号
    Package pcre-8.32-17.el7.x86_64 already installed and latest version
    Package pcre-devel-8.32-17.el7.x86_64 already installed and latest version
    3.3-new 编译安装pcre
    wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
    tar -zxvf pcre-8.40.tar.gz
    3.4 安装zlib(用于nginx的gzip)
    yum -y install zlib zlib-devel # 参考没有安装,这里故意在安装完nginx后,再安装zlib,看看有没有问题
    3.5 添加www为nginx的用户组和用户
    cat /etc/group|grep www # 查看是否存在www用户组
    groupadd www # 添加www用户组
    useradd -M -s /sbin/nologin -g www www # 添加www用户,-M不自动创建用户的登录目录,-s禁止用户使用shell登录,-g指定用户所属的群组
    groups www # 查询www用户所在的组和组内成员
    3.6 进入nginx官网,复制下载地址
    http://nginx.org/en/download.html # 官网
    http://nginx.org/download/nginx-1.14.0.tar.gz # 下载地址
    wget http://nginx.org/download/nginx-1.14.0.tar.gz # 下载
    tar -zxvf nginx-1.14.0.tar.gz # 解压,z表示 tar 包是被 gzip 压缩过的,所以解压时需要用 gunzip 解压;x :表示从 tar 包中把文件提取出来;v表示显示详细信息;f 指定被处理的文件是 xxx.tar.gz
    cd nginx-1.14.0 # 进入解压目录
    # 下面这一步用来生成 Makefile,为编译做准备,你可以通过在 configure 后加上参数来对安装进行控制
    [root@主机名 nginx-1.12.0]# ./configure \
    --user=www \
    --group=www \
    --prefix=/usr/local/nginx \ # 软件安装在/usr/local/nginx下,执行文件安装在/usr/local/nginx/bin下
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --with-http_stub_status_module \ # 加载监控模块
    --with-http_gzip_static_module \ # 加载gzip模块
    --with-http_ssl_module \ # 加载ssl模块
    --with-http_v2_module \ # 加载HTTP/2模块
    --with-pcre=../pcre-8.40\ # 需要指定pcre的源码目录
    --with-http_geoip_module \
    --with-mail \
    --with-mail_ssl_module
    # 编译并安装
    make && make install
    # 清除临时文件 Makefile objs
    make clean
    # 配置启动脚本
    cd ..
    [root@主机名 download]# cat>/usr/lib/systemd/system/nginx.service<<-'EOF' # <<-'EOF'表示以EOF结束,去除EOF前的制表符tab,但是测试去除制表符时,没有效果
    [Unit]
    Description=The nginx HTTP and reverse proxy server
    After=network.target remote-fs.target nss-lookup.target
    [Service]
    Type=forking
    PIDFile=/var/run/nginx.pid
    # Nginx will fail to start if /var/run/nginx.pid already exists but has the wrong
    # SELinux context. This might happen when running `nginx -t` from the cmdline.
    # https://bugzilla.redhat.com/show_bug.cgi?id=1268621
    ExecStartPre=/usr/bin/rm -f /var/run/nginx.pid
    ExecStartPre=/usr/local/nginx/sbin/nginx -t
    ExecStart=/usr/local/nginx/sbin/nginx
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s QUIT $MAINPID
    KillSignal=SIGQUIT
    TimeoutStopSec=5
    KillMode=process
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    EOF
    # 对于新创建的unit文件或,修改了的unit文件,要通知systemd重载此配置文件
    systemctl daemon-reload
    # 修改配置文件,设置nginx的运行用户和运行用户组
    vi /etc/nginx/nginx.conf
    user nobody改为user www www
    # -R指定目录以及其子目录下的所有文件;[所有者][:[组]]
    chown -R www:www /usr/local/nginx/html
    # 启动nginx
    systemctl start nginx
    # curl或者浏览器访问;查看外网ip:curl http://members.3322.org/dyndns/getip
    curl 外网ip
    
  4. 安装mysql5.7.23
    4.1 准备阶段
    # 安装依赖,cmake(编译工具,mysql5.5以后采用cmake编译)、ncurses-devel(字符终端下屏幕控制的基本库)、bison(语法分析器生成器)
    [root@主机名 lnmp_download]# yum -y install cmake ncurses-devel bison bison-devel
    # 从官网下载mysql5.7.23,选择source code、generic linux
    wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.23.tar.gz
    4.2 解压文件并设置用户组
    tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz # 解压
    mv mysql-5.7.23-linux-glibc2.12-x86_64 mysql-5.7.23 # 重命名目录
    cat /etc/group|grep mysql # 查看是否存在mysql用户组
    userdel mysql # 删除用户
    groupdel mysql # 删除用户组
    groupadd mysql # 添加mysql用户组
    useradd -r -M -s /sbin/false -g mysql mysql # 添加mysql用户,-r创建系统目录,-M不自动创建用户的登录目录,-s  /sbin/false是最严格的禁止login选项,一切服务都不能用,没有任何提示,-g指定用户所属的群组
    4.3 配置编译选项、生成Makefile等文件
    [root@主机名 mysql-5.7.23]# cmake \
    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DMYSQL_DATADIR=/usr/local/mysql/data \
    -DSYSCONFDIR=/etc/mysql \ # my.cnf存放位置,这里与参考不同
    -DMYSQL_USER=mysql \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DWITH_MEMORY_STORAGE_ENGINE=1 \
    -DWITH_READLINE=1 \ # 跨平台程序库,提供了交互式的文本编辑功能
    -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \
    -DMYSQL_TCP_PORT=3306 \
    -DENABLED_LOCAL_INFILE=1 \ # 允许从本地导入数据
    -DENABLE_DOWNLOADS=1 \ # 是否要下载可选的文件。例如,启用此选项(设置为1),cmake将下载谷歌所使用的测试套件运行单元测试。
    -DWITH_PARTITION_STORAGE_ENGINE=1 \ # 安装数据库分区功能
    -DEXTRA_CHARSETS=all \ # 安装所有扩展字符集
    -DDEFAULT_CHARSET=utf8mb4 \
    -DDEFAULT_COLLATION=utf8mb4_general_ci \
    -DWITH_DEBUG=0 \ # 默认禁用调试模式
    -DMYSQL_MAINTAINER_MODE=0 \ #指明是否启用MYSQL maintainer-specific开发环境,如启用,则编译器会将编译时出现的警告转为错误
    -DWITH_SSL:STRING=bundled \ # 通讯支持ssl协议
    -DWITH_ZLIB:STRING=bundled \ # 允许使用zlib库
    -DWITH_BOOST=./include/boost_1_59_0/ \ # 一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一
    -DDOWNLOAD_BOOST=1
    未加注释:
    cmake \
    -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DMYSQL_DATADIR=/usr/local/mysql/data \
    -DSYSCONFDIR=/etc/mysql \
    -DMYSQL_USER=mysql \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DWITH_MEMORY_STORAGE_ENGINE=1 \
    -DWITH_READLINE=1 \
    -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock \
    -DMYSQL_TCP_PORT=3306 \
    -DENABLED_LOCAL_INFILE=1 \
    -DENABLE_DOWNLOADS=1 \
    -DWITH_PARTITION_STORAGE_ENGINE=1 \
    -DEXTRA_CHARSETS=all \
    -DDEFAULT_CHARSET=utf8mb4 \
    -DDEFAULT_COLLATION=utf8mb4_general_ci \
    -DWITH_DEBUG=0 \
    -DMYSQL_MAINTAINER_MODE=0 \
    -DWITH_SSL:STRING=bundled \
    -DWITH_ZLIB:STRING=bundled \
    -DWITH_BOOST=./include/boost_1_59_0/ \
    -DDOWNLOAD_BOOST=1
    4.4 编译、安装mysql
    make && make install
    4.5 更改权限、定义用户所属目录
    chown -R mysql:mysql /usr/local/mysql
    cd /usr/local/mysql
    4.6 初始化mysql
    已废弃:
    ./bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
    使用中:
    ./bin/mysqld --defaults-file=/etc/mysql/my.cnf --initialize-insecure
    4.7 复制、修改配置文件
    # 大概5.7版本以上,mysql不再提供my-default.cnf
    echo yes|cp support-files/my-default.cnf /etc/mysql/my.cnf # echo yes表示覆盖文件不提示
    4.8 手动创建存放sock文件的目录、tmp目录
    mkdir /var/run/mysql
    chown -R mysql:mysql /var/run/mysql
    mkdir tmp redo_log undo_log
    chown -R mysql:mysql tmp redo_log undo_log
    4.9 启动mysql,访问客户端,修改初始密码
    ./support-files/mysql.server start # 可以用systemctl start mysqld替代这个步骤
    bin/mysql -uroot -p
    use mysql;
    select user from mysql.user;
    delete from mysql.user where user=''  limit 1; # 删除mysql的匿名用户
    update user set authentication_string=password("123456") where user="root" limit 1;
    flush privileges; # 将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里;让MySQL用户数据和权限修改后,在不重启MySQL服务的情况下直接生效
    exit
    4.10 配置启动脚本
    [root@主机名 mysql]# cat>/usr/lib/systemd/system/mysqld.service<<-'EOF'
    Description=MySQL Community Server
    After=network.target
    After=syslog.target
    [Install]
    WantedBy=multi-user.target
    Alias=mysql.service
    [Service]
    User=mysql
    Group=mysql
    # systemctl status就是根据pid来判断服务的运行状态的,修改目录mysqld为mysql
    PIDFile=/var/run/mysql/mysqld.pid
    # 以root权限来启动程序
    PermissionsStartOnly=true
    # 设置程序启动前的必要操作。例如初始化相关目录等等
    #ExecStartPre=/usr/local/mysql/bin/mysql-systemd-start pre
    # 启动服务
    ExecStart=/usr/local/mysql/bin/mysqld_safe
    # Don't signal startup success before a ping works
    # ExecStartPost=/usr/local/mysql/bin/mysql-systemd-start post
    # Give up if ping don't get an answer
    TimeoutSec=600
    # Restart配置可以在进程被kill掉之后,让systemctl产生新的进程,避免服务挂掉
    Restart=always
    PrivateTmp=false
    EOF
    [root@主机名 mysql]# systemctl daemon-reload
    4.11 把mysql的安装目录下的bin加入环境变量里下面俩条命令就行了
    echo 'export PATH=/usr/local/mysql/bin:$PATH'>>/etc/profile
    source /etc/profile # 使修改生效
    # 以后进入mysql客户端输入下面命令就可以了
    mysql -uroot -p
    4.12 安装并不顺利,产生如下错误
     a、Table 'mysql.plugin' doesn't exist # 检查初始化失败生成的mysql-error.log
    
  5. 安装php7.1.23
    5.1 安装依赖,bzip2-devel(无损压缩软件)、libxslt (XSL 指扩展样式表语言, 它是一个 XML 文档的样式表语言,将xml转换成其他文档)、libxml2(解析xml文件的库)、autoconf( 用来生成自动配置软件源代码脚本(configure)的 工具)、freetype(可移植的字体引擎)、glibc(c运行库)、procps-ng(进程管理和内存管理工具,通过/proc目录搜集进程的信息)
    yum -y install openssl openssl-devel bzip2-devel libxslt libxslt-devel libxml2 libxml2-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel  zlib zlib-devel glibc glibc-devel procps-ng
    5.2 安装加密库
    yum search libmcrypt
    yum -y install libmcrypt libmcrypt-devel
    5.3 安装curl扩展
    下载地址:https://curl.haxx.se/download/
    cd /usr/local/lnmp_download
    wget https://curl.haxx.se/download/curl-7.61.1.tar.gz
    tar -zxvf curl-7.61.1.tar.gz
    cd curl-7.61.1
    ./configure --prefix=/usr/local/curl
    make && make install
    5.4 安装mhash(php加密方式扩展库,如MD5,SHA1),lnmp_download/php-7.1.23/ext/下有则不安装
    yum search mhash
    yum -y install mhash mhash-devel
    5.5 安装php
    cd ..
    # 下载地址,使用香港镜像
    http://php.net/get/php-7.1.23.tar.gz/from/a/mirror
    wget http://hk1.php.net/get/php-7.1.23.tar.gz/from/this/mirror -O php-7.1.23.tar.gz
    tar -zxvf php-7.1.23.tar.gz
    cd php-7.1.23
    ./configure --prefix=/usr/local/php \
    --enable-bcmath \ # 高精度数学函数
    --enable-calendar \ # 日历扩展
    --enable-ftp \
    --enable-mbstring \ # 为确保不同编码的语言在PHP程序中能够正常显示
    --enable-pcntl \ # 开启进程控制支持
    --enable-shmop \ # 开启共享内存
    	# 目前的应用程序通过使用远程过程调用(RPC)在诸如 DCOM 与 CORBA 等对象之间进行通信,但是 HTTP 不是为此设计的。RPC 会产生兼容性以及安全问题;防火墙和代理服务器通常会阻止此类流量。	
    通过 HTTP 在应用程序间通信是更好的方法,因为 HTTP 得到了所有的因特网浏览器及服务器的支持。SOAP 就是被创造出来完成这个任务的。
    SOAP 提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。
    --enable-soap \
    --enable-sockets \
    --enable-sysvsem \ # 开启 [系统V信号量] 支持,用于进程控制
    --enable-sysvmsg \ # 消息队列
    --enable-zip \
    --enable-inline-optimization \
    --enable-mbregex \
    --enable-xml \
    --enable-fpm \
    --enable-fastCGI \ # 默认开启,不需要此参数,支持fastcgi方式启动PHP
    --enable-cgi \
    --enable-inline-optimization \
    --enable-session \
    --enable-opcache \ # opcache 缓存优化
    --enable-cli \  # cli 其实默认就是开启的
    --enable-gd-native-ttf \ # 支持TrueType字符串函数库
    --enable-magic-quotes \ # 魔术引用的支持
    --disable-rpath \ # 关闭额外的运行库文件
    --disable-debug \ # 关闭调试模式
    --with-fpm-user=www  \ # 新增
    --with-fpm-group=www \ # 新增
    --with-iconv \ # 默认开启
    --with-bz2 \
    --with-curl=/usr/local/curl \
    --with-freetype-dir=/usr/lib64 \
    --with-gettext \ # 实现多国语系支持
    --with-gd \ # php处理图形的扩展库
    --with-jpeg-dir=/usr/lib64 \
    --with-openssl \
    --with-png-dir=/usr/lib64 \
    --with-xmlrpc \ # 是一种使用HTTP协议传输XML格式文件来获取远程程序调用(Remote Procedure Call)的传输方式
    --with-xsl \ # 扩展了libXML2库 ,需要libxslt软件
    --with-mcrypt \
    --with-mhash=/usr/lib64 \
    --with-mysql \ # 已被php7废除
    # --with-mysqli \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \ # 推荐使用 mysqlnd 驱动
    --with-zlib \
    --with-mysql-sock= /var/run/mysql/mysql.sock \ # 不设置,就会自动搜索
    --with-config-file-path=/usr/local/php/etc
    未加注释:
    ./configure --prefix=/usr/local/php \
    --enable-bcmath \
    --enable-calendar \
    --enable-ftp \
    --enable-mbstring \
    --enable-pcntl \
    --enable-shmop \
    --enable-soap \
    --enable-sockets \
    --enable-sysvsem \
    --enable-sysvmsg \
    --enable-zip \
    --enable-inline-optimization \
    --enable-mbregex \
    --enable-xml \
    --enable-fpm \
    --enable-cgi \
    --enable-inline-optimization \
    --enable-session \
    --enable-opcache \
    --enable-cli \
    --enable-gd-native-ttf \
    --disable-rpath \
    --with-fpm-user=www  \
    --with-fpm-group=www \
    --with-iconv \
    --with-bz2 \
    --with-curl=/usr/local/curl \
    --with-freetype-dir=/usr/lib64 \
    --with-gettext \
    --with-gd \
    --with-jpeg-dir=/usr/lib64 \
    --with-openssl \
    --with-png-dir=/usr/lib64 \
    --with-xmlrpc \
    --with-xsl \
    --with-mcrypt \
    --with-mhash=/usr/lib64 \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \
    --with-zlib \
    --with-config-file-path=/usr/local/php/etc
    # 编译
    make
    # 安装
    make install
    # 配置
    cp php.ini-development /usr/local/php/etc/php.ini # 修改date.timezone为PRC
    cd /usr/local/php
    cp etc/php-fpm.conf.default etc/php-fpm.conf
    cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf
    [root@主机名php]# cat>/usr/lib/systemd/system/php-fpm.service<<-'EOF'
    [Unit]
    Description=php
    After=network.target
    [Service]
    Type=forking
    ExecStart=/usr/local/php/sbin/php-fpm
    ExecStop=/bin/pkill -9 php-fpm
    PrivateTmp=true
    [Install]
    WantedBy=multi-user.target
    EOF
    [root@主机名php]# systemctl daemon-reload
    5.5.1 把php加到环境变量
    echo 'export PATH=/usr/local/php/bin:$PATH'>>/etc/profile
    source /etc/profile
    5.5.2 启动php-fpm
    systemctl start php-fpm
    
  6. 参考
    6.1 源码编译安装lnmp
    https://zhangguanzhang.github.io/2017/03/15/lnmp/

你可能感兴趣的:(web)