首先登录1Panel(以下简称1p)后台,点击计划任务-添加计划任务
雨云 支持预装1p了喔
频率改为每天一次
将同步代码复制到脚本内容中,并且根据个人实际情况修改,如果你的1p安装在默认目录下,那么无需修改,如果你安装在自定义目录下,需要修改app_local_dir的值,例如你的1p安装在"/server"目录下,那么这里需要修改为/server/1panel/resource/apps/local
完成后建议cd到这个目录看一下
确认无误后点击计划任务的“执行”,等待越2秒左右打开报告
此时,上面提到的目录中会多出一堆文件
之后在1p后台找到应用商店-更多-本地
点击“更新应用列表”即可
完整代码如下(由 【1Panel】更新第三方应用商店 | Carol 小屋 提供)
#!/bin/bash
# 这下面是修改配置的地方
#
# 1panel本地app的目录(如果不是默认安装,需修改该目录)
app_local_dir="/opt/1panel/resource/apps/local"
# AppStore的git仓库地址(必选)
# git_repo_url="https://github.com/xxxily/local-appstore-for-1Panel"
# git_repo_url="https://github.com/1Panel-dev/appstore"
git_repo_url="https://github.com/okxlin/appstore"
# 访问git仓库的access token,访问私有仓库时用,优先级高于账密(可选)
# 建议使用access token,降低账密泄露的风险
git_access_token=""
# 访问git仓库的用户名,访问私有仓库时用(可选)
git_username=""
# 访问git仓库的密码,访问私有仓库时用(可选)
git_password=""
# 指定克隆的分支(可选)
git_branch=""
# 指定克隆的深度(可选)
git_depth=1
# 拉取远程仓库前是否清空本地app目录(可选)
clean_local_app=false
# 拉取远程仓库前是否清空远程app缓存(可选)
clean_remote_app_cache=false
# 设置克隆或拉取远程仓库时使用的代理(可选)
proxyUrl=""
# 设置示例:
# proxyUrl="http://127.0.0.1:7890"
# proxyUrl="socks5://127.0.0.1:7890"
# proxyUrl="socks5://user:password@host:port"
# 将远程app store工程克隆到本地的工作目录
work_dir="/opt/1panel/appstore"
# 获取系统信息
os_info=$(uname -a)
# 检查是否为Debian系统
if [[ "$os_info" == *"Debian"* ]]; then
echo "检测到Debian环境,执行特殊设置"
chmod +x /usr/bin/bash
sudo su $@
else
echo "非Debian,跳过特殊设置"
fi
# 检测Git是否已安装
echo "检测Git是否安装"
if ! command -v git &> /dev/null; then
echo "Git未找到,开始安装..."
#
# apt版
if [[ -f /etc/apt/sources.list ]]; then
sudo apt-get update
sudo apt-get install git -y
fi
# yum版
if [[ -f /etc/yum.repos.d/CentOS-Base.repo ]]; then
sudo yum install git -y
fi
echo "Git安装完成."
else
echo "Git已安装."
fi
set -e
mkdir -p "$work_dir/logs"
log_file="$work_dir/logs/local_appstore_sync_helper_$(date +"%Y-%m-%d").log"
logs() {
local message="$1"
if [ -n "$log_file" ]; then
mkdir -p "$(dirname "$log_file")"
if [ $? -eq 0 ]; then
echo -e "[$(date +"%Y-%m-%d %H:%M:%S")] $message"
echo "[$(date +"%Y-%m-%d %H:%M:%S")] $message" >>"$log_file"
return
fi
fi
echo -e "$message"
}
# 函数: url_encode
# 参数:
# - url: 需要进行编码的字符串
# 返回值:
# 经过URL编码后的字符串
function url_encode() {
local string=$1
local length="${#string}"
local url_encoded_string=""
local c
for ((i = 0; i < length; i++)); do
c=${string:i:1}
case "$c" in
[a-zA-Z0-9.~_-]) url_encoded_string+=$c ;;
*) url_encoded_string+=$(printf '%%%02X' "'$c") ;;
esac
done
echo "$url_encoded_string"
}
# 定义函数,接收一个URL参数和可选的替换字符串参数
replace_protocol() {
local url=$1
local replacement=$2
# 如果没有提供替换字符串,则删除"http://"或"https://"
if [[ -z $replacement ]]; then
local new_url=$(echo $url | sed "s/http:\/\///" | sed "s/https:\/\///")
else
local new_url=$(echo $url | sed "s/http:\/\//${replacement}/" | sed "s/https:\/\//${replacement}/")
fi
# 输出替换后的URL
echo $new_url
}
# 函数: clone_git_repo
# 参数:
# - url: Git仓库URL
# - username: 账号(可选)
# - password: 密码(可选)
# - access_token: 访问令牌(可选)
# - branch: 克隆分支(可选)
# - depth: 克隆深度(可选,默认为0,即克隆整个仓库)
function clone_git_repo() {
local url=$1
local username=$2
local password=$3
local access_token=$4
local branch=$5
local depth=$6
branch=${branch:+--branch $branch}
depth=${depth:+--depth $depth}
echo "branch: $branch, depth: $depth"
if [[ -n $access_token ]]; then
echo "use access_token to clone"
local fix_url=$(replace_protocol "$url")
git clone "https://oauth2:$access_token@$fix_url" $branch $depth
elif [[ -n $username && -n $password ]]; then
local encoded_username=$(url_encode "$username")
local encoded_password=$(url_encode "$password")
local fix_url=$(replace_protocol "$url")
# echo "use username and password to clone, encoded_username: $encoded_username, encoded_password: $encoded_password, fix_url: $fix_url"
echo "use username and password to clone"
git clone "https://$encoded_username:$encoded_password@$fix_url" $branch $depth
else
echo "use default clone"
git clone "$url" $branch $depth
fi
}
# 取消代理
function proxy_off() {
unset http_proxy
unset https_proxy
unset ALL_PROXY
unset no_proxy
logs "Proxy Off"
}
# 开启代理
function proxy_on() {
proxy_url="http://127.0.0.1:7890"
match_str="://"
if [ -n "$1" ]; then
if [[ $1 =~ $match_str ]]; then
proxy_url=$1
else
logs "Incorrect proxy_url, use defualt proxy_url"
return
fi
fi
export http_proxy=$proxy_url
export https_proxy=$proxy_url
export ALL_PROXY=$proxy_url
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
logs "Proxy On $proxy_url"
}
function scriptInfo() {
echo ""
logs "##################################################################"
logs "# Name: local appstore sync helper for 1Panel #"
logs "# Version: v1.0.1 #"
logs "# Author: xxxily #"
logs "# Author: BiliWind #"
logs "# Github: https://github.com/xxxily/local-appstore-for-1Panel #"
logs "##################################################################"
echo ""
}
function main() {
scriptInfo
if [ ! -d "$app_local_dir" ]; then
logs "未检测到1panel的app目录,请检查1panel是否安装正确,或修改脚本中的app_local_dir变量"
exit 1
fi
# 检查地址结尾是否包含.git,如果不包含则自动补全
if [[ "$git_repo_url" != *".git" ]]; then
git_repo_url="${git_repo_url}.git"
fi
local repo_username=""
local repo_projectname=""
# 使用正则表达式匹配仓库地址中的用户名和项目名
if [[ $git_repo_url =~ .*\/(.*)\/(.*)\.git ]]; then
repo_username=${BASH_REMATCH[1]}
repo_projectname=${BASH_REMATCH[2]}
# logs "用户名: $repo_username"
# logs "项目名: $repo_projectname"
fi
if [ -z "$repo_username" ] || [ -z "$repo_projectname" ]; then
logs "无法提取用户名和项目名,请检查git_repo_url变量提供的地址是否正确"
exit 1
fi
mkdir -p "$work_dir/temp"
local repo_user_dir="$work_dir/temp/$repo_username"
local repo_dir="$repo_user_dir/$repo_projectname"
# 根据clean_remote_app_cache变量的值决定是否清空远程app的缓存数据
if [ "$clean_remote_app_cache" = true ] && [ -d "$repo_dir" ]; then
rm -rf "$repo_dir"
logs "已清空远程app的缓存数据"
fi
# 根据proxyUrl变量的值决定是否开启代理
if [ -n "$proxyUrl" ]; then
proxy_on "$proxyUrl"
fi
# clone或拉取远程仓库最新代码
logs "准备获取远程仓库最新代码:$git_repo_url"
if [ -d "$repo_dir" ]; then
logs "执行git pull操作"
cd "$repo_dir"
# 强行拉取最新代码
git pull --force 2>>"$log_file"
else
logs "执行git clone操作"
mkdir -p "$repo_user_dir"
cd "$repo_user_dir"
clone_git_repo "$git_repo_url" "$git_username" "$git_password" "$git_access_token" "$git_branch" "$git_depth" 2>>"$log_file"
fi
logs "远程仓库最新代码获取完成"
if [ ! -d "$repo_dir/apps" ]; then
logs "未检测到apps目录,请检查远程仓库是否正确"
exit 1
fi
# 根据clean_local_app变量的值决定是否清空本地app目录
if [ "$clean_local_app" = true ]; then
rm -rf "$app_local_dir"/*
logs "已清空本地原有的app"
fi
# 将远程仓库的apps目录下的所有app复制到本地app_local_dir目录下
cd "$repo_dir"
cp -rf apps/* "$app_local_dir"
pwd
ls -lah
du -sh
# 根据clean_remote_app_cache变量的值决定是否清空远程app的缓存数据
if [ "$clean_remote_app_cache" = true ]; then
rm -rf "$repo_dir"
fi
if [ -n "$proxyUrl" ]; then
proxy_off
fi
logs "1panel本地app同步成功,enjoy it!"
}
main "$@"
logs "脚本由BiliWind-风屿岛站长二改,尊重开源,请不要删除或修改原作者、二改者信息"
完成第三方应用商店的设置后,找到SearXNG并点击安装
在弹出的页面中,需要更改外部访问地址
如果你希望使用域名,则需要更改为你首页的完整 URL
例如
我将使用反向代理来访问
如果你希望使用ip:port的方式,那么需要注意上方的端口
并且勾选端口外部访问
本文将以域名访问为例,最终配置如下
因为要使用nginx反代,所以无需勾选端口外部访问
启动完成后即可设置反向代理
创建一个反向代理类的网站
主域名填写你要访问用的域名
代理地址填写 localip:port ,例如这里的 127.0.0.1:40032
SSL 按需配置,完成后访问域名即可看到搜索页面
在右上角可以找到首选项
您无需担心在其中配置的信息泄露,因为他不会存储在服务端,而是使用cookie存储在本地
可以在搜索引擎选项卡选择你希望使用的搜索引擎进行聚合搜索
它会同时检索并排序你所勾选的所有搜索引擎,并将整合后的结果返回给你
你可以在高级查询中选择是否标注出tor出口
搜索某些内容后,会在每条末端都显示该条目的来源
当然,你也可以搜索图片
以及视频
如果某些来自城堡外的图片无法正常显示,可以打开此开关
你可以在设置页同时勾选多个默认搜索类别以达到类似图文混合的搜索结果展示