TOC目录
打开TOC目录
一.系统准备
dnf -y update
# 安装基础工具包
sudo dnf install -y wget curl vim git tar gzip bzip2 unzip
二.安装 MySQL 5.7.44
# 1. 安装依赖
dnf install -y make gcc-c++ cmake bison perl autoconf ncurses-devel openssl-devel libtirpc
cd /usr/local/src
wget https://dl.rockylinux.org/pub/rocky/9/devel/x86_64/os/Packages/l/libtirpc-devel-1.3.3-9.el9.x86_64.rpm
wget https://dl.rockylinux.org/pub/rocky/9/AppStream/x86_64/os/Packages/r/rpcgen-1.4-9.el9.x86_64.rpm
rpm -ivh libtirpc-devel-1.3.3-9.el9.x86_64.rpm
rpm -ivh rpcgen-1.4-9.el9.x86_64.rpm
# 2. 创建MySQL用户和目录
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo mkdir -p /usr/local/mysql
sudo mkdir -p /data/mysql
sudo mkdir -p /var/log/mysql
# 3.编译
sudo wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44.tar.gz
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz
sudo tar -zxvf mysql-5.7.44.tar.gz
tar -xvzf mysql-boost-5.7.44.tar.gz
cd mysql-5.7.44
sudo cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/run/mysql.sock \
-DSYSCONFDIR=/usr/local/mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_BOOST=boost/boost_1_59_0/
make && make install
if [ $? -ne 0 ]; then
echo "MySQL installation failed."
exit 1
else
echo "MySQL installed successfully."
fi
# 4. 配置MySQL
sudo chown -R mysql:mysql /usr/local/mysql
sudo chown -R mysql:mysql /usr/local/mysql/run
sudo chown -R mysql:mysql /data/mysql
sudo chown -R mysql:mysql /var/log/mysql
# 创建my.cnf配置文件
sudo tee /usr/local/mysql/my.cnf << 'EOF'
[mysqld]
#skip-grant-tables
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/usr/local/mysql/run/mysql.sock
port=33322
user=mysql
bind-address = 0.0.0.0
federated
server-id = 1
sync_binlog=1
log_bin = mysql-bin
skip-name-resolve
# 日志
binlog_format = mixed
expire_logs_days = 7
log-error=/var/log/mysql/mysql-error.log
slow_query_log=1
slow_query_log_file=/var/log/mysql/mysql-slow.log
long_query_time=2
# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 性能优化
key_buffer_size=256M
max_allowed_packet=256M
table_open_cache=512
sort_buffer_size=4M
read_buffer_size=4M
read_rnd_buffer_size=8M
myisam_sort_buffer_size=64M
thread_cache_size=16
query_cache_size=64M
query_cache_type=1
interactive_timeout=120
wait_timeout=120
log_bin_trust_function_creators = OFF
sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
##sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# timezone
default-time_zone = '-8:00'
# InnoDB
innodb_buffer_pool_size=256M
innodb_log_file_size=64M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=50
[client]
default-character-set=utf8mb4
socket=/usr/local/mysql/run/mysql.sock
[mysql]
default-character-set=utf8mb4
EOF
# 5. 初始化MySQL
cd /usr/local/mysql
sudo bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
# 设置环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
./bin/mysqld --defaults-file=/usr/local/mysql/my.cnf --user=mysql
mysqladmin -uroot password "new_password"
# 6. 创建启动脚本(持久化运行)
# 创建最简单的服务文件
sudo tee /etc/systemd/system/mysqld.service << 'EOF'
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=simple
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf
ExecRestart=service mysqld restart
ExecStop=service mysqld stop
[Install]
WantedBy=multi-user.target
EOF
chmod +x /etc/systemd/system/mysqld.service
# 重新加载systemd
systemctl daemon-reload
# 启动MySQL服务
systemctl start mysqld
# 设置开机启动
systemctl enable mysqld
# 查看状态
systemctl status mysqld
# 7.防火墙开放端口
sudo firewall-cmd --zone=public --add-port=33322/tcp --permanent
sudo firewall-cmd --reload
首次连接后设置密码
-- 进入MySQL后执行
ALTER USER 'root'@'localhost' IDENTIFIED BY '2.7xxxxxxxx';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '3xxxxxxxx' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
三、安装PHP 7.3.33
# 1.安装依赖
dnf -y install wget pcre pcre-devel openssl openssl-devel libicu-devel autoconf libjpeg libjpeg-devel \
libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel \
glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap \
openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel \
gd gd-devel libtool* libmcrypt libmcrypt-devel mhash libxslt libxslt-devel readline \
readline-devel gmp gmp-devel libcurl libcurl-devel
# 2.创建用户www
groupadd www
useradd -s /sbin/nologin -g www -M www
# 3.安装OpenSSL 1.1.1w
cd /usr/local/src
sudo wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
sudo tar -xzf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
# 编译安装到独立目录(不影响系统OpenSSL 3.x)
./config --prefix=/usr/local/openssl-1.1.1w \
--openssldir=/usr/local/openssl-1.1.1w/ssl \
shared zlib
make -j$(nproc)
sudo make install
# 检查OpenSSL是否编译成功
ls /usr/local/openssl-1.1.1w/lib/libssl.so*
# 应该能看到 libssl.so.1.1
ls /usr/local/openssl-1.1.1w/lib/libcrypto.so*
# 应该能看到 libcrypto.so.1.1
# 临时设置(当前会话有效)
export LD_LIBRARY_PATH=/usr/local/openssl-1.1.1w/lib:$LD_LIBRARY_PATH
# 永久设置(添加到系统配置)
echo '/usr/local/openssl-1.1.1w/lib' | sudo tee /etc/ld.so.conf.d/openssl-1.1.1w.conf
# 更新动态链接库缓存
sudo ldconfig
# 现在测试
/usr/local/openssl-1.1.1w/bin/openssl version
# 应该显示:OpenSSL 1.1.1w 11 Sep 2023
# 4.重新编译curl,链接到OpenSSL 1.1.1w
cd /usr/local/src
sudo wget https://curl.se/download/curl-7.88.1.tar.gz
sudo tar -xzf curl-7.88.1.tar.gz
cd curl-7.88.1
# 编译curl时使用OpenSSL 1.1.1w
./configure --prefix=/usr/local/curl-ossl111 \
--with-ssl=/usr/local/openssl-1.1.1w \
--without-nss \
--without-gnutls \
--without-wolfssl
make -j$(nproc)
sudo make install
# 5.编译libzip
cd /usr/local/src
wget https://libzip.org/download/libzip-1.11.4.tar.gz
tar -zxvf libzip-1.11.4.tar.gz
cd ibzip-1.11.4
mkdir build && cd build && cmake .. && make && make install
# 6.编译PHP7.3.33
cd /usr/local/src
wget https://www.php.net/distributions/php-7.3.33.tar.gz
tar -zxvf php-7.3.30.tar.gz
cd php-7.3.30
# 配置PHP使用这个curl
# make distclean
# export PKG_CONFIG_PATH=/usr/local/curl-ossl111/lib/pkgconfig:/usr/local/openssl-1.1.1w/lib/pkgconfig:$PKG_CONFIG_PATH
# sudo ./configure \
--prefix=/usr/local/php73 \
--with-openssl=/usr/local/openssl-1.1.1w \
--with-curl=/usr/local/curl-ossl111 \
[其他参数...]
./configure --prefix=/usr/local/php73 \
--with-config-file-path=/usr/local/php73/etc \
--with-fpm-user=www \
--with-fpm-group=www \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--with-pear \
--with-xmlrpc \
--with-openssl=/usr/local/openssl-1.1.1w \
--with-curl=/usr/local/curl-ossl111 \
--with-mhash \
--with-gd \
--enable-fpm \
--enable-mysqlnd \
--enable-mysqlnd-compression-support \
--enable-xml \
--enable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-intl \
--enable-ftp \
--enable-gd-jis-conv \
--enable-pcntl \
--enable-sockets \
--enable-zip \
--enable-soap \
--enable-fileinfo \
--enable-opcache \
--enable-maintainer-zts
make -j$(nproc)
sudo make install
# 7.创建systemd服务
cp sapi/fpm/php-fpm.service /etc/systemd/system/php-fpm.service
chmod +x /etc/systemd/system/php-fpm.service
systemctl daemon-reload
systemctl enable php-fpm
systemctl start php-fpm
# 8.配置PHP
sudo cp php.ini-production /usr/local/php73/etc/php.ini
# 修改php.ini配置
sudo sed -i 's/;date.timezone =/date.timezone = America/Los_Angeles/' /usr/local/php73/etc/php.ini
sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/' /usr/local/php73/etc/php.ini
sudo sed -i 's/post_max_size = 8M/post_max_size = 50M/' /usr/local/php73/etc/php.ini
sudo sed -i 's/max_execution_time = 30/max_execution_time = 300/' /usr/local/php73/etc/php.ini
sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /usr/local/php73/etc/php.ini
sudo sed -i 's/pdo_mysql.default_socket=/pdo_mysql.default_socket = /usr/local/mysql/run/mysql.sock/' /usr/local/php73/etc/php.ini
sudo sed -i 's/mysqli.default_socket =/mysqli.default_socket = /usr/local/mysql/run/mysql.sock/' /usr/local/php73/etc/php.ini
# 配置PHP-FPM
sudo cp /usr/local/php73/etc/php-fpm.conf.default /usr/local/php73/etc/php-fpm.conf
sudo cp /usr/local/php73/etc/php-fpm.d/www.conf.default /usr/local/php73/etc/php-fpm.d/www.conf
# 修改www.conf
sudo sed -i 's/user = nobody/user = www/' /usr/local/php73/etc/php-fpm.d/www.conf
sudo sed -i 's/group = nobody/group = www/' /usr/local/php73/etc/php-fpm.d/www.conf
sudo sed -i 's/listen = 127.0.0.1:9000/listen = /var/run/php-fpm.sock/' /usr/local/php73/etc/php-fpm.d/www.conf
sudo sed -i 's/;listen.owner = nobody/listen.owner = www/' /usr/local/php73/etc/php-fpm.d/www.conf
sudo sed -i 's/;listen.group = nobody/listen.group = www/' /usr/local/php73/etc/php-fpm.d/www.conf
sudo sed -i 's/;listen.mode = 0660/listen.mode = 0660/' /usr/local/php73/etc/php-fpm.d/www.conf
# 添加环境变量
echo 'export PATH=/usr/local/php73/bin:/usr/local/php73/sbin:$PATH' | sudo tee /etc/profile.d/php.sh
source /etc/profile.d/php.sh
# 9.单独编译mysqli.so
# 进入 PHP 源码的 mysqli 扩展目录
cd /usr/local/src/php-7.3.33/ext/mysqli
# 清理之前的内容
sudo make clean 2>/dev/null || true
sudo rm -f configure config.guess config.sub
# 使用 phpize 准备编译环境
sudo /usr/local/php73/bin/phpize
# 配置编译选项
./configure \
--with-php-config=/usr/local/php73/bin/php-config \
--with-mysqli=mysqlnd \
--enable-maintainer-zts
# 编译
make -j$(nproc)
# 检查生成的 .so 文件
ls -la modules/
# 安装到扩展目录
sudo make install
# 验证安装
ls -la /usr/local/php73/lib/php/extensions/no-debug-zts-20180731/mysqli.so
# 运行
sudo /usr/local/php73/sbin/php-fpm --daemonize 2>&1
# 停止
pkill -9 php-fpm
四.安装NGINX
# 1.编译zlib
wget http://www.zlib.net/zlib-1.3.1.tar.gz
tar -zxvf zlib-1.3.1.tar.gz
cd zlib-1.3.1
./configure
make && make install
# 2.编译NGINX
cd /usr/local/src
wget http://nginx.org/download/nginx-1.29.4.tar.gz
tar zxvf nginx-1.29.4.tar.gz
cd nginx-1.29.4
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-zlib=/usr/local/src/zlib-1.3.1 --with-openssl=/usr/local/src/openssl-1.1.1w
make && make install
# 3.添加环境变量和软链接
echo 'export PATH=/usr/local/nginx/sbin:$PATH' | sudo tee /etc/profile.d/nginx.sh
source /etc/profile.d/nginx.sh
sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
# 4.防火墙开放端口
sudo firewall-cmd --zone=public --add-port=443/udp --permanent
sudo firewall-cmd --reload
# 5.配置nginx.service开机启动服务
cd /lib/systemd/system
sudo tee /lib/systemd/system/nginx.service << 'EOF'
[Unit]
Description=nginx service
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
chmod +x /lib/systemd/system/nginx.service
systemctl enable nginx.service