#!/bin/bash
echo -e "\033[31;32m LNMP编译安装脚本 \033[0m"
echo -e "\033[31;32m================================================================================\033[0m"
echo -e "\033[33m 安装包版本: nginx:1.14.2 mysql5.6.26 php5.5.38 \033[0m"
echo -e "\033[47;34m------------安装需联网下载软件包,若下载地址失效,需自行更新下载地址------------\033[0m"
echo -e "\033[31;32m================================================================================\033[0m"
echo -e "\033[31;32m================================================================================\033[0m"
echo -e "\033[33m 请选择所需安装信息 请选择(/nginx/php/mysql/LNMP) \033[0m"
read -p "请输入:nginx / php / mysql / LNMP: " ver
WORK_USER="work"
WORK_DIR="/work"
SERVERS_DIR="/work/services"
NGINX_DIR="/work/services/nginx"
PHP_DIR="/work/services/php"
MYSQL_DIR="/work/services/mysql"
SRC_DIR="/work/src"
CONFIG_DIR="/work/config"
NGINX_CONFIG_DIR="/work/config/nginx"
PHP_CONFIG_DIR="/work/config/php"
MYSQL_CONFIG_DIR="/work/config/mysql"
WORK_SH="/work/sh"
WORK_APPS="/work/apps"
WORK_BIN="/work/bin"
WORK_SSL="/work/ssl"
WORK_TMP="/work/tmp"
LOGS_DIR="/work/logs"
NGINX_LOG_DIR="/work/logs/nginx"
PHP_LOG_DIR="/work/logs/php"
MYSQL_LOG_DIR="/work/logs/mysql"
MYSQL_DATA_DIR="/work/data/mysql_data3306"
NGINX_PARAMETER="--prefix=${NGINX_DIR} \
--conf-path=${NGINX_CONFIG_DIR}/nginx.conf \
--error-log-path=${NGINX_LOG_DIR}/error.log \
--http-log-path=${NGINX_LOG_DIR}/access.log \
--pid-path=${NGINX_LOG_DIR}/nginx.pid \
--user=${WORK_USER} --group=${WORK_USER} \
--with-http_ssl_module \
--with-http_stub_status_module"
PHP_PARAMETER=" --prefix=${PHP_DIR} --with-config-file-path=${PHP_CONFIG_DIR}/etc \
--with-MySQL=${MYSQL_DIR} --with-mysqli=${MYSQL_DIR}/bin/mysql_config \
--enable-fpm --enable-pcntl --enable-mysqlnd \
--enable-opcache --enable-sockets \
--enable-sysvmsg --enable-sysvsem \
--enable-sysvshm --enable-shmop --enable-zip \
--enable-ftp --enable-soap --enable-xml \
--enable-mbstring --disable-rpath --disable-debug \
--disable-fileinfo --with-mysql=mysqlnd \
--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
--with-pcre-regex --with-iconv --with-zlib \
--with-mcrypt --with-gd --with-openssl \
--with-mhash --with-xmlrpc --with-curl \
--with-imap-ssl"
MYSQL_PARAMETER=" -DCMAKE_INSTALL_PREFIX=${MYSQL_DIR} \
-DMYSQL_DATADIR=${MYSQL_DATA_DIR} \
-DMYSQL_UNIX_ADDR=${MYSQL_DATA_DIR}/mysql.sock \
-DDEFAULT_CHARSET=utf8 -DSYSCONFDIR=${MYSQL_CONFIG_DIR} \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/home/mysql/data \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1"
yum -y install wget lrzsz \
pcre \
pcre-devel \
openssl* \
opsenssl-devel \
gcc \
make \
gcc-c++ \
yum -y install cc gcc-c++ autoconf curl-devel \
libjpeg libjpeg-devel \
libpng libpng-devel \
freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel glibc \
glibc-devel glib2 glib2-devel bzip2 \
bzip2-devel ncurses ncurses-devel \
curl curl-devel e2fsprogs \
e2fsprogs-devel krb5 krb5-devel \
libidn libidn-devel openssl \
openssl-devel openldap openldap-devel \
nss_ldap openldap-clients \
openldap-servers gd gd2 gd-devel \
gd2-devel perl-CPAN pcre-devel \
yum install -y cmake bison bison-devel \
libaio-devel gcc gcc-c++ \
git ncurses-devel autoco \
autoconf \
if [[ ! -d "/work" ]]
then
mkdir -p ${WORK_DIR}
mkdir -p ${SERVERS_DIR}
mkdir -p ${NGINX_DIR}
mkdir -p ${PHP_DIR}
mkdir -p ${MYSQL_DIR}
mkdir -p ${SRC_DIR}
mkdir -p ${WORK_SH}
mkdir -p ${WORK_APPS}
mkdir -p ${WORK_BIN}
mkdir -p ${WORK_SSL}
mkdir -p ${WORK_TMP}
mkdir -p ${CONFIG_DIR}
mkdir -p ${NGINX_CONFIG_DIR}
mkdir -p ${PHP_CONFIG_DIR}
mkdir -p ${MYSQL_CONFIG_DIR}
mkdir -p ${LOGS_DIR}
mkdir -p ${NGINX_LOG_DIR}
mkdir -p ${PHP_LOG_DIR}
mkdir -p ${MYSQL_LOG_DIR}
mkdir -p ${MYSQL_DATA_DIR}
useradd ${WORK_USER}
groupadd ${WORK_USER}
chown -R ${WORK_USER}:${WORK_USER} ${WORK_DIR}
useradd mysql
chown -R mysql:mysql ${MYSQL_DATA_DIR}
mkdir -p /root/bin
fi
export PATH=${PATH}:${MYSQL_DIR}/bin:${NGINX_DIR}:/sbin:${PHP_DIR}/sbin
if [[ $(grep -i ^export /etc/profile | wc -l) -lt 1 ]]
then
cat >> /etc/profile <<EOF
export PATH=$PATH:${MYSQL_DIR}/bin:${NGINX_DIR}/sbin:${PHP_DIR}/sbin
EOF
fi
source /etc/profile
cd ${SRC_DIR}
if [[ ! -e "${SRC_DIR}/nginx-1.14.2.tar.gz" ]]
then
wget http://nginx.org/download/nginx-1.14.2.tar.gz
fi
if [[ ! -e "${SRC_DIR}/php-5.5.38.tar.gz" ]]
then
wget http://mirrors.sohu.com/php/php-5.5.38.tar.gz
wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz
fi
if [[ ! -e "${SRC_DIR}/mysql-5.6.26.tar.gz" ]]
then
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.26.tar.gz
fi
if [[ ${UID} == 0 ]]
then
echo -e "\033[1;31;32m 可以继续安装....\033[0m"
else
echo -e "\033[41;37m 请切换root用户!!! \033[0m"
exit 1
fi
function Install_Nginx (){
if [[ -d "${NGINX_DIR}/sbin" ]]
then
echo -e "\033[1;31;32m nginx install success....\033[0m"
if [[ ${ver} == "nginx" ]]
then
exit
else
break
fi
fi
local nginx_name="nginx-1.14.2.tar.gz"
[ -e ${SRC_DIR} ] && cd ${SRC_DIR}
tar zxf ${nginx_name} && cd nginx-1.14.2
useradd nginx -s /sbin/nologin
groupadd nginx
./configure ${NGINX_PARAMETER}
if [[ ${?} == 0 ]]
then
make && make install
fi
cp /work/services/nginx/sbin/nginx /root/bin
nginx
if [[ $(ss -anutlp | grep 80 | wc -l) -eq 1 ]]
then
echo -e "\033[1;31;32m nginx install success....\033[0m"
else
echo -e "\033[41;37m nginx install error!\033[0m"
fi
}
function Install_Php () {
if [[ -d "${PHP_DIR}/bin" ]]
then
echo -e "\033[1;31;32m php-fpm install success....\033[0m"
if [[ ${ver} == "php" ]]
then
exit
else
break
fi
fi
local php_yilaibao="libmcrypt-2.5.7.tar.gz"
local php_name="php-5.5.38.tar.gz"
[ -e ${SRC_DIR} ] && cd ${SRC_DIR}
tar zxf ${php_yilaibao} && cd libmcrypt-2.5.7
./configure --prefix=/usr/local
if [[ ${?} == 0 ]]
then
make && make install
fi
cd ${SRC_DIR}
tar zxf ${php_name} && cd php-5.5.38
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
./configure ${PHP_PARAMETER}
if [[ ${?} == 0 ]]
then
make && make install
fi
cp /work/services/php/etc/{php-fpm.conf.default,php-fpm.conf}
ln -s /work/services/php/etc/* /work/config/php/
cp /work/services/php/sbin/php-fpm /root/bin
php-fpm
if [[ $(ss -anutlp | grep 9000 | wc -l) -eq 1 ]]
then
echo -e "\033[1;31;32m php-fpm install success....\033[0m"
else
echo -e "\033[41;37m php-fpm install error!\033[0m"
fi
}
function Install_Mysql () {
if [[ -d "${MYSQL_DIR}/bin" ]]
then
echo -e "\033[1;31;32m mysql install success....\033[0m"
if [[ ${ver} == "mysql" ]]
then
exit
else
break
fi
fi
local mysql_name="mysql-5.6.26.tar.gz"
[ -e ${SRC_DIR} ] && cd ${SRC_DIR}
groupadd mysql
useradd -g mysql -M mysql
tar zxvf ${mysql_name} && cd mysql-5.6.26
cmake ${MYSQL_PARAMETER}
if [[ ${?} == 0 ]]
then
make -j4 && make install
fi
make clean
cd ${MYSQL_DIR}
chown -Rf mysql:mysql ${MYSQL_DIR}
chown -Rf mysql:mysql ${MYSQL_DATA_DIR}
./scripts/mysql_install_db --user=mysql --basedir=${MYSQL_DIR} --datadir=${MYSQL_DATA_DIR}
cat >> /etc/my.cnf <<EOF
[mysqld]
datadir=/work/data/mysql_data3306
socket=/work/data/mysql_data3306/mysql.sock
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/System
[mysqld_safe]
log-error=/work/logs/mysql/mysql.log
pid-file=/work/data/mysql_data3306/mysql.pid
#
# include all files from the config directory
#
EOF
cp ${MYSQL_DIR}/support-files/mysql.server /etc/init.d/mysql
systemctl restart mysql
ln -s /tmp/mysql.sock /work/services/mysql/mysql.sock
ln -s /etc/my.cnf /work/config/mysql/
chkconfig mysql on
if [[ $(ss -anutlp | grep 3306 | wc -l) -eq 1 ]]
then
echo -e "\033[1;31;32m mysql install success....\033[0m"
else
echo -e "\033[41;37m mysql install error!\033[0m"
fi
}
case ${ver} in
nginx) Install_Nginx;;
php) Install_Php;;
mysql) Install_Mysql;;
LNMP)
Install_Nginx
Install_Php
Install_Mysql;;
esac