From 0c692a62e8739ae9b04dfe9e68f451e28233983b Mon Sep 17 00:00:00 2001 From: june Date: Mon, 11 Aug 2025 20:13:00 +1200 Subject: [PATCH] [PIE-1] add api docker files --- api/Dockerfile | 25 +++++++++++++++++++++++++ api/docker-entrypoint.sh | 27 +++++++++++++++++++++++++++ docker-compose.yml | 10 +++++++++- package-lock.json | 9 +++++++++ package.json | 3 +++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 api/Dockerfile create mode 100644 api/docker-entrypoint.sh diff --git a/api/Dockerfile b/api/Dockerfile new file mode 100644 index 0000000..7eeb0ab --- /dev/null +++ b/api/Dockerfile @@ -0,0 +1,25 @@ +FROM alpine:latest + +ARG PB_VERSION=0.29.2 +ENV PB_DATA_DIR=/pb_data + +WORKDIR /pb + +RUN apk add --no-cache \ + unzip \ + curl \ + ca-certificates \ + bash + +# download and unzip PocketBase +ADD https://github.com/pocketbase/pocketbase/releases/download/v${PB_VERSION}/pocketbase_${PB_VERSION}_linux_amd64.zip /tmp/pb.zip +RUN unzip /tmp/pb.zip -d /pb/ + +# copy entrypoint +COPY docker-entrypoint.sh /usr/local/bin/ +RUN chmod +x /usr/local/bin/docker-entrypoint.sh + +EXPOSE 8080 + +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["serve", "--http=0.0.0.0:8080"] diff --git a/api/docker-entrypoint.sh b/api/docker-entrypoint.sh new file mode 100644 index 0000000..30dbbe2 --- /dev/null +++ b/api/docker-entrypoint.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -e + +# Required env-vars +: "${PB_ADMIN_EMAIL:?need PB_ADMIN_EMAIL}" +: "${PB_ADMIN_PASSWORD:?need PB_ADMIN_PASSWORD}" +: "${PB_DATA_DIR:?need PB_DATA_DIR}" + +# ensure data dir exists (for embedded SQLite + migrations + files) +mkdir -p "${PB_DATA_DIR}" +export POCKETBASE_DATA_DIR="${PB_DATA_DIR}" + +# if there are no users yet, create the superuser +# we check the sqlite file for any existing record in the users table +if [ ! -f "${PB_DATA_DIR}/pb_data.db" ] || ! \ + sqlite3 "${PB_DATA_DIR}/pb_data.db" \ + "SELECT id FROM users WHERE email='${PB_ADMIN_EMAIL}' LIMIT 1;" \ + | grep -q .; then + + echo ">>> Creating PocketBase superuser: ${PB_ADMIN_EMAIL}" + /pb/pocketbase superuser create "${PB_ADMIN_EMAIL}" "${PB_ADMIN_PASSWORD}" +else + echo ">>> Superuser ${PB_ADMIN_EMAIL} already exists, skipping creation." +fi + +# exec the real pocketbase binary with any passed arguments +exec /pb/pocketbase "$@" diff --git a/docker-compose.yml b/docker-compose.yml index b4c296c..9ac2cf2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,4 +3,12 @@ services: build: . env_file: .env ports: - - "4173:4173" \ No newline at end of file + - "4173:4173" + + pb: + build: api + env_file: .env + volumes: + - ./data:/pb_data + ports: + - "8080:8080" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 2ca9b04..d430621 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,9 @@ "": { "name": "recipie", "version": "0.0.1", + "dependencies": { + "pocketbase": "^0.26.2" + }, "devDependencies": { "@sveltejs/adapter-node": "^5.2.12", "@sveltejs/kit": "^2.22.0", @@ -2084,6 +2087,12 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pocketbase": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.26.2.tgz", + "integrity": "sha512-WA8EOBc3QnSJh8rJ3iYoi9DmmPOMFIgVfAmIGux7wwruUEIzXgvrO4u0W2htfQjGIcyezJkdZOy5Xmh7SxAftw==", + "license": "MIT" + }, "node_modules/postcss": { "version": "8.5.6", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", diff --git a/package.json b/package.json index ebf4199..0c93b5d 100644 --- a/package.json +++ b/package.json @@ -28,5 +28,8 @@ "tailwindcss": "^4.0.0", "typescript": "^5.0.0", "vite": "^7.0.4" + }, + "dependencies": { + "pocketbase": "^0.26.2" } }