diff --git a/Dockerfile b/Dockerfile index 74ce4eb..1f2faba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -90,13 +90,14 @@ ENV LD_LIBRARY_PATH=/app/lib ENV PATH=/app/bin:$PATH RUN deno task fetch && deno task server-build && deno task prebuild && \ - deno task cache && rm -rf ~/.cache && \ + deno task cache && deno task download_ffi && rm -rf ~/.cache && \ mkdir -p ./thumbnails && chmod 777 ./thumbnails && \ mkdir -p ./downloads && chmod 777 ./downloads && \ mkdir -p ./data && chmod 777 ./data && chmod 777 /deno-dir ENV DENO_DEPLOYMENT_ID=${DENO_DEPLOYMENT_ID} ENV DOCKER=true ENV DB_USE_FFI=true +ENV DENO_SQLITE_PATH=/app/lib/libsqlite3.so EXPOSE 8000 ENTRYPOINT ["/tini", "--", "deno", "task", "server"] diff --git a/deno.json b/deno.json index 215241a..6497855 100644 --- a/deno.json +++ b/deno.json @@ -12,7 +12,8 @@ "fetch": "deno run --allow-read=./ --allow-write=./ --allow-net fetch_static_files.ts", "gen_meili_server_key": "deno run --allow-net scripts/gen_meili_server_key.ts", "server-build": "deno run -A server-dev.ts build", - "prebuild": "deno run -A scripts/prebuild.ts" + "prebuild": "deno run -A scripts/prebuild.ts", + "download_ffi": "deno run --allow-read=./ --allow-write=./lib --allow-net scripts/download_ffi.ts" }, "fmt": { "indentWidth": 4, diff --git a/scripts/download_ffi.ts b/scripts/download_ffi.ts new file mode 100644 index 0000000..732dc13 --- /dev/null +++ b/scripts/download_ffi.ts @@ -0,0 +1,28 @@ +import { dirname } from "std/path/mod.ts"; +import { sure_dir } from "../utils.ts"; + +const map = JSON.parse(await Deno.readTextFile("./import_map.json")).imports; +const re = /x\/sqlite3@([0-9\.]+)/; +const sqlite3_version = map["sqlite3/"].match(re)[1]; + +async function fetch_file(u: string | URL, p: string) { + await sure_dir(dirname(p)); + const f = await Deno.open(p, { create: true, write: true, truncate: true }); + try { + const r = await fetch(u); + if (!r.body) throw Error("No body."); + await r.body.pipeTo(f.writable); + } finally { + try { + f.close(); + } catch (_) { + null; + } + } +} + +await fetch_file( + `https://github.com/denodrivers/sqlite3/releases/download/${sqlite3_version}/libsqlite3.so`, + `./lib/libsqlite3.so`, +); +Deno.exit(0);