RockyLinux9源码安装LNMP
hi,我是温新,一名PHPer
贴近源码,折腾是一种进步
1、准备工作
我这里使用是的全新的环境进行安装。
更新
# 更新
dnf update -y
安装相关依赖包
# 依赖包
yum -y install epel-release
yum -y group install "Development Tools"
# mysql 依赖
yum -y install ncurses-devel
dnf -y install apr* autoconf automake bison bzip2* cpp curl-devel fontconfig fontconfig-devel kernel keyutils keyutils-libs-devel krb5-devel patch ncurses-devel gtk* ntpstat na* bison*
dnf -y install gd gd-devel gettext-devel libjpeg* libtool* libxml2-devel libxml* libXaw-devel pcre-devel perl php-common php-gd sqlite-devel unzip libcurl-devel
源码安装 openssl
经过不断踩坑,才有了源码来安装 openssl 依赖。为什么要源码安装,因为
dnf -y install openssl-devel
后,后续安装 mysql8.0.20 没有识别到 openssl,但确实安装了 openssl。
cd /home/tmp
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
cd openssl-1.1.1q
./config
make && make install
安装 PHP oniguruma
wget https://dl.rockylinux.org/pub/rocky/9/CRB/x86_64/os/Packages/o/oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm
dnf -y install oniguruma-devel-6.9.6-1.el9.5.x86_64.rpm
安装 MySQL libtirpc-devel
wget https://dl.rockylinux.org/pub/rocky/9/CRB/x86_64/os/Packages/l/libtirpc-devel-1.3.2-1.el9.x86_64.rpm
dnf -y insatll libtirpc-devel-1.3.2-1.el9.x86_64.rpm
安装 MySQL 依赖 rpcsvc-proto
wget https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz
tar -zxvf rpcsvc-proto-1.4.tar.gz
cd rpcsvc-proto-1.4
./configure
make && make install
工具
dnf install -y wget vim lrzsz
关闭防火墙
# 关闭防火墙
systemctl stop firewalld.service
# 禁止开机自启
systemctl disable firewalld.service
# 查看状态
systemctl status firewalld.service
源码安装 MySQL8.0.28
卸载 mariadb
# 查看是否自带数据
rpm -qa|grep mariadb
# 载自带数据库
yum -y remove mariadb* boost-*
检查是否存在mysql用户、用户组,不存在,创建
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql
# 创建mysql用户组
groupadd mysql
# 创建mysql用户并禁止登陆
useradd -g mysql mysql -M -s /sbin/nologin/
若存在,删除my.cnf mysql
rm -rf /etc/my.cnf
rpm -qa | grep mysql
安装 MySQL8.0.28
安装
# 1) 解压源码
tar -zxvf mysql-boost-8.0.28.tar.gz
cd mysql-boost-8.0.28
mkdir build
cd build
# 2)编译
cmake .. -DCMAKE_INSTALL_PREFIX=/home/softare/mysql8.0.28 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DSYSCONFDIR=/etc \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_DATADIR=/home/softare/mysql8.0.28/data \
-DWITH_BOOST=/home/tmp/mysql8.0.28/boost \
-DDOWNLOAD_BOOST=1
# 3)安装
make && make install
修改所属用户
# 修改所属组与用户
chown -R mysql:mysql /home/software/mysql8.0.28
# 修改权限
chmod -R 755 /home/software/mysql8.0.28
初始化
cd /home/software/mysql8.0.28/bin
./mysqld --initialize --user=mysql --datadir=/home/software/mysql8.0.28/data --character-set-server=utf8
【若出现如下问题】
[root@localhost bin]# ./mysqld --initialize --user=mysql --datadir=/home/software/mysql8.0.28/data --character-set-server=utf8
./mysqld: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
【解决如下】
dnf -y remove openssl-devel
dnf install -y compat-openssl11
执行后再去执行初始化操作
安装 ssl
/home/software/mysql8/bin/mysql_ssl_rsa_setup
启动mysql/u
/home/software/mysql8.0.28/bin/mysqld_safe --user=mysql &
用此命令开启后需要使用新的窗口连接数据库
连接mysql
第一步:连接
cd /home/software/mysql8.0.28/bin
./mysql -uroot -p
第二步:修改密码
alter user 'root'@'localhost' identified by "123456";
生产环境中密码千万不要随意设置成这样
设置mysql远程登陆
# 添加远程登陆用户
create user root@'%' identified by '123456';
# 这个服务器用
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Hy**520!';
# 为远程用户分配权限
grant all privileges on *.* to root@'%';
flush privileges;
# 【注】生产环境中千万不要把所有权限都分配给远程登陆用户
# 查看当前用户,host为 % 的用户表示远程登陆用户
select user,host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
在防火墙中开启3306远程访问,这样就能通过navicat等工具连接mysql
# 查看是否开放3306端口
firewall-cmd --list-ports
# 开启防火墙
systemctl start firewalld.service
# 开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 刷新
firewall-cmd --reload
# 关闭防火墙
systemctl stop firewalld.service
# 禁止防火墙开机自启
systemctl disable firewalld.service
设置环境变量
vim /etc/profile
# 添加内容
export PATH=$PATH:/home/software/mysql8.0.28/bin
# 刷新
source /etc/profile
设置开机自启
创建配置文件
vim /usr/lib/systemd/system/mysql8.0.28.service
# 注意:这里可以不用添加.service后缀,添加了也无妨,不影响
添加如下内容
[Unit]
Description=MySQL Server(8.0)
Documentation=main:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/home/software/mysql8.0.28/bin/mysqld
LimitNOFILE=5000
设置开机自启
# 开机自启
systemctl enable mysql8.0.28.service
# 取消开机自启
systemctl disable mysql8.0.28.service
启动mysql服务
# 启动mysql服务
systemctl start mysql8.0.28.service
# 重启mysql服务
systemctl restart mysql8.0.28.service
# 查询mysql状态
systemctl status mysql8.0.28.service
停止服务
cd /home/software/mysql8/support-files
# 停止
./mysql stop
# 启动
./mysql start
# 重启
./mysql restart
源码安装 nginx1.20.0
创建 nginx 用户组
groupadd nginx
useradd -g nginx nginx -M -s /sbin/nologin
安装 nginx1.20.0
# 1)下载
cd /home/tmp
wget http://nginx.org/download/nginx-1.22.0.tar.gz
# 2) 解压
tar -zxvf nginx-1.22.0.tar.gz
cd nginx-1.22.0
# 3) 编译
./configure \
--prefix=/home/software/nginx1.22.0 \
--user=nginx \
--group=nginx \
--with-pcre \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-mail \
--with-mail_ssl_module \
--with-stream_ssl_module
# 4) 安装
make && make install
设置 nginx 启动
方式一:设置开机自启
vim /usr/lib/systemd/system/nginx.service
配置如下内容,保存并退出
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/home/software/nginx1.22.0/sbin/nginx
ExecReload=/home/software/nginx1.22.0/sbin/nginx -s reload
ExecStop=/home/software/nginx/sbin/nginx1.22.0 -s quit
[Install]
WantedBy=multi-user.target
设置开机自启
# 设置开机自启
systemctl enable nginx.service
# 留意留意如下命令
# 启动nginx
systemctl start nginx.service
# 禁止开机自启
systemctl disable nginx.service
# 查看nginx状态
systemctl status nginx.service
方式二 nginx 启动
# 启动
/home/software/nginx1.22.0/sbin/nginx
# 停止
/home/software/nginx1.22.0/sbin/nginx -s stop
# 重启
/home/software/nginx1.22.0/sbin/nginx -s reload
源码安装PHP8.1.8
卸载自带的PHP
# 检查是否有自带的PHP
rpm -qa|grep php
# 卸载PHP
rpm -e php-gd-7.2.24-1.module_el8.2.0+313+b04d0a66.x86_64
rpm -e php-common-7.2.24-1.module_el8.2.0+313+b04d0a66.x86_64
# 再次查看
rpm -qa|grep php
创建用户
groupadd www
useradd -g www www -M -s /sbin/nologin
安装PHP
# 1) 下载并解压
cd /home/tmp
https://www.php.net/distributions/php-8.1.8.tar.gz
tar -zxvf php-8.1.8.tar.gz
cd php-8.1.8
# 2)编译
./configure --prefix=/home/software/php8.1.8 \
--with-config-file-path=/home/software/php8.1.8/etc \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mbstring \
--enable-ftp \
--enable-gd \
--enable-gd-jis-conv \
--enable-mysqlnd \
--enable-pdo \
--enable-sockets \
--enable-fpm \
--enable-xml \
--enable-soap \
--enable-pcntl \
--enable-cli \
--with-openssl \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-pear \
--with-zlib \
--with-iconv \
--with-curl \
--with-jpeg \
--enable-sockets
# 3)安装
make && make install
配置PHP
cp php.ini-production /home/software/php8.1.8/etc/php.ini
cp /home/software/php8.1.8/etc/php-fpm.conf.default /home/software/php8.1.8/etc/php-fpm.conf
cp /home/software/php8.1.8/etc/php-fpm.d/www.conf.default /home/software/php8.1.8/etc/php-fpm.d/www.conf
修改配置
# 编辑php-fpm.conf配置文件
vim /home/software/php8.1.8/etc/php-fpm.conf
# 去掉如下配置前的#号并保存退出
pid = /run/php-fpm.pid
设置开机自启
# 新增配置文件
vim /usr/lib/systemd/system/php-fpm8.1.8.service
# 添加如下内容保存并退出
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target
[Service]
Type=simple
PIDFile=/run/php-fpm.pid
ExecStart=/home/software/php8.1.7/sbin/php-fpm --nodaemonize --fpm-config /home/software/php8.1.7/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID
[Install]
WantedBy=multi-user.target
设置环境变量
vim /etc/profile
export PATH=$PATH:/home/software/php8.1.8/bin
source /etc/profile
Nginx 解析 PHP
第一步:编辑nginx.conf
配置文件
cd /home/software/nginx/conf
cp nginx.conf nginx.conf.bak
vim nginx.conf
第二步:打开解析PHP的注释
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
第三步:修改路径
location ~ \.php$ {
root /home/www;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
第四步:修改nginx web目录
location / {
root /home/www;
index index.php index.html index.htm;
}
第五步:重启nginx并测试php
mkdir /home/www
vim /home/www/index.php
<?php
phpinfo();
关于 RockyLinux8 问题
1) 源码安装 MySQL
问题
最开始我使用的 mysql8.0.20
进行源码安装,解决了依赖包的问题后,当编译工作进行到 50%
左右时,突然报错,此时的心情啊!!!
按照以往的经验来看,当通过 configure
后,进行 make
时,每次一都是成功编译并进行后续的安装,而在 rockylinux9
上,缺少很多相关依赖包,而且有些包已经安装了,但是软件却找不到。如 openssl
已经安装了,而 mysql8.0.20
却找不到,一直提示没有安装 openssl
。
2) 依赖包
导致一些软件安装失败的原因都是因为缺少相关依赖,但为什么安装了没有作用,及一些正常的所需要使用的依赖包没有提供 install 安装,这些原因就不知道了。
我是看着 RockyLinux9
发布稳定版本后才去下载使用的。相比于最开始发布的 RockyLinux8
,9 明显却没有那么好使了。
使用 RockyLinux9
坑我挺惨的,以前的源码安装 LNMP 笔记在 RockyLinux9
上并不好使,我折腾了 3 个晚上,加一整天,终于把环境搭建好了。现在分享出来,仅作参考,学习交流。