第十六周作业

1、源码编译安装LNMP架构环境;

    安装nginx:

     1)安装依赖包

]# yum groupinstall "Development Tools" "Development Libraries" -y
]# yum install wget openssl-devel ncurses-devel cmake pcre-devel libxml2-devel bzip2-devel libcurl-devel libmcrypt-devel -y

     2)关闭防火墙和selinux

]# iptables -F
]# systemctl stop firewalld.service
]# systemctl disable firewalld.service
]# setenforce 0
]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

     3)创建nginx用户和组

]# groupadd -r nginx
]# useradd -r -g nginx nginx

     4)编译安装nginx

]# tar xf nginx-1.6.1.tar.gz
]# cd nginx-1.6.1
]# ./configure \
  --prefix=/usr/local/nginx \
  --sbin-path=/usr/local/nginx/sbin/nginx \
  --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/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_flv_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre
]# make && make install

     5)启动nginx

]# mkdir /var/tmp/nginx/client -p
]# echo "export PATH=/usr/local/nginx/sbin:$PATH" >/etc/profile.d/nginx.sh
]# source /etc/profile
]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
]# nginx

     安装mysql:

    6)创建mysql用户和组

]# groupadd -r mysql
]# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql

     7)二进制方式安装mysql

]# tar xf mysql-5.5.32.tar.gz
]# cd mysql-5.5.32
]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mydata/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0 \
-DWITH_SSL=system

     8)初始化数据库

]# mkdir /mydata/data
]# chown -R mysql.mysql /mydata/data
]# cd /usr/local/mysql
]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

     9)创建mysql参数文件

]# cp support-files/my-large.cnf /etc/my.cnf
]# vim /etc/my.cnf
[mysqld]
...
datadir= /mydata/data
innodb_file_per_table= ON
skip_name_resolve= ON
...

     10)创建启动脚本

]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

     11)输出mysql的头文件至系统头文件路径/usr/include

]# ln -s /usr/local/mysql/include/ /usr/include/mysql

     12)输出mysql的库文件给系统库查找路径

]# echo "/usr/local/mysql/lib/" >/etc/ld.so.conf.d/mysql.conf
]# ldconfig 

    13)启动mysql

]# echo "export PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
]# source /etc/profile
]# /etc/init.d/mysqld start

     安装php:

    14)打补丁

]# tar xf php-5.4.4.tar.bz2
]# cd php-5.4.4
]# curl -o php-5.x.x.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
]# patch -p0 -b < ./php-5.x.x.patch

    15)编译安装php

./configure --prefix=/usr/local/php \
--with-mysql=/usr/local/mysql \
--with-openssl \
--enable-fpm \
--enable-sockets \
--enable-sysvshm \ 
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-libxml-dir=/usr \
--enable-xml \
--with-mhash \
--with-mcrypt \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--with-bz2 \
--with-curl 
]# make && make install

     16)创建php-fpm启动脚本

]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm 
]# chmod +x /etc/rc.d/init.d/php-fpm 
]# chkconfig --add php-fpm
]# chkconfig php-fpm on
]# /etc/init.d/php-fpm start

     17)创建并修改php配置文件

]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
]# vim /usr/local/php/etc/php-fpm.conf
pm.max_children = 150
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pid = /usr/local/php/var/run/php-fpm.pid

]# echo "fastcgi_param  SCRIPT_FILENAME    \$document_root\$fastcgi_script_name;" >> /etc/nginx/fastcgi_params

]# vim /etc/nginx/nginx.conf
location / {
            root   html;
            index  index.php index.html index.htm;
        } location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }
]# nginx -s reload

     测试:

    18)测试nginx与php的联动

]# cat > /usr/local/nginx/html/index.php << EOF
<?php
phpinfo();
?>
EOF

第十六周作业

    19)测试php与mysql的联动

]# cat >/usr/local/nginx/html/index.php <<EOF
<?php
    \$conn = mysql_connect('127.0.0.1','root','');
    if (\$conn)
        echo "OK";
    else
        echo "Failure";
?>
EOF

第十六周作业

2、编写一个脚本完成以下功能:
   (1)、一键搭建LNMP源码编译环境;

   (2)、可通过在脚本后面跟上一些参数来自定义安装目录等其他选项。

脚本执行前提:

1)操作系统版本为centos7

2)部署环境能够访问外网

3)源码安装包应提前准备好并与该脚本放在同一目录下

#!/bin/bash
lnmp() {
echo "安装前环境准备..."
sleep 3
yum remove nginx mysql mariadb php -y
rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum groupinstall "Development Tools" "Development Libraries" -y
yum install openssl-devel \
ncurses-devel \
cmake \
pcre-devel \
libxml2-devel \
bzip2-devel \
libcurl-devel \
libmcrypt-devel -y

iptables -F
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
sed -i '/^SELINUX\>/d' /etc/selinux/config
echo "SELINUX=disabled" >>/etc/selinux/config

echo "开始安装nginx..."
sleep 3

#编译安装nginx
id nginx &>/dev/null && userdel -r nginx
groupdel nginx
groupadd -r nginx
useradd -r -g nginx nginx
tar xf $PWD/nginx-1.6.1.tar.gz
cd nginx-1.6.1
./configure \
--prefix=$dir/nginx \
--sbin-path=$dir/nginx/sbin/nginx \
--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/nginx.pid  \
--lock-path=/var/lock/nginx.lock \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre
make && make install

mkdir -p /var/tmp/nginx/client

#添加对php的支持
sed -i '65,71s/^[[:space:]]\+#//g' /etc/nginx/nginx.conf
sed -i '45s/index.html/index.php index.html/g' /etc/nginx/nginx.conf
echo "fastcgi_param  SCRIPT_FILENAME    \$document_root\$fastcgi_script_name;" >> /etc/nginx/fastcgi_params

#添加环境变量
echo "export PATH=$dir/nginx/sbin:$PATH" >/etc/profile.d/nginx.sh
source /etc/profile

nginx

#Nginx测试
if curl 127.0.0.1 &>/dev/null;then
    echo "Nginx安装成功!"
else
    echo "Nginx安装失败!"
fi

echo "开始安装MySQL..."
sleep 3
#编译安装MySQL
id mysql &>/dev/null && userdel -r mysql
groupadd -r mysql
useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
tar xf $PWD/mysql-5.5.32.tar.gz
cd mysql-5.5.32
cmake \
-DCMAKE_INSTALL_PREFIX=$dir/mysql \
-DMYSQL_DATADIR=/mydata/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_USER=mysql \
-DWITH_DEBUG=0 \
-DWITH_SSL=system
make && make install

#初始化数据库
cd $dir/mysql
chown -R root.mysql ./*
[ ! -d /mydata/data ] && mkdir -p /mydata/data
scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

#修改MySQL参数文件
/usr/bin/cp support-files/my-large.cnf /etc/my.cnf
sed -i '/\[mysqld\]/a datadir= /mydata/data\ninnodb_file_per_table= ON\nskip_name_resolve= ON' /etc/my.cnf

#生成MySQL启动文件
/usr/bin/cp support-files/mysql.server /etc/rc.d/init.d/mysqld

ln -s $dir/mysql/include/ /usr/include/mysql
echo "$dir/mysql/lib/" >/etc/ld.so.conf.d/mysql.conf
ldconfig

#添加MySQL环境变量
echo "export PATH=$dir/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
source /etc/profile

#启动MySQL
/etc/init.d/mysqld start

echo "开始安装php..."
sleep 3
tar xf $PWD/php-5.4.4.tar.bz2
cd php-5.4.4
#打补丁,解决编译安装过程中的报错
curl -o php-5.x.x.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
patch -p0 -b < ./php-5.x.x.patch
./configure --prefix=$dir/php \
--with-mysql=$dir/mysql \
--with-openssl \
--enable-fpm \
--enable-sockets \
--enable-sysvshm \
--with-mysqli=$dir/mysql/bin/mysql_config \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-libxml-dir=/usr/include/libxml2/libxml \
--enable-xml \
--with-mhash \
--with-mcrypt \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--with-bz2 \
--with-curl 
make && make install

#生成php-fpm启动文件
/usr/bin/cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm 
chmod +x /etc/rc.d/init.d/php-fpm

#修改php参数文件
/usr/bin/cp $dir/php/etc/php-fpm.conf.default $dir/php/etc/php-fpm.conf
sed -i -e '/pm.max_children/d' -e \
'/\<pm.start_servers\>/d' -e \
'/\<pm.min_spare_servers\>/d' -e \
'/\<pm.max_spare_servers\>/d' -e \
'/pid = run\/php-fpm.pid/s/^;//g' $dir/php/etc/php-fpm.conf
cat >>$dir/php/etc/php-fpm.conf <<EOF
pm.max_children = 150
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 10
EOF

/etc/init.d/php-fpm start
echo "php安装完毕!"
}

#主程序
PWD=$(pwd)
if [ ! -f $PWD/mysql-5.5.32.tar.gz ] || [ ! -f $PWD/nginx-1.6.1.tar.gz ] || [ ! -f $PWD/php-5.4.4.tar.bz2 ];then
    echo "请将安装文件与脚本放在同一目录下!"
    exit 1
fi

if [ $# -eq 0 ];then
    dir=/usr/local
elif [ $# -eq 1 ];then
    dir=$1
    if [ ! -d $dir ];then 
    mkdir -p $dir
    fi
else
    echo "参数无效,请重新执行!"
    exit 1
fi

lnmp

原创文章,作者:N26-西安-方老喵,如若转载,请注明出处:http://www.178linux.com/73726

(1)
N26-西安-方老喵N26-西安-方老喵
上一篇 2017-05-02 08:42
下一篇 2017-05-02 08:56

相关推荐

  • 逻辑卷管理(LVM)

    逻辑卷管理(LVM) LVM概念 是系统上对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上的一个逻辑层,用来提高磁盘分区管理的灵活性。 安装Linux系统时,最常见的问题是如何评估各分区大小,以分配合适的硬盘空间。随着LVM的出现,这些问题都引刃而解了,用户在无需停机的情况下方便地情况下方便的调整个分区的大小。 LVM重点在于可以弹性的调整文件系统的容量…

    Linux干货 2016-11-22
  • 庆祝马哥成为51cto学院Linux运维金牌讲师第一人

    讲师何其多,金牌只一人(2016免费课程在底部) 某天,小编听到: linuxer1:听说51CTO学院评出了一个Linux金牌讲师!只有一人呢! linuxer2:用腿想,就知道肯定是马哥喽! linuxer3:前段时间马哥又分享了2016最新课时,限时免费学习呢!10086个赞!我和我的好基友们都在学习! linuxer4:马哥的51CTO课程学员都两百…

    2016-04-14
  • 一个“蝇量级” C 语言协程库

    协程(coroutine)顾名思义就是“协作的例程”(co-operative routines)。跟具有操作系统概念的线程不一样,协程是在用户空间利用程序语言的语法语义就能实现逻辑上类似多任务的编程技巧。实际上协程的概念比线程还要早,按照 Knuth 的说法“子例程是协程的特例”,一个子例程就是一次子函数调用,那么实际上协程就是类函数一样的程序组件,你可以…

    Linux干货 2016-08-15
  • Xen虚拟化平台安装及实时迁移

    前言 Xen是英国剑桥大学计算机实验室开发的一个虚拟化开源项目,Xen可以在一套物理硬件上安全的执行多个虚拟机,它和操作平台结合的极为密切,占用的资源极少。以高性能、占用资源少著称,赢得了IBM、AMD、HP、Redhat和Novell等众多世界级软硬件厂商的高度认可和大力支持,已被国内外众多企事业用户用来搭建高性能的虚拟化平台。 Xen虚拟化类型 Xen对…

    Linux干货 2015-07-19
  • 学以致用

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cp – copy files and directories 复制文件或目录 使用格式: 单文件复制 cp [OPTION]… [-T] SOURCE DEST 如果DEST不存在,即创建文件并复制源文件数据流; 如果DEST存在,且为非目录文件时,将覆盖…

    Linux干货 2016-10-13
  • Linux上获取命令帮助信息及man文档划分

    1.Linux上获取命令帮助信息的多种途径 Linux上获取命令帮助信息有多种途径,但不同的命令类型获取帮助信息也有不同,Linux命令类型主要分为两种: (1)内部命令:指的是集成于Shell解释器程序(如Bash)内部的一些特殊指令,也成为内建(BuiltIN)指令。 内部命令属于Shell的一部分,所以并没有单独对应的系统文件,只要Shell解释器被运…

    Linux干货 2016-10-30

评论列表(1条)

  • 马哥教育
    马哥教育 2017-05-04 13:53

    这篇博客写的非常好,下次可以再深入一些,完成一次超级版的源编译,把jpeg,png等这些依赖包也用源友编译实现。