[连载][初步完结] 在安卓Termux中安装虎绿林网站程序

回复列表(152|显示机器人聊天)
  • @Ta / 2022-02-01 / /

    附件内容,不是步骤

    为了防止附件过期,现贴出步骤12中nginx.conf文件的全部内容:

    
    #user  nobody;
    worker_processes  1;
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        #                  '$status $body_bytes_sent "$http_referer" '
        #                  '"$http_user_agent" "$http_x_forwarded_for"';
    
        #access_log  logs/access.log  main;
    
        sendfile        on;
        #tcp_nopush     on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       8080;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   /data/data/com.termux/files/usr/share/nginx/html;
                index  index.html index.htm index.php;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   /data/data/com.termux/files/usr/share/nginx/html;
            }
    
            # proxy the PHP scripts to Apache listening on 127.0.0.1:80
            #
            #location ~ \.php$ {
            #    proxy_pass   http://127.0.0.1;
            #}
    
            # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
            #
            location ~ [^/]\.php(/|$) {
                root   /data/data/com.termux/files/usr/share/nginx/html;
                fastcgi_pass   unix:/data/data/com.termux/files/usr/var/run/php-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
                include        fastcgi_params;
    
                # parse and set $_SERVER['PATH_INFO']
                set $real_script_name $fastcgi_script_name;
                if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                    set $real_script_name $1;
                    set $path_info $2;
                }
                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                fastcgi_param SCRIPT_NAME $real_script_name;
                fastcgi_param PATH_INFO $path_info;
            }
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /\.ht {
            #    deny  all;
            #}
        }
    
    
        # another virtual host using mix of IP-, name-, and port-based configuration
        #
        #server {
        #    listen       8000;
        #    listen       somename:8080;
        #    server_name  somename  alias  another.alias;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    
        # HTTPS server
        #
        #server {
        #    listen       443 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }
    
  • @Ta / 2022-02-02 / /

    步骤13:创建配置文件

    请点查看全部,否则可能会错过操作。

    看看网站现在的状态:

    curl -v http://localhost:8080/
    

    Screenshot_20220201_101222.jpg

    嗯,说配置文件不存在。

    那么我们执行初始化脚本创建一下:

    php ~/hu60wap6/src/script/init.php
    

    然后再看看网站现在的状态:

    curl -v http://localhost:8080/
    

    Screenshot_20220201_003208_com.termux.jpg

    嗯,一堆报错。

    实际访问一下:

    http://localhost:8080/?r=12345

    Screenshot_20220201_003941.jpg

    ?r=数字是为了防止浏览器缓存。

  • @Ta / 2022-02-01 / /

    步骤14:确认装好了PHP。

    为什么有一堆报错?还记得我说的步骤1吗?虎绿林程序目前用PHP8.1打开就是会有这么多报错。

    为了确认你确实装好了PHP,你可以执行以下命令:

    echo '<?php phpinfo();' > ~/hu60wap6/src/phpinfo.php
    

    Screenshot_20220201_004007.jpg

    然后访问这个地址:

    http://localhost:8080/phpinfo.php/path-info/test

    Screenshot_20220201_003642_com.UCMobile.jpg

    嗯,确实装好了。

    但是要想打开虎绿林程序,就只能等我的步骤1完成了。

  • @Ta / 2022-02-01 / /

    注意:请先执行步骤13。如果你没有执行过php ~/hu60wap6/src/script/init.php,说明你错过了步骤13。如果你先执行了步骤15,请在执行步骤13后再次执行步骤15。


    步骤15:修改配置文件中的无效路径。

    同样是php8.1,dev.hu60.cn可以打开,只是有一堆警告:
    https://dev.hu60.cn/q.php/

    Screenshot_20220201_004849_com.UCMobile.jpg

    那为什么Termux上的打不开?看起来问题不是因为不兼容。

    http://localhost:8080/q.php/

    Screenshot_20220201_004945.jpg

    报错发生在cc.php,是文件打开失败。

    哦,是配置的问题!cc.php默认写入位置在/dev/shm//tmp/,安卓写不了。

    执行以下命令替换写入路径为~/hu60wap6/src/temp/

    sed -i "s#'/dev/shm/#ROOT_DIR.'/temp/#g" ~/hu60wap6/src/config/security.php
    
    sed -i "s#'/tmp/#ROOT_DIR.'/temp/#g" ~/hu60wap6/src/config/security.php
    
    mkdir ~/hu60wap6/src/temp/
    

    然后再访问看看:

    http://localhost:8080/q.php/

    哈,变成打不开数据库错误了。看起来修复配置中的无效路径完成了。

    Screenshot_20220201_005909_com.UCMobile.jpg

  • @Ta / 2022-02-01 / /

    如何保持Termux后台运行

    @希望自己长胖胖 说,他在进行一系列步骤之后无法访问到8080端口,并且pstree显示nginx退出了。

    为什么会发生这种情况?因为安卓会杀后台。

    对于华为,需要进行如下设置:

    1. 设置里搜索“自启动”,然后对Termux选“手动管理”,勾选“允许后台活动”。

    Screenshot_20220201_010517.jpg

    Screenshot_20220201_010524_com.huawei.systemmanager.jpg

    1. 设置里搜索“电池优化”,下拉“不允许”,选择“所有应用”,找到“Termux”,然后选成“不允许”。

    Screenshot_20220201_010632.jpg

    Screenshot_20220201_010701.jpg

    Screenshot_20220201_010751_com.android.settings.jpg

  • @Ta / 2022-02-01 / /

    设置好后台运行之后,把nginx、mysql和php-fpm都启动一下,就可以执行后续步骤了。命令:

    # 启动mysql
    ~/../usr/etc/init.d/mysql start
    
    # 启动nginx
    nginx
    
    # 启动php-fpm
    php-fpm
    

    请忽略所有报错,报错肯定是因为程序已经在运行。

    执行完成后,用pstree检查是否所有组件都在运行。

    pstree
    

    这是正确的结果。请忽略上面显示的数字,数字可能是任何值。只要mysqlnginxphp-fpm都出现就可以:

    Screenshot_20220201_012140.jpg

  • @Ta / 2022-02-01 / /

    注意:请先执行步骤13。如果你没有执行过php ~/hu60wap6/src/script/init.php,说明你错过了步骤13。如果你先执行了步骤16,请在执行步骤13后再次执行步骤16。


    步骤16:修复数据库打不开问题

    打不开数据库的原因是No such file or directory,为什么PHP连接数据库,不说端口无法访问,却报错说文件不存在?

    原来连接本地数据库(localhost)并不会走网络,走的是文件(本地unix套接字),文件在这里:

    Screenshot_20220201_012543_com.UCMobile.jpg

    ls一下就会发现文件真的不存在:

    ls /data/data/com.termux/files/usr/tmp/mysqld.sock
    

    Screenshot_20220201_012704.jpg

    而且就算修改配置让mysql把这个文件创建出来,最后也不能正常使用。看起来是mysql的unix套接字和安卓有兼容性问题(php-fpm却没有,奇怪)。

    Screenshot_20220201_013802_com.termux.jpg

    所以只能退而求其次,让PHP去连接3306端口。执行以下命令:

    sed -i "s/'localhost'/'127.0.0.1'/g" ~/hu60wap6/src/config/db.php
    

    此外我们还需要修改连接数据库的用户名和密码,默认是rootroot,但我们创建的是hu60hu60。执行以下命令:

    sed -i "s/'root'/'hu60'/g" ~/hu60wap6/src/config/db.php
    

    Screenshot_20220201_014615.jpg

  • @Ta / 2022-02-01 / /

    步骤16执行完成之后,以下页面就已经能打开了:

    http://localhost:8080/q.php/

    虽然有很多很多报错,但是已经能看到首页内容了。

    明天再修复报错,顺便再介绍一下怎么用git更新代码。

    Screenshot_20220201_014632_com.UCMobile.jpg

  • @Ta / 2022-02-01 / /

    新注册的第一个用户会成为管理员。

    由于报错影响cookie发送,需要使用防掉线链接登录。

    Screenshot_20220201_015230.jpg

  • @Ta / 2022-02-01 / /

    在个人中心可以看到管理后台

    Screenshot_20220201_015350_com.UCMobile.jpg

    Screenshot_20220201_015357_com.UCMobile.jpg

    创建版块

    Screenshot_20220201_015621_com.UCMobile.jpg

    发帖

    Screenshot_20220201_015733_com.UCMobile.jpg

    “你充满警告的样子很美”

    Screenshot_20220201_015833_com.UCMobile.jpg

    呃,默认待审核了,这不对,我搞错了建表语句里的权限。

  • @Ta / 2022-02-02 / /

    步骤17:给 uid 1 版主权限,解决待审核问题。

    执行mysql命令:

    mysql
    

    再执行以下SQL语句:

    -- 切换到数据库hu60
    use hu60;
    
    -- 默认不需要审核
    alter table hu60_user change permission permission int unsigned not null default 0;
    
    -- 给 uid 1 审核权限
    update hu60_user set permission=177 where uid=1;
    
    -- 退出MySQL命令
    exit;
    

    Screenshot_20220201_020737.jpg

    执行完之后你就可以审核自己的帖子了。由于报错,只有上面的审核按钮能用,下面的不能用,并且点击后不会自动返回,得自己返回刷新。

    报错明天修复。

    因为修改了权限,后续发帖不再需要审核。

    Screenshot_20220201_020755_com.UCMobile.jpg

  • @Ta / 2022-02-01 / /

    重启手机后怎么快速启动网站?

    创建一个启动脚本:

    cat > ~/run.sh <<EOF
    # 启动mysql
    ~/../usr/etc/init.d/mysql start
    
    # 启动nginx
    nginx
    
    # 启动php-fpm
    php-fpm
    
    # 检查是否启动成功
    pstree
    EOF
    

    给执行权限:

    chmod +x ~/run.sh
    

    启动网站:

    ~/run.sh
    

    以后每次要启动网站,执行~/run.sh即可。

    Screenshot_20220201_021644.jpg

  • @Ta / 2022-02-01 / /

    如何停止网站?

    创建一个停止脚本:

    cat > ~/stop.sh <<EOF
    # 结束网站进程
    killall php-fpm nginx mariadbd
    
    # 等待进程结束
    sleep 1
    
    # 检查
    pstree
    EOF
    

    给执行权限:

    chmod +x ~/stop.sh
    

    停止网站:

    ~/stop.sh
    

    以后每次要停止网站,运行~/stop.sh即可。


    问题:为什么是mariadbd

    回答1:这是我们从pstree里面看到的进程名称。

    回答2:结尾的d表示这是一个守护进程(daemon),很多服务进程都会这么命名,比如httpd、crond。


    问题:为什么不用~/../usr/etc/init.d/mysql stop

    回答:亲测无效,报错说找不到pid。所以还是用killall吧。


    问题:killall会不会导致数据损坏?

    不会,因为它并不是强行停止进程,而是给进程发信号要它主动停止运行。所以进程是有机会正常退出的。如果进程真的卡住了,那就算执行了killall也不会退出,你就会知道它卡住了。

    如果进程真的卡住了,可以用killall -9 进程名来结束进程,注意这可以导致数据损坏,因为进程没有任何机会正常退出,就算进程没有卡住也没机会。

  • @Ta / 2022-02-01 / /

    打开Termux自动启动网站

    创建好~/run.sh之后,再执行以下命令即可加入自启动:

    echo ~/run.sh > ~/.profile
    

    如何测试?

    1. 在通知栏退出Termux会话。

    Screenshot_20220201_022428.jpg

    1. 重新打开Termux。

    成功自启。

    Screenshot_20220201_022519_com.termux.jpg


    取消自启:

    rm ~/.profile
    
  • @Ta / 2022-02-01 / /

    @老虎会游泳

    特地写给希望自己长胖胖的

    小米8(白)

  • @Ta / 2022-02-01 / /

    Linux命令行小知识

    ~是什么?

    ~是主目录的简写。在Termux中,主目录是/data/data/com.termux/files/home,太长了。还好我们可以用~代替。你每写一个~,就相当于写下了/data/data/com.termux/files/home

    注意,~不能用在引号中,否则会失去代表主目录的效果,就变成了~字符本身。单引号双引号都不可以。

    Screenshot_20220201_025042.jpg

    那在引号里面怎么表示主目录?

    $HOME代替。注意只能用在双引号里。单引号里不支持任何代替方式,只能写完整路径。

    Screenshot_20220201_025441.jpg


    为什么你知道主目录是/data/data/com.termux/files/home

    图中的三种方法可以确定:

    Screenshot_20220201_025235.jpg

  • @Ta / 2022-02-01 / /

    Linux命令行小知识

    cd是什么?

    change directory(改变目录)

    你可以cd到其他目录看看:

    Screenshot_20220201_025659.jpg

    ..表示上级目录,可以级联,比如../..上两级目录。


    为什么不能用start.sh执行脚本,必须用~/start.sh

    这是一个安全措施。假设你解压了一个压缩包,想执行ls看看里面有什么,结果别有用心的人往里面放了一个可执行文件ls,一执行是一个勒索病毒,那不就糟了。

    所以当你不指定路径时,只会执行在PATH环境变量中列出的那些文件夹里面的可执行文件和脚本。主目录不在PATH环境变量中,所以必须指定路径才能执行。

    指定路径有两种方法,一种是绝对路径,无论你cd到了哪里都能执行成功:

    ~/start.sh
    

    还有一种是相对路径:

    ./start.sh
    

    你必须先cd到主目录才能执行成功,否则就找不到文件,因为它表示当前目录内的start.sh


    PATH环境变量?这是什么?

    echo $PATH
    

    Screenshot_20220201_030616.jpg

    默认就一个文件夹,但是也可以设置为冒号分隔的多个文件夹。具体就不讲了,你可以自己搜索资料。

  • @Ta / 2022-02-01 / /
    @老虎会游泳,我执行到步骤13然后把hu60wap/src这个目录打包放在ksweb上运行。出现下面这个错误是不是nginx配置也要更改一下。
    Screenshot_20220201_043256.jpg
    Screenshot_20220201_044405.jpg
    Screenshot_20220201_044632.jpg
  • @Ta / 2022-02-01 / /

    @上善若水,这部分需要修改:

    location ~* \.php$ {
      ……
    }
    

    改成(路径自己替换。如果想让别人帮忙替换,应该发文字而不是截图):

    location ~ [^/]\.php(/|$) {
                root   /data/data/com.termux/files/usr/share/nginx/html;
                fastcgi_pass   unix:/data/data/com.termux/files/usr/var/run/php-fpm.sock;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
                include        fastcgi_params;
    
                # parse and set $_SERVER['PATH_INFO']
                set $real_script_name $fastcgi_script_name;
                if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                    set $real_script_name $1;
                    set $path_info $2;
                }
                fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                fastcgi_param SCRIPT_NAME $real_script_name;
                fastcgi_param PATH_INFO $path_info;
            }
    
添加新回复
回复需要登录