mirror of
https://github.com/kejilion/sh.git
synced 2025-10-03 23:34:20 +08:00
Compare commits
31 commits
3e894c9a8f
...
12f74d47e9
Author | SHA1 | Date | |
---|---|---|---|
|
12f74d47e9 | ||
|
3841a90467 | ||
|
fbdd845fc8 | ||
|
4cf9c4e4c1 | ||
|
010337cb93 | ||
|
41e3f9bd7e | ||
|
accc7e95ca | ||
|
a4751d4ec4 | ||
|
58801f6400 | ||
|
f93a886425 | ||
|
c8425328c3 | ||
|
d357622eeb | ||
|
0dd466a8dd | ||
|
c8de270df5 | ||
|
fc5a789c1c | ||
|
c3a784790c | ||
|
f51a882677 | ||
|
9602d5bcc7 | ||
|
253672ae1a | ||
|
cc2b0ba252 | ||
|
1cef745211 | ||
|
b4bd58927e | ||
|
efcb06f721 | ||
|
42927bdf4d | ||
|
2cb43e2209 | ||
|
578279d323 | ||
|
a29b5fd861 | ||
|
5c984f5fbe | ||
|
533eaef84e | ||
|
34193e4f6b | ||
|
40becc2cb2 |
7 changed files with 1889 additions and 360 deletions
285
cn/kejilion.sh
285
cn/kejilion.sh
|
@ -1,5 +1,5 @@
|
|||
#!/bin/bash
|
||||
sh_v="4.1.1"
|
||||
sh_v="4.1.2"
|
||||
|
||||
|
||||
gl_hui='\e[37m'
|
||||
|
@ -349,22 +349,22 @@ kejilion() {
|
|||
|
||||
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
install lsof
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
check_port() {
|
||||
install lsof
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
stop_containers_or_kill_process 80
|
||||
stop_containers_or_kill_process 443
|
||||
}
|
||||
|
@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
# Run Prometheus container
|
||||
|
@ -2958,7 +2958,7 @@ docker run -d \
|
|||
-v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \
|
||||
-v $PROMETHEUS_DIR/data:/prometheus \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--user 0:0 \
|
||||
prom/prometheus:latest
|
||||
|
||||
|
@ -2968,7 +2968,7 @@ docker run -d \
|
|||
-p ${docker_port}:3000 \
|
||||
-v $GRAFANA_DIR:/var/lib/grafana \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
grafana/grafana:latest
|
||||
|
||||
}
|
||||
|
@ -3037,7 +3037,7 @@ f2b_install_sshd() {
|
|||
-v /path/to/fail2ban/config:/config \
|
||||
-v /var/log:/var/log:ro \
|
||||
-v /home/web/log/nginx/:/remotelogs/nginx:ro \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/fail2ban:latest
|
||||
|
||||
sleep 3
|
||||
|
@ -8874,6 +8874,7 @@ while true; do
|
|||
echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器"
|
||||
echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具"
|
||||
echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台"
|
||||
echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
|
@ -8998,6 +8999,9 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/openlist
|
||||
chmod -R 777 /home/docker/openlist
|
||||
|
||||
docker run -d \
|
||||
--restart=always \
|
||||
-v /home/docker/openlist:/opt/openlist/data \
|
||||
|
@ -9045,7 +9049,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:ubuntu-kde
|
||||
|
||||
|
||||
|
@ -9127,7 +9131,7 @@ while true; do
|
|||
-p 56881:56881/udp \
|
||||
-v /home/docker/qbittorrent/config:/config \
|
||||
-v /home/docker/qbittorrent/downloads:/downloads \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/qbittorrent:latest
|
||||
|
||||
}
|
||||
|
@ -9362,7 +9366,7 @@ while true; do
|
|||
-p ${docker_port}:5700 \
|
||||
--name qinglong \
|
||||
--hostname qinglong \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
whyour/qinglong:latest
|
||||
|
||||
|
||||
|
@ -9428,7 +9432,7 @@ while true; do
|
|||
-e PGID=1000 \
|
||||
-v /home/docker/easyimage/config:/app/web/config \
|
||||
-v /home/docker/easyimage/i:/app/web/i \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
ddsderek/easyimage:latest
|
||||
|
||||
}
|
||||
|
@ -9745,7 +9749,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:latest
|
||||
|
||||
}
|
||||
|
@ -9808,7 +9812,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --name dockge --restart unless-stopped -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
docker run -d --name dockge --restart=always -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
|
||||
}
|
||||
|
||||
|
@ -9850,7 +9854,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name searxng \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v "/home/docker/searxng:/etc/searxng" \
|
||||
searxng/searxng
|
||||
|
@ -10004,7 +10008,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --restart unless-stopped \
|
||||
docker run -d --restart=always \
|
||||
-p ${docker_port}:3000 \
|
||||
-v /home/docker/moments/data:/app/data \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
|
@ -10158,7 +10162,7 @@ while true; do
|
|||
-e ENCRYPTION_KEY=${ENCRYPTION_KEY} \
|
||||
-p ${docker_port}:6989 \
|
||||
-v /home/docker/nexterm:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
germannewsmaker/nexterm:latest
|
||||
|
||||
}
|
||||
|
@ -10179,7 +10183,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs
|
||||
|
||||
}
|
||||
|
||||
|
@ -10200,7 +10204,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr
|
||||
|
||||
}
|
||||
|
||||
|
@ -10309,7 +10313,7 @@ while true; do
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
-p ${docker_port}:9100 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
|
||||
|
@ -10333,7 +10337,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name=cadvisor \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
--volume=/:/rootfs:ro \
|
||||
--volume=/var/run:/var/run:rw \
|
||||
|
@ -10704,7 +10708,7 @@ while true; do
|
|||
local docker_port=8064
|
||||
|
||||
docker_rum() {
|
||||
docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
}
|
||||
|
||||
local docker_describe="对开发人员和 IT 工作者来说非常有用的工具"
|
||||
|
@ -10848,7 +10852,7 @@ while true; do
|
|||
-p 6199:6199 \
|
||||
-p 11451:11451 \
|
||||
-v /home/docker/astrbot/data:/AstrBot/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--name astrbot \
|
||||
soulter/astrbot:latest
|
||||
|
||||
|
@ -10873,7 +10877,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name navidrome \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
--user $(id -u):$(id -g) \
|
||||
-v /home/docker/navidrome/music:/music \
|
||||
-v /home/docker/navidrome/data:/data \
|
||||
|
@ -10935,7 +10939,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name libretv \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-e PASSWORD=${app_passwd} \
|
||||
bestzwei/libretv:latest
|
||||
|
@ -10977,9 +10981,9 @@ while true; do
|
|||
|
||||
curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml
|
||||
sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml
|
||||
cd /home/docker/moontv/
|
||||
docker compose up -d
|
||||
clear
|
||||
|
@ -11016,7 +11020,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name melody \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:5566 \
|
||||
-v /home/docker/melody/.profile:/app/backend/.profile \
|
||||
foamzou/melody:latest
|
||||
|
@ -11045,7 +11049,7 @@ while true; do
|
|||
docker_rum() {
|
||||
docker run -d \
|
||||
--name dosgame \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:262 \
|
||||
oldiy/dosgame-web-docker:latest
|
||||
|
||||
|
@ -11075,7 +11079,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name xunlei \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--privileged \
|
||||
-e XL_DASHBOARD_USERNAME=${app_use} \
|
||||
-e XL_DASHBOARD_PASSWORD=${app_passwd} \
|
||||
|
@ -11137,7 +11141,7 @@ while true; do
|
|||
mkdir -p /home/docker/beszel && \
|
||||
docker run -d \
|
||||
--name beszel \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
-v /home/docker/beszel:/beszel_data \
|
||||
-p ${docker_port}:8090 \
|
||||
henrygd/beszel
|
||||
|
@ -11355,7 +11359,7 @@ while true; do
|
|||
-v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \
|
||||
-e TZ=UTC \
|
||||
-p ${docker_port}:80 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
bellamy/wallos:latest
|
||||
|
||||
}
|
||||
|
@ -11432,7 +11436,7 @@ while true; do
|
|||
--mount type=bind,source=/home/docker/jellyfin/media,target=/media \
|
||||
-p ${docker_port}:8096 \
|
||||
-p 7359:7359/udp \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
jellyfin/jellyfin
|
||||
|
||||
|
||||
|
@ -11520,7 +11524,7 @@ while true; do
|
|||
--name file-code-box \
|
||||
-p ${docker_port}:12345 \
|
||||
-v /home/docker/file-code-box/data:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lanol/filecodebox:latest
|
||||
|
||||
}
|
||||
|
@ -11561,7 +11565,7 @@ while true; do
|
|||
--name matrix \
|
||||
-v /home/docker/matrix/data:/data \
|
||||
-p ${docker_port}:8008 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
matrixdotorg/synapse:latest
|
||||
|
||||
echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。"
|
||||
|
@ -11651,7 +11655,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name filebrowser \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v /home/docker/filebrowser/data:/data \
|
||||
-v /home/docker/filebrowser/config:/config \
|
||||
|
@ -11680,14 +11684,14 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}:/data \
|
||||
-p ${docker_port}:5000 \
|
||||
${docker_img} /data -A
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="Dufs 极简静态文件服务器,支持上传下载"
|
||||
local docker_describe="极简静态文件服务器,支持上传下载"
|
||||
local docker_url="官网介绍: https://github.com/sigoden/dufs"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
|
@ -11710,7 +11714,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}/downloads:/app/Downloads \
|
||||
-v /home/docker/${docker_name}/storage:/app/storage \
|
||||
-p ${docker_port}:9999 \
|
||||
|
@ -11718,7 +11722,7 @@ while true; do
|
|||
|
||||
}
|
||||
|
||||
local docker_describe="Gopeed 分布式高速下载工具,支持多种协议"
|
||||
local docker_describe="分布式高速下载工具,支持多种协议"
|
||||
local docker_url="官网介绍: https://github.com/GopeedLab/gopeed"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
|
@ -11776,6 +11780,180 @@ while true; do
|
|||
;;
|
||||
|
||||
|
||||
97|wgs)
|
||||
|
||||
local app_id="97"
|
||||
local docker_name="wireguard"
|
||||
local docker_img="lscr.io/linuxserver/wireguard:latest"
|
||||
local docker_port=8097
|
||||
|
||||
docker_rum() {
|
||||
|
||||
read -p "请输入组网的客户端数量 (默认 5): " COUNT
|
||||
COUNT=${COUNT:-5}
|
||||
read -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK
|
||||
NETWORK=${NETWORK:-10.13.13.0}
|
||||
|
||||
PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,)
|
||||
|
||||
ip link delete wg0 &>/dev/null
|
||||
|
||||
ip_address
|
||||
docker run -d \
|
||||
--name=wireguard \
|
||||
--network host \
|
||||
--cap-add=NET_ADMIN \
|
||||
--cap-add=SYS_MODULE \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Etc/UTC \
|
||||
-e SERVERURL=${ipv4_address} \
|
||||
-e SERVERPORT=51820 \
|
||||
-e PEERS=${PEERS} \
|
||||
-e INTERNAL_SUBNET=${NETWORK} \
|
||||
-e ALLOWEDIPS=${NETWORK}/24 \
|
||||
-e PERSISTENTKEEPALIVE_PEERS=all \
|
||||
-e LOG_CONFS=true \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/wireguard:latest
|
||||
|
||||
|
||||
sleep 3
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
f='/config/wg_confs/wg0.conf'
|
||||
sed -i 's/51820/${docker_port}/g' \$f
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
for d in /config/peer_*; do
|
||||
sed -i 's/51820/${docker_port}/g' \$d/*.conf
|
||||
done
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
sed -i "/^DNS/d" "$d"/*.conf
|
||||
done
|
||||
'
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
for f in "$d"/*.conf; do
|
||||
grep -q "^PersistentKeepalive" "$f" || \
|
||||
sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f"
|
||||
done
|
||||
done
|
||||
'
|
||||
|
||||
docker exec -it wireguard bash -c '
|
||||
for d in /config/peer_*; do
|
||||
cd "$d" || continue
|
||||
conf_file=$(ls *.conf)
|
||||
base_name="${conf_file%.conf}"
|
||||
qrencode -o "$base_name.png" < "$conf_file"
|
||||
done
|
||||
'
|
||||
|
||||
docker restart wireguard
|
||||
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}所有客户端二维码配置: ${gl_bai}"
|
||||
docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done'
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}所有客户端配置代码: ${gl_bai}"
|
||||
docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done'
|
||||
sleep 2
|
||||
echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}"
|
||||
echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}"
|
||||
echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}"
|
||||
echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}"
|
||||
echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}"
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
98|wgc)
|
||||
|
||||
local app_id="98"
|
||||
local docker_name="wireguardc"
|
||||
local docker_img="kjlion/wireguard:alpine"
|
||||
local docker_port=51820
|
||||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/wireguard/config/
|
||||
|
||||
local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf"
|
||||
|
||||
# 创建目录(如果不存在)
|
||||
mkdir -p "$(dirname "$CONFIG_FILE")"
|
||||
|
||||
echo "请粘贴你的客户端配置,连续按两次回车保存:"
|
||||
|
||||
# 初始化变量
|
||||
input=""
|
||||
empty_line_count=0
|
||||
|
||||
# 逐行读取用户输入
|
||||
while IFS= read -r line; do
|
||||
if [[ -z "$line" ]]; then
|
||||
((empty_line_count++))
|
||||
if [[ $empty_line_count -ge 2 ]]; then
|
||||
break
|
||||
fi
|
||||
else
|
||||
empty_line_count=0
|
||||
input+="$line"$'\n'
|
||||
fi
|
||||
done
|
||||
|
||||
# 写入配置文件
|
||||
echo "$input" > "$CONFIG_FILE"
|
||||
|
||||
echo "客户端配置已保存到 $CONFIG_FILE"
|
||||
|
||||
docker run -d \
|
||||
--name wireguardc \
|
||||
--network host \
|
||||
--cap-add NET_ADMIN \
|
||||
--cap-add SYS_MODULE \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules:ro \
|
||||
--restart always \
|
||||
kjlion/wireguard:alpine
|
||||
|
||||
sleep 3
|
||||
|
||||
docker logs wireguardc
|
||||
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
|
||||
b)
|
||||
|
@ -14132,4 +14310,3 @@ else
|
|||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
|
413
en/kejilion.sh
413
en/kejilion.sh
|
@ -1,5 +1,5 @@
|
|||
#!/bin/bash
|
||||
sh_v="4.1.0"
|
||||
sh_v="4.1.2"
|
||||
|
||||
|
||||
gl_hui='\e[37m'
|
||||
|
@ -349,22 +349,22 @@ kejilion() {
|
|||
|
||||
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
install lsof
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
check_port() {
|
||||
install lsof
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
stop_containers_or_kill_process 80
|
||||
stop_containers_or_kill_process 443
|
||||
}
|
||||
|
@ -1558,7 +1558,7 @@ fi
|
|||
|
||||
add_yuming() {
|
||||
ip_address
|
||||
echo -e "First resolve the domain name to the local IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}"
|
||||
echo -e "First resolve the domain name to the native IP:${gl_huang}$ipv4_address $ipv6_address${gl_bai}"
|
||||
read -e -p "Please enter your IP or the resolved domain name:" yuming
|
||||
}
|
||||
|
||||
|
@ -1740,7 +1740,7 @@ nginx_waf() {
|
|||
wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf"
|
||||
fi
|
||||
|
||||
# Decide to turn on or off WAF according to the mode parameter
|
||||
# Decide to turn on or off WAF according to mode parameters
|
||||
if [ "$mode" == "on" ]; then
|
||||
# Turn on WAF: Remove comments
|
||||
sed -i 's|# load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|' /home/web/nginx.conf > /dev/null 2>&1
|
||||
|
@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
# Run Prometheus container
|
||||
|
@ -2958,7 +2958,7 @@ docker run -d \
|
|||
-v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \
|
||||
-v $PROMETHEUS_DIR/data:/prometheus \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--user 0:0 \
|
||||
prom/prometheus:latest
|
||||
|
||||
|
@ -2968,7 +2968,7 @@ docker run -d \
|
|||
-p ${docker_port}:3000 \
|
||||
-v $GRAFANA_DIR:/var/lib/grafana \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
grafana/grafana:latest
|
||||
|
||||
}
|
||||
|
@ -3037,7 +3037,7 @@ f2b_install_sshd() {
|
|||
-v /path/to/fail2ban/config:/config \
|
||||
-v /var/log:/var/log:ro \
|
||||
-v /home/web/log/nginx/:/remotelogs/nginx:ro \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/fail2ban:latest
|
||||
|
||||
sleep 3
|
||||
|
@ -5959,7 +5959,7 @@ ssh_manager() {
|
|||
while true; do
|
||||
clear
|
||||
echo "SSH Remote Connection Tool"
|
||||
echo "Can connect to other Linux systems via SSH"
|
||||
echo "Can be connected to other Linux systems via SSH"
|
||||
echo "------------------------"
|
||||
list_connections
|
||||
echo "1. Create a new connection 2. Use a connection 3. Delete a connection"
|
||||
|
@ -6869,7 +6869,7 @@ docker_ssh_migration() {
|
|||
|
||||
list_backups() {
|
||||
echo -e "${BLUE}Current backup list:${NC}"
|
||||
ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "No backup"
|
||||
ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "No backup"
|
||||
}
|
||||
|
||||
|
||||
|
@ -6878,7 +6878,10 @@ docker_ssh_migration() {
|
|||
# Backup
|
||||
# ----------------------------
|
||||
backup_docker() {
|
||||
send_stats "Docker backup"
|
||||
|
||||
echo -e "${YELLOW}Backing up Docker container...${NC}"
|
||||
docker ps --format '{{.Names}}'
|
||||
read -p "Please enter the name of the container to be backed up (separated by multiple spaces, and the Enter backup is all running containers):" containers
|
||||
|
||||
install tar jq gzip
|
||||
|
@ -6970,7 +6973,7 @@ docker_ssh_migration() {
|
|||
# Backup all files under /home/docker (excluding subdirectories)
|
||||
if [ -d "/home/docker" ]; then
|
||||
echo -e "${BLUE}Backup the files under /home/docker...${NC}"
|
||||
find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from -
|
||||
find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T -
|
||||
echo -e "${GREEN}The file under /home/docker has been packaged to:${BACKUP_DIR}/home_docker_files.tar.gz${NC}"
|
||||
fi
|
||||
|
||||
|
@ -6985,7 +6988,8 @@ docker_ssh_migration() {
|
|||
# reduction
|
||||
# ----------------------------
|
||||
restore_docker() {
|
||||
list_backups
|
||||
|
||||
send_stats "Docker restore"
|
||||
read -p "Please enter the backup directory to restore:" BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; }
|
||||
|
||||
|
@ -7103,8 +7107,8 @@ docker_ssh_migration() {
|
|||
# migrate
|
||||
# ----------------------------
|
||||
migrate_docker() {
|
||||
ensure_jq
|
||||
list_backups
|
||||
send_stats "Docker migration"
|
||||
install jq
|
||||
read -p "Please enter the backup directory to migrate:" BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; }
|
||||
|
||||
|
@ -7125,7 +7129,7 @@ docker_ssh_migration() {
|
|||
# Delete backup
|
||||
# ----------------------------
|
||||
delete_backup() {
|
||||
list_backups
|
||||
send_stats "Docker backup file deletion"
|
||||
read -p "Please enter the backup directory to delete:" BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}The backup directory does not exist${NC}"; return; }
|
||||
rm -rf "$BACKUP_DIR"
|
||||
|
@ -7136,6 +7140,7 @@ docker_ssh_migration() {
|
|||
# Main Menu
|
||||
# ----------------------------
|
||||
main_menu() {
|
||||
send_stats "Docker backup migration and restore"
|
||||
while true; do
|
||||
clear
|
||||
echo "------------------------"
|
||||
|
@ -7160,6 +7165,7 @@ docker_ssh_migration() {
|
|||
0) return ;;
|
||||
*) echo -e "${RED}Invalid option${NC}" ;;
|
||||
esac
|
||||
break_end
|
||||
done
|
||||
}
|
||||
|
||||
|
@ -8866,6 +8872,9 @@ while true; do
|
|||
echo -e "${gl_kjlan}89. ${color89}FileCodeBox file express${gl_kjlan}90. ${color90}matrix decentralized chat protocol"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
echo -e "${gl_kjlan}91. ${color91}gitea private code repository${gl_kjlan}92. ${color92}FileBrowser File Manager"
|
||||
echo -e "${gl_kjlan}93. ${color93}Dufs minimalist static file server${gl_kjlan}94. ${color94}Gopeed high-speed download tool"
|
||||
echo -e "${gl_kjlan}95. ${color95}paperless document management platform"
|
||||
echo -e "${gl_kjlan}97. ${color97}WireGuard networking (server side)${gl_kjlan}98. ${color98}WireGuard networking (client)"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
echo -e "${gl_kjlan}b. ${gl_bai}Back up all application data${gl_kjlan}r. ${gl_bai}Restore all application data"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
|
@ -8990,6 +8999,9 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/openlist
|
||||
chmod -R 777 /home/docker/openlist
|
||||
|
||||
docker run -d \
|
||||
--restart=always \
|
||||
-v /home/docker/openlist:/opt/openlist/data \
|
||||
|
@ -9037,7 +9049,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:ubuntu-kde
|
||||
|
||||
|
||||
|
@ -9119,7 +9131,7 @@ while true; do
|
|||
-p 56881:56881/udp \
|
||||
-v /home/docker/qbittorrent/config:/config \
|
||||
-v /home/docker/qbittorrent/downloads:/downloads \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/qbittorrent:latest
|
||||
|
||||
}
|
||||
|
@ -9354,7 +9366,7 @@ while true; do
|
|||
-p ${docker_port}:5700 \
|
||||
--name qinglong \
|
||||
--hostname qinglong \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
whyour/qinglong:latest
|
||||
|
||||
|
||||
|
@ -9420,7 +9432,7 @@ while true; do
|
|||
-e PGID=1000 \
|
||||
-v /home/docker/easyimage/config:/app/web/config \
|
||||
-v /home/docker/easyimage/i:/app/web/i \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
ddsderek/easyimage:latest
|
||||
|
||||
}
|
||||
|
@ -9737,7 +9749,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:latest
|
||||
|
||||
}
|
||||
|
@ -9800,7 +9812,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --name dockge --restart unless-stopped -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
docker run -d --name dockge --restart=always -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
|
||||
}
|
||||
|
||||
|
@ -9842,7 +9854,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name searxng \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v "/home/docker/searxng:/etc/searxng" \
|
||||
searxng/searxng
|
||||
|
@ -9996,7 +10008,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --restart unless-stopped \
|
||||
docker run -d --restart=always \
|
||||
-p ${docker_port}:3000 \
|
||||
-v /home/docker/moments/data:/app/data \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
|
@ -10150,7 +10162,7 @@ while true; do
|
|||
-e ENCRYPTION_KEY=${ENCRYPTION_KEY} \
|
||||
-p ${docker_port}:6989 \
|
||||
-v /home/docker/nexterm:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
germannewsmaker/nexterm:latest
|
||||
|
||||
}
|
||||
|
@ -10171,7 +10183,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs
|
||||
|
||||
}
|
||||
|
||||
|
@ -10192,7 +10204,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr
|
||||
|
||||
}
|
||||
|
||||
|
@ -10301,7 +10313,7 @@ while true; do
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
-p ${docker_port}:9100 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
|
||||
|
@ -10325,7 +10337,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name=cadvisor \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
--volume=/:/rootfs:ro \
|
||||
--volume=/var/run:/var/run:rw \
|
||||
|
@ -10696,7 +10708,7 @@ while true; do
|
|||
local docker_port=8064
|
||||
|
||||
docker_rum() {
|
||||
docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
}
|
||||
|
||||
local docker_describe="对开发人员和 IT 工作者来说非常有用的工具"
|
||||
|
@ -10840,7 +10852,7 @@ while true; do
|
|||
-p 6199:6199 \
|
||||
-p 11451:11451 \
|
||||
-v /home/docker/astrbot/data:/AstrBot/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--name astrbot \
|
||||
soulter/astrbot:latest
|
||||
|
||||
|
@ -10865,7 +10877,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name navidrome \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
--user $(id -u):$(id -g) \
|
||||
-v /home/docker/navidrome/music:/music \
|
||||
-v /home/docker/navidrome/data:/data \
|
||||
|
@ -10927,7 +10939,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name libretv \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-e PASSWORD=${app_passwd} \
|
||||
bestzwei/libretv:latest
|
||||
|
@ -10969,9 +10981,9 @@ while true; do
|
|||
|
||||
curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml
|
||||
sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml
|
||||
cd /home/docker/moontv/
|
||||
docker compose up -d
|
||||
clear
|
||||
|
@ -11008,7 +11020,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name melody \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:5566 \
|
||||
-v /home/docker/melody/.profile:/app/backend/.profile \
|
||||
foamzou/melody:latest
|
||||
|
@ -11037,7 +11049,7 @@ while true; do
|
|||
docker_rum() {
|
||||
docker run -d \
|
||||
--name dosgame \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:262 \
|
||||
oldiy/dosgame-web-docker:latest
|
||||
|
||||
|
@ -11067,7 +11079,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name xunlei \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--privileged \
|
||||
-e XL_DASHBOARD_USERNAME=${app_use} \
|
||||
-e XL_DASHBOARD_PASSWORD=${app_passwd} \
|
||||
|
@ -11129,7 +11141,7 @@ while true; do
|
|||
mkdir -p /home/docker/beszel && \
|
||||
docker run -d \
|
||||
--name beszel \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
-v /home/docker/beszel:/beszel_data \
|
||||
-p ${docker_port}:8090 \
|
||||
henrygd/beszel
|
||||
|
@ -11347,7 +11359,7 @@ while true; do
|
|||
-v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \
|
||||
-e TZ=UTC \
|
||||
-p ${docker_port}:80 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
bellamy/wallos:latest
|
||||
|
||||
}
|
||||
|
@ -11424,7 +11436,7 @@ while true; do
|
|||
--mount type=bind,source=/home/docker/jellyfin/media,target=/media \
|
||||
-p ${docker_port}:8096 \
|
||||
-p 7359:7359/udp \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
jellyfin/jellyfin
|
||||
|
||||
|
||||
|
@ -11512,7 +11524,7 @@ while true; do
|
|||
--name file-code-box \
|
||||
-p ${docker_port}:12345 \
|
||||
-v /home/docker/file-code-box/data:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lanol/filecodebox:latest
|
||||
|
||||
}
|
||||
|
@ -11553,7 +11565,7 @@ while true; do
|
|||
--name matrix \
|
||||
-v /home/docker/matrix/data:/data \
|
||||
-p ${docker_port}:8008 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
matrixdotorg/synapse:latest
|
||||
|
||||
echo "Create an initial user or administrator. Please set the following username and password and whether you are an administrator."
|
||||
|
@ -11643,7 +11655,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name filebrowser \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v /home/docker/filebrowser/data:/data \
|
||||
-v /home/docker/filebrowser/config:/config \
|
||||
|
@ -11661,6 +11673,288 @@ while true; do
|
|||
|
||||
;;
|
||||
|
||||
93|dufs)
|
||||
|
||||
local app_id="93"
|
||||
local docker_name="dufs"
|
||||
local docker_img="sigoden/dufs"
|
||||
local docker_port=8093
|
||||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}:/data \
|
||||
-p ${docker_port}:5000 \
|
||||
${docker_img} /data -A
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="极简静态文件服务器,支持上传下载"
|
||||
local docker_url="官网介绍: https://github.com/sigoden/dufs"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
94|gopeed)
|
||||
|
||||
local app_id="94"
|
||||
local docker_name="gopeed"
|
||||
local docker_img="liwei2633/gopeed"
|
||||
local docker_port=8094
|
||||
|
||||
docker_rum() {
|
||||
|
||||
read -e -p "Set login username:" app_use
|
||||
read -e -p "Set login password:" app_passwd
|
||||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}/downloads:/app/Downloads \
|
||||
-v /home/docker/${docker_name}/storage:/app/storage \
|
||||
-p ${docker_port}:9999 \
|
||||
${docker_img} -u ${app_use} -p ${app_passwd}
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="分布式高速下载工具,支持多种协议"
|
||||
local docker_url="官网介绍: https://github.com/GopeedLab/gopeed"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
|
||||
95|paperless)
|
||||
|
||||
local app_id="95"
|
||||
|
||||
local app_name="paperless文档管理平台"
|
||||
local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。"
|
||||
local app_url="视频介绍: https://docs.paperless-ngx.com/"
|
||||
local docker_name="paperless-webserver-1"
|
||||
local docker_port="8095"
|
||||
local app_size="2"
|
||||
|
||||
docker_app_install() {
|
||||
|
||||
mkdir -p /home/docker/paperless
|
||||
mkdir -p /home/docker/paperless/export
|
||||
mkdir -p /home/docker/paperless/consume
|
||||
cd /home/docker/paperless
|
||||
|
||||
curl -o /home/docker/paperless/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/docker-compose.postgres-tika.yml
|
||||
curl -o /home/docker/paperless/docker-compose.env ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/.env
|
||||
|
||||
sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/paperless/docker-compose.yml
|
||||
cd /home/docker/paperless
|
||||
docker compose up -d
|
||||
clear
|
||||
echo "Installed"
|
||||
check_docker_app_ip
|
||||
}
|
||||
|
||||
|
||||
docker_app_update() {
|
||||
cd /home/docker/paperless/ && docker compose down --rmi all
|
||||
docker_app_install
|
||||
}
|
||||
|
||||
|
||||
docker_app_uninstall() {
|
||||
cd /home/docker/paperless/ && docker compose down --rmi all
|
||||
rm -rf /home/docker/paperless
|
||||
echo "The app has been uninstalled"
|
||||
}
|
||||
|
||||
docker_app_plus
|
||||
|
||||
;;
|
||||
|
||||
|
||||
97|wgs)
|
||||
|
||||
local app_id="97"
|
||||
local docker_name="wireguard"
|
||||
local docker_img="lscr.io/linuxserver/wireguard:latest"
|
||||
local docker_port=8097
|
||||
|
||||
docker_rum() {
|
||||
|
||||
read -p "Please enter the number of clients to form the network (default 5):" COUNT
|
||||
COUNT=${COUNT:-5}
|
||||
read -p "Please enter the WireGuard segment (default 10.13.13.0):" NETWORK
|
||||
NETWORK=${NETWORK:-10.13.13.0}
|
||||
|
||||
PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,)
|
||||
|
||||
ip link delete wg0 &>/dev/null
|
||||
|
||||
ip_address
|
||||
docker run -d \
|
||||
--name=wireguard \
|
||||
--network host \
|
||||
--cap-add=NET_ADMIN \
|
||||
--cap-add=SYS_MODULE \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Etc/UTC \
|
||||
-e SERVERURL=${ipv4_address} \
|
||||
-e SERVERPORT=51820 \
|
||||
-e PEERS=${PEERS} \
|
||||
-e INTERNAL_SUBNET=${NETWORK} \
|
||||
-e ALLOWEDIPS=${NETWORK}/24 \
|
||||
-e PERSISTENTKEEPALIVE_PEERS=all \
|
||||
-e LOG_CONFS=true \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/wireguard:latest
|
||||
|
||||
|
||||
sleep 3
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
f='/config/wg_confs/wg0.conf'
|
||||
sed -i 's/51820/${docker_port}/g' \$f
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
for d in /config/peer_*; do
|
||||
sed -i 's/51820/${docker_port}/g' \$d/*.conf
|
||||
done
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
sed -i "/^DNS/d" "$d"/*.conf
|
||||
done
|
||||
'
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
for f in "$d"/*.conf; do
|
||||
grep -q "^PersistentKeepalive" "$f" || \
|
||||
sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f"
|
||||
done
|
||||
done
|
||||
'
|
||||
|
||||
docker exec -it wireguard bash -c '
|
||||
for d in /config/peer_*; do
|
||||
cd "$d" || continue
|
||||
conf_file=$(ls *.conf)
|
||||
base_name="${conf_file%.conf}"
|
||||
qrencode -o "$base_name.png" < "$conf_file"
|
||||
done
|
||||
'
|
||||
|
||||
docker restart wireguard
|
||||
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}All client QR code configuration:${gl_bai}"
|
||||
docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done'
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}All client configuration codes:${gl_bai}"
|
||||
docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done'
|
||||
sleep 2
|
||||
echo -e "${gl_lv}${COUNT}All outputs are provided by each client. The usage method is as follows:${gl_bai}"
|
||||
echo -e "${gl_lv}1. Download wg's APP on your mobile phone, scan the QR code above to quickly connect to the network${gl_bai}"
|
||||
echo -e "${gl_lv}2. Download the Windows client and copy the configuration code to connect to the network.${gl_bai}"
|
||||
echo -e "${gl_lv}3. Linux uses scripts to deploy WG clients and copy configuration code to connect to the network.${gl_bai}"
|
||||
echo -e "${gl_lv}Official client download method: https://www.wireguard.com/install/${gl_bai}"
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
98|wgc)
|
||||
|
||||
local app_id="98"
|
||||
local docker_name="wireguardc"
|
||||
local docker_img="kjlion/wireguard:alpine"
|
||||
local docker_port=51820
|
||||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/wireguard/config/
|
||||
|
||||
local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf"
|
||||
|
||||
# Create a directory (if it does not exist)
|
||||
mkdir -p "$(dirname "$CONFIG_FILE")"
|
||||
|
||||
echo "Please paste your client configuration and press Enter twice in a row to save:"
|
||||
|
||||
# Initialize variables
|
||||
input=""
|
||||
empty_line_count=0
|
||||
|
||||
# Read user input line by line
|
||||
while IFS= read -r line; do
|
||||
if [[ -z "$line" ]]; then
|
||||
((empty_line_count++))
|
||||
if [[ $empty_line_count -ge 2 ]]; then
|
||||
break
|
||||
fi
|
||||
else
|
||||
empty_line_count=0
|
||||
input+="$line"$'\n'
|
||||
fi
|
||||
done
|
||||
|
||||
# Write to the configuration file
|
||||
echo "$input" > "$CONFIG_FILE"
|
||||
|
||||
echo "Client configuration has been saved to$CONFIG_FILE"
|
||||
|
||||
docker run -d \
|
||||
--name wireguardc \
|
||||
--network host \
|
||||
--cap-add NET_ADMIN \
|
||||
--cap-add SYS_MODULE \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules:ro \
|
||||
--restart always \
|
||||
kjlion/wireguard:alpine
|
||||
|
||||
sleep 3
|
||||
|
||||
docker logs wireguardc
|
||||
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
|
||||
b)
|
||||
clear
|
||||
|
@ -13090,7 +13384,7 @@ EOF
|
|||
|
||||
echo "Privacy and Security"
|
||||
echo "The script will collect data on user functions, optimize the script experience, and create more fun and useful functions."
|
||||
echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the functions used,"
|
||||
echo "Will collect the script version number, usage time, system version, CPU architecture, country of the machine and the name of the function used,"
|
||||
echo "------------------------------------------------"
|
||||
echo -e "Current status:$status_message"
|
||||
echo "--------------------"
|
||||
|
@ -14016,4 +14310,3 @@ else
|
|||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
|
449
jp/kejilion.sh
449
jp/kejilion.sh
|
@ -1,5 +1,5 @@
|
|||
#!/bin/bash
|
||||
sh_v="4.1.0"
|
||||
sh_v="4.1.2"
|
||||
|
||||
|
||||
gl_hui='\e[37m'
|
||||
|
@ -349,22 +349,22 @@ kejilion() {
|
|||
|
||||
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
install lsof
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
check_port() {
|
||||
install lsof
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
stop_containers_or_kill_process 80
|
||||
stop_containers_or_kill_process 443
|
||||
}
|
||||
|
@ -793,7 +793,7 @@ docker_ipv6_on() {
|
|||
UPDATED_CONFIG=$(echo "$ORIGINAL_CONFIG" | jq '. + {"fixed-cidr-v6": "2001:db8:1::/64"}')
|
||||
fi
|
||||
|
||||
# 元の構成と新しい構成を比較します
|
||||
# 元の構成を新しい構成と比較します
|
||||
if [[ "$ORIGINAL_CONFIG" == "$UPDATED_CONFIG" ]]; then
|
||||
echo -e "${gl_huang}現在、IPv6アクセスが有効になっています${gl_bai}"
|
||||
else
|
||||
|
@ -825,7 +825,7 @@ docker_ipv6_off() {
|
|||
# 現在のIPv6ステータスを確認してください
|
||||
local CURRENT_IPV6=$(echo "$ORIGINAL_CONFIG" | jq -r '.ipv6 // false')
|
||||
|
||||
# 元の構成と新しい構成を比較します
|
||||
# 元の構成を新しい構成と比較します
|
||||
if [[ "$CURRENT_IPV6" == "false" ]]; then
|
||||
echo -e "${gl_huang}IPv6アクセスは現在閉じられています${gl_bai}"
|
||||
else
|
||||
|
@ -1558,7 +1558,7 @@ fi
|
|||
|
||||
add_yuming() {
|
||||
ip_address
|
||||
echo -e "最初にドメイン名をローカルIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}"
|
||||
echo -e "最初にドメイン名をネイティブIPに解決します。${gl_huang}$ipv4_address $ipv6_address${gl_bai}"
|
||||
read -e -p "IPまたは解決されたドメイン名を入力してください:" yuming
|
||||
}
|
||||
|
||||
|
@ -1740,7 +1740,7 @@ nginx_waf() {
|
|||
wget -O /home/web/nginx.conf "${gh_proxy}raw.githubusercontent.com/kejilion/nginx/main/nginx10.conf"
|
||||
fi
|
||||
|
||||
# モードパラメーターに従ってWAFをオンまたはオフにすることにしました
|
||||
# モードパラメーターに従ってWAFをオンまたはオフにすることを決定します
|
||||
if [ "$mode" == "on" ]; then
|
||||
# WAFをオンにしてください:コメントを削除します
|
||||
sed -i 's|# load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|load_module /etc/nginx/modules/ngx_http_modsecurity_module.so;|' /home/web/nginx.conf > /dev/null 2>&1
|
||||
|
@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
# Run Prometheus container
|
||||
|
@ -2958,7 +2958,7 @@ docker run -d \
|
|||
-v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \
|
||||
-v $PROMETHEUS_DIR/data:/prometheus \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--user 0:0 \
|
||||
prom/prometheus:latest
|
||||
|
||||
|
@ -2968,7 +2968,7 @@ docker run -d \
|
|||
-p ${docker_port}:3000 \
|
||||
-v $GRAFANA_DIR:/var/lib/grafana \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
grafana/grafana:latest
|
||||
|
||||
}
|
||||
|
@ -3037,7 +3037,7 @@ f2b_install_sshd() {
|
|||
-v /path/to/fail2ban/config:/config \
|
||||
-v /var/log:/var/log:ro \
|
||||
-v /home/web/log/nginx/:/remotelogs/nginx:ro \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/fail2ban:latest
|
||||
|
||||
sleep 3
|
||||
|
@ -3892,7 +3892,7 @@ frps_panel() {
|
|||
echo "------------------------"
|
||||
echo "7. IP+ポートアクセスを許可8。BlockIP+ポートアクセス"
|
||||
echo "------------------------"
|
||||
echo "00。サービスのステータスを更新します0。前のメニューに戻ります"
|
||||
echo "00。サービスのステータスを更新します。前のメニューに戻ります"
|
||||
echo "------------------------"
|
||||
read -e -p "あなたの選択を入力してください:" choice
|
||||
case $choice in
|
||||
|
@ -4147,7 +4147,7 @@ yt_menu_pro() {
|
|||
--no-overwrites --no-post-overwrites
|
||||
read -e -p "実行が完了したら、キーを押して続行します..." ;;
|
||||
8)
|
||||
send_stats "MP3ダウンロード"
|
||||
send_stats "mp3ダウンロード"
|
||||
read -e -p "ビデオリンクを入力してください:" url
|
||||
yt-dlp -P "$VIDEO_DIR" -x --audio-format mp3 \
|
||||
--write-subs --sub-langs all \
|
||||
|
@ -4521,7 +4521,7 @@ echo -e "${gl_lv}ルートログインがセットアップされます!${gl_b
|
|||
|
||||
root_use() {
|
||||
clear
|
||||
[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能には、ルートユーザーを実行する必要があります!" && break_end && kejilion
|
||||
[ "$EUID" -ne 0 ] && echo -e "${gl_huang}ヒント:${gl_bai}この機能では、ルートユーザーを実行する必要があります!" && break_end && kejilion
|
||||
}
|
||||
|
||||
|
||||
|
@ -5278,7 +5278,7 @@ optimize_balanced() {
|
|||
|
||||
# デフォルト設定関数を復元します
|
||||
restore_defaults() {
|
||||
echo -e "${gl_lv}デフォルト設定に復元します...${gl_bai}"
|
||||
echo -e "${gl_lv}デフォルト設定に復元...${gl_bai}"
|
||||
|
||||
echo -e "${gl_lv}ファイル記述子を復元します...${gl_bai}"
|
||||
ulimit -n 1024
|
||||
|
@ -6418,7 +6418,7 @@ rsync_manager() {
|
|||
echo
|
||||
echo "1.新しいタスクを作成します2。タスクを削除します"
|
||||
echo "3.リモートエンドにローカル同期を実行する4。ローカルエンドにリモート同期を実行する"
|
||||
echo "5.タイミングタスクを作成6。タイミングタスクを削除します"
|
||||
echo "5.タイミングタスクを作成6.タイミングタスクを削除します"
|
||||
echo "---------------------------------"
|
||||
echo "0。前のメニューに戻ります"
|
||||
echo "---------------------------------"
|
||||
|
@ -6869,7 +6869,7 @@ docker_ssh_migration() {
|
|||
|
||||
list_backups() {
|
||||
echo -e "${BLUE}現在のバックアップリスト:${NC}"
|
||||
ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "バックアップなし"
|
||||
ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "バックアップなし"
|
||||
}
|
||||
|
||||
|
||||
|
@ -6878,7 +6878,10 @@ docker_ssh_migration() {
|
|||
# バックアップ
|
||||
# ----------------------------
|
||||
backup_docker() {
|
||||
send_stats "Dockerバックアップ"
|
||||
|
||||
echo -e "${YELLOW}Dockerコンテナのバックアップ...${NC}"
|
||||
docker ps --format '{{.Names}}'
|
||||
read -p "バックアップするコンテナの名前を入力してください(複数のスペースで区切られていて、Enterバックアップはすべて実行中のコンテナです):" containers
|
||||
|
||||
install tar jq gzip
|
||||
|
@ -6970,7 +6973,7 @@ docker_ssh_migration() {
|
|||
# /home /dockerのすべてのファイルをバックアップします(サブディレクトリを除く)
|
||||
if [ -d "/home/docker" ]; then
|
||||
echo -e "${BLUE}/home /dockerの下のファイルをバックアップ...${NC}"
|
||||
find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from -
|
||||
find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T -
|
||||
echo -e "${GREEN}/home /dockerの下のファイルは次のようにパッケージ化されています。${BACKUP_DIR}/home_docker_files.tar.gz${NC}"
|
||||
fi
|
||||
|
||||
|
@ -6985,7 +6988,8 @@ docker_ssh_migration() {
|
|||
# 削減
|
||||
# ----------------------------
|
||||
restore_docker() {
|
||||
list_backups
|
||||
|
||||
send_stats "Dockerの復元"
|
||||
read -p "復元するには、バックアップディレクトリを入力してください。" BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; }
|
||||
|
||||
|
@ -7103,8 +7107,8 @@ docker_ssh_migration() {
|
|||
# 移動します
|
||||
# ----------------------------
|
||||
migrate_docker() {
|
||||
ensure_jq
|
||||
list_backups
|
||||
send_stats "Dockerの移行"
|
||||
install jq
|
||||
read -p "移行するには、バックアップディレクトリを入力してください。" BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; }
|
||||
|
||||
|
@ -7125,7 +7129,7 @@ docker_ssh_migration() {
|
|||
# バックアップを削除します
|
||||
# ----------------------------
|
||||
delete_backup() {
|
||||
list_backups
|
||||
send_stats "Dockerバックアップファイルの削除"
|
||||
read -p "削除するには、バックアップディレクトリを入力してください。" BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}バックアップディレクトリは存在しません${NC}"; return; }
|
||||
rm -rf "$BACKUP_DIR"
|
||||
|
@ -7136,6 +7140,7 @@ docker_ssh_migration() {
|
|||
# メインメニュー
|
||||
# ----------------------------
|
||||
main_menu() {
|
||||
send_stats "Dockerバックアップの移行と復元"
|
||||
while true; do
|
||||
clear
|
||||
echo "------------------------"
|
||||
|
@ -7160,6 +7165,7 @@ docker_ssh_migration() {
|
|||
0) return ;;
|
||||
*) echo -e "${RED}無効なオプション${NC}" ;;
|
||||
esac
|
||||
break_end
|
||||
done
|
||||
}
|
||||
|
||||
|
@ -7898,7 +7904,7 @@ linux_ldnmp() {
|
|||
|
||||
|
||||
ldnmp_web_on
|
||||
echo "データベースアドレス:mysql"
|
||||
echo "データベースアドレス:MySQL"
|
||||
echo "データベース名:$dbname"
|
||||
echo "ユーザー名:$dbuse"
|
||||
echo "パスワード:$dbusepasswd"
|
||||
|
@ -7934,7 +7940,7 @@ linux_ldnmp() {
|
|||
restart_ldnmp
|
||||
|
||||
ldnmp_web_on
|
||||
echo "データベースアドレス:mysql"
|
||||
echo "データベースアドレス:MySQL"
|
||||
echo "ユーザー名:$dbuse"
|
||||
echo "パスワード:$dbusepasswd"
|
||||
echo "データベース名:$dbname"
|
||||
|
@ -7973,7 +7979,7 @@ linux_ldnmp() {
|
|||
|
||||
|
||||
ldnmp_web_on
|
||||
echo "データベースアドレス:mysql"
|
||||
echo "データベースアドレス:MySQL"
|
||||
echo "データベースポート:3306"
|
||||
echo "データベース名:$dbname"
|
||||
echo "ユーザー名:$dbuse"
|
||||
|
@ -8011,7 +8017,7 @@ linux_ldnmp() {
|
|||
|
||||
|
||||
ldnmp_web_on
|
||||
echo "データベースアドレス:mysql"
|
||||
echo "データベースアドレス:MySQL"
|
||||
echo "データベースポート:3306"
|
||||
echo "データベース名:$dbname"
|
||||
echo "ユーザー名:$dbuse"
|
||||
|
@ -8075,7 +8081,7 @@ linux_ldnmp() {
|
|||
|
||||
|
||||
ldnmp_web_on
|
||||
echo "データベースアドレス:mysql"
|
||||
echo "データベースアドレス:MySQL"
|
||||
echo "データベース名:$dbname"
|
||||
echo "ユーザー名:$dbuse"
|
||||
echo "パスワード:$dbusepasswd"
|
||||
|
@ -8114,7 +8120,7 @@ linux_ldnmp() {
|
|||
clear
|
||||
ldnmp_web_on
|
||||
echo "データベースプレフィックス:typecho_"
|
||||
echo "データベースアドレス:mysql"
|
||||
echo "データベースアドレス:MySQL"
|
||||
echo "ユーザー名:$dbuse"
|
||||
echo "パスワード:$dbusepasswd"
|
||||
echo "データベース名:$dbname"
|
||||
|
@ -8152,7 +8158,7 @@ linux_ldnmp() {
|
|||
|
||||
clear
|
||||
ldnmp_web_on
|
||||
echo "データベースアドレス:mysql"
|
||||
echo "データベースアドレス:MySQL"
|
||||
echo "データベースポート:3306"
|
||||
echo "データベース名:$dbname"
|
||||
echo "ユーザー名:$dbuse"
|
||||
|
@ -8278,7 +8284,7 @@ linux_ldnmp() {
|
|||
restart_ldnmp
|
||||
ldnmp_web_on
|
||||
prefix="web$(shuf -i 10-99 -n 1)_"
|
||||
echo "データベースアドレス:mysql"
|
||||
echo "データベースアドレス:MySQL"
|
||||
echo "データベース名:$dbname"
|
||||
echo "ユーザー名:$dbuse"
|
||||
echo "パスワード:$dbusepasswd"
|
||||
|
@ -8866,6 +8872,9 @@ while true; do
|
|||
echo -e "${gl_kjlan}89. ${color89}FileCodeBoxファイルエクスプレス${gl_kjlan}90. ${color90}マトリックス分散型チャットプロトコル"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
echo -e "${gl_kjlan}91. ${color91}Giteaプライベートコードリポジトリ${gl_kjlan}92. ${color92}FileBrowserファイルマネージャー"
|
||||
echo -e "${gl_kjlan}93. ${color93}DUFS Minimalist Static File Server${gl_kjlan}94. ${color94}ゴープ高速ダウンロードツール"
|
||||
echo -e "${gl_kjlan}95. ${color95}ペーパーレスドキュメント管理プラットフォーム"
|
||||
echo -e "${gl_kjlan}97. ${color97}ワイヤガードネットワーキング(サーバー側)${gl_kjlan}98. ${color98}ワイヤガードネットワーキング(クライアント)"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
echo -e "${gl_kjlan}b. ${gl_bai}すべてのアプリケーションデータをバックアップします${gl_kjlan}r. ${gl_bai}すべてのアプリケーションデータを復元します"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
|
@ -8990,6 +8999,9 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/openlist
|
||||
chmod -R 777 /home/docker/openlist
|
||||
|
||||
docker run -d \
|
||||
--restart=always \
|
||||
-v /home/docker/openlist:/opt/openlist/data \
|
||||
|
@ -9037,7 +9049,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:ubuntu-kde
|
||||
|
||||
|
||||
|
@ -9119,7 +9131,7 @@ while true; do
|
|||
-p 56881:56881/udp \
|
||||
-v /home/docker/qbittorrent/config:/config \
|
||||
-v /home/docker/qbittorrent/downloads:/downloads \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/qbittorrent:latest
|
||||
|
||||
}
|
||||
|
@ -9354,7 +9366,7 @@ while true; do
|
|||
-p ${docker_port}:5700 \
|
||||
--name qinglong \
|
||||
--hostname qinglong \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
whyour/qinglong:latest
|
||||
|
||||
|
||||
|
@ -9420,7 +9432,7 @@ while true; do
|
|||
-e PGID=1000 \
|
||||
-v /home/docker/easyimage/config:/app/web/config \
|
||||
-v /home/docker/easyimage/i:/app/web/i \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
ddsderek/easyimage:latest
|
||||
|
||||
}
|
||||
|
@ -9737,7 +9749,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:latest
|
||||
|
||||
}
|
||||
|
@ -9800,7 +9812,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --name dockge --restart unless-stopped -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
docker run -d --name dockge --restart=always -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
|
||||
}
|
||||
|
||||
|
@ -9842,7 +9854,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name searxng \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v "/home/docker/searxng:/etc/searxng" \
|
||||
searxng/searxng
|
||||
|
@ -9996,7 +10008,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --restart unless-stopped \
|
||||
docker run -d --restart=always \
|
||||
-p ${docker_port}:3000 \
|
||||
-v /home/docker/moments/data:/app/data \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
|
@ -10150,7 +10162,7 @@ while true; do
|
|||
-e ENCRYPTION_KEY=${ENCRYPTION_KEY} \
|
||||
-p ${docker_port}:6989 \
|
||||
-v /home/docker/nexterm:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
germannewsmaker/nexterm:latest
|
||||
|
||||
}
|
||||
|
@ -10171,7 +10183,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs
|
||||
|
||||
}
|
||||
|
||||
|
@ -10192,7 +10204,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr
|
||||
|
||||
}
|
||||
|
||||
|
@ -10301,7 +10313,7 @@ while true; do
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
-p ${docker_port}:9100 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
|
||||
|
@ -10325,7 +10337,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name=cadvisor \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
--volume=/:/rootfs:ro \
|
||||
--volume=/var/run:/var/run:rw \
|
||||
|
@ -10696,7 +10708,7 @@ while true; do
|
|||
local docker_port=8064
|
||||
|
||||
docker_rum() {
|
||||
docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
}
|
||||
|
||||
local docker_describe="对开发人员和 IT 工作者来说非常有用的工具"
|
||||
|
@ -10840,7 +10852,7 @@ while true; do
|
|||
-p 6199:6199 \
|
||||
-p 11451:11451 \
|
||||
-v /home/docker/astrbot/data:/AstrBot/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--name astrbot \
|
||||
soulter/astrbot:latest
|
||||
|
||||
|
@ -10865,7 +10877,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name navidrome \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
--user $(id -u):$(id -g) \
|
||||
-v /home/docker/navidrome/music:/music \
|
||||
-v /home/docker/navidrome/data:/data \
|
||||
|
@ -10927,7 +10939,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name libretv \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-e PASSWORD=${app_passwd} \
|
||||
bestzwei/libretv:latest
|
||||
|
@ -10969,9 +10981,9 @@ while true; do
|
|||
|
||||
curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml
|
||||
sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml
|
||||
cd /home/docker/moontv/
|
||||
docker compose up -d
|
||||
clear
|
||||
|
@ -11008,7 +11020,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name melody \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:5566 \
|
||||
-v /home/docker/melody/.profile:/app/backend/.profile \
|
||||
foamzou/melody:latest
|
||||
|
@ -11037,7 +11049,7 @@ while true; do
|
|||
docker_rum() {
|
||||
docker run -d \
|
||||
--name dosgame \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:262 \
|
||||
oldiy/dosgame-web-docker:latest
|
||||
|
||||
|
@ -11067,7 +11079,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name xunlei \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--privileged \
|
||||
-e XL_DASHBOARD_USERNAME=${app_use} \
|
||||
-e XL_DASHBOARD_PASSWORD=${app_passwd} \
|
||||
|
@ -11129,7 +11141,7 @@ while true; do
|
|||
mkdir -p /home/docker/beszel && \
|
||||
docker run -d \
|
||||
--name beszel \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
-v /home/docker/beszel:/beszel_data \
|
||||
-p ${docker_port}:8090 \
|
||||
henrygd/beszel
|
||||
|
@ -11347,7 +11359,7 @@ while true; do
|
|||
-v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \
|
||||
-e TZ=UTC \
|
||||
-p ${docker_port}:80 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
bellamy/wallos:latest
|
||||
|
||||
}
|
||||
|
@ -11424,7 +11436,7 @@ while true; do
|
|||
--mount type=bind,source=/home/docker/jellyfin/media,target=/media \
|
||||
-p ${docker_port}:8096 \
|
||||
-p 7359:7359/udp \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
jellyfin/jellyfin
|
||||
|
||||
|
||||
|
@ -11512,7 +11524,7 @@ while true; do
|
|||
--name file-code-box \
|
||||
-p ${docker_port}:12345 \
|
||||
-v /home/docker/file-code-box/data:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lanol/filecodebox:latest
|
||||
|
||||
}
|
||||
|
@ -11553,7 +11565,7 @@ while true; do
|
|||
--name matrix \
|
||||
-v /home/docker/matrix/data:/data \
|
||||
-p ${docker_port}:8008 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
matrixdotorg/synapse:latest
|
||||
|
||||
echo "初期ユーザーまたは管理者を作成します。次のユーザー名とパスワード、およびあなたが管理者であるかどうかを設定してください。"
|
||||
|
@ -11643,7 +11655,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name filebrowser \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v /home/docker/filebrowser/data:/data \
|
||||
-v /home/docker/filebrowser/config:/config \
|
||||
|
@ -11661,6 +11673,288 @@ while true; do
|
|||
|
||||
;;
|
||||
|
||||
93|dufs)
|
||||
|
||||
local app_id="93"
|
||||
local docker_name="dufs"
|
||||
local docker_img="sigoden/dufs"
|
||||
local docker_port=8093
|
||||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}:/data \
|
||||
-p ${docker_port}:5000 \
|
||||
${docker_img} /data -A
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="极简静态文件服务器,支持上传下载"
|
||||
local docker_url="官网介绍: https://github.com/sigoden/dufs"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
94|gopeed)
|
||||
|
||||
local app_id="94"
|
||||
local docker_name="gopeed"
|
||||
local docker_img="liwei2633/gopeed"
|
||||
local docker_port=8094
|
||||
|
||||
docker_rum() {
|
||||
|
||||
read -e -p "ログインユーザー名を設定します:" app_use
|
||||
read -e -p "ログインパスワードの設定:" app_passwd
|
||||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}/downloads:/app/Downloads \
|
||||
-v /home/docker/${docker_name}/storage:/app/storage \
|
||||
-p ${docker_port}:9999 \
|
||||
${docker_img} -u ${app_use} -p ${app_passwd}
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="分布式高速下载工具,支持多种协议"
|
||||
local docker_url="官网介绍: https://github.com/GopeedLab/gopeed"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
|
||||
95|paperless)
|
||||
|
||||
local app_id="95"
|
||||
|
||||
local app_name="paperless文档管理平台"
|
||||
local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。"
|
||||
local app_url="视频介绍: https://docs.paperless-ngx.com/"
|
||||
local docker_name="paperless-webserver-1"
|
||||
local docker_port="8095"
|
||||
local app_size="2"
|
||||
|
||||
docker_app_install() {
|
||||
|
||||
mkdir -p /home/docker/paperless
|
||||
mkdir -p /home/docker/paperless/export
|
||||
mkdir -p /home/docker/paperless/consume
|
||||
cd /home/docker/paperless
|
||||
|
||||
curl -o /home/docker/paperless/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/docker-compose.postgres-tika.yml
|
||||
curl -o /home/docker/paperless/docker-compose.env ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/.env
|
||||
|
||||
sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/paperless/docker-compose.yml
|
||||
cd /home/docker/paperless
|
||||
docker compose up -d
|
||||
clear
|
||||
echo "インストール"
|
||||
check_docker_app_ip
|
||||
}
|
||||
|
||||
|
||||
docker_app_update() {
|
||||
cd /home/docker/paperless/ && docker compose down --rmi all
|
||||
docker_app_install
|
||||
}
|
||||
|
||||
|
||||
docker_app_uninstall() {
|
||||
cd /home/docker/paperless/ && docker compose down --rmi all
|
||||
rm -rf /home/docker/paperless
|
||||
echo "アプリはアンインストールされています"
|
||||
}
|
||||
|
||||
docker_app_plus
|
||||
|
||||
;;
|
||||
|
||||
|
||||
97|wgs)
|
||||
|
||||
local app_id="97"
|
||||
local docker_name="wireguard"
|
||||
local docker_img="lscr.io/linuxserver/wireguard:latest"
|
||||
local docker_port=8097
|
||||
|
||||
docker_rum() {
|
||||
|
||||
read -p "ネットワークを形成するためにクライアントの数を入力してください(デフォルト5):" COUNT
|
||||
COUNT=${COUNT:-5}
|
||||
read -p "WireGuardセグメントを入力してください(デフォルト10.13.13.0):" NETWORK
|
||||
NETWORK=${NETWORK:-10.13.13.0}
|
||||
|
||||
PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,)
|
||||
|
||||
ip link delete wg0 &>/dev/null
|
||||
|
||||
ip_address
|
||||
docker run -d \
|
||||
--name=wireguard \
|
||||
--network host \
|
||||
--cap-add=NET_ADMIN \
|
||||
--cap-add=SYS_MODULE \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Etc/UTC \
|
||||
-e SERVERURL=${ipv4_address} \
|
||||
-e SERVERPORT=51820 \
|
||||
-e PEERS=${PEERS} \
|
||||
-e INTERNAL_SUBNET=${NETWORK} \
|
||||
-e ALLOWEDIPS=${NETWORK}/24 \
|
||||
-e PERSISTENTKEEPALIVE_PEERS=all \
|
||||
-e LOG_CONFS=true \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/wireguard:latest
|
||||
|
||||
|
||||
sleep 3
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
f='/config/wg_confs/wg0.conf'
|
||||
sed -i 's/51820/${docker_port}/g' \$f
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
for d in /config/peer_*; do
|
||||
sed -i 's/51820/${docker_port}/g' \$d/*.conf
|
||||
done
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
sed -i "/^DNS/d" "$d"/*.conf
|
||||
done
|
||||
'
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
for f in "$d"/*.conf; do
|
||||
grep -q "^PersistentKeepalive" "$f" || \
|
||||
sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f"
|
||||
done
|
||||
done
|
||||
'
|
||||
|
||||
docker exec -it wireguard bash -c '
|
||||
for d in /config/peer_*; do
|
||||
cd "$d" || continue
|
||||
conf_file=$(ls *.conf)
|
||||
base_name="${conf_file%.conf}"
|
||||
qrencode -o "$base_name.png" < "$conf_file"
|
||||
done
|
||||
'
|
||||
|
||||
docker restart wireguard
|
||||
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}すべてのクライアントQRコード構成:${gl_bai}"
|
||||
docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done'
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}すべてのクライアント構成コード:${gl_bai}"
|
||||
docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done'
|
||||
sleep 2
|
||||
echo -e "${gl_lv}${COUNT}すべての出力は各クライアントによって提供されます。使用方法は次のとおりです。${gl_bai}"
|
||||
echo -e "${gl_lv}1.携帯電話にWGのアプリをダウンロードして、上のQRコードをスキャンしてネットワークにすばやく接続します${gl_bai}"
|
||||
echo -e "${gl_lv}2。Windowsクライアントをダウンロードし、構成コードをコピーしてネットワークに接続します。${gl_bai}"
|
||||
echo -e "${gl_lv}3。Linuxはスクリプトを使用してWGクライアントを展開し、構成コードをコピーしてネットワークに接続します。${gl_bai}"
|
||||
echo -e "${gl_lv}公式クライアントのダウンロード方法:https://www.wireguard.com/install/${gl_bai}"
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
98|wgc)
|
||||
|
||||
local app_id="98"
|
||||
local docker_name="wireguardc"
|
||||
local docker_img="kjlion/wireguard:alpine"
|
||||
local docker_port=51820
|
||||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/wireguard/config/
|
||||
|
||||
local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf"
|
||||
|
||||
# ディレクトリを作成する(存在しない場合)
|
||||
mkdir -p "$(dirname "$CONFIG_FILE")"
|
||||
|
||||
echo "クライアントの構成を貼り付け、Enterを2回連続で押して保存してください。"
|
||||
|
||||
# 変数を初期化します
|
||||
input=""
|
||||
empty_line_count=0
|
||||
|
||||
# ユーザーの入力を行ごとに読み取ります
|
||||
while IFS= read -r line; do
|
||||
if [[ -z "$line" ]]; then
|
||||
((empty_line_count++))
|
||||
if [[ $empty_line_count -ge 2 ]]; then
|
||||
break
|
||||
fi
|
||||
else
|
||||
empty_line_count=0
|
||||
input+="$line"$'\n'
|
||||
fi
|
||||
done
|
||||
|
||||
# 構成ファイルに書き込みます
|
||||
echo "$input" > "$CONFIG_FILE"
|
||||
|
||||
echo "クライアントの構成が保存されています$CONFIG_FILE"
|
||||
|
||||
docker run -d \
|
||||
--name wireguardc \
|
||||
--network host \
|
||||
--cap-add NET_ADMIN \
|
||||
--cap-add SYS_MODULE \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules:ro \
|
||||
--restart always \
|
||||
kjlion/wireguard:alpine
|
||||
|
||||
sleep 3
|
||||
|
||||
docker logs wireguardc
|
||||
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
|
||||
b)
|
||||
clear
|
||||
|
@ -12609,7 +12903,7 @@ EOF
|
|||
break # 跳出
|
||||
;;
|
||||
esac
|
||||
send_stats "時限タスクを追加します"
|
||||
send_stats "タイムされたタスクを追加します"
|
||||
;;
|
||||
2)
|
||||
read -e -p "削除する必要があるキーワードを入力してください。" kquest
|
||||
|
@ -12854,7 +13148,7 @@ EOF
|
|||
echo "TG-BOTモニタリングと早期警告機能"
|
||||
echo "ビデオの紹介:https://youtu.be/vll-eb3z_ty"
|
||||
echo "------------------------------------------------"
|
||||
echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、およびSSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。"
|
||||
echo "ネイティブCPU、メモリ、ハードディスク、トラフィック、SSHログインのリアルタイム監視と早期警告を実現するために、TG Robot APIとユーザーIDを構成する必要があります。"
|
||||
echo "しきい値に達した後、ユーザーはユーザーに送信されます"
|
||||
echo -e "${gl_hui}- トラフィックに関しては、サーバーの再起動が再計算されます -${gl_bai}"
|
||||
read -e -p "必ず続行しますか? (y/n):" choice
|
||||
|
@ -13090,7 +13384,7 @@ EOF
|
|||
|
||||
echo "プライバシーとセキュリティ"
|
||||
echo "スクリプトは、ユーザー機能に関するデータを収集し、スクリプトエクスペリエンスを最適化し、より楽しく便利な機能を作成します。"
|
||||
echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、使用される機能の名前を収集します。"
|
||||
echo "スクリプトバージョン番号、使用時間、システムバージョン、CPUアーキテクチャ、マシンの国、および使用される関数の名前を収集します。"
|
||||
echo "------------------------------------------------"
|
||||
echo -e "現在のステータス:$status_message"
|
||||
echo "--------------------"
|
||||
|
@ -13214,7 +13508,7 @@ linux_file() {
|
|||
;;
|
||||
3) # 修改目录权限
|
||||
read -e -p "ディレクトリ名を入力してください:" dirname
|
||||
read -e -p "許可を入力してください(755など):" perm
|
||||
read -e -p "許可(755など)を入力してください。" perm
|
||||
chmod "$perm" "$dirname" && echo "許可が変更されました" || echo "変更に失敗しました"
|
||||
send_stats "ディレクトリ権限を変更します"
|
||||
;;
|
||||
|
@ -13246,7 +13540,7 @@ linux_file() {
|
|||
;;
|
||||
13) # 修改文件权限
|
||||
read -e -p "ファイル名を入力してください:" filename
|
||||
read -e -p "許可を入力してください(755など):" perm
|
||||
read -e -p "許可(755など)を入力してください。" perm
|
||||
chmod "$perm" "$filename" && echo "許可が変更されました" || echo "変更に失敗しました"
|
||||
send_stats "ファイル権限を変更します"
|
||||
;;
|
||||
|
@ -14016,4 +14310,3 @@ else
|
|||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
|
285
kejilion.sh
285
kejilion.sh
|
@ -1,5 +1,5 @@
|
|||
#!/bin/bash
|
||||
sh_v="4.1.1"
|
||||
sh_v="4.1.2"
|
||||
|
||||
|
||||
gl_hui='\e[37m'
|
||||
|
@ -349,22 +349,22 @@ kejilion() {
|
|||
|
||||
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
install lsof
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
check_port() {
|
||||
install lsof
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
stop_containers_or_kill_process 80
|
||||
stop_containers_or_kill_process 443
|
||||
}
|
||||
|
@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
# Run Prometheus container
|
||||
|
@ -2958,7 +2958,7 @@ docker run -d \
|
|||
-v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \
|
||||
-v $PROMETHEUS_DIR/data:/prometheus \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--user 0:0 \
|
||||
prom/prometheus:latest
|
||||
|
||||
|
@ -2968,7 +2968,7 @@ docker run -d \
|
|||
-p ${docker_port}:3000 \
|
||||
-v $GRAFANA_DIR:/var/lib/grafana \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
grafana/grafana:latest
|
||||
|
||||
}
|
||||
|
@ -3037,7 +3037,7 @@ f2b_install_sshd() {
|
|||
-v /path/to/fail2ban/config:/config \
|
||||
-v /var/log:/var/log:ro \
|
||||
-v /home/web/log/nginx/:/remotelogs/nginx:ro \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/fail2ban:latest
|
||||
|
||||
sleep 3
|
||||
|
@ -8874,6 +8874,7 @@ while true; do
|
|||
echo -e "${gl_kjlan}91. ${color91}gitea私有代码仓库 ${gl_kjlan}92. ${color92}FileBrowser文件管理器"
|
||||
echo -e "${gl_kjlan}93. ${color93}Dufs极简静态文件服务器 ${gl_kjlan}94. ${color94}Gopeed高速下载工具"
|
||||
echo -e "${gl_kjlan}95. ${color95}paperless文档管理平台"
|
||||
echo -e "${gl_kjlan}97. ${color97}WireGuard组网(服务端) ${gl_kjlan}98. ${color98}WireGuard组网(客户端)"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
echo -e "${gl_kjlan}b. ${gl_bai}备份全部应用数据 ${gl_kjlan}r. ${gl_bai}还原全部应用数据"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
|
@ -8998,6 +8999,9 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/openlist
|
||||
chmod -R 777 /home/docker/openlist
|
||||
|
||||
docker run -d \
|
||||
--restart=always \
|
||||
-v /home/docker/openlist:/opt/openlist/data \
|
||||
|
@ -9045,7 +9049,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:ubuntu-kde
|
||||
|
||||
|
||||
|
@ -9127,7 +9131,7 @@ while true; do
|
|||
-p 56881:56881/udp \
|
||||
-v /home/docker/qbittorrent/config:/config \
|
||||
-v /home/docker/qbittorrent/downloads:/downloads \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/qbittorrent:latest
|
||||
|
||||
}
|
||||
|
@ -9362,7 +9366,7 @@ while true; do
|
|||
-p ${docker_port}:5700 \
|
||||
--name qinglong \
|
||||
--hostname qinglong \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
whyour/qinglong:latest
|
||||
|
||||
|
||||
|
@ -9428,7 +9432,7 @@ while true; do
|
|||
-e PGID=1000 \
|
||||
-v /home/docker/easyimage/config:/app/web/config \
|
||||
-v /home/docker/easyimage/i:/app/web/i \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
ddsderek/easyimage:latest
|
||||
|
||||
}
|
||||
|
@ -9745,7 +9749,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:latest
|
||||
|
||||
}
|
||||
|
@ -9808,7 +9812,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --name dockge --restart unless-stopped -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
docker run -d --name dockge --restart=always -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
|
||||
}
|
||||
|
||||
|
@ -9850,7 +9854,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name searxng \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v "/home/docker/searxng:/etc/searxng" \
|
||||
searxng/searxng
|
||||
|
@ -10004,7 +10008,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --restart unless-stopped \
|
||||
docker run -d --restart=always \
|
||||
-p ${docker_port}:3000 \
|
||||
-v /home/docker/moments/data:/app/data \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
|
@ -10158,7 +10162,7 @@ while true; do
|
|||
-e ENCRYPTION_KEY=${ENCRYPTION_KEY} \
|
||||
-p ${docker_port}:6989 \
|
||||
-v /home/docker/nexterm:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
germannewsmaker/nexterm:latest
|
||||
|
||||
}
|
||||
|
@ -10179,7 +10183,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs
|
||||
|
||||
}
|
||||
|
||||
|
@ -10200,7 +10204,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr
|
||||
|
||||
}
|
||||
|
||||
|
@ -10309,7 +10313,7 @@ while true; do
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
-p ${docker_port}:9100 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
|
||||
|
@ -10333,7 +10337,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name=cadvisor \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
--volume=/:/rootfs:ro \
|
||||
--volume=/var/run:/var/run:rw \
|
||||
|
@ -10704,7 +10708,7 @@ while true; do
|
|||
local docker_port=8064
|
||||
|
||||
docker_rum() {
|
||||
docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
}
|
||||
|
||||
local docker_describe="对开发人员和 IT 工作者来说非常有用的工具"
|
||||
|
@ -10848,7 +10852,7 @@ while true; do
|
|||
-p 6199:6199 \
|
||||
-p 11451:11451 \
|
||||
-v /home/docker/astrbot/data:/AstrBot/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--name astrbot \
|
||||
soulter/astrbot:latest
|
||||
|
||||
|
@ -10873,7 +10877,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name navidrome \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
--user $(id -u):$(id -g) \
|
||||
-v /home/docker/navidrome/music:/music \
|
||||
-v /home/docker/navidrome/data:/data \
|
||||
|
@ -10935,7 +10939,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name libretv \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-e PASSWORD=${app_passwd} \
|
||||
bestzwei/libretv:latest
|
||||
|
@ -10977,9 +10981,9 @@ while true; do
|
|||
|
||||
curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml
|
||||
sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml
|
||||
cd /home/docker/moontv/
|
||||
docker compose up -d
|
||||
clear
|
||||
|
@ -11016,7 +11020,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name melody \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:5566 \
|
||||
-v /home/docker/melody/.profile:/app/backend/.profile \
|
||||
foamzou/melody:latest
|
||||
|
@ -11045,7 +11049,7 @@ while true; do
|
|||
docker_rum() {
|
||||
docker run -d \
|
||||
--name dosgame \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:262 \
|
||||
oldiy/dosgame-web-docker:latest
|
||||
|
||||
|
@ -11075,7 +11079,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name xunlei \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--privileged \
|
||||
-e XL_DASHBOARD_USERNAME=${app_use} \
|
||||
-e XL_DASHBOARD_PASSWORD=${app_passwd} \
|
||||
|
@ -11137,7 +11141,7 @@ while true; do
|
|||
mkdir -p /home/docker/beszel && \
|
||||
docker run -d \
|
||||
--name beszel \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
-v /home/docker/beszel:/beszel_data \
|
||||
-p ${docker_port}:8090 \
|
||||
henrygd/beszel
|
||||
|
@ -11355,7 +11359,7 @@ while true; do
|
|||
-v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \
|
||||
-e TZ=UTC \
|
||||
-p ${docker_port}:80 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
bellamy/wallos:latest
|
||||
|
||||
}
|
||||
|
@ -11432,7 +11436,7 @@ while true; do
|
|||
--mount type=bind,source=/home/docker/jellyfin/media,target=/media \
|
||||
-p ${docker_port}:8096 \
|
||||
-p 7359:7359/udp \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
jellyfin/jellyfin
|
||||
|
||||
|
||||
|
@ -11520,7 +11524,7 @@ while true; do
|
|||
--name file-code-box \
|
||||
-p ${docker_port}:12345 \
|
||||
-v /home/docker/file-code-box/data:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lanol/filecodebox:latest
|
||||
|
||||
}
|
||||
|
@ -11561,7 +11565,7 @@ while true; do
|
|||
--name matrix \
|
||||
-v /home/docker/matrix/data:/data \
|
||||
-p ${docker_port}:8008 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
matrixdotorg/synapse:latest
|
||||
|
||||
echo "创建初始用户或管理员。请设置以下内容用户名和密码以及是否为管理员。"
|
||||
|
@ -11651,7 +11655,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name filebrowser \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v /home/docker/filebrowser/data:/data \
|
||||
-v /home/docker/filebrowser/config:/config \
|
||||
|
@ -11680,14 +11684,14 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}:/data \
|
||||
-p ${docker_port}:5000 \
|
||||
${docker_img} /data -A
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="Dufs 极简静态文件服务器,支持上传下载"
|
||||
local docker_describe="极简静态文件服务器,支持上传下载"
|
||||
local docker_url="官网介绍: https://github.com/sigoden/dufs"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
|
@ -11710,7 +11714,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}/downloads:/app/Downloads \
|
||||
-v /home/docker/${docker_name}/storage:/app/storage \
|
||||
-p ${docker_port}:9999 \
|
||||
|
@ -11718,7 +11722,7 @@ while true; do
|
|||
|
||||
}
|
||||
|
||||
local docker_describe="Gopeed 分布式高速下载工具,支持多种协议"
|
||||
local docker_describe="分布式高速下载工具,支持多种协议"
|
||||
local docker_url="官网介绍: https://github.com/GopeedLab/gopeed"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
|
@ -11776,6 +11780,180 @@ while true; do
|
|||
;;
|
||||
|
||||
|
||||
97|wgs)
|
||||
|
||||
local app_id="97"
|
||||
local docker_name="wireguard"
|
||||
local docker_img="lscr.io/linuxserver/wireguard:latest"
|
||||
local docker_port=8097
|
||||
|
||||
docker_rum() {
|
||||
|
||||
read -p "请输入组网的客户端数量 (默认 5): " COUNT
|
||||
COUNT=${COUNT:-5}
|
||||
read -p "请输入 WireGuard 网段 (默认 10.13.13.0): " NETWORK
|
||||
NETWORK=${NETWORK:-10.13.13.0}
|
||||
|
||||
PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,)
|
||||
|
||||
ip link delete wg0 &>/dev/null
|
||||
|
||||
ip_address
|
||||
docker run -d \
|
||||
--name=wireguard \
|
||||
--network host \
|
||||
--cap-add=NET_ADMIN \
|
||||
--cap-add=SYS_MODULE \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Etc/UTC \
|
||||
-e SERVERURL=${ipv4_address} \
|
||||
-e SERVERPORT=51820 \
|
||||
-e PEERS=${PEERS} \
|
||||
-e INTERNAL_SUBNET=${NETWORK} \
|
||||
-e ALLOWEDIPS=${NETWORK}/24 \
|
||||
-e PERSISTENTKEEPALIVE_PEERS=all \
|
||||
-e LOG_CONFS=true \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/wireguard:latest
|
||||
|
||||
|
||||
sleep 3
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
f='/config/wg_confs/wg0.conf'
|
||||
sed -i 's/51820/${docker_port}/g' \$f
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
for d in /config/peer_*; do
|
||||
sed -i 's/51820/${docker_port}/g' \$d/*.conf
|
||||
done
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
sed -i "/^DNS/d" "$d"/*.conf
|
||||
done
|
||||
'
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
for f in "$d"/*.conf; do
|
||||
grep -q "^PersistentKeepalive" "$f" || \
|
||||
sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f"
|
||||
done
|
||||
done
|
||||
'
|
||||
|
||||
docker exec -it wireguard bash -c '
|
||||
for d in /config/peer_*; do
|
||||
cd "$d" || continue
|
||||
conf_file=$(ls *.conf)
|
||||
base_name="${conf_file%.conf}"
|
||||
qrencode -o "$base_name.png" < "$conf_file"
|
||||
done
|
||||
'
|
||||
|
||||
docker restart wireguard
|
||||
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}所有客户端二维码配置: ${gl_bai}"
|
||||
docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done'
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}所有客户端配置代码: ${gl_bai}"
|
||||
docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done'
|
||||
sleep 2
|
||||
echo -e "${gl_lv}${COUNT}个客户端配置全部输出,使用方法如下:${gl_bai}"
|
||||
echo -e "${gl_lv}1. 手机下载wg的APP,扫描上方二维码,可以快速连接网络${gl_bai}"
|
||||
echo -e "${gl_lv}2. Windows下载客户端,复制配置代码连接网络。${gl_bai}"
|
||||
echo -e "${gl_lv}3. Linux用脚本部署WG客户端,复制配置代码连接网络。${gl_bai}"
|
||||
echo -e "${gl_lv}官方客户端下载方式: https://www.wireguard.com/install/${gl_bai}"
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
98|wgc)
|
||||
|
||||
local app_id="98"
|
||||
local docker_name="wireguardc"
|
||||
local docker_img="kjlion/wireguard:alpine"
|
||||
local docker_port=51820
|
||||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/wireguard/config/
|
||||
|
||||
local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf"
|
||||
|
||||
# 创建目录(如果不存在)
|
||||
mkdir -p "$(dirname "$CONFIG_FILE")"
|
||||
|
||||
echo "请粘贴你的客户端配置,连续按两次回车保存:"
|
||||
|
||||
# 初始化变量
|
||||
input=""
|
||||
empty_line_count=0
|
||||
|
||||
# 逐行读取用户输入
|
||||
while IFS= read -r line; do
|
||||
if [[ -z "$line" ]]; then
|
||||
((empty_line_count++))
|
||||
if [[ $empty_line_count -ge 2 ]]; then
|
||||
break
|
||||
fi
|
||||
else
|
||||
empty_line_count=0
|
||||
input+="$line"$'\n'
|
||||
fi
|
||||
done
|
||||
|
||||
# 写入配置文件
|
||||
echo "$input" > "$CONFIG_FILE"
|
||||
|
||||
echo "客户端配置已保存到 $CONFIG_FILE"
|
||||
|
||||
docker run -d \
|
||||
--name wireguardc \
|
||||
--network host \
|
||||
--cap-add NET_ADMIN \
|
||||
--cap-add SYS_MODULE \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules:ro \
|
||||
--restart always \
|
||||
kjlion/wireguard:alpine
|
||||
|
||||
sleep 3
|
||||
|
||||
docker logs wireguardc
|
||||
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
|
||||
b)
|
||||
|
@ -14132,4 +14310,3 @@ else
|
|||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
|
|
@ -1288,3 +1288,6 @@ docker管理增加全局备份还原迁移功能。
|
|||
应用市场新增gopeed分布式高速下载工具的安装及使用。
|
||||
应用市场新增paperless文档管理平台的安装及使用。
|
||||
------------------------
|
||||
2025-08-27 v4.1.2
|
||||
应用市场新增WireGuard异地隧道组网工具的安装及使用。
|
||||
------------------------
|
||||
|
|
409
kr/kejilion.sh
409
kr/kejilion.sh
|
@ -1,5 +1,5 @@
|
|||
#!/bin/bash
|
||||
sh_v="4.1.0"
|
||||
sh_v="4.1.2"
|
||||
|
||||
|
||||
gl_hui='\e[37m'
|
||||
|
@ -57,7 +57,7 @@ CheckFirstRun_true() {
|
|||
|
||||
|
||||
|
||||
# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 컴퓨터 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요!
|
||||
# 기능 매장 지점 정보를 수집하는 기능, 현재 스크립트 버전 번호, 사용 시간, 시스템 버전, CPU 아키텍처, 기계 국가 및 사용자가 사용하는 기능 이름을 기록합니다. 그들은 절대적으로 민감한 정보를 포함하지 않습니다. 제발 나를 믿으세요!
|
||||
# 이 기능을 설계 해야하는 이유는 무엇입니까? 목적은 사용자가 사용하는 기능을 더 잘 이해하고 기능을 더욱 최적화하여 사용자 요구를 충족시키는 더 많은 기능을 시작하는 것입니다.
|
||||
# 전체 텍스트의 경우 Send_Stats 기능 호출 위치, 투명 및 오픈 소스를 검색 할 수 있으며 우려 사항이 있으면 사용을 거부 할 수 있습니다.
|
||||
|
||||
|
@ -349,22 +349,22 @@ kejilion() {
|
|||
|
||||
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
install lsof
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
check_port() {
|
||||
install lsof
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
stop_containers_or_kill_process 80
|
||||
stop_containers_or_kill_process 443
|
||||
}
|
||||
|
@ -1558,7 +1558,7 @@ fi
|
|||
|
||||
add_yuming() {
|
||||
ip_address
|
||||
echo -e "먼저 도메인 이름을 로컬 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}"
|
||||
echo -e "먼저 도메인 이름을 기본 IP로 해결합니다.${gl_huang}$ipv4_address $ipv6_address${gl_bai}"
|
||||
read -e -p "IP 또는 해결 된 도메인 이름을 입력하십시오." yuming
|
||||
}
|
||||
|
||||
|
@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
# Run Prometheus container
|
||||
|
@ -2958,7 +2958,7 @@ docker run -d \
|
|||
-v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \
|
||||
-v $PROMETHEUS_DIR/data:/prometheus \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--user 0:0 \
|
||||
prom/prometheus:latest
|
||||
|
||||
|
@ -2968,7 +2968,7 @@ docker run -d \
|
|||
-p ${docker_port}:3000 \
|
||||
-v $GRAFANA_DIR:/var/lib/grafana \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
grafana/grafana:latest
|
||||
|
||||
}
|
||||
|
@ -3037,7 +3037,7 @@ f2b_install_sshd() {
|
|||
-v /path/to/fail2ban/config:/config \
|
||||
-v /var/log:/var/log:ro \
|
||||
-v /home/web/log/nginx/:/remotelogs/nginx:ro \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/fail2ban:latest
|
||||
|
||||
sleep 3
|
||||
|
@ -6869,7 +6869,7 @@ docker_ssh_migration() {
|
|||
|
||||
list_backups() {
|
||||
echo -e "${BLUE}현재 백업 목록 :${NC}"
|
||||
ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "백업 없음"
|
||||
ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "백업 없음"
|
||||
}
|
||||
|
||||
|
||||
|
@ -6878,7 +6878,10 @@ docker_ssh_migration() {
|
|||
# 지원
|
||||
# ----------------------------
|
||||
backup_docker() {
|
||||
send_stats "도커 백업"
|
||||
|
||||
echo -e "${YELLOW}Docker 컨테이너 백업 ...${NC}"
|
||||
docker ps --format '{{.Names}}'
|
||||
read -p "백업 할 컨테이너 이름을 입력하십시오 (여러 공간으로 분리하면 입력 백업이 모두 실행 중입니다)." containers
|
||||
|
||||
install tar jq gzip
|
||||
|
@ -6970,7 +6973,7 @@ docker_ssh_migration() {
|
|||
# /home /docker 아래의 모든 파일을 백업 (하위 디렉터 제외)
|
||||
if [ -d "/home/docker" ]; then
|
||||
echo -e "${BLUE}/home /docker 아래 파일을 백업 ...${NC}"
|
||||
find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from -
|
||||
find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T -
|
||||
echo -e "${GREEN}/home /docker의 파일은 다음과 같이 포장되었습니다.${BACKUP_DIR}/home_docker_files.tar.gz${NC}"
|
||||
fi
|
||||
|
||||
|
@ -6985,7 +6988,8 @@ docker_ssh_migration() {
|
|||
# 절감
|
||||
# ----------------------------
|
||||
restore_docker() {
|
||||
list_backups
|
||||
|
||||
send_stats "도커 복원"
|
||||
read -p "복원하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; }
|
||||
|
||||
|
@ -7103,8 +7107,8 @@ docker_ssh_migration() {
|
|||
# 마이그레이션
|
||||
# ----------------------------
|
||||
migrate_docker() {
|
||||
ensure_jq
|
||||
list_backups
|
||||
send_stats "도커 마이그레이션"
|
||||
install jq
|
||||
read -p "마이그레이션하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; }
|
||||
|
||||
|
@ -7125,7 +7129,7 @@ docker_ssh_migration() {
|
|||
# 백업을 삭제하십시오
|
||||
# ----------------------------
|
||||
delete_backup() {
|
||||
list_backups
|
||||
send_stats "Docker 백업 파일 삭제"
|
||||
read -p "삭제하려면 백업 디렉토리를 입력하십시오." BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}백업 디렉토리가 존재하지 않습니다${NC}"; return; }
|
||||
rm -rf "$BACKUP_DIR"
|
||||
|
@ -7136,6 +7140,7 @@ docker_ssh_migration() {
|
|||
# 메인 메뉴
|
||||
# ----------------------------
|
||||
main_menu() {
|
||||
send_stats "도커 백업 마이그레이션 및 복원"
|
||||
while true; do
|
||||
clear
|
||||
echo "------------------------"
|
||||
|
@ -7160,6 +7165,7 @@ docker_ssh_migration() {
|
|||
0) return ;;
|
||||
*) echo -e "${RED}잘못된 옵션${NC}" ;;
|
||||
esac
|
||||
break_end
|
||||
done
|
||||
}
|
||||
|
||||
|
@ -8866,6 +8872,9 @@ while true; do
|
|||
echo -e "${gl_kjlan}89. ${color89}filecodebox 파일 Express${gl_kjlan}90. ${color90}매트릭스 분산 채팅 프로토콜"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
echo -e "${gl_kjlan}91. ${color91}Gitea 개인 코드 저장소${gl_kjlan}92. ${color92}파일 브라우저 파일 관리자"
|
||||
echo -e "${gl_kjlan}93. ${color93}DUFS 미니멀리스트 정적 파일 서버${gl_kjlan}94. ${color94}고속 다운로드 도구"
|
||||
echo -e "${gl_kjlan}95. ${color95}종이없는 문서 관리 플랫폼"
|
||||
echo -e "${gl_kjlan}97. ${color97}와이어 가드 네트워킹 (서버 측)${gl_kjlan}98. ${color98}와이어 가드 네트워킹 (클라이언트)"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
echo -e "${gl_kjlan}b. ${gl_bai}모든 응용 프로그램 데이터를 백업합니다${gl_kjlan}r. ${gl_bai}모든 응용 프로그램 데이터를 복원하십시오"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
|
@ -8990,6 +8999,9 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/openlist
|
||||
chmod -R 777 /home/docker/openlist
|
||||
|
||||
docker run -d \
|
||||
--restart=always \
|
||||
-v /home/docker/openlist:/opt/openlist/data \
|
||||
|
@ -9037,7 +9049,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:ubuntu-kde
|
||||
|
||||
|
||||
|
@ -9119,7 +9131,7 @@ while true; do
|
|||
-p 56881:56881/udp \
|
||||
-v /home/docker/qbittorrent/config:/config \
|
||||
-v /home/docker/qbittorrent/downloads:/downloads \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/qbittorrent:latest
|
||||
|
||||
}
|
||||
|
@ -9354,7 +9366,7 @@ while true; do
|
|||
-p ${docker_port}:5700 \
|
||||
--name qinglong \
|
||||
--hostname qinglong \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
whyour/qinglong:latest
|
||||
|
||||
|
||||
|
@ -9420,7 +9432,7 @@ while true; do
|
|||
-e PGID=1000 \
|
||||
-v /home/docker/easyimage/config:/app/web/config \
|
||||
-v /home/docker/easyimage/i:/app/web/i \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
ddsderek/easyimage:latest
|
||||
|
||||
}
|
||||
|
@ -9737,7 +9749,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:latest
|
||||
|
||||
}
|
||||
|
@ -9800,7 +9812,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --name dockge --restart unless-stopped -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
docker run -d --name dockge --restart=always -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
|
||||
}
|
||||
|
||||
|
@ -9842,7 +9854,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name searxng \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v "/home/docker/searxng:/etc/searxng" \
|
||||
searxng/searxng
|
||||
|
@ -9996,7 +10008,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --restart unless-stopped \
|
||||
docker run -d --restart=always \
|
||||
-p ${docker_port}:3000 \
|
||||
-v /home/docker/moments/data:/app/data \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
|
@ -10150,7 +10162,7 @@ while true; do
|
|||
-e ENCRYPTION_KEY=${ENCRYPTION_KEY} \
|
||||
-p ${docker_port}:6989 \
|
||||
-v /home/docker/nexterm:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
germannewsmaker/nexterm:latest
|
||||
|
||||
}
|
||||
|
@ -10171,7 +10183,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs
|
||||
|
||||
}
|
||||
|
||||
|
@ -10192,7 +10204,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr
|
||||
|
||||
}
|
||||
|
||||
|
@ -10301,7 +10313,7 @@ while true; do
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
-p ${docker_port}:9100 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
|
||||
|
@ -10325,7 +10337,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name=cadvisor \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
--volume=/:/rootfs:ro \
|
||||
--volume=/var/run:/var/run:rw \
|
||||
|
@ -10696,7 +10708,7 @@ while true; do
|
|||
local docker_port=8064
|
||||
|
||||
docker_rum() {
|
||||
docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
}
|
||||
|
||||
local docker_describe="对开发人员和 IT 工作者来说非常有用的工具"
|
||||
|
@ -10840,7 +10852,7 @@ while true; do
|
|||
-p 6199:6199 \
|
||||
-p 11451:11451 \
|
||||
-v /home/docker/astrbot/data:/AstrBot/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--name astrbot \
|
||||
soulter/astrbot:latest
|
||||
|
||||
|
@ -10865,7 +10877,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name navidrome \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
--user $(id -u):$(id -g) \
|
||||
-v /home/docker/navidrome/music:/music \
|
||||
-v /home/docker/navidrome/data:/data \
|
||||
|
@ -10927,7 +10939,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name libretv \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-e PASSWORD=${app_passwd} \
|
||||
bestzwei/libretv:latest
|
||||
|
@ -10969,9 +10981,9 @@ while true; do
|
|||
|
||||
curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml
|
||||
sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml
|
||||
cd /home/docker/moontv/
|
||||
docker compose up -d
|
||||
clear
|
||||
|
@ -11008,7 +11020,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name melody \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:5566 \
|
||||
-v /home/docker/melody/.profile:/app/backend/.profile \
|
||||
foamzou/melody:latest
|
||||
|
@ -11037,7 +11049,7 @@ while true; do
|
|||
docker_rum() {
|
||||
docker run -d \
|
||||
--name dosgame \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:262 \
|
||||
oldiy/dosgame-web-docker:latest
|
||||
|
||||
|
@ -11067,7 +11079,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name xunlei \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--privileged \
|
||||
-e XL_DASHBOARD_USERNAME=${app_use} \
|
||||
-e XL_DASHBOARD_PASSWORD=${app_passwd} \
|
||||
|
@ -11129,7 +11141,7 @@ while true; do
|
|||
mkdir -p /home/docker/beszel && \
|
||||
docker run -d \
|
||||
--name beszel \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
-v /home/docker/beszel:/beszel_data \
|
||||
-p ${docker_port}:8090 \
|
||||
henrygd/beszel
|
||||
|
@ -11347,7 +11359,7 @@ while true; do
|
|||
-v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \
|
||||
-e TZ=UTC \
|
||||
-p ${docker_port}:80 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
bellamy/wallos:latest
|
||||
|
||||
}
|
||||
|
@ -11424,7 +11436,7 @@ while true; do
|
|||
--mount type=bind,source=/home/docker/jellyfin/media,target=/media \
|
||||
-p ${docker_port}:8096 \
|
||||
-p 7359:7359/udp \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
jellyfin/jellyfin
|
||||
|
||||
|
||||
|
@ -11512,7 +11524,7 @@ while true; do
|
|||
--name file-code-box \
|
||||
-p ${docker_port}:12345 \
|
||||
-v /home/docker/file-code-box/data:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lanol/filecodebox:latest
|
||||
|
||||
}
|
||||
|
@ -11553,7 +11565,7 @@ while true; do
|
|||
--name matrix \
|
||||
-v /home/docker/matrix/data:/data \
|
||||
-p ${docker_port}:8008 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
matrixdotorg/synapse:latest
|
||||
|
||||
echo "초기 사용자 또는 관리자를 만듭니다. 다음 사용자 이름과 비밀번호와 관리자 여부를 설정하십시오."
|
||||
|
@ -11643,7 +11655,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name filebrowser \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v /home/docker/filebrowser/data:/data \
|
||||
-v /home/docker/filebrowser/config:/config \
|
||||
|
@ -11661,6 +11673,288 @@ while true; do
|
|||
|
||||
;;
|
||||
|
||||
93|dufs)
|
||||
|
||||
local app_id="93"
|
||||
local docker_name="dufs"
|
||||
local docker_img="sigoden/dufs"
|
||||
local docker_port=8093
|
||||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}:/data \
|
||||
-p ${docker_port}:5000 \
|
||||
${docker_img} /data -A
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="极简静态文件服务器,支持上传下载"
|
||||
local docker_url="官网介绍: https://github.com/sigoden/dufs"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
94|gopeed)
|
||||
|
||||
local app_id="94"
|
||||
local docker_name="gopeed"
|
||||
local docker_img="liwei2633/gopeed"
|
||||
local docker_port=8094
|
||||
|
||||
docker_rum() {
|
||||
|
||||
read -e -p "로그인 사용자 이름 설정 :" app_use
|
||||
read -e -p "로그인 비밀번호 설정 :" app_passwd
|
||||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}/downloads:/app/Downloads \
|
||||
-v /home/docker/${docker_name}/storage:/app/storage \
|
||||
-p ${docker_port}:9999 \
|
||||
${docker_img} -u ${app_use} -p ${app_passwd}
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="分布式高速下载工具,支持多种协议"
|
||||
local docker_url="官网介绍: https://github.com/GopeedLab/gopeed"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
|
||||
95|paperless)
|
||||
|
||||
local app_id="95"
|
||||
|
||||
local app_name="paperless文档管理平台"
|
||||
local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。"
|
||||
local app_url="视频介绍: https://docs.paperless-ngx.com/"
|
||||
local docker_name="paperless-webserver-1"
|
||||
local docker_port="8095"
|
||||
local app_size="2"
|
||||
|
||||
docker_app_install() {
|
||||
|
||||
mkdir -p /home/docker/paperless
|
||||
mkdir -p /home/docker/paperless/export
|
||||
mkdir -p /home/docker/paperless/consume
|
||||
cd /home/docker/paperless
|
||||
|
||||
curl -o /home/docker/paperless/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/docker-compose.postgres-tika.yml
|
||||
curl -o /home/docker/paperless/docker-compose.env ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/.env
|
||||
|
||||
sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/paperless/docker-compose.yml
|
||||
cd /home/docker/paperless
|
||||
docker compose up -d
|
||||
clear
|
||||
echo "설치"
|
||||
check_docker_app_ip
|
||||
}
|
||||
|
||||
|
||||
docker_app_update() {
|
||||
cd /home/docker/paperless/ && docker compose down --rmi all
|
||||
docker_app_install
|
||||
}
|
||||
|
||||
|
||||
docker_app_uninstall() {
|
||||
cd /home/docker/paperless/ && docker compose down --rmi all
|
||||
rm -rf /home/docker/paperless
|
||||
echo "앱이 제거되었습니다"
|
||||
}
|
||||
|
||||
docker_app_plus
|
||||
|
||||
;;
|
||||
|
||||
|
||||
97|wgs)
|
||||
|
||||
local app_id="97"
|
||||
local docker_name="wireguard"
|
||||
local docker_img="lscr.io/linuxserver/wireguard:latest"
|
||||
local docker_port=8097
|
||||
|
||||
docker_rum() {
|
||||
|
||||
read -p "네트워크를 구성하려면 클라이언트 수를 입력하십시오 (기본값 5)." COUNT
|
||||
COUNT=${COUNT:-5}
|
||||
read -p "Wireguard 세그먼트를 입력하십시오 (기본값 10.13.13.0) :" NETWORK
|
||||
NETWORK=${NETWORK:-10.13.13.0}
|
||||
|
||||
PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,)
|
||||
|
||||
ip link delete wg0 &>/dev/null
|
||||
|
||||
ip_address
|
||||
docker run -d \
|
||||
--name=wireguard \
|
||||
--network host \
|
||||
--cap-add=NET_ADMIN \
|
||||
--cap-add=SYS_MODULE \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Etc/UTC \
|
||||
-e SERVERURL=${ipv4_address} \
|
||||
-e SERVERPORT=51820 \
|
||||
-e PEERS=${PEERS} \
|
||||
-e INTERNAL_SUBNET=${NETWORK} \
|
||||
-e ALLOWEDIPS=${NETWORK}/24 \
|
||||
-e PERSISTENTKEEPALIVE_PEERS=all \
|
||||
-e LOG_CONFS=true \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/wireguard:latest
|
||||
|
||||
|
||||
sleep 3
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
f='/config/wg_confs/wg0.conf'
|
||||
sed -i 's/51820/${docker_port}/g' \$f
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
for d in /config/peer_*; do
|
||||
sed -i 's/51820/${docker_port}/g' \$d/*.conf
|
||||
done
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
sed -i "/^DNS/d" "$d"/*.conf
|
||||
done
|
||||
'
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
for f in "$d"/*.conf; do
|
||||
grep -q "^PersistentKeepalive" "$f" || \
|
||||
sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f"
|
||||
done
|
||||
done
|
||||
'
|
||||
|
||||
docker exec -it wireguard bash -c '
|
||||
for d in /config/peer_*; do
|
||||
cd "$d" || continue
|
||||
conf_file=$(ls *.conf)
|
||||
base_name="${conf_file%.conf}"
|
||||
qrencode -o "$base_name.png" < "$conf_file"
|
||||
done
|
||||
'
|
||||
|
||||
docker restart wireguard
|
||||
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}모든 클라이언트 QR 코드 구성 :${gl_bai}"
|
||||
docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done'
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}모든 클라이언트 구성 코드 :${gl_bai}"
|
||||
docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done'
|
||||
sleep 2
|
||||
echo -e "${gl_lv}${COUNT}모든 출력은 각 클라이언트가 제공합니다. 사용법은 다음과 같습니다.${gl_bai}"
|
||||
echo -e "${gl_lv}1. 휴대 전화에서 WG의 앱을 다운로드하고 위의 QR 코드를 스캔하여 네트워크에 빠르게 연결하십시오.${gl_bai}"
|
||||
echo -e "${gl_lv}2. Windows 클라이언트를 다운로드하고 구성 코드를 복사하여 네트워크에 연결하십시오.${gl_bai}"
|
||||
echo -e "${gl_lv}3. Linux는 스크립트를 사용하여 WG 클라이언트를 배포하고 구성 코드를 복사하여 네트워크에 연결합니다.${gl_bai}"
|
||||
echo -e "${gl_lv}공식 클라이언트 다운로드 방법 : https://www.wireguard.com/install/${gl_bai}"
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
98|wgc)
|
||||
|
||||
local app_id="98"
|
||||
local docker_name="wireguardc"
|
||||
local docker_img="kjlion/wireguard:alpine"
|
||||
local docker_port=51820
|
||||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/wireguard/config/
|
||||
|
||||
local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf"
|
||||
|
||||
# 디렉토리 생성 (존재하지 않는 경우)
|
||||
mkdir -p "$(dirname "$CONFIG_FILE")"
|
||||
|
||||
echo "클라이언트 구성을 붙여 넣고 다음을 저장하려면 Enter Enter를 두 번 누릅니다."
|
||||
|
||||
# 변수 초기화
|
||||
input=""
|
||||
empty_line_count=0
|
||||
|
||||
# 사용자 입력 라인별로 읽으십시오
|
||||
while IFS= read -r line; do
|
||||
if [[ -z "$line" ]]; then
|
||||
((empty_line_count++))
|
||||
if [[ $empty_line_count -ge 2 ]]; then
|
||||
break
|
||||
fi
|
||||
else
|
||||
empty_line_count=0
|
||||
input+="$line"$'\n'
|
||||
fi
|
||||
done
|
||||
|
||||
# 구성 파일에 쓰십시오
|
||||
echo "$input" > "$CONFIG_FILE"
|
||||
|
||||
echo "클라이언트 구성이 저장되었습니다$CONFIG_FILE"
|
||||
|
||||
docker run -d \
|
||||
--name wireguardc \
|
||||
--network host \
|
||||
--cap-add NET_ADMIN \
|
||||
--cap-add SYS_MODULE \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules:ro \
|
||||
--restart always \
|
||||
kjlion/wireguard:alpine
|
||||
|
||||
sleep 3
|
||||
|
||||
docker logs wireguardc
|
||||
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
|
||||
b)
|
||||
clear
|
||||
|
@ -14016,4 +14310,3 @@ else
|
|||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
|
405
tw/kejilion.sh
405
tw/kejilion.sh
|
@ -1,5 +1,5 @@
|
|||
#!/bin/bash
|
||||
sh_v="4.1.0"
|
||||
sh_v="4.1.2"
|
||||
|
||||
|
||||
gl_hui='\e[37m'
|
||||
|
@ -349,22 +349,22 @@ kejilion() {
|
|||
|
||||
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
install lsof
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
check_port() {
|
||||
install lsof
|
||||
|
||||
stop_containers_or_kill_process() {
|
||||
local port=$1
|
||||
local containers=$(docker ps --filter "publish=$port" --format "{{.ID}}" 2>/dev/null)
|
||||
|
||||
if [ -n "$containers" ]; then
|
||||
docker stop $containers
|
||||
else
|
||||
for pid in $(lsof -t -i:$port); do
|
||||
kill -9 $pid
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
stop_containers_or_kill_process 80
|
||||
stop_containers_or_kill_process 443
|
||||
}
|
||||
|
@ -2949,7 +2949,7 @@ docker network create $NETWORK_NAME
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
# Run Prometheus container
|
||||
|
@ -2958,7 +2958,7 @@ docker run -d \
|
|||
-v $PROMETHEUS_DIR/prometheus.yml:/etc/prometheus/prometheus.yml \
|
||||
-v $PROMETHEUS_DIR/data:/prometheus \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--user 0:0 \
|
||||
prom/prometheus:latest
|
||||
|
||||
|
@ -2968,7 +2968,7 @@ docker run -d \
|
|||
-p ${docker_port}:3000 \
|
||||
-v $GRAFANA_DIR:/var/lib/grafana \
|
||||
--network $NETWORK_NAME \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
grafana/grafana:latest
|
||||
|
||||
}
|
||||
|
@ -3037,7 +3037,7 @@ f2b_install_sshd() {
|
|||
-v /path/to/fail2ban/config:/config \
|
||||
-v /var/log:/var/log:ro \
|
||||
-v /home/web/log/nginx/:/remotelogs/nginx:ro \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/fail2ban:latest
|
||||
|
||||
sleep 3
|
||||
|
@ -6869,7 +6869,7 @@ docker_ssh_migration() {
|
|||
|
||||
list_backups() {
|
||||
echo -e "${BLUE}當前備份列表:${NC}"
|
||||
ls -dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "無備份"
|
||||
ls -1dt ${BACKUP_ROOT}/docker_backup_* 2>/dev/null || echo "無備份"
|
||||
}
|
||||
|
||||
|
||||
|
@ -6878,7 +6878,10 @@ docker_ssh_migration() {
|
|||
# 備份
|
||||
# ----------------------------
|
||||
backup_docker() {
|
||||
send_stats "Docker備份"
|
||||
|
||||
echo -e "${YELLOW}正在備份 Docker 容器...${NC}"
|
||||
docker ps --format '{{.Names}}'
|
||||
read -p "請輸入要備份的容器名(多個空格分隔,回車備份全部運行中容器):" containers
|
||||
|
||||
install tar jq gzip
|
||||
|
@ -6970,7 +6973,7 @@ docker_ssh_migration() {
|
|||
# 備份 /home/docker 下的所有文件(不含子目錄)
|
||||
if [ -d "/home/docker" ]; then
|
||||
echo -e "${BLUE}備份 /home/docker 下的文件...${NC}"
|
||||
find /home/docker -maxdepth 1 -type f -print0 | tar --null -czf "${BACKUP_DIR}/home_docker_files.tar.gz" --files-from -
|
||||
find /home/docker -maxdepth 1 -type f | tar -czf "${BACKUP_DIR}/home_docker_files.tar.gz" -T -
|
||||
echo -e "${GREEN}/home/docker 下的文件已打包到:${BACKUP_DIR}/home_docker_files.tar.gz${NC}"
|
||||
fi
|
||||
|
||||
|
@ -6985,7 +6988,8 @@ docker_ssh_migration() {
|
|||
# 還原
|
||||
# ----------------------------
|
||||
restore_docker() {
|
||||
list_backups
|
||||
|
||||
send_stats "Docker還原"
|
||||
read -p "請輸入要還原的備份目錄:" BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; }
|
||||
|
||||
|
@ -7103,8 +7107,8 @@ docker_ssh_migration() {
|
|||
# 遷移
|
||||
# ----------------------------
|
||||
migrate_docker() {
|
||||
ensure_jq
|
||||
list_backups
|
||||
send_stats "Docker遷移"
|
||||
install jq
|
||||
read -p "請輸入要遷移的備份目錄:" BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; }
|
||||
|
||||
|
@ -7125,7 +7129,7 @@ docker_ssh_migration() {
|
|||
# 刪除備份
|
||||
# ----------------------------
|
||||
delete_backup() {
|
||||
list_backups
|
||||
send_stats "Docker備份文件刪除"
|
||||
read -p "請輸入要刪除的備份目錄:" BACKUP_DIR
|
||||
[[ ! -d "$BACKUP_DIR" ]] && { echo -e "${RED}備份目錄不存在${NC}"; return; }
|
||||
rm -rf "$BACKUP_DIR"
|
||||
|
@ -7136,6 +7140,7 @@ docker_ssh_migration() {
|
|||
# 主菜單
|
||||
# ----------------------------
|
||||
main_menu() {
|
||||
send_stats "Docker備份遷移還原"
|
||||
while true; do
|
||||
clear
|
||||
echo "------------------------"
|
||||
|
@ -7160,6 +7165,7 @@ docker_ssh_migration() {
|
|||
0) return ;;
|
||||
*) echo -e "${RED}無效選項${NC}" ;;
|
||||
esac
|
||||
break_end
|
||||
done
|
||||
}
|
||||
|
||||
|
@ -8866,6 +8872,9 @@ while true; do
|
|||
echo -e "${gl_kjlan}89. ${color89}FileCodeBox文件快遞${gl_kjlan}90. ${color90}matrix去中心化聊天協議"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
echo -e "${gl_kjlan}91. ${color91}gitea私有代碼倉庫${gl_kjlan}92. ${color92}FileBrowser文件管理器"
|
||||
echo -e "${gl_kjlan}93. ${color93}Dufs極簡靜態文件服務器${gl_kjlan}94. ${color94}Gopeed高速下載工具"
|
||||
echo -e "${gl_kjlan}95. ${color95}paperless文檔管理平台"
|
||||
echo -e "${gl_kjlan}97. ${color97}WireGuard組網(服務端)${gl_kjlan}98. ${color98}WireGuard組網(客戶端)"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
echo -e "${gl_kjlan}b. ${gl_bai}備份全部應用數據${gl_kjlan}r. ${gl_bai}還原全部應用數據"
|
||||
echo -e "${gl_kjlan}------------------------"
|
||||
|
@ -8990,6 +8999,9 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/openlist
|
||||
chmod -R 777 /home/docker/openlist
|
||||
|
||||
docker run -d \
|
||||
--restart=always \
|
||||
-v /home/docker/openlist:/opt/openlist/data \
|
||||
|
@ -9037,7 +9049,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:ubuntu-kde
|
||||
|
||||
|
||||
|
@ -9119,7 +9131,7 @@ while true; do
|
|||
-p 56881:56881/udp \
|
||||
-v /home/docker/qbittorrent/config:/config \
|
||||
-v /home/docker/qbittorrent/downloads:/downloads \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/qbittorrent:latest
|
||||
|
||||
}
|
||||
|
@ -9354,7 +9366,7 @@ while true; do
|
|||
-p ${docker_port}:5700 \
|
||||
--name qinglong \
|
||||
--hostname qinglong \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
whyour/qinglong:latest
|
||||
|
||||
|
||||
|
@ -9420,7 +9432,7 @@ while true; do
|
|||
-e PGID=1000 \
|
||||
-v /home/docker/easyimage/config:/app/web/config \
|
||||
-v /home/docker/easyimage/i:/app/web/i \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
ddsderek/easyimage:latest
|
||||
|
||||
}
|
||||
|
@ -9737,7 +9749,7 @@ while true; do
|
|||
-v /home/docker/webtop/data:/config \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
--shm-size="1gb" \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/webtop:latest
|
||||
|
||||
}
|
||||
|
@ -9800,7 +9812,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --name dockge --restart unless-stopped -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
docker run -d --name dockge --restart=always -p ${docker_port}:5001 -v /var/run/docker.sock:/var/run/docker.sock -v /home/docker/dockge/data:/app/data -v /home/docker/dockge/stacks:/home/docker/dockge/stacks -e DOCKGE_STACKS_DIR=/home/docker/dockge/stacks louislam/dockge
|
||||
|
||||
}
|
||||
|
||||
|
@ -9842,7 +9854,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name searxng \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v "/home/docker/searxng:/etc/searxng" \
|
||||
searxng/searxng
|
||||
|
@ -9996,7 +10008,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d --restart unless-stopped \
|
||||
docker run -d --restart=always \
|
||||
-p ${docker_port}:3000 \
|
||||
-v /home/docker/moments/data:/app/data \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
|
@ -10150,7 +10162,7 @@ while true; do
|
|||
-e ENCRYPTION_KEY=${ENCRYPTION_KEY} \
|
||||
-p ${docker_port}:6989 \
|
||||
-v /home/docker/nexterm:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
germannewsmaker/nexterm:latest
|
||||
|
||||
}
|
||||
|
@ -10171,7 +10183,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbs
|
||||
docker run --name hbbs -v /home/docker/hbbs/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbs
|
||||
|
||||
}
|
||||
|
||||
|
@ -10192,7 +10204,7 @@ while true; do
|
|||
|
||||
docker_rum() {
|
||||
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart unless-stopped rustdesk/rustdesk-server hbbr
|
||||
docker run --name hbbr -v /home/docker/hbbr/data:/root -td --net=host --restart=always rustdesk/rustdesk-server hbbr
|
||||
|
||||
}
|
||||
|
||||
|
@ -10301,7 +10313,7 @@ while true; do
|
|||
docker run -d \
|
||||
--name=node-exporter \
|
||||
-p ${docker_port}:9100 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
prom/node-exporter
|
||||
|
||||
|
||||
|
@ -10325,7 +10337,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name=cadvisor \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
--volume=/:/rootfs:ro \
|
||||
--volume=/var/run:/var/run:rw \
|
||||
|
@ -10696,7 +10708,7 @@ while true; do
|
|||
local docker_port=8064
|
||||
|
||||
docker_rum() {
|
||||
docker run -d --name it-tools --restart unless-stopped -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
docker run -d --name it-tools --restart=always -p ${docker_port}:80 corentinth/it-tools:latest
|
||||
}
|
||||
|
||||
local docker_describe="对开发人员和 IT 工作者来说非常有用的工具"
|
||||
|
@ -10840,7 +10852,7 @@ while true; do
|
|||
-p 6199:6199 \
|
||||
-p 11451:11451 \
|
||||
-v /home/docker/astrbot/data:/AstrBot/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--name astrbot \
|
||||
soulter/astrbot:latest
|
||||
|
||||
|
@ -10865,7 +10877,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name navidrome \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
--user $(id -u):$(id -g) \
|
||||
-v /home/docker/navidrome/music:/music \
|
||||
-v /home/docker/navidrome/data:/data \
|
||||
|
@ -10927,7 +10939,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name libretv \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-e PASSWORD=${app_passwd} \
|
||||
bestzwei/libretv:latest
|
||||
|
@ -10969,9 +10981,9 @@ while true; do
|
|||
|
||||
curl -o /home/docker/moontv/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/kejilion/docker/main/moontv-docker-compose.yml
|
||||
sed -i "s/3000:3000/${docker_port}:3000/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin/${admin}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/admin_password/${admin_password}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s/shouquanma/${shouquanma}/g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin_password|${admin_password}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|admin|${admin}|g" /home/docker/moontv/docker-compose.yml
|
||||
sed -i "s|shouquanma|${shouquanma}|g" /home/docker/moontv/docker-compose.yml
|
||||
cd /home/docker/moontv/
|
||||
docker compose up -d
|
||||
clear
|
||||
|
@ -11008,7 +11020,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name melody \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:5566 \
|
||||
-v /home/docker/melody/.profile:/app/backend/.profile \
|
||||
foamzou/melody:latest
|
||||
|
@ -11037,7 +11049,7 @@ while true; do
|
|||
docker_rum() {
|
||||
docker run -d \
|
||||
--name dosgame \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:262 \
|
||||
oldiy/dosgame-web-docker:latest
|
||||
|
||||
|
@ -11067,7 +11079,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name xunlei \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
--privileged \
|
||||
-e XL_DASHBOARD_USERNAME=${app_use} \
|
||||
-e XL_DASHBOARD_PASSWORD=${app_passwd} \
|
||||
|
@ -11129,7 +11141,7 @@ while true; do
|
|||
mkdir -p /home/docker/beszel && \
|
||||
docker run -d \
|
||||
--name beszel \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
-v /home/docker/beszel:/beszel_data \
|
||||
-p ${docker_port}:8090 \
|
||||
henrygd/beszel
|
||||
|
@ -11347,7 +11359,7 @@ while true; do
|
|||
-v /home/docker/wallos/logos:/var/www/html/images/uploads/logos \
|
||||
-e TZ=UTC \
|
||||
-p ${docker_port}:80 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
bellamy/wallos:latest
|
||||
|
||||
}
|
||||
|
@ -11424,7 +11436,7 @@ while true; do
|
|||
--mount type=bind,source=/home/docker/jellyfin/media,target=/media \
|
||||
-p ${docker_port}:8096 \
|
||||
-p 7359:7359/udp \
|
||||
--restart=unless-stopped \
|
||||
--restart=always \
|
||||
jellyfin/jellyfin
|
||||
|
||||
|
||||
|
@ -11512,7 +11524,7 @@ while true; do
|
|||
--name file-code-box \
|
||||
-p ${docker_port}:12345 \
|
||||
-v /home/docker/file-code-box/data:/app/data \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
lanol/filecodebox:latest
|
||||
|
||||
}
|
||||
|
@ -11553,7 +11565,7 @@ while true; do
|
|||
--name matrix \
|
||||
-v /home/docker/matrix/data:/data \
|
||||
-p ${docker_port}:8008 \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
matrixdotorg/synapse:latest
|
||||
|
||||
echo "創建初始用戶或管理員。請設置以下內容用戶名和密碼以及是否為管理員。"
|
||||
|
@ -11643,7 +11655,7 @@ while true; do
|
|||
|
||||
docker run -d \
|
||||
--name filebrowser \
|
||||
--restart unless-stopped \
|
||||
--restart=always \
|
||||
-p ${docker_port}:8080 \
|
||||
-v /home/docker/filebrowser/data:/data \
|
||||
-v /home/docker/filebrowser/config:/config \
|
||||
|
@ -11661,6 +11673,288 @@ while true; do
|
|||
|
||||
;;
|
||||
|
||||
93|dufs)
|
||||
|
||||
local app_id="93"
|
||||
local docker_name="dufs"
|
||||
local docker_img="sigoden/dufs"
|
||||
local docker_port=8093
|
||||
|
||||
docker_rum() {
|
||||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}:/data \
|
||||
-p ${docker_port}:5000 \
|
||||
${docker_img} /data -A
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="极简静态文件服务器,支持上传下载"
|
||||
local docker_url="官网介绍: https://github.com/sigoden/dufs"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
94|gopeed)
|
||||
|
||||
local app_id="94"
|
||||
local docker_name="gopeed"
|
||||
local docker_img="liwei2633/gopeed"
|
||||
local docker_port=8094
|
||||
|
||||
docker_rum() {
|
||||
|
||||
read -e -p "設置登錄用戶名:" app_use
|
||||
read -e -p "設置登錄密碼:" app_passwd
|
||||
|
||||
docker run -d \
|
||||
--name ${docker_name} \
|
||||
--restart=always \
|
||||
-v /home/docker/${docker_name}/downloads:/app/Downloads \
|
||||
-v /home/docker/${docker_name}/storage:/app/storage \
|
||||
-p ${docker_port}:9999 \
|
||||
${docker_img} -u ${app_use} -p ${app_passwd}
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="分布式高速下载工具,支持多种协议"
|
||||
local docker_url="官网介绍: https://github.com/GopeedLab/gopeed"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
|
||||
95|paperless)
|
||||
|
||||
local app_id="95"
|
||||
|
||||
local app_name="paperless文档管理平台"
|
||||
local app_text="开源的电子文档管理系统,它的主要用途是把你的纸质文件数字化并管理起来。"
|
||||
local app_url="视频介绍: https://docs.paperless-ngx.com/"
|
||||
local docker_name="paperless-webserver-1"
|
||||
local docker_port="8095"
|
||||
local app_size="2"
|
||||
|
||||
docker_app_install() {
|
||||
|
||||
mkdir -p /home/docker/paperless
|
||||
mkdir -p /home/docker/paperless/export
|
||||
mkdir -p /home/docker/paperless/consume
|
||||
cd /home/docker/paperless
|
||||
|
||||
curl -o /home/docker/paperless/docker-compose.yml ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/docker-compose.postgres-tika.yml
|
||||
curl -o /home/docker/paperless/docker-compose.env ${gh_proxy}raw.githubusercontent.com/paperless-ngx/paperless-ngx/refs/heads/main/docker/compose/.env
|
||||
|
||||
sed -i "s/8000:8000/${docker_port}:8000/g" /home/docker/paperless/docker-compose.yml
|
||||
cd /home/docker/paperless
|
||||
docker compose up -d
|
||||
clear
|
||||
echo "已經安裝完成"
|
||||
check_docker_app_ip
|
||||
}
|
||||
|
||||
|
||||
docker_app_update() {
|
||||
cd /home/docker/paperless/ && docker compose down --rmi all
|
||||
docker_app_install
|
||||
}
|
||||
|
||||
|
||||
docker_app_uninstall() {
|
||||
cd /home/docker/paperless/ && docker compose down --rmi all
|
||||
rm -rf /home/docker/paperless
|
||||
echo "應用已卸載"
|
||||
}
|
||||
|
||||
docker_app_plus
|
||||
|
||||
;;
|
||||
|
||||
|
||||
97|wgs)
|
||||
|
||||
local app_id="97"
|
||||
local docker_name="wireguard"
|
||||
local docker_img="lscr.io/linuxserver/wireguard:latest"
|
||||
local docker_port=8097
|
||||
|
||||
docker_rum() {
|
||||
|
||||
read -p "請輸入組網的客戶端數量 (默認 5):" COUNT
|
||||
COUNT=${COUNT:-5}
|
||||
read -p "請輸入 WireGuard 網段 (默認 10.13.13.0):" NETWORK
|
||||
NETWORK=${NETWORK:-10.13.13.0}
|
||||
|
||||
PEERS=$(seq -f "wg%02g" 1 "$COUNT" | paste -sd,)
|
||||
|
||||
ip link delete wg0 &>/dev/null
|
||||
|
||||
ip_address
|
||||
docker run -d \
|
||||
--name=wireguard \
|
||||
--network host \
|
||||
--cap-add=NET_ADMIN \
|
||||
--cap-add=SYS_MODULE \
|
||||
-e PUID=1000 \
|
||||
-e PGID=1000 \
|
||||
-e TZ=Etc/UTC \
|
||||
-e SERVERURL=${ipv4_address} \
|
||||
-e SERVERPORT=51820 \
|
||||
-e PEERS=${PEERS} \
|
||||
-e INTERNAL_SUBNET=${NETWORK} \
|
||||
-e ALLOWEDIPS=${NETWORK}/24 \
|
||||
-e PERSISTENTKEEPALIVE_PEERS=all \
|
||||
-e LOG_CONFS=true \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules \
|
||||
--restart=always \
|
||||
lscr.io/linuxserver/wireguard:latest
|
||||
|
||||
|
||||
sleep 3
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
f='/config/wg_confs/wg0.conf'
|
||||
sed -i 's/51820/${docker_port}/g' \$f
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c "
|
||||
for d in /config/peer_*; do
|
||||
sed -i 's/51820/${docker_port}/g' \$d/*.conf
|
||||
done
|
||||
"
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
sed -i "/^DNS/d" "$d"/*.conf
|
||||
done
|
||||
'
|
||||
|
||||
docker exec wireguard sh -c '
|
||||
for d in /config/peer_*; do
|
||||
for f in "$d"/*.conf; do
|
||||
grep -q "^PersistentKeepalive" "$f" || \
|
||||
sed -i "/^AllowedIPs/ a PersistentKeepalive = 25" "$f"
|
||||
done
|
||||
done
|
||||
'
|
||||
|
||||
docker exec -it wireguard bash -c '
|
||||
for d in /config/peer_*; do
|
||||
cd "$d" || continue
|
||||
conf_file=$(ls *.conf)
|
||||
base_name="${conf_file%.conf}"
|
||||
qrencode -o "$base_name.png" < "$conf_file"
|
||||
done
|
||||
'
|
||||
|
||||
docker restart wireguard
|
||||
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}所有客戶端二維碼配置:${gl_bai}"
|
||||
docker exec -it wireguard bash -c 'for i in $(ls /config | grep peer_ | sed "s/peer_//"); do echo "--- $i ---"; /app/show-peer $i; done'
|
||||
sleep 2
|
||||
echo
|
||||
echo -e "${gl_huang}所有客戶端配置代碼:${gl_bai}"
|
||||
docker exec wireguard sh -c 'for d in /config/peer_*; do echo "# $(basename $d) "; cat $d/*.conf; echo; done'
|
||||
sleep 2
|
||||
echo -e "${gl_lv}${COUNT}個客戶端配置全部輸出,使用方法如下:${gl_bai}"
|
||||
echo -e "${gl_lv}1. 手機下載wg的APP,掃描上方二維碼,可以快速連接網絡${gl_bai}"
|
||||
echo -e "${gl_lv}2. Windows下載客戶端,複製配置代碼連接網絡。${gl_bai}"
|
||||
echo -e "${gl_lv}3. Linux用腳本部署WG客戶端,複製配置代碼連接網絡。${gl_bai}"
|
||||
echo -e "${gl_lv}官方客戶端下載方式: https://www.wireguard.com/install/${gl_bai}"
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
98|wgc)
|
||||
|
||||
local app_id="98"
|
||||
local docker_name="wireguardc"
|
||||
local docker_img="kjlion/wireguard:alpine"
|
||||
local docker_port=51820
|
||||
|
||||
docker_rum() {
|
||||
|
||||
mkdir -p /home/docker/wireguard/config/
|
||||
|
||||
local CONFIG_FILE="/home/docker/wireguard/config/wg0.conf"
|
||||
|
||||
# 創建目錄(如果不存在)
|
||||
mkdir -p "$(dirname "$CONFIG_FILE")"
|
||||
|
||||
echo "請粘貼你的客戶端配置,連續按兩次回車保存:"
|
||||
|
||||
# 初始化變量
|
||||
input=""
|
||||
empty_line_count=0
|
||||
|
||||
# 逐行讀取用戶輸入
|
||||
while IFS= read -r line; do
|
||||
if [[ -z "$line" ]]; then
|
||||
((empty_line_count++))
|
||||
if [[ $empty_line_count -ge 2 ]]; then
|
||||
break
|
||||
fi
|
||||
else
|
||||
empty_line_count=0
|
||||
input+="$line"$'\n'
|
||||
fi
|
||||
done
|
||||
|
||||
# 寫入配置文件
|
||||
echo "$input" > "$CONFIG_FILE"
|
||||
|
||||
echo "客戶端配置已保存到$CONFIG_FILE"
|
||||
|
||||
docker run -d \
|
||||
--name wireguardc \
|
||||
--network host \
|
||||
--cap-add NET_ADMIN \
|
||||
--cap-add SYS_MODULE \
|
||||
-v /home/docker/wireguard/config:/config \
|
||||
-v /lib/modules:/lib/modules:ro \
|
||||
--restart always \
|
||||
kjlion/wireguard:alpine
|
||||
|
||||
sleep 3
|
||||
|
||||
docker logs wireguardc
|
||||
|
||||
break_end
|
||||
|
||||
}
|
||||
|
||||
local docker_describe="现代化、高性能的虚拟专用网络工具"
|
||||
local docker_url="官网介绍: https://www.wireguard.com/"
|
||||
local docker_use=""
|
||||
local docker_passwd=""
|
||||
local app_size="1"
|
||||
docker_app
|
||||
|
||||
;;
|
||||
|
||||
|
||||
|
||||
b)
|
||||
clear
|
||||
|
@ -14016,4 +14310,3 @@ else
|
|||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue