termux搭建kod(可道云)教程及配置数据库mariadb(mysql)

termux搭建kod(可道云)教程

脚本功能

安装相关命令,修改php配置:listen = 127.0.0.1:9000,正则匹配修改,多次追加,nginx配置添加php解析,并且配置如果存在php解析则不会再次追加。

命令行粘贴一键执行脚本

如果要重置为指定密码,在脚本中指定自定义密码然后将脚本内容一键粘贴到终端运行即可

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# 备份安装源文件
if [ ! -f "$PREFIX/etc/apt/sources.list_bak" ]; then
  cp -av $PREFIX/etc/apt/sources.list $PREFIX/etc/apt/sources.list_bak
fi
# # 手动选择源
# termux-change-repo
# 脚本一键换源
cat - > $PREFIX/etc/apt/sources.list <<'EOF'
deb https://mirrors.ustc.edu.cn/termux/termux-main stable main
EOF

pkg update
pkg install -y root-repo x11-repo
pkg install -y wget nginx php php-fpm expect vim 

# 随手配置一下vimrc
cat - >> ~/.vimrc << 'EOF'
" vimrc for me
set nu
set ai
set si
set sw=4
set ts=4
set mouse=a
noremap <C-a> <Esc>ggVG "全选
syntax enable
syntax on
EOF

if [ ! -f "$PREFIX/etc/php-fpm.d/www.conf_bak" ]; then
cp $PREFIX/etc/php-fpm.d/www.conf $PREFIX/etc/php-fpm.d/www.conf_bak
fi
if [ ! -f "$PREFIX/etc/nginx/nginx.conf_bak" ]; then
cp $PREFIX/etc/nginx/nginx.conf $PREFIX/etc/nginx/nginx.conf_bak
fi
# 修改
# sed -i 's|^\(listen =\).*|\1 0.0.0.0:9000|g' $PREFIX/etc/php-fpm.d/www.conf
sed -i 's|^\(listen =\).*|\1 127.0.0.1:9000|g' $PREFIX/etc/php-fpm.d/www.conf
# 检查修改结果
grep -n "^listen" $PREFIX/etc/php-fpm.d/www.conf

# 修改,index行追加index.php
sed -i 's|\([[:space:]]*index  index.html index.htm\).*|\1 index.php;|g' $PREFIX/etc/nginx/nginx.conf
# 检查
grep -n "^[[:space:]]*index" $PREFIX/etc/nginx/nginx.conf
# 添加php解析配置,这段配置只需要执行一次就可以
temp_nginx_conf=$(mktemp) && awk '
BEGIN { depth = 0; target_depth = 2; inserted = 0; already_exists = 0 }
# 先扫描一遍,检查是否已存在该 location 块(简单特征匹配)
NR == FNR {
    if ($0 ~ /location ~ \\\.php\$/) already_exists = 1
    next
}
# 正常处理
{
    if (!inserted && !already_exists && depth == target_depth && $0 ~ /^[[:space:]]*}/) {
        print ""
        print "        location ~ \\.php$ {"
        print "            root           html;"
        print "            fastcgi_pass   127.0.0.1:9000;"
        print "            # fastcgi_pass   0.0.0.0:9000;"
        print "            fastcgi_index  index.php;"
        print "            fastcgi_param  SCRIPT_FILENAME  /data/data/com.termux/files/usr/share/nginx/html$fastcgi_script_name;"
        print "            include        fastcgi_params;"
        print "        }"
        inserted = 1
    }
    if ($0 ~ /\{/) depth++
    if ($0 ~ /\}/) depth--
    print
}
END {
    if (!inserted && !already_exists && depth == target_depth) {
        print "    location ~ \\.php$ { ... }"
    }
}' "$PREFIX/etc/nginx/nginx.conf" "$PREFIX/etc/nginx/nginx.conf" > ${temp_nginx_conf} && mv ${temp_nginx_conf} "$PREFIX/etc/nginx/nginx.conf"

# 下载kodbox
if [ ! - f "kodbox-1.67.02.zip" ]; then
  curl -JOL https://github.com/kalcaddle/kodbox/archive/refs/tags/1.67.02.zip
fi

# 解压 到 Nginx 的 kod 目录下
if [ ! -d "$PREFIX/share/nginx/html/kod" ]; then
  unzip kodbox-1.67.02.zip -d $PREFIX/share/nginx/html/kod
  mv $PREFIX/share/nginx/html/kod/kodbox-1.67.02/* $PREFIX/share/nginx/html/kod
fi
 
# 挂载termux家目录与手机内部存储目录
# termux-setup-storage
# 自动运行termux-setup-storage
# expect -c 'spawn termux-setup-storage; expect "*continue? (y/n)*" { send "n\r" }; interact'
# 如果再次运行时会提示y/n,自动回复n即可
yes n | termux-setup-storage

if [ ! -d "$PREFIX/share/nginx/html/kod/data/files/$(basename $HOME)" ]; then
  ln -s $HOME/ $PREFIX/share/nginx/html/kod/data/files
fi

if [ ! -d "$PREFIX/share/nginx/html/kod/data/files/$(basename $HOME/storage)" ]; then
  ln -s $HOME/storage $PREFIX/share/nginx/html/kod/data/files
fi

# # 如果忘记管理员密码,删除install.lock后重新访问 ip:8080/kod/ 即可重新设置密码,kod数据不会受影响
# read -p "是否重置密码,y:重置,n:不重置,请输入y/n: " delete
# if [ "$delete" == "y" ]; then
#   rm $PREFIX/share/nginx/html/kod/data/system/install.lock
# fi

# # 修改默认监听端口号,默认8080
# sed -i 's|^\([[:space:]]*listen[[:space:]]*\).*|\18081;|g' $PREFIX/etc/nginx/nginx.conf
# # 检查
# grep -n "^[[:space:]]*listen" $PREFIX/etc/nginx/nginx.conf

# # 启动nginx与php-fpm,自行启动
# nginx; php-fpm
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/data/data/com.termux/files/usr/bin/bash

# 1. 配置 my.cnf 添加 skip-grant-tables
CONFIG="$PREFIX/etc/my.cnf"
sed -i '/\[mysqld\]/d' "$CONFIG"
sed -i '/skip-grant-tables/d' "$CONFIG"
sed -i '1 i [mysqld]' "$CONFIG"
echo "skip-grant-tables" >> "$CONFIG"

# 2. 强制停止所有 mysql/mariadb 进程
pkill -f mariadbd || pkill -f mysqld
sleep 2

# 3. 以 skip-grant-tables 模式启动(后台)
mariadbd --skip-grant-tables --skip-networking &
# 等待启动完成
sleep 3

# 4. 非交互式执行 SQL 重置密码
#   注意:先 FLUSH PRIVILEGES 激活权限系统,再 ALTER USER
mariadb -u root -e "FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;"

# 5. 关闭当前 mariadbd 进程
pkill -f mariadbd
sleep 2

# 6. 从配置文件中删除 skip-grant-tables
sed -i '/skip-grant-tables/d' "$CONFIG"

# 7. 正常启动 MariaDB
mariadbd &
echo "root 密码已重置为 123456"
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计