Docker container for serving Indiekit

This commit is contained in:
JP Hastings-Spital 2024-07-15 16:09:25 +01:00
parent 2c41e09eeb
commit 4b955c72e8
6 changed files with 90 additions and 16 deletions

51
.github/workflows/indiekit-docker.yml vendored Normal file
View file

@ -0,0 +1,51 @@
name: Build Indiekit Docker container
on:
push:
branches: ["main"]
paths:
- indiekit/**
workflow_dispatch:
permissions:
contents: read
packages: write
attestations: write
concurrency:
group: "docker"
cancel-in-progress: true
defaults:
run:
shell: bash
jobs:
image-releaser:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Authenticate with Github Container Repository
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: by-jp/indiekit.byjp.me
- name: Build and push Docker image
id: push
uses: docker/build-push-action@v6
with:
context: ./indiekit
file: ./Dockerfile
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

14
indiekit/.dockerignore Normal file
View file

@ -0,0 +1,14 @@
# Docker
.docker
.dockerignore
# Environment
.env
# Git
.git
.gitignore
# Node - as they may not be the same architecture
node_modules
npm-debug.log

19
indiekit/Dockerfile Normal file
View file

@ -0,0 +1,19 @@
FROM node:20-alpine
WORKDIR /usr/src/app
ENV NODE_ENV=production
COPY package*.json ./
# Cant use `npm ci` due to https://github.com/npm/cli/issues/4828
RUN npm i --omit=dev --no-fund
# Copy Indiekit config over
COPY . .
ENV SECRET=
ENV PASSWORD_SECRET=
ENV MONGO_URL=
ENV SITE=https://www.byjp.me/
ENV PORT=80
EXPOSE 80
CMD [ "npm", "run", "start" ]

View file

@ -1,12 +0,0 @@
const env = require('dotenv').config().parsed || {};
module.exports = {
apps : [
{
name: "indiekit",
script: "npm run start",
watch: false,
env,
}
]
};

View file

@ -1,5 +1,8 @@
import dotenv from 'dotenv';
const env = dotenv.config().parsed || {};
const env = (await (
import('dotenv')
.then(dotenv => dotenv.config().parsed)
.catch(() => process.env)
)) || {};
export default {
application: {

View file

@ -5,8 +5,7 @@
"main": "index.js",
"type": "module",
"scripts": {
"start": "indiekit serve",
"dotenv": "dotenv-run-script .env --"
"start": "indiekit serve"
},
"keywords": [
"indiekit",