银河麒麟系统离线安装php站点

前期准备

# 如果在虚拟机里安装银河麒麟系统,可能需要先安装ssh用于连接系统和SFTP上传文件
# 这一步是在线安装的,在正式环境不需要
# 查看系统是否安装SSH
rpm -qa | grep openssh-server
# 安装SSH
sudo yum install -y openssh-server
# 启动 SSH 服务
sudo systemctl start sshd  
# 设置开机自启       
sudo systemctl enable sshd    
# 确认 SSH 服务运行状态(显示active (running)表示正在运行)
sudo systemctl status sshd    
# 查看系统内网ip显示的192.168.xx.xx就是内网地址,在正式环境应该是事先准备好的
ifconfig 

使用FTP工具将所有要安装的软件复制到服务器/opt目录

安装nginx1.24

编译 Nginx

# 进入/opt/lnmp目录
cd /opt/lnmp/
# 解压nginx压缩包
sudo tar -zxvf nginx-1.24.0.tar.gz
# 进入nginx目录
cd /opt/lnmp/nginx-1.24.0
# 编译nginx,以下命令分三次输入,每输入一次按回车
# 检查
./configure --prefix=/usr/local/nginx
# 编译
make -j$(nproc)
# 安装
sudo make install

配置 Systemd 服务

# 创建服务文件
sudo nano /usr/lib/systemd/system/nginx.service
# 写入以下内容
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
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
# 以上为文件内容, 按 Ctrl + X,再按Y,再按回车保存并退出
# 设置权限
sudo mkdir -p /usr/local/nginx/logs      # 创建目录(如果存在)
sudo chown -R root:root /usr/local/nginx # 将目录所有者和组改成root
sudo chmod -R 755 /usr/local/nginx/logs  # 修改目录权限
# 启用服务
sudo systemctl daemon-reload   # 重新加载配置(刚才的service文件)
sudo systemctl start nginx     # 启动nginx
sudo systemctl enable nginx    # 设置开机自动启动
sudo systemctl status nginx    # 查看nginx运行状态,出现active (running)表示正在运行
#查看nginx是否已安装成功
nginx -V # 输出nginx版本号表示安装成功
# 如果输出nginx: 命令未找到,执行以下命令
echo 'export PATH=$PATH:/usr/local/nginx/sbin' >> ~/.bashrc # 将Nginx的可执行文件目录永久添加到系统的环境变量中
source ~/.bashrc # 立即加载 ~/.bashrc 文件中的更改,使当前终端会话生效

安装php8.2

# 安装必要依赖,在/opt/lnmp/php-deps目录下运行,所有的扩展和依赖都在这个目录下
#进入/opt/lnmp/php-deps目录
cd /opt/lnmp/php-deps
#安装依赖
sudo rpm -ivh libcurl-devel-7.71.1-32.ky10.x86_64.rpm
sudo rpm -ivh oniguruma-*.rpm oniguruma-devel-*.rpm
sudo rpm -ivh \
    libzip-1.5.1-5.ky10.x86_64.rpm \
    libzip-devel-1.5.1-5.ky10.x86_64.rpm \
    libzip-help-1.5.1-5.ky10.noarch.rpm
#解压php安装包
cd /opt/lnmp/ # 进入安装包所在目录
tar -xzvf php-8.2.28.tar.gz # 解压安装包
cd /opt/lnmp/php-8.2.28 # 进入安装包根目录
# 编译php8.2,需等待一段时间
./configure \
  --prefix=/usr/local/php \
  --with-config-file-path=/usr/local/php/etc \
  --enable-fpm \
  --with-fpm-user=nginx \
  --with-fpm-group=nginx \
  --with-openssl \
  --with-zip \
  --with-pdo-mysql \
  --with-curl \
  --enable-mbstring \
  --enable-xml
# 以上是一个命令

make -j$(nproc)
sudo make install
# 查看php是否已安装成功
php --version # 输出php版本号表示安装成功
# 如果输出php: 命令未找到,执行以下命令
echo 'export PATH=/usr/local/php/bin:$PATH' >> ~/.bashrc
source ~/.bashrc # 立即加载 ~/.bashrc 文件中的更改,使当前终端会话生效

配置php服务

# 进入php-8.2.28目录(解压出来的软件目录)
cd /opt/lnmp/php-8.2.28
# 复制默认配置文件
sudo cp ./sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf
sudo cp ./sapi/fpm/www.conf /usr/local/php/etc/php-fpm.d/www.conf
# 编辑主配置文件
sudo nano /usr/local/php/etc/php-fpm.conf
# 确保包含一下内容(如果没有或者被;注释掉了就在最后加上)
[global] # 这一行应该是本来就有的,下面三行看一下
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
include=/usr/local/php/etc/php-fpm.d/*.conf
# 创建系统用户组
sudo groupadd -r nginx
# 创建系统用户
sudo useradd -r -g nginx -s /sbin/nologin -d /var/empty -c "Nginx User" nginx
# 编辑进程池配置
sudo nano /usr/local/php/etc/php-fpm.d/www.conf
# 确保包含
user = nginx
group = nginx
listen = 127.0.0.1:9000
# 创建必要目录并设置权限
sudo mkdir -p /usr/local/php/var/{run,log}
sudo chown -R nginx:nginx /usr/local/php/var
sudo chmod -R 755 /usr/local/php/var
# 配置php-fpm服务
sudo nano /usr/lib/systemd/system/php-fpm.service # 创建服务文件
#将以下内容复制到文件里
[Unit]
Description=PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/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
# 以上为文件内容, 按 Ctrl + X,再按Y,再按回车保存并退出
# 重启 PHP-FPM
sudo systemctl daemon-reload   # 重新加载配置(刚才的service文件)
sudo systemctl start php-fpm   # 启动php-fpm
sudo systemctl enable php-fpm  # 设置开机自动启动
sudo systemctl status php-fpm  # 查看php-fpm运行状态,出现active (running)表示正在运行

安装 MySQL 5.7

# 卸载mariadb(如果存在,mariadb会和mysql冲突)
# 查看mariadb是否存在
rpm -qa | grep mariadb
# 输出以下内容说明mariadb存在
mariadb-common-10.3.39-1.p02.ky10.x86_64
mariadb-errmessage-10.3.39-1.p02.ky10.x86_64
mariadb-10.3.39-1.p02.ky10.x86_64
mariadb-connector-c-3.0.6-9.ky10.x86_64
mariadb-server-10.3.39-1.p02.ky10.x86_64
# 卸载命令
sudo rpm -e --nodeps \
    mariadb-server \
    mariadb \
    mariadb-common \
    mariadb-connector-c \
    mariadb-errmessage
# 清理残留文件和目录
sudo rm -rf /var/lib/mysql/             # 数据目录
sudo rm -f /etc/my.cnf /etc/my.cnf.d/*  # 配置文件
sudo rm -f /var/log/mariadb.log         # 日志文件
# 进入mysql安装包目录
cd /opt/lnmp/mysql
# 按顺序安装 MySQL 组件
rpm -ivh mysql-community-common-5.7*.rpm
rpm -ivh mysql-community-libs-5.7*.rpm
rpm -ivh mysql-community-client-5.7*.rpm
rpm -ivh mysql-community-server-5.7*.rpm

配置mysql

sudo systemctl start mysqld  # 启动mysql,需要等待一点时间
sudo systemctl enable mysqld # 设置开机自动启动
sudo systemctl status mysqld # 查看mysql运行状态,出现active (running)表示正在运行
# 获取临时密码,复制一下,下面登录需要用到
sudo grep 'temporary password' /var/log/mysqld.log
# 检查版本
mysql --version
# 应输出:mysql  Ver 14.14 Distrib 5.7.40

# 登录测试
mysql -u root -p  # 使用这个命令,回车,需要粘贴刚才的临时密码
# 首次修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '7E25b972@192b01004b62346ee9975A5';
# 第二次及以后修改密码
UPDATE mysql.user SET authentication_string=PASSWORD('7E25b972@192b01004b62346ee9975A5') WHERE User='root';
# 刷新表数据
FLUSH PRIVILEGES;
# 按Ctrl + D 退出后重新进入,看看密码修改有没有生效
# 进入数据库命令行
mysql -u root -p # 回车,需要输入上面新的密码(7E25b972@192b01004b62346ee9975A5)
# 创建数据库
CREATE DATABASE db_wind;
# 导入数据库文件,需要先退出数据库命令行,按Ctrl + D
mysql -u root -p db_wind < /opt/lnmp/db_wind.sql # 回车,需要输入上面新的密码(7E25b972@192b01004b62346ee9975A5)

# 重启服务(可选)
sudo systemctl restart mysqld

安装Alisql(PolarDB内核)

# 进入目录
cd /opt/lnmp/alisql_deps
# 安装依赖
sudo rpm -Uvh --force --nodeps *.rpm
# 编译和安装
# 确保在 /opt/lnmp/AliSQL目录下
cd /opt/lnmp/AliSQL
# 创建文件夹
mkdir build
进入文件夹
cd /opt/lnmp/AliSQL/build
# 检查
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/alisql \
         -DMYSQL_DATADIR=/usr/local/alisql/data \
         -DSYSCONFDIR=/etc \
         -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 \
         -DENABLED_LOCAL_INFILE=1 \
         -DWITH_SSL=system \
         -DWITH_ZLIB=system
# 如果报错找不到 -lstdc++,手动创建符号链接
sudo ln -sv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so
# 检查链接是否指向正确版本
ls -l /usr/lib64/libstdc++.so*
# 编译
make -j$(nproc)
# 安装
sudo make install

# 如果mariadb已经启动,会占用3306端口,先停止
sudo systemctl stop mariadb # 停止mariadb运行
sudo systemctl disable mariadb # 停止mariadb开机启动
# 初始化数据库
sudo scripts/mysql_install_db --basedir=/usr/local/alisql --datadir=/usr/local/alisql/data --user=$(whoami)

# 启动alisql
/usr/local/alisql/bin/mysqld_safe --defaults-file=/usr/local/alisql/my.cnf &
# 启动完成按Ctrl + C退出,

# 修改root用户的密码
# 输入命令,回车(初始密码为空,按回车直接进入数据库命令行)
/usr/local/alisql/bin/mysql -u root -p
# 修改密码(修改为123456)
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
# 刷新表数据
FLUSH PRIVILEGES;
# 进入数据库命令行
/usr/local/alisql/bin/mysql -u root -p,# 回车,需要输入上面新的密码
# 创建数据库
CREATE DATABASE db_wind;
# 导入数据库文件,需要先退出数据库命令行,按Ctrl + D
/usr/local/alisql/bin/mysql -u root -p db_wind < /opt/lnmp/db_wind.sql

部署站点

# 将代码复制到/usr/local/nginx/html目录下
sudo cp -rp /opt/lnmp/wind /usr/local/nginx/html/
#设置文件权限
sudo chmod -R 777 /usr/local/nginx/html/wind/storage
sudo chmod -R 777 /usr/local/nginx/html/wind/bootstrap
sudo chmod 777 /usr/local/nginx/html/wind/storage/app/script/module1
sudo chmod 777 /usr/local/nginx/html/wind/storage/app/script/module2

nginx配置

# 打开nginx配置文件
sudo nano /usr/local/nginx/conf/nginx.conf
# 在http代码块里加上:(http代码块可以有多个include)
http {
    # ... 其他现有配置 ...

    include /usr/local/nginx/conf/vhosts/*.conf;
}
# 创建目录存放站点的nginx配置文件
sudo mkdir -p /usr/local/nginx/conf/vhosts
# 创建并编辑文件
sudo nano /usr/local/nginx/conf/vhosts/wind.conf
# 写入以下内容,192.168.24.133是服务器内网ip,改成实际地址
server {
    listen 192.168.24.133:80;
    server_name _;
    root /usr/local/nginx/html/wind/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    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;
        fastcgi_connect_timeout 3600;
        fastcgi_send_timeout 3600;
        fastcgi_read_timeout 3600;
    }

    access_log  /usr/local/nginx/logs/wind.log;
    error_log   /usr/local/nginx/logs/wind.log;
}
# 测试配置是否正确
nginx -t
# 出现以下内容说明nginx配置正确
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# 重启nginx
systemctl reload nginx
#可能需要开启80端口
# 查看防火墙状态
sudo systemctl status firewalld
# 放行 80 端口
sudo firewall-cmd --add-port=80/tcp --permanent
# 重启防火墙
sudo firewall-cmd --reload

php配置

# 新建php.ini文件
sudo nano /usr/local/php/etc/php.ini
# 写入以下内容
max_execution_time = 3600    ; 表示最大执行时间为 3600 秒,也就是 1 小时
max_input_time = 3600        ; 表示最大输入时间为 3600 秒,也就是 1 小时
memory_limit = 1024M         ; 适当加大内存限制,防止内存不足
upload_max_filesize = 100M   ; 根据需要调整上传大小
post_max_size = 100M         ; 保持和上传大小一致或更大
# 重启php
sudo systemctl restart php-fpm

安装supervisor守护进程

# 进入安装文件路径
cd /opt/lnmp/supervisor
# 安装pip(系统已有python3.7环境,无需安装)
python3 get-pip.py --no-index --find-links=.
# 查看pip是否安装成功
pip3 --version # 出现版本号说明安装成功
# 安装 setuptools
pip3 install --no-index --find-links=. setuptools-68.0.0-py3-none-any.whl
# 安装meld3
pip3 install --no-index --find-links=. meld3-2.0.1-py2.py3-none-any.whl
# 安装 Supervisor
pip3 install --no-index --find-links=. supervisor-4.2.5-py2.py3-none-any.whl
# 查看Supervisor是否安装成功
supervisord --version # 出现版本号说明安装成功

配置supervisor

# 生成默认配置文件
echo_supervisord_conf > /etc/supervisord.conf
# 打开 supervisord.conf
sudo nano /etc/supervisord.conf
# 找到以下两行,在最后
;[include]
;files = relative/path/to/*.ini
# 改成以下内容
[include]
files = /etc/supervisor/conf.d/*.conf
# 按ctrl + X,然后按Y,关闭文件
# 创建项目配置文件目录
sudo mkdir -p /etc/supervisor/conf.d
# 新建并打开项目配置文件
sudo nano /etc/supervisor/conf.d/wind.conf
# 写入以下内容
[program:wind]
# 使用绝对路径,确保命令可执行
command=/usr/local/php/bin/php /usr/local/nginx/html/wind/artisan queue:work --sleep=3 --tries=3 --timeout=60
process_name=%(program_name)s_%(process_num)02d
directory=/usr/local/nginx/html/wind  # 添加工作目录
numprocs=1
autostart=true
autorestart=true
startretries=3
user=nginx
redirect_stderr=true
stdout_logfile=/usr/local/nginx/html/wind/storage/logs/worker.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stopwaitsecs=60
environment=HOME="/usr/local/nginx/html/wind",USER="nginx"
# 按ctrl + X,然后按Y,关闭文件
# 启动 Supervisor 并加载配置,以下4个命令依次执行
# 启动 supervisord 主进程,并指定配置文件
supervisord -c /etc/supervisord.conf     
# 告诉 supervisorctl 检查是否有新的配置文件被添加           
supervisorctl -c /etc/supervisord.conf reread
# 应用上一步 reread 发现的新配置,并启动新程序        
supervisorctl -c /etc/supervisord.conf update     
# 启动 [program:wind] 定义的所有队列进程   
supervisorctl -c /etc/supervisord.conf start wind:*  
# 设置 systemd 自启动服务
sudo nano /etc/systemd/system/supervisord.service # 创建服务文件
#将以下内容复制到文件里
[Unit]
Description=Supervisor process control system
Documentation=http://supervisord.org
After=network.target

[Service]
Type=simple  # 关键:改为 simple
ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf -n  # 添加 -n 参数
ExecStop=/usr/local/bin/supervisorctl -c /etc/supervisord.conf shutdown
ExecReload=/usr/local/bin/supervisorctl -c /etc/supervisord.conf reload
KillMode=mixed
Restart=on-failure
RestartSec=5s
User=root

[Install]
WantedBy=multi-user.target
# 以上为文件内容, 按 Ctrl + X,再按Y,再按回车保存并退出
# 启用 Supervisor 开机自启
systemctl daemon-reexec        # 重新启动systemd的主进程
systemctl daemon-reload        # 重新加载所有的systemd单元配置
systemctl enable supervisord   # 设置supervisord开机自启动
systemctl start supervisord    # 立即启动 supervisord 服务

# 如果显示failed,使用systemctl restart supervisord 重新启动supervisord 服务
# 重启系统后如果服务起不来,要先使用关闭命令:
/usr/local/bin/supervisorctl -c /etc/supervisord.conf shutdown
# 然后删除sock文件:
sudo rm /tmp/supervisor.sock
# 才能使用systemctl 启动
systemctl start supervisord       # 立即启动 supervisord 服务
systemctl is-active supervisord      # 查看 supervisord 服务是否启动,显示active表示启动

# 如果仅修改了队列代码(业务代码)
# 无需重启 Supervisor 主进程,只需重启对应的子进程:
# 重新加载配置(确保 Supervisor 感知到变化)
supervisorctl -c /etc/supervisord.conf reread
# 重启特定程序(如 wind 组下的所有进程)
supervisorctl -c /etc/supervisord.conf restart wind:*
# 如果修改了 Supervisor 配置文件(/etc/supervisord.conf 或子配置)
# 需要 重启 Supervisor 主进程 以加载新配置:
# 先检查配置文件语法是否正确
supervisord -c /etc/supervisord.conf --check
# 重启 Supervisor 主进程(两种方式任选其一)
sudo systemctl restart supervisord   # 推荐:通过 systemd 管理
# 或
supervisorctl -c /etc/supervisord.conf shutdown  # 先停止
supervisord -c /etc/supervisord.conf            # 再启动
# 如果同时修改了代码和配置文件,按顺序执行以下操作:
# 1. 重启 Supervisor 主进程(加载新配置)
sudo systemctl restart supervisord
# 2. 重启子进程(加载新代码)
supervisorctl -c /etc/supervisord.conf restart wind:*

其他配置

# 创建模块一和模块二计算结果导出excel目录(必须创建,否则会报错)
mkdir -p /data/excel
# 添加权限
sudo chmod -R 777 /data/excel/

通过数据库工具连接数据库

# 第一步:放行 3306 端口
sudo firewall-cmd --add-port=3306/tcp --permanent
# 第一步:重启防火墙
sudo firewall-cmd --reload
# 第三步:(7E25b972@192b01004b62346ee9975A5)
mysql -u root -p
# 第四步:输入
use mysql;
# 第五步:输入
update user set host = '%' where user = 'root';
# 第六步:输入
FLUSH PRIVILEGES;

搭建python3.12脚本打包环境

# 下载 Python 3.12
cd /usr/local/src
sudo wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz
# 或者使用本地下载好的文件
sudo cp /opt/lnmp/Python-3.12.3.tgz /usr/local/src/
# 解压文件夹
sudo tar -xzf Python-3.12.3.tgz
cd Python-3.12.3
# 编译安装python3.12
./configure --enable-shared --enable-optimizations
make -j$(nproc)
sudo make altinstall
# 添加共享库路径到系统配置(永久生效)
echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/python312.conf
# 更新系统的共享库缓存,确保新安装的库能被动态链接器正确找到
sudo ldconfig
# 验证 Python 3.12 安装成功
/usr/local/bin/python3.12 --version   # 应输出 Python 3.12.3
# 创建python3.12虚拟环境
cd /
/usr/local/bin/python3.12 -m venv venv312
# 激活虚拟环境
source venv312/bin/activate
# 永久配置国内源
mkdir -p ~/.pip  # 创建.pip目录
echo "[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn" > ~/.pip/pip.conf
# 安装python包
pip3 install pyinstaller deap numpy pandas scipy pyscipopt openpyxl pymysql
# 打包脚本 
pyinstaller --onefile module1.py
pyinstaller --onefile module2.py
# 退出虚拟环境
deactivate

配置ipv6

配置网卡

# 临时测试
ip -6 addr add fd00:1234:5678::10/64 dev ens33

# 永久生效:
# 打开网卡配置文件
sudo nano /etc/sysconfig/network-scripts/ifcfg-ens33
# 添加以下ipv6配置内容
IPV6INIT=yes
IPV6ADDR=fd00:1234:5678::10/64
IPV6_AUTOCONF=no
# 重启网卡
sudo systemctl restart NetworkManager

修改nginx

server {
    # 监听 IPv4
    listen 192.168.24.133:80;

    # 监听所有 IPv6 (必须方括号)
    listen [::]:80;

    server_name _;

    root /usr/local/nginx/html/wind/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    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;
        fastcgi_connect_timeout 3600;
        fastcgi_send_timeout 3600;
        fastcgi_read_timeout 3600;
    }

    access_log  /usr/local/nginx/logs/wind.log;
    error_log   /usr/local/nginx/logs/wind.log;
}
# 查看nginx配置语法是否正确
sudo /usr/local/nginx/sbin/nginx -t
# 重启nginx
sudo systemctl restart nginx
# 查看端口监听
sudo ss -tuln | grep 80

注意:使用nat模式连接虚拟机,只能在虚拟机里使用ipv6,宿主机无法使用ipv6访问虚拟机里的站点!!!

上一篇
下一篇