php安装拓展lnmp,拓展版的LNMP安装包(适合批量部署)

最近的一个任务是写个一键安装LNMP的脚本,运行的平台是Ubuntu12.04,命令那些跟之前的RHEL和Centos 有一点点区别,这里做个记录。#!/bin/bash

#############################################

# Fuction: Install LNMP automaticlly. #

# Date: 2014-03-17 #

# Contact Infomation #

# Q: 303228632 #

# T: *********** #

# Designed by Pmghong #

#############################################

# Configuration Arguments

workpath="/usr/local/src"

install_path="/usr/local"

mysql="mysql-5.5.29"

php="php-5.4.11"

nginx="nginx-1.2.6"

# Install basic software

echo -e "\e[1;31m Installing basic software... \e[0m"

apt-get install -y gcc g++ make cmake

echo -e "\e[1;32m Complete \e[0m"

# Install mysql

echo -e "\e[1;31m Installing mysql... \e[0m"

apt-get install -y libncurses5-dev build-essential bison

groupadd mysql

useradd -r -g mysql mysql

cd ${workpath}

tar xf ${mysql}.tar.gz

cd ${mysql}

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock -DMYSQL_USER=mysql -DWITH_DEBUG=0

make && make install

echo -e "\e[1;32m Complete!!! \e[0m"

# Configure mysql

echo -e "\e[1;31m Confuring mysql... \e[0m"

cd ${install_path}/mysql

scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

chown -R mysql.mysql .

cp support-files/my-medium.cnf /etc/my.cnf

sed -i "27i datadir = ${install_path}\/mysql\/data" /etc/my.cnf

sed -i "27i basedir = ${install_path}\/mysql" /etc/my.cnf

sed -i "27i user = mysql" /etc/my.cnf

sed -i "30i character_set_server = utf8" /etc/my.cnf

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

sed -i "46s#basedir=#basedir=${install_path}\/mysql#" /etc/init.d/mysqld

sed -i "47s#datadir=#datadir=${install_path}\/mysql\/data#" /etc/init.d/mysqld

ln -s /usr/local/mysql/bin/* /usr/bin/

/etc/init.d/mysqld start

echo -e "\e[1;32m Complete!!! \e[0m"

# Install php

echo -e "\e[1;31m Installing php... \e[0m"

apt-get install -y libltdl-dev libssl-dev sendmail libjpeg8 libjpeg8-dev libpng12-0 libpng12-dev libxml2-dev libcurl4-openssl-dev libmcrypt-dev

cd ${workpath}

tar xf ${php}.tar.bz2

cd ${php}

./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-curl --with-mcrypt --enable-mbstring --enable-pdo --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-openssl --with-imap-ssl --with-gd --with-jpeg-dir=/usr/lib/ --with-png-dir=/usr/lib/ --enable-exif --enable-zip

make && make install

cp php.ini-production /usr/local/php/lib/php.ini

cd ${install_path}/php/etc

cp -a php-fpm.conf.default php-fpm.conf

useradd -s /sbin/nologin -M fpmuser

${install_path}/php/sbin/php-fpm

echo -e "\e[1;32m Complete!!! \e[0m"

# Install nginx

echo -e "\e[1;31m Installing nginx... \e[0m"

apt-get install -y libpcre3 libpcre3-dev zlib1g-dev libncurses5-dev

useradd -s /sbin/nologin -M www

cd ${workpath}

tar xf ${nginx}.tar.gz

cd ${nginx}

./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module

make && make install

ln -s /usr/local/nginx/sbin/nginx /etc/init.d/

/etc/init.d/nginx

echo -e "\e[1;32m Complete!!! \e[0m"

# Configure nginx

echo -e "\e[1;31m Configuringing nginx... \e[0m"

sed -i "s/#user nobody;/user www www;/" ${install_path}/nginx/conf/nginx.conf

IP=`ifconfig eth0|grep "\"|cut -d':' -f2|sed -n 's/ Bcast//p'`

sed -i "37s/server_name localhost;/server_name ${IP};/" ${install_path}/nginx/conf/nginx.conf

sed -i '45s/index /& index.php/' ${install_path}/nginx/conf/nginx.conf

sed -i '65,71s/#//' ${install_path}/nginx/conf/nginx.conf

sed -i 's#\/scripts$fastcgi_script_name;#$document_root$fastcgi_script_name;#' ${install_path}/nginx/conf/nginx.conf

# Create a test page

cat << EOF >> ${install_path}/nginx/html/index.php

phpinfo();

?>

EOF

/etc/init.d/nginx -s reload

echo -e "\e[1;32m Totally Complete!!! Now you can test the LNMP system. \e[0m"

扩展:实际上,在部署服务器的时候,把nginx、mysql、php的包打包上传到服务器,再运行脚本编译安装整个环境是相当耗费时间的。一个较好的办法是在测试机上编译打包好整个LNMP 环境,做到一次编译处处运行。即只要软件安装包打开,LNMP环境即可使用,无需在新机器上再次编译。这样就省去了很多编译和安装的麻烦,只需要简单的进行解压和一些基本的配置即可。

关于安装包的介绍:

目标:制作一键LNMP的安装包

要求:一次编译,处处运行软件部署包。在不需要apt-get 软件包的前提下,直接把软件包部署并运行到同发行版本和版本号的机器上。即将整个已编译好的安装包,不管发到哪台机器上,只要解压完,即可使用,不需要其他编译安装工作。

安装包结构:

1. 相关软件,包括/usr/local/nginx,/usr/local/mysql,/usr/local/php 等

2. 相关脚本:一些基础配置脚本,包括添加相关用户、启动服务等

3. 相关库文件:在LNMP编译过程中需要很多库文件的支持

制作过程:

nginx和mysql 在编译过程会把需要的组件静态编译到程序里面,因此只要将整个目录打包即可。编译安装过程不再累述。主要是php,直接打包php目录上传到其他机器上是不能直接运行的,因为它的运行依赖着一些库文件,而新的机器上并没有预装这些库文件。所以,php的打包还必须包括一些库文件。

注:

在测试机上,我将php需的组件全部编译安装到/usr/local/src/lib 这个目录下

例如

root@server:/usr/local/src/lib# cd curl-7.22.0

root@server:/usr/local/src/lib/curl-7.22.0 # ./configure --prefix=/usr/local/src/lib/curl

root@server:/usr/local/src/lib/curl-7.22.0 # make && make install

php编译参数如下:

root@ubuntu:/usr/local/src/php-5.4.11# ./configure --prefix=/usr/local/php --enable-fpm --with-fpm-user=fpmuser --with-fpm-group=fpmuser   --with-curl=/usr/local/src/lib/curl --with-mcrypt=/usr/local/src/lib/libmcrypt --enable-mbstring --enable-pdo --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-openssl=/usr/local/src/lib/openssl --with-imap-ssl --with-gd --with-jpeg-dir=/usr/local/src/lib/libjpeg--with-png-dir=/usr/local/src/lib/libpng--enable-exif --enable-zip

打包:

需要打包有4个目录:

tar cPf mysql.tar.gz  /usr/local/mysql

tar cPf nginx.tar.gz  /usr/local/nginx

tar cPf php.tar.gz   /usr/local/php

tar cPf php_lib.gz   /usr/local/src/lib

另外,把安装包发布到新的机器上后,还需要通过脚本对系统进行一些初始化:

脚本一:

这个脚本的主要功能是解压nginx、php、mysql等,并对系统进行初始化#!/bin/bash

cat << EOF

##############################################################

# Welcome to AutoLNMP! #

# Fuction: This script will install LNMP automaticlly. #

# Date: 2014-03-19 #

# Contact Infomation #

# T: *********** #

# Designed by Pmghong #

##############################################################

Script is running please wait for a minune...

EOF

# Unzip packages

tar xPf nginx.tar.gz -C /usr/local/ 2> /dev/null

tar xPf mysql.tar.gz -C /usr/local/ 2> /dev/null

tar xPf php.tar.gz -C /usr/local/ 2> /dev/null

mkdir -p /usr/local/src/lib

tar xPf php_lib.tar.gz -C /usr/local/src/ 2> /dev/null

apt-get install expect -y > /dev/null 2>&1

# Add service users

groupadd mysql

useradd -r -g mysql mysql

useradd -s /sbin/nologin -M fpmuser

useradd -s /sbin/nologin -M www

# Configure Mysql

cd /usr/local/mysql

chown mysql.mysql . -R

scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data > /dev/null

cp mysqld /etc/init.d/

ln -s /usr/local/mysql/bin/* /usr/bin/

# Start services

/usr/local/nginx/sbin/nginx

/etc/init.d/mysqld start > /dev/null

/usr/local/php/sbin/php-fpm

echo

echo "Work complete!"

echo "Now you can test the page 'http://IP'."

echo "If you want to install wordpress.Follow this step: 1.Run expect.sh. 2.Run LNMP_tester.sh"

脚本二:

这个脚本的主要功能是:设置mysql root用户的密码--123456#!/usr/bin/expect

spawn mysqladmin -uroot password

expect "password:"

send "123456\r"

expect "password:"

send "123456\r"

interact

脚本三:

这个脚本主要是快速搭建wordpress,对LNMP环境进行测试。(可选)#!/bin/bash

USER="root"

PASSWD="123456"

IP=`ifconfig eth0|grep "Bcast"|cut -d":" -f2|sed -n "s/ Bcast//p"`

tar xf wordpress-3.7.1-zh_CN.tar.gz

cd wordpress

cp -Ra * /usr/local/nginx/html/

cd /usr/local/nginx/html/

cp wp-config-sample.php wp-config.php

sed -i "s#define('DB_NAME', 'database_name_here');#define('DB_NAME', 'blog');#" /usr/local/nginx/html/wp-config.php

sed -i "s#define('DB_USER', 'username_here');#define('DB_USER', 'blogadmin');#" /usr/local/nginx/html/wp-config.php

sed -i "s#define('DB_PASSWORD', 'password_here');#define('DB_PASSWORD', '123456');#" /usr/local/nginx/html/wp-config.php

sed -i "s#define('DB_HOST', 'localhost');#define('DB_HOST', '$IP');#" /usr/local/nginx/html/wp-config.php

#WORKPATH=`pwd`

#exec ./{WORKPATH}expect.sh

mysql -u $USER -p$PASSWD < /dev/null

create database blog;

grant all privileges on blog.* to blogadmin@'%' identified by '123456';

flush privileges;

EOF

[ $? -eq 0 ] && echo "OK" || echo "Error".

总结:

经测试,从把安装包上传到新的服务器,到解压安装包、初始化服务器,再到LNMP运作起来,整个过程大概在2分钟以内便可完成。大大节省了部署的时间为批量部署提供方便。

文件目录如下:

64198cca890595f5de684e4372ba0dd5.png

将这些文件打包起来,放到相同环境下,运行脚本即可快速部署上LNMP环境。(注:实验环境为Ubuntu 12.04)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值