Skip to content

Commit

Permalink
nuxt prisma
Browse files Browse the repository at this point in the history
  • Loading branch information
rubys committed Dec 24, 2024
1 parent 708772d commit 17b1d42
Show file tree
Hide file tree
Showing 12 changed files with 15,318 additions and 6 deletions.
2 changes: 1 addition & 1 deletion gdf.js
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,7 @@ export class GDF {
env.CACHE_DATABASE_FILENAME = 'cache.db'
env.CACHE_DATABASE_PATH = '$LITEFS_DIR/$CACHE_DATABASE_FILENAME'
env.PORT = this.port + 1
} else {
} else if (!this.prismaFile) {
env.DATABASE_URL = `file:///${this.litefs ? 'litefs' : 'data'}/sqlite.db`
if (this.litefs) env.PORT = this.port + 1
}
Expand Down
2 changes: 1 addition & 1 deletion templates/docker-entrypoint.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ if (process.env.DATABASE_URL) {
%>'<% if (litefs) { %> && process.env.FLY_REGION === process.env.PRIMARY_REGION<% } %>) {
<% if (prisma) { -%>
<% if (prismaFile) { -%>
<%= tab(2) %>const source = path.resolve('<%- prismaFile %>')
<%= tab(2) %>const source = path.resolve(<% if (nuxtjs) { %>'./.output/server', <% } %>'<%- prismaFile %>')
<%= tab(2) %>const target = '/data/' + path.basename(source)
<%= tab(2) %>if (!fs.existsSync(source) && fs.existsSync('/data')) fs.symlinkSync(target, source)
<% } -%>
Expand Down
1 change: 0 additions & 1 deletion test/base/defer-build/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -52,5 +52,4 @@ ENTRYPOINT [ "/app/docker-entrypoint.js" ]

# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
ENV DATABASE_URL="file:///data/sqlite.db"
CMD [ "npm", "run", "start" ]
1 change: 0 additions & 1 deletion test/base/litestream/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -56,5 +56,4 @@ ENTRYPOINT [ "/app/docker-entrypoint.js" ]

# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
ENV DATABASE_URL="file:///data/sqlite.db"
CMD [ "npm", "run", "start" ]
9 changes: 9 additions & 0 deletions test/frameworks/nuxt-prisma/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/.git
/node_modules
.dockerignore
.env
Dockerfile
fly.toml

dev.db
prisma/dev.db
63 changes: 63 additions & 0 deletions test/frameworks/nuxt-prisma/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# syntax = docker/dockerfile:1

# Adjust NODE_VERSION as desired
ARG NODE_VERSION=xxx
FROM node:${NODE_VERSION}-slim AS base

LABEL fly_launch_runtime="Nuxt/Prisma"

# Nuxt/Prisma 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 --no-install-recommends -y build-essential git node-gyp openssl pkg-config python-is-python3

# Install node modules
COPY package-lock.json package.json ./
RUN npm ci --include=dev

# Generate Prisma Client
COPY prisma .
RUN npx prisma generate

# Copy application code
COPY . .

# Build application
RUN npm run build


# Final stage for app image
FROM base

# Install packages needed for deployment
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y ca-certificates openssl wget && \
rm -rf /var/lib/apt/lists /var/cache/apt/archives

RUN wget https://github.com/benbjohnson/litestream/releases/download/v0.3.13/litestream-v0.3.13-linux-amd64.deb && \
dpkg -i litestream-v0.3.13-linux-amd64.deb && \
rm litestream-v0.3.13-linux-amd64.deb

# Copy built application
COPY --from=build /app /app

# Setup sqlite3 on a separate volume
RUN mkdir -p /data
VOLUME /data

# Entrypoint prepares the database.
ENTRYPOINT [ "/app/docker-entrypoint.js" ]

# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
ENV HOST=0
CMD [ "node", ".output/server/index.mjs" ]
35 changes: 35 additions & 0 deletions test/frameworks/nuxt-prisma/docker-entrypoint.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/usr/bin/env node

const { spawn } = require('node:child_process')
const path = require('node:path')
const fs = require('node:fs')

const env = { ...process.env }

;(async() => {
// If running the web server then migrate existing database
if (process.argv.slice(2).join(' ') === 'node .output/server/index.mjs') {
const source = path.resolve('./.output/server', './dev.db')
const target = '/data/' + path.basename(source)
if (!fs.existsSync(source) && fs.existsSync('/data')) fs.symlinkSync(target, source)
const newDb = !fs.existsSync(target)
await exec('npx prisma migrate deploy')
if (newDb) await exec('npx prisma db seed')
}

// launch application
await exec(process.argv.slice(2).join(' '))
})()

function exec(command) {
const child = spawn(command, { shell: true, stdio: 'inherit', env })
return new Promise((resolve, reject) => {
child.on('exit', code => {
if (code === 0) {
resolve()
} else {
reject(new Error(`${command} failed rc=${code}`))
}
})
})
}
Loading

0 comments on commit 17b1d42

Please sign in to comment.