跳过内容
JimTseBlog
后退

【Linux】Rocky Linux 9.7编译安装LNMP环境

编辑文章

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

编辑文章
分享文章:

上一篇
【DNMP】Debian树莓派3B+安装Nginx+MariaDB+Php
下一篇
【Home Assistant】Docker 安装 HA