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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#!/data/data/com.termux/files/usr/bin/bash
set -euo pipefail
IFS=$'\n\t'
# ========== 函数定义 ==========
info() { echo -e "\033[1;34m[INFO] $*\033[0m"; }
warn() { echo -e "\033[1;33m[WARN] $*\033[0m"; }
error() { echo -e "\033[1;31m[ERROR] $*\033[0m" >&2; }
# ========== 1. 备份源 & 换源 ==========
info "备份 sources.list"
if [ ! -f "$PREFIX/etc/apt/sources.list_bak" ]; then
  cp -av "$PREFIX/etc/apt/sources.list" "$PREFIX/etc/apt/sources.list_bak"
fi
info "写入USTC源"
cat > "$PREFIX/etc/apt/sources.list" <<'EOF'
deb https://mirrors.ustc.edu.cn/termux/termux-main stable main
EOF
info "更新包索引"
pkg update
# ========== 2. 安装仓库支持包,再update ==========
info "安装 root-repo x11-repo"
pkg install -y root-repo x11-repo
pkg update
info "安装依赖:wget nginx php php-fpm expect vim nmap"
pkg install -y wget nginx php php-fpm expect vim nmap
# ========== 3. vimrc 配置 ==========
info "配置 ~/.vimrc"
cat >> "$HOME/.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
# ========== 4. php-fpm www.conf 备份 & 修改监听地址 ==========
info "备份 php-fpm www.conf"
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
info "设置 php-fpm listen = 127.0.0.1:9000"
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"
# ========== 5. nginx.conf 备份 ==========
info "备份 nginx.conf"
if [ ! -f "$PREFIX/etc/nginx/nginx.conf_bak" ]; then
  cp "$PREFIX/etc/nginx/nginx.conf" "$PREFIX/etc/nginx/nginx.conf_bak"
fi
# ========== 6. 生成修复后的 nginx_kod.conf ==========
info "生成 nginx_kod.conf (可道云专用配置)"
cat > "$PREFIX/etc/nginx/nginx_kod.conf" <<'EOF'
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       8080;
        server_name  localhost;
        root   /data/data/com.termux/files/home;
        index  index.html index.htm index.php;
        location /kod/ {
            try_files $uri $uri/ /kod/index.php?$query_string;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /data/data/com.termux/files/usr/share/nginx/html;
        }
        location ~ ^/kod/.+\.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO $fastcgi_path_info;
            include        fastcgi_params;
        }
    }
}
EOF
# 校验nginx配置语法
info "校验 nginx_kod.conf"
nginx -c "$PREFIX/etc/nginx/nginx_kod.conf" -t
# ========== 7. 下载 & 部署 kodbox ==========
KOD_ZIP="kodbox-1.67.02.zip"
KOD_DIR="$HOME/kod"
info "下载 kodbox"
if [ ! -f "$KOD_ZIP" ]; then
  curl -fJOL https://github.com/kalcaddle/kodbox/archive/refs/tags/1.67.02.zip
fi
info "解压部署 kodbox -> $KOD_DIR"
rm -rf "$KOD_DIR"
mkdir -p "$KOD_DIR"
unzip -q "$KOD_ZIP" -d "$KOD_DIR"
mv "$KOD_DIR"/kodbox-1.67.02/* "$KOD_DIR/"
rmdir "$KOD_DIR"/kodbox-1.67.02
# 挂载Termux家目录
ln -s $HOME $KOD_DIR/data/files/
# ========== 8. termux storage 提示(不自动执行,需要手动授权) ==========
warn "==== termux-setup-storage ===="
warn "请手动执行 termux-setup-storage 并在手机弹窗授权存储权限"
warn "yes n 无法绕过安卓系统弹窗,脚本跳过自动执行"
# ========== 9. 端口检查 ==========
info "本地端口扫描"
nmap 127.0.0.1
# ========== 启动提示 ==========
cat <<'EOF'
===========================
脚本执行完成!
启动命令:
1. 关闭旧进程:
pkill nginx; pkill php-fpm
2. 启动 php-fpm
php-fpm
3. 新开终端启动 nginx(指定kod配置文件)
nginx -c $PREFIX/etc/nginx/nginx_kod.conf

访问地址: http://127.0.0.1:8080/kod/
局域网访问:http://192.168.1.104:8080/kod/
===========================
EOF

<<'CONTENT'
# 如果忘记管理员密码,删除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

# 重置密码操作
# ================================================================
#!/data/data/com.termux/files/usr/bin/bash
set -euo pipefail
CONFIG="$PREFIX/etc/my.cnf"

info() { echo -e "\033[1;34m[INFO] $*\033[0m"; }
warn() { echo -e "\033[1;33m[WARN] $*\033[0m"; }

# 1. 清理旧配置,写入 skip-grant-tables
sed -i '/\[mysqld\]/d' "$CONFIG"
sed -i '/skip-grant-tables/d' "$CONFIG"
echo -e "[mysqld]\nskip-grant-tables" >> "$CONFIG"

# 2. 停止所有 mariadb
pkill -f mariadbd || true
sleep 2

# 3. 后台启动带跳过权限的 mariadbd
mariadbd --skip-grant-tables --skip-networking &
MARIADB_PID=$!
info "等待 MariaDB 启动..."
sleep 5

# 4. 新版MariaDB 13.x 使用 SET PASSWORD,不要UPDATE mysql.user视图
mariadb -u root -e "
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
FLUSH PRIVILEGES;
"

# 5. 关闭数据库
kill $MARIADB_PID
wait $MARIADB_PID 2>/dev/null || true
sleep 2

# 6. 删除 my.cnf 里 skip-grant-tables
sed -i '/skip-grant-tables/d' "$CONFIG"

# 7. 正常后台启动
mariadbd &
echo "===== 重置完成,root密码:123456 ====="
echo "测试登录命令:mariadb -uroot -p123456"
# ================================================================

# 修改默认监听端口号,默认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

# 如果要挂载Termux目录到kod
ln -s $HOME $KOD_DIR/data/files/

# 添加Termux中自启动脚本
cat > ~/.termux/boot/kod.sh <<'EOF'
#!/data/data/com.termux/files/usr/bin/bash

termux-wake-lock
nginx
php-fpm
mariadbd &
EOF

CONTENT
chmod +x ~/.termux/boot/kod.sh

安装并mariadbd

1
2
3
pkg install -y mariadb
mkdir -p $PREFIX/etc/my.cnf.d
mysql_install_db

如果要重置mariadbd密码

 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"

termux开机自启脚本

termux-boot要开启自启动,并且要防止后台自动清理

1
2
3
4
5
6
#!/data/data/com.termux/files/usr/bin/bash

termux-wake-lock
nginx
php-fpm
mariadbd &

nginx配置示例

 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
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       8080;
        server_name  localhost;
        location / {
            root   /data/data/com.termux/files/usr/share/nginx/html;
            index  index.html index.htm index.php;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /data/data/com.termux/files/usr/share/nginx/html;
        }

        location ~ \.php$ {
            root           html;
            # fastcgi_pass   127.0.0.1:9000;
            fastcgi_pass   0.0.0.0:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /data/data/com.termux/files/usr/share/nginx/html$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}