From 567380422f7b2011bdfec15289e66ef1aafcef1c Mon Sep 17 00:00:00 2001 From: themodernhakr Date: Mon, 23 Dec 2024 00:06:26 -0600 Subject: [PATCH] configure for docker --- .dockerignore | 3 + Dockerfile | 24 ++++++++ bun.lockb | Bin 152108 -> 162043 bytes docker-compose.yaml | 13 ++++ drizzle/0000_youthful_sway.sql | 15 +++++ drizzle/meta/0000_snapshot.json | 106 ++++++++++++++++++++++++++++++++ drizzle/meta/_journal.json | 13 ++++ index.ts | 1 + package.json | 44 ++++++------- src/lib/server/db/index.ts | 4 +- svelte.config.js | 2 +- 11 files changed, 201 insertions(+), 24 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yaml create mode 100644 drizzle/0000_youthful_sway.sql create mode 100644 drizzle/meta/0000_snapshot.json create mode 100644 drizzle/meta/_journal.json create mode 100644 index.ts diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..31fda85 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +node_modules/ +.svelte-kit/ +build/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b51fc73 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,24 @@ +FROM oven/bun AS builder + +WORKDIR /app + +COPY . . + +RUN apt update +RUN apt install build-essential python3 -y + +RUN bun i +RUN bun run build + +RUN ls -a + +FROM oven/bun + +COPY --from=builder /app/build . +COPY --from=builder /app/drizzle . +COPY --from=builder /app/drizzle.config.ts . +COPY /local.db . + +EXPOSE 3000 + +CMD ["bun", "run", "start"] diff --git a/bun.lockb b/bun.lockb index 33391d2d9fd76447f09525b6a913f3d88bbf9eaf..cb71060761f15d3f600b91f05315382a0d27033b 100755 GIT binary patch delta 40854 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 delta 36093 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 statement-breakpoint +CREATE TABLE `user` ( + `id` text PRIMARY KEY NOT NULL, + `age` integer, + `username` text NOT NULL, + `password_hash` text NOT NULL +); +--> statement-breakpoint +CREATE UNIQUE INDEX `user_username_unique` ON `user` (`username`); \ No newline at end of file diff --git a/drizzle/meta/0000_snapshot.json b/drizzle/meta/0000_snapshot.json new file mode 100644 index 0000000..df43b49 --- /dev/null +++ b/drizzle/meta/0000_snapshot.json @@ -0,0 +1,106 @@ +{ + "version": "6", + "dialect": "sqlite", + "id": "e61f6036-2b90-47d1-a92c-e66fa8f4cba6", + "prevId": "00000000-0000-0000-0000-000000000000", + "tables": { + "session": { + "name": "session", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": {}, + "foreignKeys": { + "session_user_id_user_id_fk": { + "name": "session_user_id_user_id_fk", + "tableFrom": "session", + "tableTo": "user", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "user": { + "name": "user", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "age": { + "name": "age", + "type": "integer", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "username": { + "name": "username", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "password_hash": { + "name": "password_hash", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "user_username_unique": { + "name": "user_username_unique", + "columns": [ + "username" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": {}, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "indexes": {} + } +} \ No newline at end of file diff --git a/drizzle/meta/_journal.json b/drizzle/meta/_journal.json new file mode 100644 index 0000000..042b7ff --- /dev/null +++ b/drizzle/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "7", + "dialect": "sqlite", + "entries": [ + { + "idx": 0, + "version": "6", + "when": 1734840812601, + "tag": "0000_youthful_sway", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/index.ts b/index.ts new file mode 100644 index 0000000..f67b2c6 --- /dev/null +++ b/index.ts @@ -0,0 +1 @@ +console.log("Hello via Bun!"); \ No newline at end of file diff --git a/package.json b/package.json index 7603766..fc1137b 100644 --- a/package.json +++ b/package.json @@ -18,30 +18,32 @@ "db:studio": "drizzle-kit studio" }, "devDependencies": { - "@eslint/compat": "^1.2.3", - "@sveltejs/adapter-node": "^5.2.9", - "@sveltejs/kit": "^2.0.0", - "@sveltejs/vite-plugin-svelte": "^4.0.0", - "@types/better-sqlite3": "^7.6.11", - "drizzle-kit": "^0.22.0", - "eslint": "^9.7.0", + "@eslint/compat": "^1.2.4", + "@sveltejs/adapter-node": "^5.2.11", + "@sveltejs/kit": "^2.15.0", + "@sveltejs/vite-plugin-svelte": "^5.0.3", + "@types/bun": "latest", + "drizzle-kit": "^0.30.1", + "eslint": "^9.17.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-svelte": "^2.36.0", - "globals": "^15.0.0", - "prettier": "^3.3.2", - "prettier-plugin-svelte": "^3.2.6", - "svelte": "^5.0.0", - "svelte-check": "^4.0.0", - "typescript": "^5.0.0", - "typescript-eslint": "^8.0.0", - "vite": "^5.4.11", - "vitest": "^2.0.4" + "eslint-plugin-svelte": "^2.46.1", + "globals": "^15.14.0", + "prettier": "^3.4.2", + "prettier-plugin-svelte": "^3.3.2", + "svelte": "^5.15.0", + "svelte-adapter-bun": "^0.5.2", + "svelte-check": "^4.1.1", + "typescript": "^5.7.2", + "typescript-eslint": "^8.18.1", + "vite": "^6.0.5", + "vitest": "^2.1.8" }, "dependencies": { - "@node-rs/argon2": "^1.1.0", + "@libsql/client": "^0.14.0", + "@node-rs/argon2": "^2.0.2", "@oslojs/crypto": "^1.0.1", "@oslojs/encoding": "^1.1.0", - "better-sqlite3": "^11.1.2", - "drizzle-orm": "^0.33.0" - } + "drizzle-orm": "^0.38.2" + }, + "module": "index.ts" } diff --git a/src/lib/server/db/index.ts b/src/lib/server/db/index.ts index 205b05b..7a1ca94 100644 --- a/src/lib/server/db/index.ts +++ b/src/lib/server/db/index.ts @@ -1,5 +1,5 @@ -import { drizzle } from 'drizzle-orm/better-sqlite3'; -import Database from 'better-sqlite3'; +import { drizzle } from 'drizzle-orm/bun-sqlite'; +import Database from 'bun:sqlite'; import { env } from '$env/dynamic/private'; if (!env.DATABASE_URL) throw new Error('DATABASE_URL is not set'); const client = new Database(env.DATABASE_URL); diff --git a/svelte.config.js b/svelte.config.js index e0a641e..1d5479b 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -1,4 +1,4 @@ -import adapter from '@sveltejs/adapter-node'; +import adapter from 'svelte-adapter-bun'; import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; /** @type {import('@sveltejs/kit').Config} */