项目实战:利用LNMP环境部署 KodBox私有云盘

利用 LNMP(Linux + Nginx + MySQL + PHP)环境部署 KodBox 私有云盘,是搭建轻量、可控私有存储的常用方案

image-20251206230329801

角色 主机名 IP 操作系统
php+nginx+nfs web01 10.0.0.110/172.16.1.110 kylinv10sp3
php+nginx+nfs web02 10.0.0.111/172.16.1.111 kylinv10sp3
mysql+redis db01 10.0.0.114/172.16.1.114 kylinv10sp3
nginx(7层负载) lb01 10.0.0.115/172.16.1.115 kylinv10sp3
nfs nfs01 10.0.0.102/172.16.1.102 kylinv10sp3

环境准备

(1)检查网络

ping 10网段是否能连外网
ping 172网段内网是否互通

(2)配置主机名

hostnamectl set-hostname web01
hostnamectl set-hostname web02
hostnamectl set-hostname db01
hostnamectl set-hostname lb01

(3)配置时间同步

yum install -y ntpdate
echo "*/3 * * * * root ntpdate ntp.aliyun.com   >/dev/null 2>&1"  >> /etc/crontab

db01安装MySQL8.4

#1.下载源到本地并安装
mkdir -p /download ;yum install -y wget && cd /download ; wget https://dev.mysql.com/get/mysql84-community-release-el7-2.noarch.rpm && yum localinstall -y mysql84-community-release-el7-2.noarch.rpm
#2.安装
yum install -y mysql-community-server
#3.开启mysql
systemctl enable mysqld --now
#4.从日志中获取登录密码
grep -i password /var/log/mysqld.log
#5.修改mysql root密码
mysqladmin -u root -p'旧密码' password '新密码'
#6.登陆mysql
mysql -uroot -pAbc@1234
#7.创建kodbox数据库
create database kodbox;
#8.创建kodbox用户并授权它只能从本地和内网登陆
CREATE USER 'kodbox'@'172.16.1.%' IDENTIFIED BY 'Abc@1234';
CREATE USER IF NOT EXISTS 'kodbox'@'localhost' IDENTIFIED BY 'Abc@1234';
#查看用户是否创建成功
SELECT user, host FROM mysql.user;
#9.将kodbox用户授权kodbox库
GRANT ALL  ON kodbox.* TO 'kodbox'@'localhost';
GRANT ALL  ON kodbox.* TO 'kodbox'@'172.16.1.%';
#10.查看是否授权成功
SELECT user, host FROM mysql.user WHERE user = 'kodbox';
#登陆测试
mysql -ukodbox -pAbc@1234

#11.给172.16.1.0/24内网网段允许访问3306端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.16.1.0/24" port protocol="tcp" port="3306" accept' --permanent
firewall-cmd --reload

web01/web02安装Nginx、PHP

Nginx1.28

#1.安装nginx源
cat > /etc/yum.repos.d/nginx.repo <<'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/8/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/8/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
#2.安装nginx1.28
yum install -y nginx-1:1.28.0-1.el8.ngx.x86_64
#3.启动nginx
systemctl enable --now nginx.service
#4.nginx服务启动完成,并放行nginx 80端口
firewall-cmd --add-port=80/tcp --permanent 
firewall-cmd --reload
#5..创建www用户
groupadd -g 1999 www
useradd -u 1999 -g www -M -s /sbin/nologin www
#6.查看是否创建成功
id www
#7.修改nginx的系统用户为www,方便后续管理
grep www /etc/nginx/nginx.conf 
user  www;
#8.重新加载nginx配置文件
systemctl reload nginx
#9.查看nginx的系统用户是否为www
ps -ef |grep nginx

PHP8.4

#0.安装编译依赖
yum install -y re2c \
bison \
autoconf \
make \
libtool \
ccache \
libxml2-devel \
curl-devel \
openssl-devel \
bzip2-devel \
libcurl-devel \
libpng-devel \
libwebp-devel \
libjpeg-devel \
oniguruma-devel \
libzip-devel \
freetype-devel \
sqlite-devel \
wget
#1.下载并解压php8.4
wget https://www.php.net/distributions/php-8.4.14.tar.xz -P /download
tar -Jxvf /download/php-8.4.14.tar.xz -C /download/

#2.编译安装php8.4
###进入编译目录
cd /download/php-8.4.14/
###编译前的配置,指定安装目录,和配置文件目录
./configure \
  --prefix=/usr/local/php-8.4.14 \
  --with-config-file-path=/usr/local/php-8.4.14/etc \
  --enable-fpm \
  --with-fpm-user=www \
  --with-fpm-group=www \
  --enable-mbstring \
  --with-curl \
  --with-openssl \
  --with-zlib \
  --with-mysqli \
  --with-pdo-mysql \
  --enable-gd \
  --with-jpeg \
  --with-webp \
  --with-freetype \
  --with-zip \
  --with-bz2
###编译 源代码-->可执行文件(命令) 
make  -j `nproc`  && echo $? 
###安装 创建目录,复制文件
make install  && echo $? 
###添加软链接简化路径
ln -s  /usr/local/php-8.4.14/ /usr/local/php


#3.配置php8.4
###将配置文件复制到正确的位置(很多情况下修改配置不生效就是配置文件地址没搞对)
###复制PHP配置文件
cp /download/php-8.4.14/php.ini-production /usr/local/php/etc/php.ini
###复制PHP-FPM配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
###配置环境变量
echo 'export PATH=${PATH}:/usr/local/php/bin:/usr/local/php/sbin' >> /etc/profile
source /etc/profile
###查看php版本号
php -m && php -v


#4.php-fpm.d/www.conf 子配置文件 <==修改目标
grep -E '^(user|group|listen =)' /usr/local/php/etc/php-fpm.d/www.conf
#修改如下内容
user = www
group = www
listen = 127.0.0.1:9000


#4.配置php服务启动文件
cat > /usr/lib/systemd/system/php-fpm.service <<'EOF'
[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
EOF
###重新加载php服务配置文件并启动php服务器
systemctl daemon-reload
systemctl enable --now php-fpm

设置会话保持Redis

db01安装redis

#db01节点安装redis
yum install -y redis
#配置redis
[root@db01 ~]# grep -E "^(bind|require)" /etc/redis.conf 
bind 127.0.0.1 -::1 172.16.1.114
requirepass Abc@1234
#设置redis开启并开机自启
systemctl enable --now redis
#放行6379端口
firewall-cmd --add-port=6379/tcp --permanent
firewall-cmd --reload

web01/web02配置php的redis扩展模块

由于我是通过编译安装方式安装的php,需要添加redis扩展模块,需要通过PHP扩展的源码编译安装

核心思路

下载扩展源码 → 用phpize生成编译配置 → 编译安装 → 配置php.ini加载扩展 → 重启PHP服务

#1.确认phpize路径(编译扩展的必备工具)
#编译安装的 PHP,phpize通常在 PHP 安装目录的bin文件夹下
find /usr/local/ -name phpize

#2.下载redis扩展源码
## 下载源码包(以6.2.0版本为例,可到https://pecl.php.net/package/redis查看最新版)
wget https://pecl.php.net/get/redis-6.2.0.tgz

#3.解压
tar -zxvf redis-6.2.0.tgz

#4.进入编译目录使用phpize生成编译配置
cd redis-6.2.0/
phpize 
#5.执行后会生成configure文件,此时配置编译参数(指定PHP的配置文件路径)
./configure --with-php-config=/usr/local/php/bin/php-config

#6.编译
make -j2

#7.安装
make install

#8.配置php.ini加载 Redis 扩展
# 在文件末尾添加以下内容(扩展路径替换为make install输出的路径)
echo  "extension=/usr/local/php-8.4.14/lib/php/extensions/no-debug-non-zts-20240924/redis.so" >> /usr/local/php/etc/php.ini

#检查php模块是否有redis
php -m |grep redis

#9.修改www.conf
vim /usr/local/php/etc/php-fpm.d/www.conf
#在行尾添加如下内容
php_value[session.save_handler] = redis
php_value[session.save_path] = "tcp://172.16.1.114:6379?auth=Abc@1234"


#10.检查php语法和nginx语法
php-fpm -t && nginx -t

#11.重新加载php、nginx
systemctl restart php-fpm.service

web01配置Kodbox

#下载kodbox
wget https://static.kodcloud.com/update/download/kodbox.1.64.zip -P /download/
#解压到站点目录
mkdir -p /app/code/kodbox
unzip /download/kodbox.1.64.zip  -d /app/code/kodbox/
#赋权
chown -R www:www /app/code/kodbox/
#编写站点配置文件
cat > /etc/nginx/conf.d/cloud.chenshiquan.xyz.conf <<'EOF'
server {
	listen 80;
	server_name 10.0.0.110;
	root /app/code/kodbox;
	location / {
		index index.php;
}
	location ~* \.php$ {
		fastcgi_pass 127.0.0.1:9000;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}
}
EOF
#检查nginx语法,并重启nginx
nginx -t
systemctl restart nginx

浏器访问kodbox配置数据库和redis

image-20251206233510132

设置mysql和redis配置的信息,点击下一步

image-20251206233611275

设置用户名密码,点击确定

image-20251207100509241

输入用户名密码,点击登陆

image-20251207100609534

登陆成功,退出登陆

image-20251207100649984

image-20251207100710227

web01将站点目录复制给web02

#1.web02创建站点目录
mkdir -p /app/code/kodbox

#2.web01将站点目录文件传输到/app/code/下,将/etc/nginx/conf.d/下的站点目录配置文件也传过去
[root@web01 ~]# cd /app/code/
[root@web01 /app/code]# scp  -r kodbox  10.0.0.111:`pwd`
[root@web01 /app/code]# cd /etc/nginx/conf.d/

#3.修改nginx配置文件
[root@web01 /etc/nginx/conf.d]# grep -i HTTPS cloud.chenshiquan.xyz.conf 
##修改如下内容
fastcgi_param HTTPS on;
##web01重新加载nginx配置文件
systemctl reload nginx

[root@web01 /etc/nginx/conf.d]# scp  cloud.chenshiquan.xyz.conf 10.0.0.111:`pwd`
#4.web02赋权
[root@web02 ~]# chown  -R www:www /app/code/kodbox/
#5.web02修改站点配置文件
sed -i  's/10.0.0.110/10.0.0.111/g'  /etc/nginx/conf.d/cloud.chenshiquan.xyz.conf
#6.web02重新加载nginx配置文件
systemctl reload nginx

配置lb01安装nginx并配置https

#1.安装nginx源
cat > /etc/yum.repos.d/nginx.repo <<'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/8/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/8/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
#2.安装nginx1.28
yum install -y nginx-1:1.28.0-1.el8.ngx.x86_64

#3.上传证书文件解压到/etc/nginx/keys下
unzip 21270968_cloud.chenshiquan.xyz_nginx.zip -d /etc/nginx/keys

#3.修改nginx站点配置文件
cat > /etc/nginx/conf.d/cloud.chenshiquan.xyz.conf <<'EOF'
upstream slb_7 {
hash $remote_addr consistent;
server 10.0.0.110:80;
server 10.0.0.111:80;
}
server {
    listen 80;
    server_name cloud.chenshiquan.xyz;
    return 302 https://cloud.chenshiquan.xyz$request_uri;
}
server {
        listen 443 ssl;
        server_name cloud.chenshiquan.xyz;
        ssl_certificate /etc/nginx/keys/cloud.chenshiquan.xyz.pem;
        ssl_certificate_key /etc/nginx/keys/cloud.chenshiquan.xyz.key;
        ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5:!aNULL:!eNULL:!EXPORT:!IDES:!RC4:!MD5;
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        location / {
                #后端服务器是443这里改为https 后端服务器是http这里就是http
                proxy_pass http://slb_7;
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Real-Ip $remote_addr;
        }
}
EOF

#4.启动nginx
systemctl enable --now nginx.service

#5.nginx服务启动完成,并放行nginx 80端口
firewall-cmd --add-port=80/tcp --permanent 
firewall-cmd --add-port=443/tcp --permanent 
firewall-cmd --reload

image-20251207101957364

image-20251207102010154

image-20251207102215125

image-20251207102323734

nfs01安装nfs

(1)nfs01安装nfs

#1.在kylinv10sp3中安装服务端软件包,nfs-utils包含了rpcbind
yum install -y nfs-utils && systemctl enable --now rpcbind && systemctl enable --now nfs
#2.修改配置文件
cat > /etc/exports <<EOF
/uploads 172.16.1.0/24(rw,all_squash,anonuid=1999,anongid=1999)
EOF
#3.创建用户
groupadd -g 1999 www
useradd -u 1999 -g www -M -s /sbin/nologin www
#4.给共享目录属主和属组设置为www
mkdir /uploads
chown -R www:www /uploads
#5.生效共享目录配置
exportfs -arv
#6.查看共享目录
showmount -e  localhost

2.设置nfs固定端口

#1.设置nfs固定端口,并防火墙放行端口
cat >> /etc/sysconfig/nfs <<EOF
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
EOF
#2.给lockd、statd设置端口
vim /etc/nfs.conf
[lockd]
 port=32803
 udp-port=32769

[statd]
# debug=0
 port=662
#重启相关服务(多重启几次 rpcinfo -p 看看端口是否变化)
systemctl restart rpcbind && systemctl restart nfs && systemctl restart nfs-lock
#放行端口
cat > open_port.sh <<'EOF'
#!/bin/bash
##############################################################
# File Name:open_port.sh
# Version:V1.0
# Author:csq
# Organization: www.chenshiquan.xyz
# Desc:
##############################################################

no_open_port=`rpcinfo -p |awk 'NR>1{print $(NF-1)}' | sort | uniq`
for i in ${no_open_port}
do
	open_port=`firewall-cmd --list-all | grep $i | wc -l`
	if [ ${open_port} -eq 0 ];then
	   if firewall-cmd --add-port=$i/tcp --permanent >/dev/null 2>&1;then
		   echo "端口$i放行成功"
	   else
		   echo "端口放行失败"
	   fi
	else
		echo "端口$i已经放行"
	fi
done
firewall-cmd --reload >/dev/null 2>&1
firewall-cmd --list-all
EOF
[root@nfs01 ~]# bash open_port.sh 
端口111放行成功
端口20048放行成功
端口2049放行成功
端口34801放行成功
端口44395放行成功
端口662放行成功
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33 ens34
  sources: 
  services: cockpit dhcpv6-client mdns ssh
  ports: 111/tcp 20048/tcp 2049/tcp 34801/tcp 44395/tcp 662/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

web01/web02接入nfs

#1.安装nfs-utils
yum install -y nfs-utils
#2.创建临时存放目录/backup,将/app/code/kodbox/data/files/下的文件存放在/backup中
mkdir /backup
#3.先复制/app/code/kodbox/data/files/下的文件到临时目录中
mv /app/code/kodbox/data/files/* /backup/
#4.挂载nfs
mount -t nfs 172.16.1.102:/uploads /app/code/kodbox/data/files/
###永久挂载
echo '172.16.1.102:/uploads /app/code/kodbox/data/files/ nfs defaults 0 0 ' >> /etc/fstab
mount -a
#5.web01将临时目录里的文件移进去(会同步到web02和nfs01)
mv /backup/* /app/code/kodbox/data/files/

上传文件测试

image-20251207102930959

[root@nfs01 ~]# tree /uploads/
/uploads/
├── 202512
│   └── 07_e0094898
│       ├── 高德地图.oexe
│       ├── icloud.oexe
│       ├── index.html
│       └── preview.jpg  #这个就是上传的图片
└── index.html

2 directories, 5 files
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐