CRMEB/crmeb/baota.sh
2024-11-29 10:23:24 +08:00

323 lines
9.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
php_version='74'
mysql_version='5.7'
redis_version='6.2'
action_type='install'
root_path=$(cat /var/bt_setupPath.conf)
setup_path=$root_path/server
#宝塔是否已安装
if [ -z "$root_path" ]; then
echo "请先安装宝塔"
exit 1
fi
#nginx是否已安装
if [ ! -f "${setup_path}/nginx/sbin/nginx" ]; then
echo "请先安装nginx并配置网站"
exit 1
fi
#安装php
php_install=1
#php路径变量
php_path="${setup_path}/php/74/bin/php"
# 获取已安装的php版本
for phpVer in 71 72 73 74; do
if [ -d "${setup_path}/php/${phpVer}/bin" ]; then
php_version=${phpVer}
php_install=0
fi
done
if [ $php_install == 1 ]; then
. ${setup_path}/panel/install/install_soft.sh 1 $action_type php $php_version
fi
case "${php_version}" in
'71')
extFile="${setup_path}/php/71/lib/php/extensions/no-debug-non-zts-20160303"
php_path="${setup_path}/php/71/bin/php"
;;
'72')
extFile="${setup_path}/php/72/lib/php/extensions/no-debug-non-zts-20170718"
php_path="${setup_path}/php/72/bin/php"
;;
'73')
extFile="${setup_path}/php/73/lib/php/extensions/no-debug-non-zts-20180731"
php_path="${setup_path}/php/73/bin/php"
;;
'74')
extFile="${setup_path}/php/74/lib/php/extensions/no-debug-non-zts-20190902"
php_path="${setup_path}/php/74/bin/php"
;;
esac
echo "PHP $php_version 安装成功"
echo '---------------------------------'
#安装mysql
if [ ! -d "${setup_path}/mysql" ]; then
. ${setup_path}/panel/install/install_soft.sh 1 $action_type mysql $mysql_version
fi
echo "mysql $mysql_version 安装成功"
echo '---------------------------------'
#安装redis
if [ ! -d "${setup_path}/redis" ]; then
. ${setup_path}/panel/install/install_soft.sh 0 $action_type redis $redis_version
fi
echo "redis $redis_version 安装成功"
echo '---------------------------------'
#安装php-redis 插件
if [ ! -e "${extFile}/redis.so" ]; then
. ${setup_path}/panel/install/install_soft.sh 1 $action_type redis $php_version
fi
echo 'php-redis 插件安装成功'
echo '---------------------------------'
#安装php-fileinfo 插件
if [ ! -e "${extFile}/fileinfo.so" ]; then
. ${setup_path}/panel/install/install_soft.sh 1 $action_type fileinfo $php_version
fi
echo 'php-fileinfo 插件安装成功'
echo '---------------------------------'
#安装php-swoole 插件
# if [ ! -e "${extFile}/swoole.so" ]; then
# . ${setup_path}/panel/install/install_soft.sh 1 $action_type swoole4 $php_version
# fi
# 定义函数用于检查并修改php.ini中的disable_functions配置
function modify_disable_functions {
local setup_path="$1"
local php_version="$2"
local functions_to_check=("proc_open" "pcntl_signal" "pcntl_signal_dispatch" "pcntl_fork" "pcntl_wait" "pcntl_alarm")
local ini_file="${setup_path}/php/${php_version}/etc/php.ini"
# 检查文件是否存在
if [ ! -f "$ini_file" ]; then
echo "Error: PHP configuration file not found at $ini_file"
return 1
fi
# 遍历函数列表检查并修改disable_functions配置
for func in "${functions_to_check[@]}"; do
# 检查函数是否已经在disable_functions列表中
if grep -q "disable_functions.*$func" "$ini_file"; then
echo "Info: $func is already disabled in $ini_file, removing..."
# 使用sed命令精确地删除函数及其周围的逗号和空格
# 注意:这里假设函数周围总是存在逗号和空格,这可能需要根据实际情况调整
sed -i "s/, \+$func,/,/g" "$ini_file"
# 检查命令是否成功执行
if [ $? -eq 0 ]; then
echo "Info: Successfully removed $func from $ini_file"
else
echo "Error: Failed to remove $func from $ini_file"
return 1
fi
else
echo "Info: $func is not disabled in $ini_file, skipping..."
fi
done
return 0
}
# 调用函数,传入正确的参数
modify_disable_functions "${setup_path}" "$php_version"
#pcntl_signal pcntl_signal_dispatch pcntl_fork pcntl_wait pcntl_alarm 禁用函数删除
#sed -i 's/,proc_open//' ${setup_path}/php/$php_version/etc/php.ini
# 注意请根据实际的PHP版本和安装路径调整参数
echo '修改mysql sql_mode配置'
echo '---------------------------------'
#修改mysql配置
# MySQL配置文件路径
CONFIG_FILE="/etc/my.cnf"
# 检查配置文件是否存在
if [ ! -f "$CONFIG_FILE" ]; then
echo "MySQL配置文件 $CONFIG_FILE 不存在,请检查路径"
exit 1
fi
# 首先检查是否存在 [mysqld] 段落
if ! grep -q "\[mysqld\]" "$CONFIG_FILE"; then
echo "\[mysqld\]" >> "$CONFIG_FILE"
fi
# 备份原配置文件(可选)
cp "$CONFIG_FILE" "${CONFIG_FILE}.bak"
echo "MySQL配置文件已备份至 ${CONFIG_FILE}.bak"
# 使用grep检查sql_mode是否存在如果存在则替换其值
if grep -q "^[[:space:]]*sql_mode[[:space:]]*=" "$CONFIG_FILE"; then
# 如果存在,修改 sql_mode 的值
sed -i 's/^ *sql_mode *=.*$/sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION/' "$CONFIG_FILE"
fi
# 使用grep检查sql-mode是否存在
if grep -q "^[[:space:]]*sql-mode[[:space:]]*=" "$CONFIG_FILE"; then
# 如果存在,修改 sql-mode 的值
sed -i 's/^ *sql-mode *=.*$/sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION/' "$CONFIG_FILE"
fi
# 使用grep -E支持扩展正则表达式同时匹配sql_mode和sql-mode如果行不存在则在[mysqld]段末尾添加新的sql_mode设置
if ! grep -qE "^[[:space:]]*(sql_mode|sql-mode)[[:space:]]*=" "$CONFIG_FILE"; then
sed -i '/\[mysqld\]/a\sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' "$CONFIG_FILE"
fi
# 检查并显示修改后的配置文件中关于sql_mode的部分
grep 'sql-mode' "$CONFIG_FILE"
grep 'sql_mode' "$CONFIG_FILE"
# 重启mysql
echo "MySQL配置文件已更新正在重载MySQL配置..."
/etc/init.d/mysqld reload
echo "如果没生效请重启MySQL服务。"
echo "--------------------------------------"
#修改nginx配置
project_path=$(cd `dirname $0`; pwd)
project_name="${project_path##*/}"
domain="${project_name//_/.}"
if [ -e "${setup_path}/panel/vhost/nginx/${domain}.conf" ]; then
echo -e "
server
{
listen 80;
server_name ${domain};
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/${project_name}/public;
#SSL-START SSL相关配置请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置可以注释或修改
#清理缓存规则
location ~ /purge(/.*) {
proxy_cache_purge cache_one \$host\$1\$is_args\$args;
}
#引用反向代理规则,注释后配置的反向代理将无效
location /notice {
proxy_pass http://127.0.0.1:40001/;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-real-ip \$remote_addr;
proxy_set_header X-Forwarded-For \$remote_addr;
}
#提示v4.3.0 以前版本,可不用配置一下代码
location /msg {
proxy_pass http://127.0.0.1:40002/;
proxy_http_version 1.1;
proxy_set_header Upgrade \$http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-real-ip \$remote_addr;
proxy_set_header X-Forwarded-For \$remote_addr;
}
include enable-php-$php_version.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include ${setup_path}/panel/vhost/rewrite/${domain}.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
access_log /www/wwwlogs/${domain}.log;
error_log /www/wwwlogs/${domain}.error.log;
}
" > ${setup_path}/panel/vhost/nginx/${domain}.conf
fi
echo 'nginx配置成功'
echo '---------------------------------'
# 伪静态配置
if [ -e "${setup_path}/panel/vhost/rewrite/${domain}.conf" ]; then
echo -e "
location / {
if (!-e \$request_filename) {
rewrite ^(.*)$ /index.php?s=/\$1 last;
break;
}
}
" > ${setup_path}/panel/vhost/rewrite/${domain}.conf
fi
echo '伪静态配置成功'
echo '---------------------------------'
echo '重载nginx配置'
/etc/init.d/nginx reload
echo '---------------------------------'
#获取域名列表
# config_file=${setup_path}/panel/vhost/nginx/${domain}.conf
# #获取域名列表
# domain_list=$(cat $config_file|grep server_name|head -n 1|sed "s/server_name//"|sed "s/;//"|xargs)
# #获取PHP版本
# php_version=$(cat $config_file|grep 'enable-php'|grep -Eo "[0-9]+"|head -n 1)
# echo $php_version
echo '系统环境安装成功!'
echo '==============================================='
# 设置目录权限
echo '---------------------------------'
echo "设置目录权限"
chmod -R 777 runtime
chmod -R 777 .version
chmod -R 777 .env
chmod -R 777 .constant
chmod -R 777 backup
chmod -R 777 public
echo '正在启动系统定时任务、长连接、队列'
# 启动定时任务
echo '---------------------------------'
echo "启动定时任务:$php_path think timer start --d"
$php_path think timer start --d
# 启动长连接
echo '---------------------------------'
echo "启动长连接:$php_path think workerman start --d"
$php_path think workerman start --d
# 启动队列
echo '---------------------------------'
echo "启动队列:$php_path think queue:listen --queue"
$php_path think queue:listen --queue
# 操作说明,进入程序根目录运行 /bin/bash baota.sh