01月03, 2018

编译方式安装 LNMP 环境

编译方式安装 LNMP 环境

企业中常见的软件安装方式,可以自己指定安装版本。 如有漏洞需更新软件包也能够更快、更及时的更新到最新版/指定版。 每个软件的编译也可以自定义模块的安装,更符合企业的定制需要。

全文中使用的是阿里云ECS,系统版本为Centos7.x。

编译安装 Nginx

相关源码包准备

# Nginx/Openssl/PCRE/zlib
wget https://nginx.org/download/nginx-1.12.2.tar.gz
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
wget https://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz
wget http://www.zlib.net/zlib-1.2.11.tar.gz

解压与编译安装

tar xzf nginx-1.12.2.tar.gz
tar xzf openssl-1.1.0g.tar.gz
tar xzf pcre-8.41.tar.gz
tar xzf zlib-1.2.11.tar.gz

# 注 1:
# openssl、pcre、zlib也可以用yum方式安装,编译选项后面就不用跟路径了。
# 但是,yum方式安装的版本通常比较低,所以编译安装的灵活性之一是可以自定义版本。
# 注 2:
# 用户和组可以自定义,根据自己的实际情况创建即可。
# useradd -M -s /sbin/nologin nginx

cd nginx-1.12.2
./configure \
--prefix=/opt/soft/nginx \
--user=nginx \
--group=nginx \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module  \
--with-http_xslt_module \
--with-http_image_filter_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--http-client-body-temp-path=/opt/soft/nginx/cache/body_temp \
--http-proxy-temp-path=/opt/soft/nginx/cache/proxy_temp \
--http-fastcgi-temp-path=/opt/soft/nginx/cache/fastcgi_temp \
--http-uwsgi-temp-path=/opt/soft/nginx/cache/uwsgi_temp \
--http-scgi-temp-path=/opt/soft/nginx/cache/scgi_temp \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre=../pcre-8.41 \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.0g 

make
make install

# 编译安装后 cache 目录不会自行创建,所以我需要手动创建。
mkdir -p /opt/soft/nginx/cache/
/opt/soft/nginx/sbin/nginx  -t

配置环境变量与服务管理

# 全局环境变量: 针对所有用户修改 /etc/profile
# 用户环境变量: 针对当前用户修改 ~/.bash_profile (以此为例)

# vim ~/.bash_profile
# 修改 PATH=$PATH:$HOME/bin 为
PATH=$PATH:$HOME/bin:/opt/soft/nginx/sbin

# 重新登录终端 或 source ~/.bashrc

nginx -t        # 语法配置检查
nginx           # 直接执行nginx启动服务
nginx -s reload # 重新加载服务
nginx -s stop   # 关闭服务

二进制版本的 Mysql

mysql提供一种解压即用的包,非常的简单实用。 为了方便在命令行直接执行命令,可以将解压/软链后的路径加入到PATH中。 方法与上述nginx一致,不再赘述。

# 准备工作
# mysql依赖libaio库
yum install libaio
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

# 解压与软链
tar xzf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz -C /opt/soft/
ln -s /opt/soft/mysql-5.7.20-linux-glibc2.12-x86_64 /opt/soft/mysql

# 创建目录结构
mkdir -p /opt/data/mysql/
mkdir -p /opt/log/mysql/
mkdir -p /opt/run/mysql
chown -R mysql:mysql /opt/data/mysql /opt/log/mysql /opt/run/mysql

创建配置文件

# vim /opt/soft/mysql/my.cnf
# 写入以下内容
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
#
## client
[client]
socket = /tmp/mysql.sock
#
## mysqld
[mysqld]
user = mysql
port = 3306
basedir = /opt/soft/mysql
datadir = /opt/data/mysql
tmpdir = /tmp
socket = /tmp/mysql.sock
pid_file = /opt/run/mysql/mysql.pid
explicit_defaults_for_timestamp = true
#
##logging
log_output=file
slow_query_log_file = /opt/log/mysql/slow.log
general_log_file = /opt/log/mysql/general.log
log_error = /opt/log/mysql/mysql.err

初始化数据库

# --initialize-insecure 不为root生成随机密码
# --initialize 为root生成随机密码并设置为过期
#
mysqld --defaults-file=/opt/soft/mysql/my.cnf --initialize --user=mysql
mysql_ssl_rsa_setup --defaults-file=/opt/soft/mysql/my.cnf --user=mysql

启动服务

mysqld_safe --defaults-file=/opt/soft/mysql/my.cnf &

# 初始密码在日志中
grep 'pass' /opt/log/mysql/mysql.err

# 修改初始密码
# mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

# 注
# 如果sock文件在其它位置,需要手动指定才能登录。
# mysql -uroot -p -S /path/mysql.sock

编译安装 php

准备工作

# 安装编译依赖
yum -y install libxml2-devel openssl-devel pcre-devel \
zlib-devel bzip2-devel libcurl-devel libexif-devel \
gd-devel ftplib-devel gettext-devel gmp-devel \
mhash-devel libmcrypt-devel readline-devel libicu-devel lcov 

# 获取源码包
wget http://cn2.php.net/distributions/php-7.0.26.tar.gz

编译安装过程

# 编译选项
./configure \
--prefix=/opt/soft/php-7.0.26 \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-gcov \
--with-openssl \
--with-zlib \
--with-bz2 \
--enable-calendar \
--with-curl \
--enable-exif \
--enable-ftp \
--with-gd \
--with-gettext \
--with-gmp \
--with-mhash \
--enable-intl \
--enable-mbstring \
--with-mcrypt \
--with-mysqli \
--with-mysql-sock=/tmp/mysql.sock \
--enable-embedded-mysqli \
--enable-pcntl \
--with-pdo-mysql=/opt/soft/mysql \
--with-readline \
--enable-shmop \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-xsl=DIR \
--enable-zip 

# 编译&安装
make
make install

# 创建配置文件 与 phar
cp php.ini-production /opt/soft/php-7.0.26/lib/php.ini
./build/shtool install -c ext/phar/phar.phar /opt/soft/php-7.0.26/bin
ln -s -f phar.phar /opt/soft/php-7.0.26/bin/phar

# 查看可用的php模块
/opt/soft/php-7.0.26/bin/php -m

配置php-fpm服务

# 从源码目录中cp服务文件
cp sapi/fpm/php-fpm.service /usr/lib/systemd/system/

# 生成 php-fpm 配置文件
cp /opt/soft/php-7.0.26/etc/php-fpm.conf.default /opt/soft/php-7.0.26/etc/php-fpm.conf
cp /opt/soft/php-7.0.26/etc/php-fpm.d/www.conf.default /opt/soft/php-7.0.26/etc/php-fpm.d/www.conf

# 管理服务
systemctl start php-fpm     # 启动服务
systemctl status php-fpm    # 查看状态
systemctl enable php-fpm    # 开机启动

验证

配置nginx

mkdir -p /opt/soft/nginx/conf.d

# cat /opt/soft/nginx/conf/nginx.conf
# 主配置文件内容可以根据自身情况调整
#
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    include /opt/soft/nginx/conf.d/*.conf;  # 新增行
}

配置虚拟主机

# vim /opt/soft/nginx/conf.d/default.conf
# 写入以下内容
server {
    listen       80;
    server_name  localhost;

    location / {
        root   html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }

    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /opt/soft/nginx/html/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

创建phpinfo文件

# vim /opt/soft/nginx/html/v.php
# 写入以下内容
<?php
    phpinfo();
?>

然后就可以通过访问 http://your_server_ip/v.php 验证结果了。

如果用外网IP访问不到,请检查你的安全组设置,是否允许80/443端口对外访问。

本文链接:https://fandenggui.com/post/centos7-compile-install-lnmp.html

-- EOF --

Comments