不啰嗦,直接上脚本代码:
#!/bin/bash
# 一键部署 LNMP(源码安装版本)
menu() {
clear
echo " ##############----Menu----##############"
echo "# 1. Install Nginx"
echo "# 2. Install MySQL"
echo "# 3. Install PHP"
echo "# 4. Exit Program"
echo " ########################################"
}
choice() {
read -p "Please choose a menu [1-4]: " select
}
install_nginx() {
id nginx &>/dev/null
if [ $? -ne 0 ]; then
useradd -s /sbin/nologin nginx
fi
if [ -f nginx-1.8.0.tar.gz ]; then
tar -xf nginx-1.8.0.tar.gz
cd nginx-1.8.0
yum -y install gcc pcre-devel openssl-devel zlib-devel make
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
cd ..
else
echo "没有 Nginx 源码包"
fi
}
install_mysql() {
yum -y install gcc gcc-c++ cmake ncurses-devel perl
id mysql &>/dev/null
if [ $? -ne 0 ]; then
useradd -s /sbin/nologin mysql
fi
if [ -f mysql-5.6.25.tar.gz ]; then
tar -xf mysql-5.6.25.tar.gz
cd mysql-5.6.25
cmake .
make
make install
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/ --basedir=/usr/local/mysql/
chown -R root.mysql /usr/local/mysql
chown -R mysql /usr/local/mysql/data
/bin/cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/bin/cp -f /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf
ldconfig
echo 'PATH=$PATH:/usr/local/mysql/bin/' >> /etc/profile
export PATH
else
echo "没有 mysql 源码包"
exit
fi
}
install_php() {
# 安装 php 时没有指定启动哪些模块功能,用户可以根据实际情况自行添加额外功能如 --with-gd 等
yum -y install gcc libxml2-devel
if [ -f mhash-0.9.9.9.tar.gz ]; then
tar -xf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make
make install
cd ..
if [ ! -f /usr/lib/libmhash.so ]; then
ln -s /usr/local/lib/libmhash.so /usr/lib/
fi
ldconfig
else
echo "没有 mhash 源码包文件"
exit
fi
if [ -f libmcrypt-2.5.8.tar.gz ]; then
tar -xf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
make install
cd ..
if [ ! -f /usr/lib/libmcrypt.so ]; then
ln -s /usr/local/lib/libmcrypt.so /usr/lib/
fi
ldconfig
else
echo "没有 libmcrypt 源码包文件"
exit
fi
if [ -f php-5.4.24.tar.gz ]; then
tar -xf php-5.4.24.tar.gz
cd php-5.4.24
./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --enable-fpm --enable-mbstring --with-mcrypt --with-mhash --with-config-file-path=/usr/local/php5/etc --with-mysqli=/usr/local/mysql/bin/mysql_config
make && make install
/bin/cp -f php.ini-production /usr/local/php5/etc/php.ini
/bin/cp -f /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf
cd ..
else
echo "没有 php 源码包文件"
exit
fi
}
while :
do
menu
choice
case $select in
1)
install_nginx
;;
2)
install_mysql
;;
3)
install_php
;;
4)
exit
;;
*)
echo "Sorry! Invalid option."
;;
esac
done
脚本功能概述
该脚本用于在 Linux 环境中一键部署 LNMP (Linux, Nginx, MySQL, PHP) 环境,通过源码安装的方式依次安装 Nginx、MySQL 和 PHP。脚本提供了一个简单的菜单,用户可以选择安装特定的组件。
详细代码描述
1. menu
函数
该函数用于显示菜单选项,用户可以从中选择要安装的组件。
menu() {
clear
echo " ##############----Menu----##############"
echo "# 1. Install Nginx"
echo "# 2. Install MySQL"
echo "# 3. Install PHP"
echo "# 4. Exit Program"
echo " ########################################"
}
clear
:清除屏幕上的内容,使菜单显示更加整洁。echo
:打印菜单选项供用户选择。
2. choice
函数
该函数用于读取用户的选择。
choice() {
read -p "Please choose a menu [1-4]: " select
}
read -p "Please choose a menu [1-4]: " select
:提示用户输入选择,并将输入值存储在变量 select
中。
3. install_nginx
函数
该函数用于安装 Nginx。
install_nginx() {
id nginx &>/dev/null
if [ $? -ne 0 ]; then
useradd -s /sbin/nologin nginx
fi
if [ -f nginx-1.8.0.tar.gz ]; then
tar -xf nginx-1.8.0.tar.gz
cd nginx-1.8.0
yum -y install gcc pcre-devel openssl-devel zlib-devel make
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make
make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
cd ..
else
echo "没有 Nginx 源码包"
fi
}
id nginx &>/dev/null
:检查是否存在nginx
用户。useradd -s /sbin/nologin nginx
:如果不存在nginx
用户,则创建一个。if [ -f nginx-1.8.0.tar.gz ]; then ... else ... fi
:检查是否存在 Nginx 源码包,如果存在则进行解压、安装等操作,否则提示缺少源码包。- 安装 Nginx 所需的依赖包(
gcc
,pcre-devel
,openssl-devel
,zlib-devel
,make
)。 - 配置、编译和安装 Nginx,并创建 Nginx 的软链接到
/usr/sbin/
。
4. install_mysql
函数
该函数用于安装 MySQL。
install_mysql() {
yum -y install gcc gcc-c++ cmake ncurses-devel perl
id mysql &>/dev/null
if [ $? -ne 0 ]; then
useradd -s /sbin/nologin mysql
fi
if [ -f mysql-5.6.25.tar.gz ]; then
tar -xf mysql-5.6.25.tar.gz
cd mysql-5.6.25
cmake .
make
make install
/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/ --basedir=/usr/local/mysql/
chown -R root.mysql /usr/local/mysql
chown -R mysql /usr/local/mysql/data
/bin/cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/bin/cp -f /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
echo "/usr/local/mysql/lib/" >> /etc/ld.so.conf
ldconfig
echo 'PATH=$PATH:/usr/local/mysql/bin/' >> /etc/profile
export PATH
else
echo "没有 mysql 源码包"
exit
fi
}
- 安装 MySQL 所需的依赖包(
gcc
,gcc-c++
,cmake
,ncurses-devel
,perl
)。 - 检查是否存在
mysql
用户,如果不存在则创建。 - 检查是否存在 MySQL 源码包,如果存在则进行解压、安装等操作,否则提示缺少源码包。
- 使用 CMake 配置、编译和安装 MySQL。
- 初始化 MySQL 数据库,设置目录权限,将服务脚本复制到
/etc/init.d/
并赋予执行权限。 - 更新共享库配置,并将 MySQL 二进制目录添加到系统 PATH 中。
5. install_php
函数
该函数用于安装 PHP。
install_php() {
yum -y install gcc libxml2-devel
if [ -f mhash-0.9.9.9.tar.gz ]; then
tar -xf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure
make
make install
cd ..
if [ ! -f /usr/lib/libmhash.so ]; then
ln -s /usr/local/lib/libmhash.so /usr/lib/
fi
ldconfig
else
echo "没有 mhash 源码包文件"
exit
fi
if [ -f libmcrypt-2.5.8.tar.gz ]; then
tar -xf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure
make
make install
cd ..
if [ ! -f /usr/lib/libmcrypt.so ]; then
ln -s /usr/local/lib/libmcrypt.so /usr/lib/
fi
ldconfig
else
echo "没有 libmcrypt 源码包文件"
exit
fi
if [ -f php-5.4.24.tar.gz ]; then
tar -xf php-5.4.24.tar.gz
cd php-5.4.24
./configure --prefix=/usr/local/php5 --with-mysql=/usr/local/mysql --enable-fpm --enable-mbstring --with-mcrypt --with-mhash --with-config-file-path=/usr/local/php5/etc --with-mysqli=/usr/local/mysql/bin/mysql_config
make && make install
/bin/cp -f php.ini-production /usr/local/php5/etc/php.ini
/bin/cp -f /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf
cd ..
else
echo "没有 php 源码包文件"
exit
fi
}
- 安装 PHP 所需的依赖包(
gcc
,libxml2-devel
)。 - 安装
mhash
库,如果源码包存在则进行解压、配置、编译和安装。 - 安装
libmcrypt
库,如果源码包存在则进行解压、配置、编译和安装。 - 安装 PHP,如果源码包存在则进行解压、配置、编译和安装。
- 将 PHP 配置文件复制到相应目录。
6. 主循环
主循环用于显示菜单,并根据用户的选择执行相应的安装函数。
while :
do
menu
choice
case $select in
1)
install_nginx
;;
2)
install_mysql
;;
3)
install_php
;;
4)
exit
;;
*)
echo "Sorry! Invalid option."
;;
esac
done
while :
:无限循环,直到用户选择退出。menu
:显示菜单。choice
:读取用户选择。case $select in ... esac
:根据用户的选择调用相应的安装函数。
总结
该脚本通过菜单界面和函数调用,实现了 Nginx、MySQL 和 PHP 的源码安装,方便用户在 Linux 环境中快速部署 LNMP 环境。用户可以根据实际需求添加或修改配置选项,以满足不同的应用场景。