about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAlan Pearce2023-09-14 11:40:17 +0200
committerAlan Pearce2023-09-15 19:24:52 +0200
commit02abf6ebb5ac4979537ee52ccdc93a4f29820cea (patch)
tree62b352dcae0e615e7404d91e8788e941f5338710
parent75041215b306fd5b7e7a86c2b0f35e5590010dea (diff)
downloadhomestead-02abf6ebb5ac4979537ee52ccdc93a4f29820cea.tar.lz
homestead-02abf6ebb5ac4979537ee52ccdc93a4f29820cea.tar.zst
homestead-02abf6ebb5ac4979537ee52ccdc93a4f29820cea.zip
Build with docker
-rw-r--r--.dockerignore169
-rw-r--r--Dockerfile60
-rw-r--r--package.json3
-rw-r--r--src/index.ts2
4 files changed, 233 insertions, 1 deletions
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..f81d56e
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,169 @@
+# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore
+
+# Logs
+
+logs
+_.log
+npm-debug.log_
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+.pnpm-debug.log*
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+
+report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
+
+# Runtime data
+
+pids
+_.pid
+_.seed
+\*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+
+lib-cov
+
+# Coverage directory used by tools like istanbul
+
+coverage
+\*.lcov
+
+# nyc test coverage
+
+.nyc_output
+
+# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
+
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+
+bower_components
+
+# node-waf configuration
+
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+
+build/Release
+
+# Dependency directories
+
+node_modules/
+jspm_packages/
+
+# Snowpack dependency directory (https://snowpack.dev/)
+
+web_modules/
+
+# TypeScript cache
+
+\*.tsbuildinfo
+
+# Optional npm cache directory
+
+.npm
+
+# Optional eslint cache
+
+.eslintcache
+
+# Optional stylelint cache
+
+.stylelintcache
+
+# Microbundle cache
+
+.rpt2_cache/
+.rts2_cache_cjs/
+.rts2_cache_es/
+.rts2_cache_umd/
+
+# Optional REPL history
+
+.node_repl_history
+
+# Output of 'npm pack'
+
+\*.tgz
+
+# Yarn Integrity file
+
+.yarn-integrity
+
+# dotenv environment variable files
+
+.env
+.env.development.local
+.env.test.local
+.env.production.local
+.env.local
+
+# parcel-bundler cache (https://parceljs.org/)
+
+.cache
+.parcel-cache
+
+# Next.js build output
+
+.next
+out
+
+# Nuxt.js build / generate output
+
+.nuxt
+dist
+
+# Gatsby files
+
+.cache/
+
+# Comment in the public line in if your project uses Gatsby and not Next.js
+
+# https://nextjs.org/blog/next-9-1#public-directory-support
+
+# public
+
+# vuepress build output
+
+.vuepress/dist
+
+# vuepress v2.x temp and cache directory
+
+.temp
+.cache
+
+# Docusaurus cache and generated files
+
+.docusaurus
+
+# Serverless directories
+
+.serverless/
+
+# FuseBox cache
+
+.fusebox/
+
+# DynamoDB Local files
+
+.dynamodb/
+
+# TernJS port file
+
+.tern-port
+
+# Stores VSCode versions used for testing VSCode extensions
+
+.vscode-test
+
+# yarn v2
+
+.yarn/cache
+.yarn/unplugged
+.yarn/build-state.yml
+.yarn/install-state.gz
+.pnp.\*
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..79533e9
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,60 @@
+# syntax = docker/dockerfile:1
+
+# Adjust BUN_VERSION as desired
+ARG BUN_VERSION=0.8.1
+ARG ZOLA_VERSION=0.17.1
+FROM oven/bun:${BUN_VERSION} as base
+
+LABEL fly_launch_runtime="Bun"
+
+# Bun app lives here
+WORKDIR /app
+
+# Set production environment
+ENV NODE_ENV="production"
+
+# Throw-away build stage to reduce size of final image
+FROM base as build
+
+# # Install packages needed to build node modules
+# RUN apt-get update -qq && \
+#     apt-get install -y build-essential pkg-config python-is-python3
+
+# Install node modules
+COPY --link bun.lockb package.json ./
+RUN bun install --ci
+
+# Copy application code
+COPY --link src src
+
+FROM ghcr.io/getzola/zola:v${ZOLA_VERSION} as ssg
+
+WORKDIR /web
+
+COPY --link website ./
+
+RUN [ "zola", "build", "--force" ]
+
+FROM alpine:edge as postprocess
+
+WORKDIR /web
+
+RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
+
+RUN apk add --no-cache prettier@testing make fd brotli gzip zstd
+
+COPY --from=ssg /web ./
+
+RUN make -j4 format compress
+
+# Final stage for app image
+FROM base
+
+# Copy built application
+COPY --from=build /app /app
+COPY --from=postprocess /web/ /app/website
+
+# Start the server by default, this can be overwritten at runtime
+EXPOSE 3000
+EXPOSE 9091
+CMD [ "bun", "run", "src/index.ts" ]
diff --git a/package.json b/package.json
index a0b6a73..f51b68d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,9 @@
 {
   "name": "homestead",
   "module": "src/index.ts",
+  "scripts": {
+    "start": "bun run ."
+  },
   "devDependencies": {
     "bun-types": "latest"
   },
diff --git a/src/index.ts b/src/index.ts
index 2818682..f968fda 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -5,7 +5,7 @@ import prom from "bun-prometheus-client";
 
 import readConfig from "./config";
 
-const base = "../website/";
+const base = "./website/";
 const publicDir = path.resolve(base, "public") + path.sep;
 
 const config = readConfig(base);