mirror of
https://github.com/versia-pub/server.git
synced 2026-03-13 05:49:16 +01:00
refactor: 🚚 Organize code into sub-packages, instead of a single large package
This commit is contained in:
parent
79742f47dc
commit
a6d3ebbeef
366 changed files with 942 additions and 833 deletions
36
packages/worker/build.ts
Normal file
36
packages/worker/build.ts
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
import { $, build } from "bun";
|
||||
|
||||
console.log("Building...");
|
||||
|
||||
await $`rm -rf dist && mkdir dist`;
|
||||
|
||||
await build({
|
||||
entrypoints: [
|
||||
"packages/worker/index.ts",
|
||||
// HACK: Include to avoid cyclical import errors
|
||||
"packages/config/index.ts",
|
||||
"cli/index.ts",
|
||||
],
|
||||
outdir: "dist",
|
||||
target: "bun",
|
||||
splitting: true,
|
||||
minify: false,
|
||||
});
|
||||
|
||||
console.log("Copying files...");
|
||||
|
||||
// Fix Bun build mistake
|
||||
await $`sed -i 's/ProxiableUrl, exportedConfig/exportedConfig/g' dist/packages/config/*.js`;
|
||||
|
||||
// Copy Drizzle stuff
|
||||
await $`mkdir -p dist/packages/plugin-kit/tables`;
|
||||
await $`cp -rL packages/plugin-kit/tables/migrations dist/packages/plugin-kit/tables`;
|
||||
|
||||
// Copy Sharp to dist
|
||||
await $`mkdir -p dist/node_modules/@img`;
|
||||
await $`cp -rL node_modules/@img/sharp-libvips-linux* dist/node_modules/@img`;
|
||||
await $`cp -rL node_modules/@img/sharp-linux* dist/node_modules/@img`;
|
||||
|
||||
await $`cp -rL node_modules/detect-libc dist/node_modules/`;
|
||||
|
||||
console.log("Build complete!");
|
||||
22
packages/worker/index.ts
Normal file
22
packages/worker/index.ts
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import process from "node:process";
|
||||
import { getLogger } from "@logtape/logtape";
|
||||
import chalk from "chalk";
|
||||
import { sentry } from "@/sentry";
|
||||
import { workers } from "./workers.ts";
|
||||
|
||||
process.on("SIGINT", () => {
|
||||
process.exit();
|
||||
});
|
||||
|
||||
await import("./setup.ts");
|
||||
sentry?.captureMessage("Server started", "info");
|
||||
|
||||
const serverLogger = getLogger("server");
|
||||
|
||||
for (const [worker, fn] of Object.entries(workers)) {
|
||||
serverLogger.info`Starting ${worker} Worker...`;
|
||||
fn();
|
||||
serverLogger.info`${chalk.green("✔")} ${worker} Worker started`;
|
||||
}
|
||||
|
||||
serverLogger.info`${chalk.green("✔✔✔✔✔✔")} All workers started`;
|
||||
46
packages/worker/package.json
Normal file
46
packages/worker/package.json
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"name": "@versia-server/worker",
|
||||
"module": "index.ts",
|
||||
"type": "module",
|
||||
"version": "0.9.0-alpha.0",
|
||||
"description": "Powerful, configurable and modular federated server using the Versia Protocol.",
|
||||
"homepage": "https://versia.pub",
|
||||
"author": {
|
||||
"email": "contact@cpluspatch.com",
|
||||
"name": "Jesse Wierzbinski",
|
||||
"url": "https://cpluspatch.com"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/versia-pub/server/issues"
|
||||
},
|
||||
"icon": "https://cdn.versia.pub/branding/icon.svg",
|
||||
"license": "AGPL-3.0-or-later",
|
||||
"keywords": [
|
||||
"federated",
|
||||
"activitypub",
|
||||
"bun"
|
||||
],
|
||||
"maintainers": [
|
||||
{
|
||||
"email": "contact@cpluspatch.com",
|
||||
"name": "Jesse Wierzbinski",
|
||||
"url": "https://cpluspatch.com"
|
||||
}
|
||||
],
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/versia-pub/server.git",
|
||||
"directory": "packages/worker"
|
||||
},
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "bun run --hot index.ts",
|
||||
"build": "bun run build-worker.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@versia-server/config": "workspace:*",
|
||||
"@versia/kit": "workspace:*",
|
||||
"chalk": "catalog:",
|
||||
"@logtape/logtape": "catalog:"
|
||||
}
|
||||
}
|
||||
43
packages/worker/setup.ts
Normal file
43
packages/worker/setup.ts
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
import { getLogger } from "@logtape/logtape";
|
||||
import { Note, setupDatabase } from "@versia/kit/db";
|
||||
import { config } from "@versia-server/config";
|
||||
import chalk from "chalk";
|
||||
import { configureLoggers } from "@/loggers";
|
||||
import { connection } from "@/redis.ts";
|
||||
import { searchManager } from "../../classes/search/search-manager.ts";
|
||||
|
||||
const timeAtStart = performance.now();
|
||||
|
||||
await configureLoggers();
|
||||
|
||||
const serverLogger = getLogger("server");
|
||||
|
||||
console.info(`
|
||||
██╗ ██╗███████╗██████╗ ███████╗██╗ █████╗
|
||||
██║ ██║██╔════╝██╔══██╗██╔════╝██║██╔══██╗
|
||||
██║ ██║█████╗ ██████╔╝███████╗██║███████║
|
||||
╚██╗ ██╔╝██╔══╝ ██╔══██╗╚════██║██║██╔══██║
|
||||
╚████╔╝ ███████╗██║ ██║███████║██║██║ ██║
|
||||
╚═══╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝╚═╝ ╚═╝
|
||||
${chalk.redBright.bold("** WORKER MODE **")}
|
||||
`);
|
||||
|
||||
serverLogger.info`Starting Versia Server Worker...`;
|
||||
|
||||
await setupDatabase();
|
||||
|
||||
if (config.search.enabled) {
|
||||
await searchManager.connect();
|
||||
}
|
||||
|
||||
// Check if database is reachable
|
||||
const postCount = await Note.getCount();
|
||||
|
||||
serverLogger.info`Versia Server Worker started at ${config.http.bind}:${config.http.bind_port} in ${(performance.now() - timeAtStart).toFixed(0)}ms`;
|
||||
|
||||
serverLogger.info`Database is online, containing ${postCount} posts`;
|
||||
|
||||
// Check if Redis is reachable
|
||||
await connection.ping();
|
||||
|
||||
serverLogger.info`Redis is online`;
|
||||
15
packages/worker/workers.ts
Normal file
15
packages/worker/workers.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import { getDeliveryWorker } from "~/classes/queues/delivery";
|
||||
import { getFetchWorker } from "~/classes/queues/fetch";
|
||||
import { getInboxWorker } from "~/classes/queues/inbox";
|
||||
import { getMediaWorker } from "~/classes/queues/media";
|
||||
import { getPushWorker } from "~/classes/queues/push";
|
||||
import { getRelationshipWorker } from "~/classes/queues/relationships";
|
||||
|
||||
export const workers = {
|
||||
fetch: getFetchWorker,
|
||||
delivery: getDeliveryWorker,
|
||||
inbox: getInboxWorker,
|
||||
push: getPushWorker,
|
||||
media: getMediaWorker,
|
||||
relationship: getRelationshipWorker,
|
||||
} as const;
|
||||
Loading…
Add table
Add a link
Reference in a new issue