98 lines
2.6 KiB
Bash
Executable File
98 lines
2.6 KiB
Bash
Executable File
#!/bin/sh
|
|
# 让 Cloudreve 与 OnlyOffice 两个容器都用 127.0.0.1 互相访问。
|
|
# 容器重启后 docker exec 里的转发会消失,再执行一次本脚本即可。
|
|
set -eu
|
|
|
|
if ! docker exec cloudreve wget -qO- http://127.0.0.1/healthcheck >/dev/null 2>&1; then
|
|
docker exec -d cloudreve python3 -c '
|
|
import socket, threading
|
|
def pipe(a, b):
|
|
try:
|
|
while True:
|
|
d = a.recv(65536)
|
|
if not d:
|
|
break
|
|
b.sendall(d)
|
|
except Exception:
|
|
pass
|
|
try:
|
|
a.close()
|
|
except Exception:
|
|
pass
|
|
try:
|
|
b.close()
|
|
except Exception:
|
|
pass
|
|
def handle(c):
|
|
try:
|
|
s = socket.create_connection(("host.docker.internal", 80), 5)
|
|
except Exception:
|
|
c.close()
|
|
return
|
|
threading.Thread(target=pipe, args=(c, s), daemon=True).start()
|
|
pipe(s, c)
|
|
srv = socket.socket()
|
|
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
srv.bind(("0.0.0.0", 80))
|
|
srv.listen(50)
|
|
while True:
|
|
c, _ = srv.accept()
|
|
threading.Thread(target=handle, args=(c,), daemon=True).start()
|
|
'
|
|
fi
|
|
|
|
if ! docker exec onlyoffice-docs curl -sf -o /dev/null --max-time 3 http://127.0.0.1:5212/; then
|
|
docker exec -d onlyoffice-docs python3 -c '
|
|
import socket, threading
|
|
def pipe(a, b):
|
|
try:
|
|
while True:
|
|
d = a.recv(65536)
|
|
if not d:
|
|
break
|
|
b.sendall(d)
|
|
except Exception:
|
|
pass
|
|
try:
|
|
a.close()
|
|
except Exception:
|
|
pass
|
|
try:
|
|
b.close()
|
|
except Exception:
|
|
pass
|
|
def handle(c):
|
|
try:
|
|
s = socket.create_connection(("host.docker.internal", 5212), 5)
|
|
except Exception:
|
|
c.close()
|
|
return
|
|
threading.Thread(target=pipe, args=(c,), daemon=True).start()
|
|
pipe(s, c)
|
|
srv = socket.socket()
|
|
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
srv.bind(("0.0.0.0", 5212))
|
|
srv.listen(50)
|
|
while True:
|
|
c, _ = srv.accept()
|
|
threading.Thread(target=handle, args=(c,), daemon=True).start()
|
|
'
|
|
fi
|
|
|
|
docker exec -i onlyoffice-docs python3 - << 'PY'
|
|
import json
|
|
p = "/etc/onlyoffice/documentserver/local.json"
|
|
d = json.load(open(p))
|
|
rules = d.setdefault("services", {}).setdefault("CoAuthoring", {}).setdefault("ipfilter", {}).setdefault("rules", [])
|
|
have = {r.get("address") for r in rules}
|
|
for addr in ("127.0.0.1", "::1", "localhost", "host.docker.internal"):
|
|
if addr not in have:
|
|
rules.append({"address": addr, "allowed": True})
|
|
wopi = d.setdefault("wopi", {})
|
|
wopi["enable"] = True
|
|
json.dump(d, open(p, "w"), indent=2)
|
|
print("ipfilter", [r.get("address") for r in rules])
|
|
PY
|
|
|
|
echo "bridge ready"
|