baota.sh 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. #!/bin/bash
  2. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
  3. export PATH
  4. php_version='74'
  5. mysql_version='5.7'
  6. redis_version='6.2'
  7. action_type='install'
  8. root_path=$(cat /var/bt_setupPath.conf)
  9. setup_path=$root_path/server
  10. #宝塔是否已安装
  11. if [ -z "$root_path" ]; then
  12. echo "请先安装宝塔"
  13. exit 1
  14. fi
  15. #nginx是否已安装
  16. if [ ! -f "${setup_path}/nginx/sbin/nginx" ]; then
  17. echo "请先安装nginx并配置网站"
  18. exit 1
  19. fi
  20. #安装php
  21. php_install=1
  22. #php路径变量
  23. php_path="${setup_path}/php/74/bin/php"
  24. # 获取已安装的php版本
  25. for phpVer in 71 72 73 74; do
  26. if [ -d "${setup_path}/php/${phpVer}/bin" ]; then
  27. php_version=${phpVer}
  28. php_install=0
  29. fi
  30. done
  31. if [ $php_install == 1 ]; then
  32. . ${setup_path}/panel/install/install_soft.sh 1 $action_type php $php_version
  33. fi
  34. case "${php_version}" in
  35. '71')
  36. extFile="${setup_path}/php/71/lib/php/extensions/no-debug-non-zts-20160303"
  37. php_path="${setup_path}/php/71/bin/php"
  38. ;;
  39. '72')
  40. extFile="${setup_path}/php/72/lib/php/extensions/no-debug-non-zts-20170718"
  41. php_path="${setup_path}/php/72/bin/php"
  42. ;;
  43. '73')
  44. extFile="${setup_path}/php/73/lib/php/extensions/no-debug-non-zts-20180731"
  45. php_path="${setup_path}/php/73/bin/php"
  46. ;;
  47. '74')
  48. extFile="${setup_path}/php/74/lib/php/extensions/no-debug-non-zts-20190902"
  49. php_path="${setup_path}/php/74/bin/php"
  50. ;;
  51. esac
  52. echo "PHP $php_version 安装成功"
  53. echo '---------------------------------'
  54. #安装mysql
  55. if [ ! -d "${setup_path}/mysql" ]; then
  56. . ${setup_path}/panel/install/install_soft.sh 1 $action_type mysql $mysql_version
  57. fi
  58. echo "mysql $mysql_version 安装成功"
  59. echo '---------------------------------'
  60. #安装redis
  61. if [ ! -d "${setup_path}/redis" ]; then
  62. . ${setup_path}/panel/install/install_soft.sh 0 $action_type redis $redis_version
  63. fi
  64. echo "redis $redis_version 安装成功"
  65. echo '---------------------------------'
  66. #安装php-redis 插件
  67. if [ ! -e "${extFile}/redis.so" ]; then
  68. . ${setup_path}/panel/install/install_soft.sh 1 $action_type redis $php_version
  69. fi
  70. echo 'php-redis 插件安装成功'
  71. echo '---------------------------------'
  72. #安装php-fileinfo 插件
  73. if [ ! -e "${extFile}/fileinfo.so" ]; then
  74. . ${setup_path}/panel/install/install_soft.sh 1 $action_type fileinfo $php_version
  75. fi
  76. echo 'php-fileinfo 插件安装成功'
  77. echo '---------------------------------'
  78. #安装php-swoole 插件
  79. # if [ ! -e "${extFile}/swoole.so" ]; then
  80. # . ${setup_path}/panel/install/install_soft.sh 1 $action_type swoole4 $php_version
  81. # fi
  82. # 定义函数,用于检查并修改php.ini中的disable_functions配置
  83. function modify_disable_functions {
  84. local setup_path="$1"
  85. local php_version="$2"
  86. local functions_to_check=("proc_open" "pcntl_signal" "pcntl_signal_dispatch" "pcntl_fork" "pcntl_wait" "pcntl_alarm")
  87. local ini_file="${setup_path}/php/${php_version}/etc/php.ini"
  88. # 检查文件是否存在
  89. if [ ! -f "$ini_file" ]; then
  90. echo "Error: PHP configuration file not found at $ini_file"
  91. return 1
  92. fi
  93. # 遍历函数列表,检查并修改disable_functions配置
  94. for func in "${functions_to_check[@]}"; do
  95. # 检查函数是否已经在disable_functions列表中
  96. if grep -q "disable_functions.*$func" "$ini_file"; then
  97. echo "Info: $func is already disabled in $ini_file, removing..."
  98. # 使用sed命令精确地删除函数及其周围的逗号和空格
  99. # 注意:这里假设函数周围总是存在逗号和空格,这可能需要根据实际情况调整
  100. sed -i "s/, \+$func,/,/g" "$ini_file"
  101. # 检查命令是否成功执行
  102. if [ $? -eq 0 ]; then
  103. echo "Info: Successfully removed $func from $ini_file"
  104. else
  105. echo "Error: Failed to remove $func from $ini_file"
  106. return 1
  107. fi
  108. else
  109. echo "Info: $func is not disabled in $ini_file, skipping..."
  110. fi
  111. done
  112. return 0
  113. }
  114. # 调用函数,传入正确的参数
  115. modify_disable_functions "${setup_path}" "$php_version"
  116. #pcntl_signal pcntl_signal_dispatch pcntl_fork pcntl_wait pcntl_alarm 禁用函数删除
  117. #sed -i 's/,proc_open//' ${setup_path}/php/$php_version/etc/php.ini
  118. # 注意:请根据实际的PHP版本和安装路径调整参数
  119. echo '修改mysql sql_mode配置'
  120. echo '---------------------------------'
  121. #修改mysql配置
  122. # MySQL配置文件路径
  123. CONFIG_FILE="/etc/my.cnf"
  124. # 检查配置文件是否存在
  125. if [ ! -f "$CONFIG_FILE" ]; then
  126. echo "MySQL配置文件 $CONFIG_FILE 不存在,请检查路径"
  127. exit 1
  128. fi
  129. # 首先检查是否存在 [mysqld] 段落
  130. if ! grep -q "\[mysqld\]" "$CONFIG_FILE"; then
  131. echo "\[mysqld\]" >> "$CONFIG_FILE"
  132. fi
  133. # 备份原配置文件(可选)
  134. cp "$CONFIG_FILE" "${CONFIG_FILE}.bak"
  135. echo "MySQL配置文件已备份至 ${CONFIG_FILE}.bak"
  136. # 使用grep检查sql_mode是否存在,如果存在,则替换其值
  137. if grep -q "^[[:space:]]*sql_mode[[:space:]]*=" "$CONFIG_FILE"; then
  138. # 如果存在,修改 sql_mode 的值
  139. sed -i 's/^ *sql_mode *=.*$/sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION/' "$CONFIG_FILE"
  140. fi
  141. # 使用grep检查sql-mode是否存在
  142. if grep -q "^[[:space:]]*sql-mode[[:space:]]*=" "$CONFIG_FILE"; then
  143. # 如果存在,修改 sql-mode 的值
  144. sed -i 's/^ *sql-mode *=.*$/sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION/' "$CONFIG_FILE"
  145. fi
  146. # 使用grep -E支持扩展正则表达式,同时匹配sql_mode和sql-mode,如果行不存在,则在[mysqld]段末尾添加新的sql_mode设置
  147. if ! grep -qE "^[[:space:]]*(sql_mode|sql-mode)[[:space:]]*=" "$CONFIG_FILE"; then
  148. sed -i '/\[mysqld\]/a\sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' "$CONFIG_FILE"
  149. fi
  150. # 检查并显示修改后的配置文件中关于sql_mode的部分
  151. grep 'sql-mode' "$CONFIG_FILE"
  152. grep 'sql_mode' "$CONFIG_FILE"
  153. # 重启mysql
  154. echo "MySQL配置文件已更新,正在重载MySQL配置..."
  155. /etc/init.d/mysqld reload
  156. echo "如果没生效请重启MySQL服务。"
  157. echo "--------------------------------------"
  158. #修改nginx配置
  159. project_path=$(cd `dirname $0`; pwd)
  160. project_name="${project_path##*/}"
  161. domain="${project_name//_/.}"
  162. if [ -e "${setup_path}/panel/vhost/nginx/${domain}.conf" ]; then
  163. echo -e "
  164. server
  165. {
  166. listen 80;
  167. server_name ${domain};
  168. index index.php index.html index.htm default.php default.htm default.html;
  169. root /www/wwwroot/${project_name}/public;
  170. #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
  171. #error_page 404/404.html;
  172. #SSL-END
  173. #ERROR-PAGE-START 错误页配置,可以注释、删除或修改
  174. #error_page 404 /404.html;
  175. #error_page 502 /502.html;
  176. #ERROR-PAGE-END
  177. #PHP-INFO-START PHP引用配置,可以注释或修改
  178. #清理缓存规则
  179. location ~ /purge(/.*) {
  180. proxy_cache_purge cache_one \$host\$1\$is_args\$args;
  181. }
  182. #引用反向代理规则,注释后配置的反向代理将无效
  183. location /notice {
  184. proxy_pass http://127.0.0.1:40001/;
  185. proxy_http_version 1.1;
  186. proxy_set_header Upgrade \$http_upgrade;
  187. proxy_set_header Connection "upgrade";
  188. proxy_set_header X-real-ip \$remote_addr;
  189. proxy_set_header X-Forwarded-For \$remote_addr;
  190. }
  191. #提示:v4.3.0 以前版本,可不用配置一下代码
  192. location /msg {
  193. proxy_pass http://127.0.0.1:40002/;
  194. proxy_http_version 1.1;
  195. proxy_set_header Upgrade \$http_upgrade;
  196. proxy_set_header Connection "upgrade";
  197. proxy_set_header X-real-ip \$remote_addr;
  198. proxy_set_header X-Forwarded-For \$remote_addr;
  199. }
  200. include enable-php-$php_version.conf;
  201. #PHP-INFO-END
  202. #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
  203. include ${setup_path}/panel/vhost/rewrite/${domain}.conf;
  204. #REWRITE-END
  205. #禁止访问的文件或目录
  206. location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
  207. {
  208. return 404;
  209. }
  210. #一键申请SSL证书验证目录相关设置
  211. location ~ \.well-known{
  212. allow all;
  213. }
  214. access_log /www/wwwlogs/${domain}.log;
  215. error_log /www/wwwlogs/${domain}.error.log;
  216. }
  217. " > ${setup_path}/panel/vhost/nginx/${domain}.conf
  218. fi
  219. echo 'nginx配置成功'
  220. echo '---------------------------------'
  221. # 伪静态配置
  222. if [ -e "${setup_path}/panel/vhost/rewrite/${domain}.conf" ]; then
  223. echo -e "
  224. location / {
  225. if (!-e \$request_filename) {
  226. rewrite ^(.*)$ /index.php?s=/\$1 last;
  227. break;
  228. }
  229. }
  230. " > ${setup_path}/panel/vhost/rewrite/${domain}.conf
  231. fi
  232. echo '伪静态配置成功'
  233. echo '---------------------------------'
  234. echo '重载nginx配置'
  235. /etc/init.d/nginx reload
  236. echo '---------------------------------'
  237. #获取域名列表
  238. # config_file=${setup_path}/panel/vhost/nginx/${domain}.conf
  239. # #获取域名列表
  240. # domain_list=$(cat $config_file|grep server_name|head -n 1|sed "s/server_name//"|sed "s/;//"|xargs)
  241. # #获取PHP版本
  242. # php_version=$(cat $config_file|grep 'enable-php'|grep -Eo "[0-9]+"|head -n 1)
  243. # echo $php_version
  244. echo '系统环境安装成功!'
  245. echo '==============================================='
  246. # 设置目录权限
  247. echo '---------------------------------'
  248. echo "设置目录权限"
  249. chmod -R 777 runtime
  250. chmod -R 777 .version
  251. chmod -R 777 .env
  252. chmod -R 777 .constant
  253. chmod -R 777 backup
  254. chmod -R 777 public
  255. echo '正在启动系统定时任务、长连接、队列'
  256. # 启动定时任务
  257. echo '---------------------------------'
  258. echo "启动定时任务:$php_path think timer start --d"
  259. $php_path think timer start --d
  260. # 启动长连接
  261. echo '---------------------------------'
  262. echo "启动长连接:$php_path think workerman start --d"
  263. $php_path think workerman start --d
  264. # 启动队列
  265. echo '---------------------------------'
  266. echo "启动队列:$php_path think queue:listen --queue"
  267. $php_path think queue:listen --queue
  268. # 操作说明,进入程序根目录运行 /bin/bash baota.sh