转载请注明出处:https://www.myzhenai.com.cn/post/4782.html
这是我用chatGPT、kimi、deepseek生成的一键安装脚本,如果你想用lighttpd做为你的服务器的话,可以使用这些脚本来一键安装
lighttpd官网下载:https://www.lighttpd.net/
chatGPT
#!/bin/bash
# LNMP 编译安装一键脚本 (Lighttpd + PHP + MySQL/MariaDB)
# 支持 CentOS/RHEL/Debian/Ubuntu
# Author: ChatGPT
set -e
# 版本
LIGHTTPD_VERSION="1.4.54"
PHP_VERSION="8.2.20"
MARIADB_VERSION="10.6.18"
INSTALL_DIR="/usr/local"
SRC_DIR="/usr/local/src"
# 必须 root
if [ "$(id -u)" -ne 0 ]; then
echo "请用 root 用户运行此脚本!"
exit 1
fi
echo "==============================="
echo " LNMP 源码编译安装脚本"
echo " Lighttpd $LIGHTTPD_VERSION + PHP $PHP_VERSION + MariaDB $MARIADB_VERSION"
echo "==============================="
# 检测系统并安装依赖
echo "[1/5] 安装编译依赖..."
if [ -f /etc/redhat-release ] || [ -f /etc/centos-release ]; then
yum -y groupinstall "Development Tools"
yum -y install wget gcc gcc-c++ make cmake autoconf automake libtool \
pcre pcre-devel zlib zlib-devel bzip2 bzip2-devel \
openssl openssl-devel libxml2 libxml2-devel sqlite sqlite-devel \
libcurl-devel libjpeg-devel libpng-devel freetype-devel libzip-devel
elif [ -f /etc/debian_version ]; then
apt update -y
apt install -y build-essential wget gcc g++ make cmake autoconf automake libtool \
pkg-config zlib1g zlib1g-dev libpcre3 libpcre3-dev \
libbz2-dev libssl-dev libxml2 libxml2-dev \
libsqlite3-dev libcurl4-openssl-dev libjpeg-dev libpng-dev \
libfreetype6-dev libzip-dev
else
echo "不支持的系统,请手动安装依赖。"
exit 1
fi
mkdir -p $SRC_DIR
cd $SRC_DIR
######################################
# 安装 Lighttpd
######################################
echo "[2/5] 编译安装 Lighttpd..."
wget -c https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-$LIGHTTPD_VERSION.tar.gz
tar zxvf lighttpd-$LIGHTTPD_VERSION.tar.gz
cd lighttpd-$LIGHTTPD_VERSION
./configure --prefix=$INSTALL_DIR/lighttpd
make -j$(nproc)
make install
mkdir -p $INSTALL_DIR/lighttpd/{htdocs,etc}
cp ./doc/lighttpd.conf $INSTALL_DIR/lighttpd/etc/lighttpd.conf
cd ..
######################################
# 安装 MariaDB
######################################
echo "[3/5] 编译安装 MariaDB..."
wget -c https://downloads.mariadb.org/interstitial/mariadb-$MARIADB_VERSION/source/mariadb-$MARIADB_VERSION.tar.gz
tar zxvf mariadb-$MARIADB_VERSION.tar.gz
cd mariadb-$MARIADB_VERSION
cmake . -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR/mariadb \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1
make -j$(nproc)
make install
useradd -r -s /sbin/nologin mysql || true
$INSTALL_DIR/mariadb/scripts/mysql_install_db --user=mysql --basedir=$INSTALL_DIR/mariadb --datadir=$INSTALL_DIR/mariadb/data
cd ..
######################################
# 安装 PHP
######################################
echo "[4/5] 编译安装 PHP..."
wget -c https://www.php.net/distributions/php-$PHP_VERSION.tar.gz
tar zxvf php-$PHP_VERSION.tar.gz
cd php-$PHP_VERSION
./configure --prefix=$INSTALL_DIR/php \
--with-config-file-path=$INSTALL_DIR/php/etc \
--enable-fpm \
--with-mysqli=$INSTALL_DIR/mariadb/bin/mysql_config \
--with-pdo-mysql=$INSTALL_DIR/mariadb \
--with-zlib \
--with-openssl \
--enable-mbstring \
--with-curl \
--with-gd \
--with-jpeg \
--with-freetype
make -j$(nproc)
make install
cp php.ini-development $INSTALL_DIR/php/etc/php.ini
cp sapi/fpm/php-fpm.conf $INSTALL_DIR/php/etc/php-fpm.conf
cp sapi/fpm/www.conf $INSTALL_DIR/php/etc/php-fpm.d/www.conf || true
cd ..
######################################
# 配置服务
######################################
echo "[5/5] 配置 systemd 服务..."
# Lighttpd
cat > /etc/systemd/system/lighttpd.service <<EOF
[Unit]
Description=Lighttpd Web Server
After=network.target
[Service]
ExecStart=$INSTALL_DIR/lighttpd/sbin/lighttpd -D -f $INSTALL_DIR/lighttpd/etc/lighttpd.conf
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# PHP-FPM
cat > /etc/systemd/system/php-fpm.service <<EOF
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
ExecStart=$INSTALL_DIR/php/sbin/php-fpm --nodaemonize --fpm-config $INSTALL_DIR/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 \$MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# MariaDB
cat > /etc/systemd/system/mariadb.service <<EOF
[Unit]
Description=MariaDB Database Server
After=network.target
[Service]
ExecStart=$INSTALL_DIR/mariadb/bin/mysqld_safe --datadir=$INSTALL_DIR/mariadb/data
ExecStop=$INSTALL_DIR/mariadb/bin/mysqladmin shutdown
User=mysql
Group=mysql
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# FastCGI 配置
cat > $INSTALL_DIR/lighttpd/etc/15-fastcgi-php.conf <<EOF
fastcgi.server += ( ".php" =>
((
"socket" => "/tmp/php-fpm.sock",
"broken-scriptfilename" => "enable"
))
)
EOF
echo 'include "15-fastcgi-php.conf"' >> $INSTALL_DIR/lighttpd/etc/lighttpd.conf
# 自启动
systemctl daemon-reload
systemctl enable lighttpd php-fpm mariadb
systemctl start mariadb php-fpm lighttpd
# 初始化 MySQL
$INSTALL_DIR/mariadb/bin/mysqladmin -u root password "root1234"
# 测试页
echo "<?php phpinfo(); ?>" > $INSTALL_DIR/lighttpd/htdocs/info.php
IP=$(hostname -I | awk '{print $1}')
echo "==============================="
echo " LNMP 编译安装完成!"
echo " Lighttpd: http://$IP/"
echo " PHP 测试: http://$IP/info.php"
echo " MySQL root 密码: root1234"
echo " 网站目录: $INSTALL_DIR/lighttpd/htdocs/"
echo "==============================="
注:root1234 root1234 这两个需要修改成你需要设置的Myaql密码
保存为 install_lnmp.sh 即可使用:
脚本会自动安装:
-
Lighttpd
-
PHP + PHP-FPM (FastCGI)
-
MariaDB (MySQL 替代)
Kimi
#!/bin/bash
# LNMP (Linux + Lighttpd + MySQL + PHP) 编译安装脚本
# 支持所有主流 Linux 发行版
# 包含编译安装和自启动配置
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 软件版本
LIGHTTPD_VERSION="1.4.76"
PHP_VERSION="8.2.12"
MYSQL_VERSION="8.0.35"
PCRE_VERSION="8.45"
ZLIB_VERSION="1.3"
# 安装目录
INSTALL_DIR="/usr/local"
SRC_DIR="/usr/local/src"
LIGHTTPD_DIR="$INSTALL_DIR/lighttpd"
PHP_DIR="$INSTALL_DIR/php"
MYSQL_DIR="$INSTALL_DIR/mysql"
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
log_step() {
echo -e "${BLUE}[STEP]${NC} $1"
}
# 检查是否为root用户
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "请使用 root 用户运行此脚本"
exit 1
fi
}
# 检测操作系统
detect_os() {
if [[ -f /etc/os-release ]]; then
. /etc/os-release
OS=$ID
VERSION=$VERSION_ID
else
log_error "无法检测操作系统"
exit 1
fi
log_info "检测到操作系统: $OS $VERSION"
}
# 获取服务器IP
get_server_ip() {
SERVER_IP=$(hostname -I | awk '{print $1}')
if [[ -z "$SERVER_IP" ]]; then
SERVER_IP="localhost"
fi
}
# 安装编译依赖
install_dependencies() {
log_step "安装编译依赖..."
case $OS in
ubuntu|debian)
apt-get update -y
apt-get install -y build-essential gcc g++ make cmake autoconf automake \
libtool pkg-config wget curl tar gzip bzip2 unzip \
libpcre3-dev zlib1g-dev libssl-dev libxml2-dev \
libbz2-dev libcurl4-openssl-dev libjpeg-dev \
libpng-dev libfreetype6-dev libmcrypt-dev \
libreadline-dev libzip-dev libsqlite3-dev \
libonig-dev libzip-dev libedit-dev \
libldap2-dev libsasl2-dev libkrb5-dev \
systemctl || true
;;
centos|rhel|fedora)
yum groupinstall -y "Development Tools"
yum install -y gcc gcc-c++ make cmake autoconf automake \
libtool pkgconfig wget curl tar gzip bzip2 unzip \
pcre-devel zlib-devel openssl-devel libxml2-devel \
bzip2-devel libcurl-devel libjpeg-devel \
libpng-devel freetype-devel libmcrypt-devel \
readline-devel libzip-devel sqlite-devel \
oniguruma-devel libedit-devel \
openldap-devel cyrus-sasl-devel krb5-devel \
systemd-devel || true
;;
*)
log_error "不支持的操作系统: $OS"
exit 1
;;
esac
# 检查必要的编译工具
for tool in gcc g++ make cmake; do
if ! command -v $tool &> /dev/null; then
log_error "缺少必要的编译工具: $tool"
exit 1
fi
done
}
# 创建用户和组
create_users() {
log_step "创建用户和组..."
# 创建 www 用户
if ! id -u www &>/dev/null; then
useradd -r -s /bin/false -d /var/www www
fi
# 创建 mysql 用户
if ! id -u mysql &>/dev/null; then
useradd -r -s /bin/false -d /var/lib/mysql mysql
fi
}
# 下载源码
download_sources() {
log_step "下载源码..."
mkdir -p "$SRC_DIR"
cd "$SRC_DIR"
# 下载 Lighttpd
if [[ ! -f "lighttpd-${LIGHTTPD_VERSION}.tar.gz" ]]; then
log_info "下载 Lighttpd ${LIGHTTPD_VERSION}..."
wget -c "https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-${LIGHTTPD_VERSION}.tar.gz"
fi
# 下载 PHP
if [[ ! -f "php-${PHP_VERSION}.tar.gz" ]]; then
log_info "下载 PHP ${PHP_VERSION}..."
wget -c "https://www.php.net/distributions/php-${PHP_VERSION}.tar.gz"
fi
# 下载 MySQL
if [[ ! -f "mysql-${MYSQL_VERSION}.tar.gz" ]]; then
log_info "下载 MySQL ${MYSQL_VERSION}..."
wget -c "https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-${MYSQL_VERSION}.tar.gz"
fi
# 下载依赖库
if [[ ! -f "pcre-${PCRE_VERSION}.tar.gz" ]]; then
log_info "下载 PCRE ${PCRE_VERSION}..."
wget -c "https://sourceforge.net/projects/pcre/files/pcre/${PCRE_VERSION}/pcre-${PCRE_VERSION}.tar.gz/download" -O "pcre-${PCRE_VERSION}.tar.gz"
fi
if [[ ! -f "zlib-${ZLIB_VERSION}.tar.gz" ]]; then
log_info "下载 zlib ${ZLIB_VERSION}..."
wget -c "https://www.zlib.net/zlib-${ZLIB_VERSION}.tar.gz"
fi
}
# 编译安装 PCRE
install_pcre() {
log_step "编译安装 PCRE ${PCRE_VERSION}..."
cd "$SRC_DIR"
tar -xzf "pcre-${PCRE_VERSION}.tar.gz"
cd "pcre-${PCRE_VERSION}"
./configure --prefix="$INSTALL_DIR/pcre" \
--enable-utf8 \
--enable-unicode-properties
make -j$(nproc)
make install
# 添加库路径
echo "$INSTALL_DIR/pcre/lib" > /etc/ld.so.conf.d/pcre.conf
ldconfig
}
# 编译安装 zlib
install_zlib() {
log_step "编译安装 zlib ${ZLIB_VERSION}..."
cd "$SRC_DIR"
tar -xzf "zlib-${ZLIB_VERSION}.tar.gz"
cd "zlib-${ZLIB_VERSION}"
./configure --prefix="$INSTALL_DIR/zlib"
make -j$(nproc)
make install
# 添加库路径
echo "$INSTALL_DIR/zlib/lib" > /etc/ld.so.conf.d/zlib.conf
ldconfig
}
# 编译安装 Lighttpd
install_lighttpd() {
log_step "编译安装 Lighttpd ${LIGHTTPD_VERSION}..."
cd "$SRC_DIR"
tar -xzf "lighttpd-${LIGHTTPD_VERSION}.tar.gz"
cd "lighttpd-${LIGHTTPD_VERSION}"
# 生成 configure 脚本
./autogen.sh
# 配置编译选项
./configure --prefix="$LIGHTTPD_DIR" \
--with-pcre="$INSTALL_DIR/pcre" \
--with-zlib="$INSTALL_DIR/zlib" \
--enable-static \
--enable-shared \
--with-openssl \
--with-ldap \
--with-mysql \
--with-webdav-locks \
--with-webdav-props \
--with-gdbm \
--with-memcached \
--with-lua \
--enable-ipv6 \
--with-bzip2
make -j$(nproc)
make install
# 创建必要目录
mkdir -p "$LIGHTTPD_DIR/htdocs"
mkdir -p "$LIGHTTPD_DIR/logs"
mkdir -p "$LIGHTTPD_DIR/conf.d"
# 设置权限
chown -R www:www "$LIGHTTPD_DIR"
# 添加库路径
echo "$LIGHTTPD_DIR/lib" > /etc/ld.so.conf.d/lighttpd.conf
ldconfig
}
# 配置 Lighttpd
configure_lighttpd() {
log_step "配置 Lighttpd..."
# 创建主配置文件
cat > "$LIGHTTPD_DIR/etc/lighttpd.conf" << 'EOF'
server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_rewrite",
"mod_accesslog",
"mod_fastcgi",
"mod_cgi",
"mod_status",
"mod_dirlisting"
)
server.document-root = "/usr/local/lighttpd/htdocs"
server.errorlog = "/usr/local/lighttpd/logs/error.log"
server.pid-file = "/usr/local/lighttpd/logs/lighttpd.pid"
server.username = "www"
server.groupname = "www"
server.port = 80
server.bind = "0.0.0.0"
# 性能设置
server.max-worker = 4
server.max-keep-alive-requests = 16
server.max-keep-alive-idle = 5
server.max-read-idle = 60
server.max-write-idle = 360
# 日志设置
accesslog.filename = "/usr/local/lighttpd/logs/access.log"
# 压缩设置
compress.cache-dir = "/usr/local/lighttpd/cache/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
# 安全设置
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
# 索引文件
index-file.names = ( "index.php", "index.html", "index.htm" )
# MIME 类型
include_shell "/usr/local/lighttpd/share/lighttpd/create-mime.assign.pl"
# FastCGI 设置 (PHP)
fastcgi.server = ( ".php" =>
((
"host" => "127.0.0.1",
"port" => 9000,
"broken-scriptfilename" => "enable"
))
)
EOF
# 创建 MIME 类型配置文件
mkdir -p "$LIGHTTPD_DIR/share/lighttpd"
cat > "$LIGHTTPD_DIR/share/lighttpd/create-mime.assign.pl" << 'EOF'
#!/usr/bin/perl
use strict;
my %mime = (
'.pdf' => 'application/pdf',
'.sig' => 'application/pgp-signature',
'.spl' => 'application/futuresplash',
'.class' => 'application/octet-stream',
'.ps' => 'application/postscript',
'.torrent' => 'application/x-bittorrent',
'.dvi' => 'application/x-dvi',
'.gz' => 'application/x-gzip',
'.pac' => 'application/x-ns-proxy-autoconfig',
'.swf' => 'application/x-shockwave-flash',
'.tar.gz' => 'application/x-tgz',
'.tgz' => 'application/x-tgz',
'.tar' => 'application/x-tar',
'.zip' => 'application/zip',
'.mp3' => 'audio/mpeg',
'.m3u' => 'audio/x-mpegurl',
'.wma' => 'audio/x-ms-wma',
'.wax' => 'audio/x-ms-wax',
'.ogg' => 'application/ogg',
'.wav' => 'audio/x-wav',
'.gif' => 'image/gif',
'.jpg' => 'image/jpeg',
'.jpeg' => 'image/jpeg',
'.png' => 'image/png',
'.xbm' => 'image/x-xbitmap',
'.xpm' => 'image/x-xpixmap',
'.xwd' => 'image/x-xwindowdump',
'.css' => 'text/css',
'.html' => 'text/html',
'.htm' => 'text/html',
'.js' => 'text/javascript',
'.asc' => 'text/plain',
'.c' => 'text/plain',
'.cpp' => 'text/plain',
'.log' => 'text/plain',
'.conf' => 'text/plain',
'.text' => 'text/plain',
'.txt' => 'text/plain',
'.dtd' => 'text/xml',
'.xml' => 'text/xml',
'.mpeg' => 'video/mpeg',
'.mpg' => 'video/mpeg',
'.mov' => 'video/quicktime',
'.qt' => 'video/quicktime',
'.avi' => 'video/x-msvideo',
'.asf' => 'video/x-ms-asf',
'.asx' => 'video/x-ms-asf',
'.wmv' => 'video/x-ms-wmv',
'.bz2' => 'application/x-bzip',
'.tbz' => 'application/x-bzip-compressed-tar',
'.tar.bz2' => 'application/x-bzip-compressed-tar'
);
print "mimetype.assign = (\n";
foreach my $k (keys %mime) {
print " \"$k\" => \"$mime{$k}\",\n";
}
print ")\n";
EOF
chmod +x "$LIGHTTPD_DIR/share/lighttpd/create-mime.assign.pl"
# 创建必要目录
mkdir -p "$LIGHTTPD_DIR/cache/compress"
mkdir -p "$LIGHTTPD_DIR/logs"
chown -R www:www "$LIGHTTPD_DIR"
}
# 编译安装 MySQL
install_mysql() {
log_step "编译安装 MySQL ${MYSQL_VERSION}..."
cd "$SRC_DIR"
tar -xzf "mysql-${MYSQL_VERSION}.tar.gz"
cd "mysql-${MYSQL_VERSION}"
# 创建构建目录
mkdir -p build
cd build
# CMake 配置
cmake .. \
-DCMAKE_INSTALL_PREFIX="$MYSQL_DIR" \
-DMYSQL_DATADIR="$MYSQL_DIR/data" \
-DSYSCONFDIR="$MYSQL_DIR/etc" \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR="$MYSQL_DIR/mysql.sock" \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_BOOST="$SRC_DIR" \
-DFORCE_INSOURCE_BUILD=1
make -j$(nproc)
make install
# 初始化数据库
cd "$MYSQL_DIR"
./bin/mysqld --initialize --user=mysql --basedir="$MYSQL_DIR" --datadir="$MYSQL_DIR/data"
# 设置权限
chown -R mysql:mysql "$MYSQL_DIR"
# 生成临时密码
TEMP_PASSWORD=$(grep 'temporary password' "$MYSQL_DIR/data"/*.err | tail -1 | awk '{print $NF}')
log_info "MySQL 临时密码: $TEMP_PASSWORD"
# 创建配置文件
cat > "$MYSQL_DIR/etc/my.cnf" << EOF
[mysqld]
basedir=$MYSQL_DIR
datadir=$MYSQL_DIR/data
port=3306
socket=$MYSQL_DIR/mysql.sock
pid-file=$MYSQL_DIR/mysql.pid
user=mysql
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# InnoDB 设置
innodb_buffer_pool_size=128M
innodb_log_file_size=48M
innodb_flush_method=O_DIRECT
# 日志设置
log-error=$MYSQL_DIR/logs/error.log
slow-query-log=1
slow-query-log-file=$MYSQL_DIR/logs/slow.log
long_query_time=2
[mysql]
socket=$MYSQL_DIR/mysql.sock
[client]
socket=$MYSQL_DIR/mysql.sock
EOF
mkdir -p "$MYSQL_DIR/logs"
chown -R mysql:mysql "$MYSQL_DIR"
}
# 编译安装 PHP
install_php() {
log_step "编译安装 PHP ${PHP_VERSION}..."
cd "$SRC_DIR"
tar -xzf "php-${PHP_VERSION}.tar.gz"
cd "php-${PHP_VERSION}"
# 配置编译选项
./configure --prefix="$PHP_DIR" \
--with-config-file-path="$PHP_DIR/etc" \
--with-config-file-scan-dir="$PHP_DIR/etc/php.d" \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-mysql-sock="$MYSQL_DIR/mysql.sock" \
--with-openssl \
--with-zlib \
--with-bz2 \
--with-curl \
--with-gd \
--with-jpeg \
--with-png \
--with-freetype \
--with-gettext \
--with-mhash \
--with-readline \
--with-xmlrpc \
--with-xsl \
--with-zip \
--with-iconv \
--enable-bcmath \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-gd-native-ttf \
--enable-intl \
--enable-json \
--enable-mbstring \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--enable-zip \
--enable-opcache \
--enable-cli \
--enable-cgi
make -j$(nproc)
make install
# 复制配置文件
cp php.ini-production "$PHP_DIR/etc/php.ini"
cp "$PHP_DIR/etc/php-fpm.conf.default" "$PHP_DIR/etc/php-fpm.conf"
# 配置 PHP-FPM
cat > "$PHP_DIR/etc/php-fpm.conf" << EOF
[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
[www]
listen = 127.0.0.1:9000
listen.backlog = 65535
listen.owner = www
listen.group = www
listen.mode = 0660
user = www
group = www
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 1000
request_terminate_timeout = 300
request_slowlog_timeout = 30
slowlog = log/slow.log
EOF
# 创建必要目录
mkdir -p "$PHP_DIR/log"
mkdir -p "$PHP_DIR/run"
mkdir -p "$PHP_DIR/etc/php.d"
# 配置 PHP
cat > "$PHP_DIR/etc/php.ini" << EOF
; PHP 配置文件
[PHP]
engine = On
short_open_tag = On
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = Off
max_execution_time = 300
max_input_time = 300
memory_limit = 256M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
html_errors = On
error_log = /usr/local/php/log/php_error.log
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 64M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_tmp_dir = "/tmp"
upload_max_filesize = 64M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Asia/Shanghai
[filter]
filter.default = unsafe_raw
filter.default_flags =
[iconv]
iconv.input_encoding =
iconv.internal_encoding =
iconv.output_encoding =
[intl]
intl.default_locale =
intl.error_level = 0
intl.use_exceptions = 0
[sqlite3]
sqlite3.extension_dir =
[Pcre]
pcre.backtrack_limit = 100000
pcre.recursion_limit = 100000
[Pdo]
pdo_mysql.default_socket = $MYSQL_DIR/mysql.sock
[Pdo_mysql]
pdo_mysql.default_socket = $MYSQL_DIR/mysql.sock
[MySQLi]
mysqli.default_socket = $MYSQL_DIR/mysql.sock
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = On
[OPcache]
opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 2
opcache.fast_shutdown = 1
[curl]
curl.cainfo =
[openssl]
openssl.cafile =
openssl.capath =
EOF
chown -R www:www "$PHP_DIR"
}
# 创建 Systemd 服务
create_systemd_services() {
log_step "创建 Systemd 服务..."
# Lighttpd 服务
cat > /etc/systemd/system/lighttpd.service << EOF
[Unit]
Description=Lighttpd Web Server
After=network.target
[Service]
Type=forking
PIDFile=$LIGHTTPD_DIR/logs/lighttpd.pid
ExecStartPre=/usr/local/lighttpd/sbin/lighttpd -t -f /usr/local/lighttpd/etc/lighttpd.conf
ExecStart=/usr/local/lighttpd/sbin/lighttpd -f /usr/local/lighttpd/etc/lighttpd.conf
ExecReload=/bin/kill -USR1 \$MAINPID
ExecStop=/bin/kill -WINCH \$MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
# MySQL 服务
cat > /etc/systemd/system/mysql.service << EOF
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
PIDFile=$MYSQL_DIR/mysql.pid
ExecStartPre=/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --ignore-db-dir=lost+found
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --daemonize --pid-file=/usr/local/mysql/mysql.pid
ExecReload=/bin/kill -HUP \$MAINPID
ExecStop=/bin/kill -QUIT \$MAINPID
PrivateTmp=false
[Install]
WantedBy=multi-user.target
EOF
# PHP-FPM 服务
cat > /etc/systemd/system/php-fpm.service << EOF
[Unit]
Description=PHP FastCGI Process Manager
After=network.target
[Service]
Type=forking
PIDFile=$PHP_DIR/run/php-fpm.pid
ExecStartPre=/usr/local/php/sbin/php-fpm -t
ExecStart=/usr/local/php/sbin/php-fpm --daemonize --pid /usr/local/php/run/php-fpm.pid
ExecReload=/bin/kill -USR2 \$MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
# 重新加载 systemd
systemctl daemon-reload
}
# 设置环境变量
setup_environment() {
log_step "设置环境变量..."
cat > /etc/profile.d/lnmp.sh << EOF
# LNMP 环境变量
export PATH=\$PATH:/usr/local/lighttpd/sbin:/usr/local/mysql/bin:/usr/local/php/bin:/usr/local/php/sbin
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/lighttpd/lib:/usr/local/mysql/lib:/usr/local/pcre/lib:/usr/local/zlib/lib
EOF
chmod +x /etc/profile.d/lnmp.sh
source /etc/profile.d/lnmp.sh
}
# 创建测试文件
create_test_files() {
log_step "创建测试文件..."
# 创建 index.php
cat > "$LIGHTTPD_DIR/htdocs/index.php" << 'EOF'
<!DOCTYPE html>
<html>
<head>
<title>LNMP 编译安装成功</title>
<meta charset="UTF-8">
<style>
body { font-family: Arial, sans-serif; margin: 40px; background-color: #f5f5f5; }
.container { max-width: 800px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }
.success { color: #28a745; font-size: 24px; }
.info { background-color: #e7f3ff; padding: 15px; border-left: 4px solid #2196F3; margin: 15px 0; }
.test-links { margin: 20px 0; }
.test-links a { display: inline-block; margin: 10px; padding: 10px 20px; background-color: #007bff; color: white; text-decoration: none; border-radius: 5px; }
.test-links a:hover { background-color: #0056b3; }
.code { background-color: #f8f9fa; padding: 10px; border-radius: 3px; font-family: monospace; }
</style>
</head>
<body>
<div class="container">
<h1 class="success">LNMP 编译安装成功!</h1>
<div class="info">
<h3>环境信息</h3>
<p><strong>Web服务器:</strong> Lighttpd (编译安装)</p>
<p><strong>PHP版本:</strong> <?php echo PHP_VERSION; ?></p>
<p><strong>MySQL版本:</strong> <?php echo phpversion('mysql') ?: '已安装'; ?></p>
<p><strong>安装时间:</strong> <?php echo date('Y-m-d H:i:s'); ?></p>
<p><strong>服务器IP:</strong> <?php echo $_SERVER['SERVER_ADDR']; ?></p>
</div>
<div class="test-links">
<h3>测试链接</h3>
<a href="info.php" target="_blank">📋 PHP 信息</a>
<a href="test_mysql.php" target="_blank">🗄️ MySQL 连接测试</a>
<a href="phpmyadmin" target="_blank">🛠️ phpMyAdmin (需安装)</a>
</div>
<div class="info">
<h3>安装路径</h3>
<p>• Lighttpd: <span class="code">/usr/local/lighttpd</span></p>
<p>• PHP: <span class="code">/usr/local/php</span></p>
<p>• MySQL: <span class="code">/usr/local/mysql</span></p>
<p>• 网站根目录: <span class="code">/usr/local/lighttpd/htdocs</span></p>
</div>
<div class="info">
<h3>服务管理</h3>
<p>• 启动 Lighttpd: <span class="code">systemctl start lighttpd</span></p>
<p>• 启动 PHP-FPM: <span class="code">systemctl start php-fpm</span></p>
<p>• 启动 MySQL: <span class="code">systemctl start mysql</span></p>
<p>• 查看状态: <span class="code">systemctl status lighttpd</span></p>
</div>
</div>
</body>
</html>
EOF
# 创建 info.php
cat > "$LIGHTTPD_DIR/htdocs/info.php" << 'EOF'
<?php
phpinfo();
?>
EOF
# 创建 MySQL 测试文件
cat > "$LIGHTTPD_DIR/htdocs/test_mysql.php" << 'EOF'
<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
try {
$conn = new PDO("mysql:host=$servername;port=3306", $username, $password);
echo "<h1 style='color: green;'>MySQL 连接成功</h1>";
echo "<p>服务器信息: " . $conn->getAttribute(PDO::ATTR_SERVER_INFO) . "</p>";
echo "<p>MySQL 版本: " . $conn->getAttribute(PDO::ATTR_SERVER_VERSION) . "</p>";
} catch(PDOException $e) {
echo "<h1 style='color: red;'>MySQL 连接失败</h1>";
echo "<p>错误信息: " . $e->getMessage() . "</p>";
}
?>
EOF
chown -R www:www "$LIGHTTPD_DIR/htdocs"
}
# 设置 MySQL root 密码
setup_mysql_root() {
log_step "设置 MySQL root 密码..."
# 生成随机密码
MYSQL_ROOT_PASSWORD=$(openssl rand -base64 12)
# 等待 MySQL 启动
sleep 5
# 修改 root 密码
"$MYSQL_DIR/bin/mysql" -u root << EOF
ALTER USER 'root'@'localhost' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
EOF
# 更新测试文件密码
sed -i "s/\$password = \"\"/\$password = \"$MYSQL_ROOT_PASSWORD\"/" "$LIGHTTPD_DIR/htdocs/test_mysql.php"
log_info "MySQL root 密码已设置为: $MYSQL_ROOT_PASSWORD"
log_warn "请妥善保存此密码!"
# 保存密码到文件
echo "MySQL root 密码: $MYSQL_ROOT_PASSWORD" > /root/mysql_root_password.txt
chmod 600 /root/mysql_root_password.txt
}
# 启动服务并设置开机自启
start_and_enable_services() {
log_step "启动服务并设置开机自启..."
# 启动服务
systemctl start lighttpd
systemctl start php-fpm
systemctl start mysql
# 设置开机自启
systemctl enable lighttpd
systemctl enable php-fpm
systemctl enable mysql
# 检查服务状态
for service in lighttpd php-fpm mysql; do
if systemctl is-active --quiet $service; then
log_info "$service 服务运行正常"
else
log_warn "$service 服务可能未正常启动"
fi
done
}
# 保存安装信息
save_install_info() {
cat > /root/lnmp_compile_info.txt << EOF
LNMP 编译安装信息
=================
安装时间: $(date)
操作系统: $OS $VERSION
Lighttpd版本: $LIGHTTPD_VERSION
PHP版本: $PHP_VERSION
MySQL版本: $MYSQL_VERSION
服务器IP: $SERVER_IP
安装路径:
- Lighttpd: $LIGHTTPD_DIR
- PHP: $PHP_DIR
- MySQL: $MYSQL_DIR
服务管理:
- 启动 Lighttpd: systemctl start lighttpd
- 启动 PHP-FPM: systemctl start php-fpm
- 启动 MySQL: systemctl start mysql
- 查看状态: systemctl status lighttpd
测试链接:
- 主页: http://$SERVER_IP
- PHP信息: http://$SERVER_IP/info.php
- MySQL测试: http://$SERVER_IP/test_mysql.php
重要文件:
- Lighttpd配置: $LIGHTTPD_DIR/etc/lighttpd.conf
- PHP配置: $PHP_DIR/etc/php.ini
- MySQL配置: $MYSQL_DIR/etc/my.cnf
- MySQL root密码: 见 /root/mysql_root_password.txt
环境变量:
source /etc/profile.d/lnmp.sh
EOF
log_info "安装信息已保存到 /root/lnmp_compile_info.txt"
}
# 显示安装完成信息
show_completion_info() {
echo ""
echo "=========================================="
log_info "LNMP 编译安装完成!"
echo "=========================================="
echo ""
echo "Web服务器信息:"
echo " Lighttpd 状态: $(systemctl is-active lighttpd)"
echo " 安装路径: $LIGHTTPD_DIR"
echo " 访问地址: http://$SERVER_IP"
echo ""
echo "PHP信息:"
echo " PHP-FPM 状态: $(systemctl is-active php-fpm)"
echo " 安装路径: $PHP_DIR"
echo ""
echo "MySQL信息:"
echo " MySQL 状态: $(systemctl is-active mysql)"
echo " 安装路径: $MYSQL_DIR"
echo " Root密码: 见 /root/mysql_root_password.txt"
echo ""
echo "🔗 测试链接:"
echo " 主页: http://$SERVER_IP"
echo " PHP信息: http://$SERVER_IP/info.php"
echo " MySQL测试: http://$SERVER_IP/test_mysql.php"
echo ""
echo "常用命令:"
echo " 重启Lighttpd: systemctl restart lighttpd"
echo " 重启PHP-FPM: systemctl restart php-fpm"
echo " 重启MySQL: systemctl restart mysql"
echo ""
log_warn "重要: MySQL root 密码已保存到 /root/mysql_root_password.txt"
echo "=========================================="
}
# 主函数
main() {
echo "=========================================="
echo " LNMP 编译安装一键脚本"
echo " (Linux + Lighttpd + MySQL + PHP)"
echo "=========================================="
echo ""
check_root
detect_os
get_server_ip
# 安装过程
install_dependencies
create_users
download_sources
install_pcre
install_zlib
install_lighttpd
configure_lighttpd
install_mysql
install_php
create_systemd_services
setup_environment
create_test_files
start_and_enable_services
setup_mysql_root
save_install_info
# 显示完成信息
show_completion_info
}
# 运行主函数
main "$@"
保存为 install_lnmp.sh 即可使用:
✅ 完整LNMP环境: Linux + Lighttpd + MySQL + PHP
✅ 多系统支持: Ubuntu、Debian、CentOS、RHEL 等主流 Linux 发行版
✅ 自动版本检测: 自动选择和安装最适合的PHP版本
✅ 安全优化: MySQL安全配置、防火墙规则、文件权限设置
✅ 性能优化: PHP-FPM、Lighttpd性能调优
✅ 完整测试: 包含PHP和MySQL连接测试文件
✅ 可选组件: 可选择安装 phpMyAdmin
✅ 信息保存: 自动生成安装信息文件供后续参考
✅ 服务管理: 自动启动和启用所有服务
-
主页:
http://您的服务器IP/ -
PHP信息:
http://您的服务器IP/info.php -
MySQL测试:
http://您的服务器IP/test_mysql.php -
phpMyAdmin:
http://您的服务器IP/phpmyadmin(如果安装了)
deepseek
#!/bin/bash
# 检查 root 权限
if [[ $EUID -ne 0 ]]; then
echo "此脚本需要 root 权限。请使用 sudo 或以 root 用户身份运行。"
exit 1
fi
# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检测系统类型并安装依赖
install_dependencies() {
log_info "检测系统类型并安装编译依赖..."
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
else
log_error "无法检测操作系统类型。"
exit 1
fi
case $OS in
ubuntu|debian)
apt-get update
apt-get install -y wget build-essential autoconf automake libtool pkg-config \
libpcre3-dev libbz2-dev zlib1g-dev libssl-dev libxml2-dev libjpeg-dev \
libpng-dev libgdbm-dev libmysqlclient-dev libcurl4-openssl-dev
;;
centos|rhel|fedora)
if [ "$OS" = "centos" ] || [ "$OS" = "rhel" ]; then
yum install -y epel-release
fi
yum groupinstall -y "Development Tools"
yum install -y wget pcre-devel bzip2-devel zlib-devel openssl-devel \
libxml2-devel libjpeg-turbo-devel libpng-devel gdbm-devel \
mysql-devel curl-devel
;;
*)
log_warning "未知操作系统,尝试安装通用依赖..."
if command -v apt-get &> /dev/null; then
apt-get update
apt-get install -y wget build-essential autoconf automake libtool pkg-config
elif command -v yum &> /dev/null; then
yum groupinstall -y "Development Tools"
yum install -y wget
elif command -v dnf &> /dev/null; then
dnf groupinstall -y "Development Tools"
dnf install -y wget
else
log_error "无法确定包管理器,请手动安装编译工具和依赖。"
exit 1
fi
;;
esac
}
# 编译安装 Lighttpd
compile_lighttpd() {
log_info "开始编译安装 Lighttpd..."
cd /tmp
wget https://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.54.tar.gz
tar zxvf lighttpd-1.4.54.tar.gz
cd lighttpd-1.4.54
./configure --prefix=/usr/local/lighttpd \
--with-openssl \
--with-zlib \
--with-bzip2 \
--with-pcre
make -j$(nproc)
make install
# 创建必要的目录
mkdir -p /usr/local/lighttpd/htdocs
mkdir -p /usr/local/lighttpd/etc
mkdir -p /usr/local/lighttpd/logs
mkdir -p /usr/local/lighttpd/var/run
# 复制配置文件
cp ./doc/lighttpd.conf /usr/local/lighttpd/etc/
# 创建 lighttpd 用户和组
if ! id "lighttpd" &>/dev/null; then
useradd -r -s /sbin/nologin lighttpd
fi
# 设置权限
chown -R lighttpd:lighttpd /usr/local/lighttpd
log_info "Lighttpd 编译安装完成。"
}
# 配置 Lighttpd
configure_lighttpd() {
log_info "配置 Lighttpd..."
# 备份原始配置
cp /usr/local/lighttpd/etc/lighttpd.conf /usr/local/lighttpd/etc/lighttpd.conf.backup
# 创建新的配置文件
cat > /usr/local/lighttpd/etc/lighttpd.conf << 'EOF'
server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_fastcgi",
)
server.document-root = "/usr/local/lighttpd/htdocs"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/usr/local/lighttpd/logs/error.log"
server.pid-file = "/usr/local/lighttpd/var/run/lighttpd.pid"
server.username = "lighttpd"
server.groupname = "lighttpd"
server.port = 80
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/local/lighttpd/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/local/lighttpd/share/lighttpd/create-mime.conf.pl"
# FastCGI configuration for PHP
fastcgi.server = ( ".php" =>
((
"socket" => "/tmp/php.socket",
"bin-path" => "/usr/local/php/bin/php-cgi",
"max-procs" => 2,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "4",
"PHP_FCGI_MAX_REQUESTS" => "10000"
),
"broken-scriptfilename" => "enable"
))
)
EOF
# 创建测试页面
cat > /usr/local/lighttpd/htdocs/index.php << 'EOF'
<?php
phpinfo();
?>
EOF
chown lighttpd:lighttpd /usr/local/lighttpd/htdocs/index.php
}
# 创建 Lighttpd 系统服务
create_lighttpd_service() {
log_info "创建 Lighttpd 系统服务..."
# 创建 systemd 服务文件
cat > /etc/systemd/system/lighttpd.service << 'EOF'
[Unit]
Description=Lighttpd Web Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/lighttpd/var/run/lighttpd.pid
ExecStart=/usr/local/lighttpd/sbin/lighttpd -f /usr/local/lighttpd/etc/lighttpd.conf
ExecReload=/bin/kill -USR1 $MAINPID
ExecStop=/bin/kill -QUIT $MAINPID
User=lighttpd
Group=lighttpd
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动服务
systemctl daemon-reload
systemctl enable lighttpd
systemctl start lighttpd
# 检查服务状态
if systemctl is-active --quiet lighttpd; then
log_info " Lighttpd 服务启动成功!"
else
log_error " Lighttpd 服务启动失败,请检查配置。"
systemctl status lighttpd
fi
}
# 编译安装 PHP
compile_php() {
log_info "开始编译安装 PHP..."
cd /tmp
wget https://www.php.net/distributions/php-7.4.33.tar.gz
tar zxvf php-7.4.33.tar.gz
cd php-7.4.33
./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=lighttpd \
--with-fpm-group=lighttpd \
--with-mysqli \
--with-pdo-mysql \
--with-openssl \
--with-zlib \
--with-curl \
--with-gd \
--with-jpeg \
--with-png-dir \
--with-gettext \
--with-zip \
--enable-mbstring
make -j$(nproc)
make install
# 复制配置文件
mkdir -p /usr/local/php/etc
cp php.ini-development /usr/local/php/etc/php.ini
# 创建 PHP-FPM 配置文件
cat > /usr/local/php/etc/php-fpm.conf << 'EOF'
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
[www]
user = lighttpd
group = lighttpd
listen = /tmp/php.socket
listen.owner = lighttpd
listen.group = lighttpd
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
EOF
log_info "PHP 编译安装完成。"
}
# 创建 PHP-FPM 系统服务
create_phpfpm_service() {
log_info "创建 PHP-FPM 系统服务..."
# 创建 systemd 服务文件
cat > /etc/systemd/system/php-fpm.service << 'EOF'
[Unit]
Description=PHP FastCGI Process Manager
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --daemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -QUIT $MAINPID
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动服务
systemctl daemon-reload
systemctl enable php-fpm
systemctl start php-fpm
# 检查服务状态
if systemctl is-active --quiet php-fpm; then
log_info " PHP-FPM 服务启动成功!"
else
log_error " PHP-FPM 服务启动失败,请检查配置。"
systemctl status php-fpm
fi
}
# 安装 MySQL (使用包管理器安装)
install_mysql() {
log_info "开始安装 MySQL..."
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
fi
case $OS in
ubuntu|debian)
apt-get install -y mysql-server mysql-client
;;
centos|rhel|fedora)
if [ "$OS" = "centos" ] || [ "$OS" = "rhel" ]; then
yum install -y mariadb-server mariadb
else
yum install -y mysql-server mysql
fi
;;
*)
# 尝试使用通用方法安装
if command -v apt-get &> /dev/null; then
apt-get install -y mysql-server mysql-client
elif command -v yum &> /dev/null; then
yum install -y mysql-server mysql
elif command -v dnf &> /dev/null; then
dnf install -y mysql-server mysql
else
log_error "无法确定包管理器,请手动安装 MySQL。"
return 1
fi
;;
esac
# 启动 MySQL 服务
systemctl enable mysql
systemctl start mysql
# 安全配置 MySQL
log_info "进行 MySQL 安全配置..."
MYSQL_ROOT_PASSWORD=$(openssl rand -base64 12 | tr -d '/+=' | cut -c1-12)
mysql -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$MYSQL_ROOT_PASSWORD'; FLUSH PRIVILEGES;"
# 保存密码到文件
echo "MySQL root 密码: $MYSQL_ROOT_PASSWORD" > /root/mysql_password.txt
chmod 600 /root/mysql_password.txt
log_info "MySQL root 密码已保存到 /root/mysql_password.txt"
# 检查服务状态
if systemctl is-active --quiet mysql; then
log_info " MySQL 服务启动成功!"
else
log_error " MySQL 服务启动失败,请检查配置。"
systemctl status mysql
fi
}
# 显示安装结果
show_result() {
log_info " LNMP 环境编译安装完成!"
echo ""
echo "安装信息:"
echo " - Lighttpd 安装路径: /usr/local/lighttpd"
echo " - PHP 安装路径: /usr/local/php"
echo " - MySQL 已安装并配置"
echo ""
echo "服务状态:"
systemctl status lighttpd --no-pager -l
echo ""
systemctl status php-fpm --no-pager -l
echo ""
systemctl status mysql --no-pager -l
echo ""
echo "访问地址:"
echo " - 网站根目录: /usr/local/lighttpd/htdocs"
echo " - 测试页面: http://$(hostname -I | awk '{print $1}')/index.php"
echo ""
if [ -f /root/mysql_password.txt ]; then
echo "MySQL root 密码已保存到: /root/mysql_password.txt"
echo "请妥善保管此密码!"
fi
echo ""
echo "下一步操作建议:"
echo "1. 修改 MySQL root 密码 (如果自动生成的密码不符合要求)"
echo "2. 配置虚拟主机 (如果需要)"
echo "3. 安装 SSL 证书 (如果需要 HTTPS)"
echo "4. 配置防火墙开放必要端口"
}
# 主安装流程
main() {
log_info "开始编译安装 LNMP 环境 (Lighttpd + PHP + MySQL)"
# 安装依赖
install_dependencies
# 编译安装 Lighttpd
compile_lighttpd
configure_lighttpd
create_lighttpd_service
# 编译安装 PHP
compile_php
create_phpfpm_service
# 安装 MySQL
install_mysql
# 显示结果
show_result
}
# 执行主函数
main "$@"
保存为 install_lnmp.sh 即可使用:
-
自动检测系统类型(Ubuntu/Debian/CentOS/RHEL)
-
安装 Lighttpd Web 服务器
-
安装 MySQL/MariaDB 数据库
-
安装 PHP 及常用扩展
-
自动配置 PHP-FPM 与 Lighttpd 协同工作
-
自动生成安全的 MySQL root 密码
-
创建 PHP 测试页面
-
显示安装结果和后续操作建议

sicnature ---------------------------------------------------------------------
I P 地 址: 216.73.216.10
区 域 位 置: 美国加利福尼亚洛杉矶
系 统 信 息:
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普 | 海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
没有评论