aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohamedBassem <me@mbassem.com>2024-02-20 21:23:28 +0000
committerMohamedBassem <me@mbassem.com>2024-02-20 21:38:14 +0000
commit8711bca9db49546d265fc119b5dcf3eb2db22095 (patch)
tree16bf6fd86da06a80014dfb5738e43a63af038793
parentdbdde49c1e4870f402dc8901e0bf78abb790caf9 (diff)
downloadkarakeep-8711bca9db49546d265fc119b5dcf3eb2db22095.tar.zst
docker: Add a docker-based dev environment
-rw-r--r--.github/workflows/docker.yml4
-rw-r--r--.github/workflows/main.yml1
-rw-r--r--README.md13
-rw-r--r--docker/Dockerfile (renamed from Dockerfile)8
-rw-r--r--docker/Dockerfile.dev11
-rw-r--r--docker/docker-compose.dev.yml58
-rw-r--r--docker/docker-compose.yml (renamed from docker-compose.yml)1
-rw-r--r--docker/start-chrome.sh7
-rw-r--r--docker/yarn.lock4
9 files changed, 99 insertions, 8 deletions
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 907bb4bc..3735e8d6 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -15,8 +15,8 @@ jobs:
- name: Build image
run: |
- docker build . --target workers --tag hoarder-workers
- docker build . --target web --tag hoarder-web
+ docker build . --target workers --tag hoarder-workers -f docker/Dockerfile
+ docker build . --target web --tag hoarder-web -f docker/Dockerfile
- name: Log in to registry
# This is where you will update the PAT to GITHUB_TOKEN
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 44c238f4..28bb13fb 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -3,6 +3,7 @@ on:
push:
branches:
- main
+ pull_request:
jobs:
build-lint:
name: Build and Lint
diff --git a/README.md b/README.md
index 4a33cb9e..a32fa90f 100644
--- a/README.md
+++ b/README.md
@@ -60,6 +60,15 @@ I'm a systems engineer in my day job (and have been for the past 7 years). I did
## Development
+### Docker
+
+You can turnup the whole development environment with:
+`docker compose -f docker/docker-compose.dev.yml up`
+
+### Manual
+
+Or if you have nodejs installed locally, you can do:
+
- `yarn install` in the root of the repo.
- `yarn prisma:migrate:dev` then `yarn prisma:generate` to generate prisma's data and run the database migrations.
- `yarn web` to start the web app.
@@ -75,3 +84,7 @@ I'm a systems engineer in my day job (and have been for the past 7 years). I did
- `packages/shared`: Shared utilities and code between the workers and the web app.
- `packages/web`: Where the nextjs based web app lives.
- `packages/workers`: Where the background job workers (crawler and openai as of now) run.
+
+### Submitting PRs
+
+- Before submitting PRs, you'll want to run `yarn format` and include its changes in the commit. Also make sure `yarn lint` is successful.
diff --git a/Dockerfile b/docker/Dockerfile
index fc1950b4..0e587790 100644
--- a/Dockerfile
+++ b/docker/Dockerfile
@@ -82,12 +82,8 @@ ENV CHROME_PATH "/usr/bin/chromium-browser"
ENV BROWSER_EXECUTABLE_PATH "/app/start-chrome.sh"
ENV BROWSER_USER_DATA_DIR="/tmp/chrome"
-RUN echo '#!/bin/sh' >> /app/start-chrome.sh && \
- echo 'set -x;' >> /app/start-chrome.sh && \
- echo 'id -u chrome &>/dev/null || adduser -S chrome' >> /app/start-chrome.sh && \
- echo 'mkdir -p /tmp/chrome && chown chrome /tmp/chrome' >> /app/start-chrome.sh && \
- echo 'runuser -u chrome -- $CHROME_PATH $@' >> /app/start-chrome.sh && \
- chmod +x /app/start-chrome.sh
+ADD docker/start-chrome.sh .
+RUN chmod +x /app/start-chrome.sh
COPY packages/db packages/db
COPY packages/shared packages/shared
diff --git a/docker/Dockerfile.dev b/docker/Dockerfile.dev
new file mode 100644
index 00000000..9a8de32b
--- /dev/null
+++ b/docker/Dockerfile.dev
@@ -0,0 +1,11 @@
+FROM node:21-alpine
+
+RUN apk add --no-cache libc6-compat chromium runuser make g++ py3-pip linux-headers
+ENV PUPPETEER_SKIP_DOWNLOAD true
+ENV CHROME_PATH "/usr/bin/chromium-browser"
+ENV BROWSER_EXECUTABLE_PATH "/bin/start-chrome.sh"
+ENV BROWSER_USER_DATA_DIR="/tmp/chrome"
+
+WORKDIR /app
+ADD start-chrome.sh /bin
+RUN chmod +x /bin/start-chrome.sh
diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml
new file mode 100644
index 00000000..a6510939
--- /dev/null
+++ b/docker/docker-compose.dev.yml
@@ -0,0 +1,58 @@
+version: "3.8"
+services:
+ web:
+ build:
+ dockerfile: Dockerfile.dev
+ volumes:
+ - data:/data
+ - ..:/app
+ ports:
+ - 3000:3000
+ environment:
+ REDIS_HOST: redis
+ DATABASE_URL: "file:/data/db.db"
+ command:
+ - yarn
+ - web
+ working_dir: /app
+ depends_on:
+ prep:
+ condition: service_completed_successfully
+ redis:
+ image: redis:7.2-alpine
+ volumes:
+ - redis:/data
+ workers:
+ build:
+ dockerfile: Dockerfile.dev
+ volumes:
+ - data:/data
+ - ..:/app
+ working_dir: /app
+ environment:
+ REDIS_HOST: redis
+ DATABASE_URL: "file:/data/db.db"
+ # OPENAI_API_KEY: ...
+ command:
+ - yarn
+ - workers
+ depends_on:
+ prep:
+ condition: service_completed_successfully
+ prep:
+ build:
+ dockerfile: Dockerfile.dev
+ working_dir: /app
+ environment:
+ DATABASE_URL: "file:/data/db.db"
+ volumes:
+ - data:/data
+ - ..:/app
+ command:
+ - /bin/sh
+ - -c
+ - "corepack enable && yarn install --immutable && yarn prisma:generate && yarn prisma:migrate:dev"
+
+volumes:
+ redis:
+ data:
diff --git a/docker-compose.yml b/docker/docker-compose.yml
index 69c5fead..a0cc7366 100644
--- a/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -23,6 +23,7 @@ services:
environment:
REDIS_HOST: redis
DATABASE_URL: "file:/data/db.db"
+ # OPENAI_API_KEY: ...
depends_on:
migration:
condition: service_completed_successfully
diff --git a/docker/start-chrome.sh b/docker/start-chrome.sh
new file mode 100644
index 00000000..9f715906
--- /dev/null
+++ b/docker/start-chrome.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+set -x;
+id -u chrome &>/dev/null || adduser -S chrome;
+mkdir -p $BROWSER_USER_DATA_DIR;
+chown chrome $BROWSER_USER_DATA_DIR;
+runuser -u chrome -- $CHROME_PATH --no-sandbox $@;
diff --git a/docker/yarn.lock b/docker/yarn.lock
new file mode 100644
index 00000000..fb57ccd1
--- /dev/null
+++ b/docker/yarn.lock
@@ -0,0 +1,4 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+