deploy to fly

main
Ethan Niser 2023-09-21 21:02:06 -05:00
parent 21f2ff73b2
commit b9cc259f4e
7 changed files with 259 additions and 29 deletions

@ -0,0 +1,176 @@
# 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.\*
tsconfig.tsbuildinfo
local.sqlite
local.sqlite-shm
local.sqlite-wal
beth-cache.sqlite

@ -0,0 +1,39 @@
# syntax = docker/dockerfile:1
# Adjust BUN_VERSION as desired
ARG BUN_VERSION=1.0.2
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 . .
# Final stage for app image
FROM base
# Copy built application
COPY --from=build /app /app
# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD [ "bun", "run", "start" ]

Binary file not shown.

@ -0,0 +1,17 @@
# fly.toml app configuration file generated for beth-twitter on 2023-09-21T20:49:12-05:00
#
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
#
app = "beth-twitter"
primary_region = "ord"
[build]
[http_service]
internal_port = 3000
force_https = true
auto_stop_machines = true
auto_start_machines = true
min_machines_running = 0
processes = ["app"]

@ -17,6 +17,7 @@
"reset-cache": "rm -rf /home/whatplan/.bun/install/cache && rm -rf node_modules && bun i"
},
"devDependencies": {
"@flydotio/dockerfile": "latest",
"@ianvs/prettier-plugin-sort-imports": "^4.1.0",
"@kitajs/ts-html-plugin": "^1.0.1",
"@total-typescript/ts-reset": "^0.5.1",

@ -55,32 +55,28 @@ export const ctx = new Elysia({
})
: (a) => a,
)
.use(
// @ts-expect-error
config.env.NODE_ENV === "production"
? (
e: Elysia<
"",
{
request: {
log: Logger;
};
store: {};
}
>,
) =>
e
.onStart(({ log }) => log.info("Server starting"))
.onStop(({ log }) => log.info("Server stopping"))
.onRequest(({ log, request }) => {
console.log(typeof log);
log.debug(`Request received: ${request.method}: ${request.url}`);
})
.onResponse(({ log, request, set }) => {
log.debug(
`Response sent: ${request.method}: ${request.url} with status ${set.status}`,
);
})
.onError(({ log, error }) => log.error(error))
: (a) => a,
);
.onStart(({ log }) => {
if (log && config.env.NODE_ENV === "production") {
log.info("Server started");
}
})
.onStop(({ log }) => {
if (log && config.env.NODE_ENV === "production") {
log.info("Server stopped");
}
})
.onRequest(({ log, request }) => {
if (log && config.env.NODE_ENV === "production") {
log.debug(`Request received: ${request.method}: ${request.url}`);
}
})
.onResponse(({ log, request, set }) => {
if (log && config.env.NODE_ENV === "production") {
log.debug(`Response sent: ${request.method}: ${request.url}`);
}
})
.onError(({ log, error }) => {
if (log && config.env.NODE_ENV === "production") {
log.error(error);
}
});

@ -33,6 +33,7 @@ export const index = new Elysia()
) : (
<a
href="/login"
hx-boost="false"
class="mt-4 rounded-lg bg-blue-500 px-4 py-2 text-white transition duration-200 hover:bg-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-50"
>
Sign In