本项目是一个轻量级的导航页生成工具,旨在通过简单的 YAML 配置文件(conf.yml)动态生成美观的导航页面。用户可以轻松管理常用链接,并通过 Docker 容器和 Cloudflare 固定隧道实现本地或公网访问。
图标采用简化的熊猫脸部图案,底部新增的熊猫脸部以几何方式呈现,耳朵、眼斑与鼻部以黑白配色设计,富有辨识度但不具象。图案下方有象征着支持的设计,寓意着我妻子对项目的坚实支持与托举。整体风格仍保持扁平化设计,使用蓝白主调并加入黑白点缀,确保视觉平衡且富有情感深度。
conf.yml 生成响应式 HTML 页面,支持自定义标题、链接和图标。conf.yml,定义导航页标题和链接。
title: 我的导航页面
groups:
- name: 常用工具
links:
- name: Google
url: https://www.google.com
icon: https://www.google.com/favicon.ico
desc: 搜索引擎
- name: GitHub
url: https://github.com
icon: https://github.com/favicon.ico
desc: 代码托管平台
docker build --no-cache -t my-nav-image .
docker run -d --restart=unless-stopped -p 8080:8080 --name my-nav-container my-nav-image
conf.yml 后,重新运行脚本,或使用以下常用命令合集:
# 进入容器
docker exec -it wine bash
# 激活 / 退出 Python 虚拟环境
source /tmp/venv/bin/activate
. /tmp/venv/bin/activate
deactivate
# 修改文件权限
chown appuser:appuser /tmp/hfactive_private.py
chmod 664 /tmp/navpage/generate_nav.py
chmod +x /tmp/run_nav_update.sh
# 递归修改目录属主与权限
chown -R appuser:appuser /tmp/navpage
chmod -R u+rwX,go+rX /tmp/navpage
# 查看日志
cat /tmp/logs/hfactive.log
cat /var/log/cron.log
# 定时任务管理
crontab -u appuser -l
crontab -u appuser -e
# 测试文件
python /tmp/navpage/generate_nav.py
单次测试文件:su - appuser -c "python3 /tmp/navpage/private_html/generate_portal_config.py"
su - appuser -c "python3 /tmp/navpage/private_html/rss_news.py"
su - appuser -c "python3 /tmp/navpage/private_html/wedav_list_tar.py"
单次测试.sh脚本:su - appuser -c "bash /tmp/update_sh.sh"
su - appuser -c "bash /tmp/hf_http_public.sh"
su - appuser -c "bash /tmp/post_fetch_tasks_cron_appuser.sh"
su - appuser -c "bash /tmp/txt_to_html.sh"
# 完全注释项
curl -s "https://raw.githubusercontent.com/rakersfu/gist/main/index.html" | tee /tmp/navpage/index.html > /dev/null 2>&1 && echo "下载完成"
curl -s "https://raw.githubusercontent.com/rakersfu/gist/main/post_fetch_tasks_cron_appuser.txt" | tee /tmp/post_fetch_tasks_cron_appuser.sh > /dev/null 2>&1 && echo "下载完成"
curl -s "https://raw.githubusercontent.com/rakersfu/gist/main/update_sh.sh" | tee /tmp/update_sh.sh > /dev/null 2>&1 && echo "下载完成"
curl -s "https://raw.githubusercontent.com/rakersfu/gist/main/update_sh.sh" | tee /tmp/update_sh.sh > /dev/null 2>&1 && echo "下载完成"
curl -s "https://raw.githubusercontent.com/rakersfu/gist/main/truncate_logs.sh" | tee /tmp/truncate_logs.sh > /dev/null 2>&1 && echo "下载完成"
wget -O /share/Public/navpage/index.html "https://cdn.gh-proxy.org/https://raw.githubusercontent.com/rakersfu/gist/main/index.html"
curl -s "https://cdn.gh-proxy.org/https://raw.githubusercontent.com/rakersfu/gist/main/index.html" | tee /share/Public/navpage/index.html > /dev/null 2>&1 && echo "下载完成"
su - appuser -c "bash /tmp/update_sh.sh"
su - appuser -c "bash /tmp/post_fetch_tasks_cron_appuser.sh"
su - appuser -c "bash /tmp/update_sh.sh > /tmp/update_sh.log 2>&1"
su - appuser -c "bash /tmp/hf_http_public.sh"
su - appuser -c "bash /tmp/hf_http_private.sh"
su - appuser -c "bash /tmp/txt_to_html.sh"
su - appuser -c "bash /tmp/keepalive.sh"
su - appuser -c "bash /tmp/truncate_logs.sh"
curl -s "https://raw.githubusercontent.com/rakersfu/gist/main/txt_to_html.sh" | tee /tmp/txt_to_html.sh > /dev/null 2>&1 && echo "下载完成"
su - appuser -c 'curl -s "https://raw.githubusercontent.com/rakersfu/gist/main/generate_cron_status_html.py" | python3 > /dev/null'
printenv > /etc/container_env.sh
# 写入文件(保持权限与属主)
cat /tmp/lun.txt | tee /etc/logrotate.d/cloudflared > /dev/null
rm /tmp/navpage/index.html.txt
nano /tmp/navpage/index.html.txt
cat /tmp/navpage/index.html.txt | tee /tmp/navpage/index.html > /dev/null
rm /tmp/navpage/conf.yml.txt
nano /tmp/navpage/conf.yml.txt
cat /tmp/navpage/conf.yml.txt | tee /tmp/navpage/conf.yml > /dev/null
rm /tmp/fetch_icons.sh.txt
nano /tmp/fetch_icons.sh.txt
cat /tmp/fetch_icons.sh.txt | tee /tmp/fetch_icons.sh > /dev/null
su - appuser -c "bash /tmp/fetch_icons.sh"
rm /tmp/txt_to_html.sh.txt
nano /tmp/txt_to_html.sh.txt
cat /tmp/txt_to_html.sh.txt | tee /tmp/txt_to_html.sh > /dev/null
su - appuser -c "bash /tmp/txt_to_html.sh"
cat /tmp/logs/txt_to_html.log
rm /tmp/update_hosts.sh.txt
nano /tmp/update_hosts.sh.txt
cat /tmp/update_hosts.sh.txt | tee /tmp/update_hosts.sh > /dev/null
su - appuser -c "bash /tmp/update_hosts.sh"
rm /tmp/hf_http_private.sh.txt
nano /tmp/hf_http_private.sh.txt
cat /tmp/hf_http_private.sh.txt | tee /tmp/hf_http_private.sh > /dev/null
su - appuser -c "bash /tmp/hf_http_private.sh"
cat /tmp/logs/hfactive_private.log
rm /tmp/download_from_github_gist_navpage.sh.txt
nano /tmp/download_from_github_gist_navpage.sh.txt
cat /tmp/download_from_github_gist_navpage.sh.txt | tee /tmp/download_from_github_gist_navpage.sh > /dev/null
su - appuser -c "bash /tmp/download_from_github_gist_navpage.sh"
rm /tmp/download_from_github_gist_tmp.sh.txt
nano /tmp/download_from_github_gist_tmp.sh.txt
cat /tmp/download_from_github_gist_tmp.sh.txt | tee /tmp/download_from_github_gist_tmp.sh > /dev/null
su - appuser -c "bash /tmp/download_from_github_gist_tmp.sh"
# Nginx修改配置文件
rm /tmp/nginx.conf.txt
nano /tmp/nginx.conf.txt
cat /tmp/nginx.conf.txt | tee /etc/nginx/nginx.conf > /dev/null
nginx -s reload
sudo netstat -tulnp | grep :80
sudo ss -tulnp | grep nginx
sudo netstat -tulnp | grep apache
sudo netstat -tulnp | grep nginx
/opt/nginx/nginx -s reload -c /opt/nginx/conf/nginx.conf
curl -v http://0.0.0.0:10002/
# 压缩与解压缩
你可以使用以下命令将 /opt/v2ray-tmp 目录打包为 .tar.gz 压缩包,并将压缩包保存在 /opt/ 目录下:
tar -czvf /opt/v2ray-tmp.tar.gz -C /opt v2ray-tmp
你可以使用以下命令将 /opt/v2ray-tmp.tar.gz 解压到指定目录(用-C指定) /opt/ 下:
tar -xzvf /opt/v2ray-tmp.tar.gz -C /opt
执行后会将 /opt/v2ray-quote.tar.gz 中的内容解压到当前目录,并在终端逐行显示每个文件名。例如:
tar -xzvf /opt/v2ray-quote.tar.gz
# 常用数据地址
https://gitlab.com/gfwlist/gfwlist/raw/master/gfwlist.txt
# 从Google网盘下载文件
python3 -m gdown "https://drive.google.com/uc?id=1QPubfRmEKU1n2wfcNhapQLoaRYZ_3kNn" -O output_filename
# 修复中文注释乱码
iconv -f GBK -t UTF-8 install_engine_and_compose.sh -o fixed.sh
mv fixed.sh install_engine_and_compose.sh
dos2unix install_engine_and_compose.sh
sed -i 's/\r$//' install_engine_and_compose.sh
chmod +x install_engine_and_compose.sh
# 更新GFW列表
https://gitlab.com/gfwlist/gfwlist/raw/master/gfwlist.txt
# 搜索引用
grep -r "index.html" /tmp/*.sh /tmp/navpage/*.py