From 15c6d744b5a6e4fdcb0f03ab016aaef1aaa4b375 Mon Sep 17 00:00:00 2001 From: Michael Lam Date: Fri, 12 Feb 2021 20:29:33 +0800 Subject: [PATCH 1/8] Changed to a more recent docker base image lts-buster. --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5fb528c..fac3a9f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:boron +FROM node:lts-buster WORKDIR /usr/src/app COPY package.json package-lock.json ./ From 703120dc3a5768e3466c69930c0176c2a40b5762 Mon Sep 17 00:00:00 2001 From: Michael Lam Date: Sat, 13 Feb 2021 12:03:08 +0800 Subject: [PATCH 2/8] Updated ignore file to ignore testing configurations. Modified configuration template to point to database under "data" folder. To allow better containerisation effort. Modified config file location to better allow containerisation. --- .gitignore | 3 ++- Dockerfile | 1 + schnack.tpl.json | 4 ++-- src/config.js | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 8f220cd..1674592 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ schnack.json npm-debug.log *.sublime-* .DS_Store -certs/* \ No newline at end of file +certs/* +config/* diff --git a/Dockerfile b/Dockerfile index fac3a9f..59d8fa3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,6 +3,7 @@ FROM node:lts-buster WORKDIR /usr/src/app COPY package.json package-lock.json ./ RUN npm install +RUN npm install @schnack/plugin-auth-github COPY . . diff --git a/schnack.tpl.json b/schnack.tpl.json index 026d8a9..a61a620 100644 --- a/schnack.tpl.json +++ b/schnack.tpl.json @@ -3,8 +3,8 @@ "page_url": "https://blog.example.com/posts/%SLUG%", "port": 3000, "database": { - "comments": "comments.db", - "sessions": "sessions.db" + "comments": "data/comments.db", + "sessions": "data/sessions.db" }, "admins": [1], "plugins": { diff --git a/src/config.js b/src/config.js index b72bcfe..fef47bc 100644 --- a/src/config.js +++ b/src/config.js @@ -3,7 +3,7 @@ const crypto = require('crypto'); nconf .argv() - .file({ file: './schnack.json' }) + .file({ file: './config/schnack.json' }) .env() .defaults({ admins: [1], From 3b2c1098fab383cd03a8bc76133909db1d438032 Mon Sep 17 00:00:00 2001 From: Michael Lam Date: Sat, 13 Feb 2021 13:00:37 +0800 Subject: [PATCH 3/8] Changed Dockerfile to allow plugins to be installed and configurable. Added a hook to allow plugin to be installed. --- Dockerfile | 5 +++-- init.sh | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100755 init.sh diff --git a/Dockerfile b/Dockerfile index 59d8fa3..4284e43 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,9 +3,10 @@ FROM node:lts-buster WORKDIR /usr/src/app COPY package.json package-lock.json ./ RUN npm install -RUN npm install @schnack/plugin-auth-github +# RUN npm install @schnack/plugin-auth-github COPY . . EXPOSE 3000 -CMD [ "npm", "run", "server" ] +CMD ./init.sh +#CMD [ "npm", "run", "server" ] diff --git a/init.sh b/init.sh new file mode 100755 index 0000000..d279f14 --- /dev/null +++ b/init.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# Use npm install @schnack/plugin-auth-github to install additional plugins. Plugin list can be found here: +# https://github.com/schn4ck/schnack-plugins + +source config/plugins + + +npm run server From 39f7529feb6ea7ce80d88f84268a55f3c82a674c Mon Sep 17 00:00:00 2001 From: Michael Lam Date: Sat, 13 Feb 2021 13:44:09 +0800 Subject: [PATCH 4/8] Updated README.md and make init.sh recognise config/plugins before sourcing it. --- README.md | 8 +++++++- init.sh | 5 ++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 02df2ae..fc91ffc 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # schnack.js +Forked from schn4ck/schnack, for detailed documentation, please refer there. + +This is a docker friendly version with their changes. + +I am trying to make it up-to-date as much as possible. + [Schnack](https://dict.leo.org/englisch-deutsch/schnack) is a simple Disqus-like drop-in commenting system written in JavaScript. - [Documentation](https://schnack.cool/) @@ -182,4 +188,4 @@ npm run dev We're veIf you want to contribute additional **plugins**, check out the source code for the existing plugins first. We happily accept pull requests on [schnack-plugins](https://github.com/schn4ck/schnack-plugins). -This project used [Conventional Commits](https://www.conventionalcommits.org/). \ No newline at end of file +This project used [Conventional Commits](https://www.conventionalcommits.org/). diff --git a/init.sh b/init.sh index d279f14..3c2f434 100755 --- a/init.sh +++ b/init.sh @@ -3,7 +3,10 @@ # Use npm install @schnack/plugin-auth-github to install additional plugins. Plugin list can be found here: # https://github.com/schn4ck/schnack-plugins -source config/plugins +if [ -f config/plugins ] +then + source config/plugins +fi npm run server From 7c6472df52532902ad20523c3acec20a4fb8ae95 Mon Sep 17 00:00:00 2001 From: Michael Lam Date: Sat, 13 Feb 2021 21:34:15 +0800 Subject: [PATCH 5/8] Add configuration example, modified init.sh to allow environment PUID to be passed (so that node.js runs as that user. --- .gitignore | 1 - config/plugins | 4 ++++ init.sh | 19 +++++++++++++++++-- 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 config/plugins diff --git a/.gitignore b/.gitignore index 1674592..fc7ed67 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,3 @@ npm-debug.log *.sublime-* .DS_Store certs/* -config/* diff --git a/config/plugins b/config/plugins new file mode 100644 index 0000000..e96d032 --- /dev/null +++ b/config/plugins @@ -0,0 +1,4 @@ +# Sample plugin file + +#npm install @schnack/plugin-auth-github +#npm install @schnack/plugin-auth-twitter diff --git a/init.sh b/init.sh index 3c2f434..40b0fe6 100755 --- a/init.sh +++ b/init.sh @@ -5,8 +5,23 @@ if [ -f config/plugins ] then + echo "Installing plugins" source config/plugins + echo "Done installing plugins" fi - -npm run server +if [ "x$PUID" = "x" ] +then + echo "Run server" + npm run server +else + echo "Creating user $PUID" + useradd -u $PUID -U -d /usr/src/app appuser + if [ $? -ne 0 ] + then + echo "Cannot create user" + exit 1 + else + su - appuser -c "cd /usr/src/app && npm run server" + fi +fi From 7a596d8264bf0afdc362ef18194ed89836af7b71 Mon Sep 17 00:00:00 2001 From: Michael Lam Date: Sun, 21 Feb 2021 13:31:45 +0800 Subject: [PATCH 6/8] Added a sample CSS file --- src/embed/schnack-icons.css | 68 +++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/embed/schnack-icons.css diff --git a/src/embed/schnack-icons.css b/src/embed/schnack-icons.css new file mode 100644 index 0000000..899a5bd --- /dev/null +++ b/src/embed/schnack-icons.css @@ -0,0 +1,68 @@ +@font-face { + font-family: 'schnack'; + src: url('fonts/schnack.eot?93389249'); + src: url('fonts/schnack.eot?93389249#iefix') format('embedded-opentype'), + url('fonts/schnack.svg?93389249#schnack') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'schnack'; + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,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') format('truetype'); +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'schnack'; + src: url('fonts/schnack.svg?93389249#schnack') format('svg'); + } +} +*/ + + [class^="schnack-icon-"]:before, [class*=" schnack-icon-"]:before { + font-family: "schnack"; + font-style: normal; + font-weight: normal; + speak: none; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} +.schnack-icon-approve:before { content: '\e800'; } /* '' */ +.schnack-icon-reject:before { content: '\e801'; } /* '' */ +.schnack-icon-subscribe:before { content: '\e802'; } /* '' */ +.schnack-icon-twitter:before { content: '\e803'; } /* '' */ +.schnack-icon-github:before { content: '\e804'; } /* '' */ +.schnack-icon-facebook-squared:before { content: '\e805'; } /* '' */ +.schnack-icon-gplus-circled:before { content: '\e806'; } /* '' */ +.schnack-icon-rss:before { content: '\e807'; } /* '' */ +.schnack-icon-delete:before { content: '\e808'; } /* '' */ +.schnack-icon-block:before { content: '\e809'; } /* '' */ +.schnack-icon-trust:before { content: '\e80a'; } /* '' */ +.schnack-icon-edit:before { content: '\e80b'; } /* '' */ +.schnack-icon-reply:before { content: '\e80c'; } /* '' */ +.schnack-icon-mastodon:before { content: '\e80f'; } /* '' */ From 8eeff97c879da4a96f8ec5add4eacd04df8f90e0 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 24 Feb 2021 08:28:09 +0800 Subject: [PATCH 7/8] Added a dockerfile to build with all supported plugins installed --- Dockerfile.all-plugins | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 Dockerfile.all-plugins diff --git a/Dockerfile.all-plugins b/Dockerfile.all-plugins new file mode 100644 index 0000000..8b3155d --- /dev/null +++ b/Dockerfile.all-plugins @@ -0,0 +1,19 @@ +FROM node:lts-buster + +WORKDIR /usr/src/app +COPY package.json package-lock.json ./ +RUN npm install +RUN npm install @schnack/plugin-auth-github +RUN npm install @schnack/plugin-auth-twitter +RUN npm install @schnack/plugin-auth-google +RUN npm install @schnack/plugin-auth-mastodon +RUN npm install @schnack/plugin-auth-facebook +RUN npm install @schnack/plugin-notify-pushover +RUN npm install @schnack/plugin-notify-sendmail +RUN npm install @schnack/plugin-notify-slack + +COPY . . + +EXPOSE 3000 +CMD ./init.sh +#CMD [ "npm", "run", "server" ] From 3cc432b8adba3330d61601cbf1caa29e0d9ccc05 Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 2 Mar 2021 18:30:35 +0800 Subject: [PATCH 8/8] Setup some scripts for multi-arch docker rollout --- .dockerignore | 2 ++ ...erfile.all-plugins => Dockerfile.allplugins | 1 - Dockerfile => Dockerfile.latest | 1 - build.sh | 8 ++++++++ init.sh | 9 ++++++++- manifest.sh | 18 ++++++++++++++++++ 6 files changed, 36 insertions(+), 3 deletions(-) rename Dockerfile.all-plugins => Dockerfile.allplugins (93%) rename Dockerfile => Dockerfile.latest (84%) create mode 100755 build.sh create mode 100755 manifest.sh diff --git a/.dockerignore b/.dockerignore index 93f1361..a443ce0 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,4 @@ node_modules npm-debug.log +build.sh +manifest.sh diff --git a/Dockerfile.all-plugins b/Dockerfile.allplugins similarity index 93% rename from Dockerfile.all-plugins rename to Dockerfile.allplugins index 8b3155d..cf66c6f 100644 --- a/Dockerfile.all-plugins +++ b/Dockerfile.allplugins @@ -16,4 +16,3 @@ COPY . . EXPOSE 3000 CMD ./init.sh -#CMD [ "npm", "run", "server" ] diff --git a/Dockerfile b/Dockerfile.latest similarity index 84% rename from Dockerfile rename to Dockerfile.latest index 4284e43..42520ee 100644 --- a/Dockerfile +++ b/Dockerfile.latest @@ -9,4 +9,3 @@ COPY . . EXPOSE 3000 CMD ./init.sh -#CMD [ "npm", "run", "server" ] diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..79da46f --- /dev/null +++ b/build.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +REPO=jasworks/schnack +ARCH=`uname -p` +VARIANT=$1 + +docker build -t $REPO:$ARCH-$VARIANT -f Dockerfile.$VARIANT . +docker push $REPO:$ARCH-$VARIANT diff --git a/init.sh b/init.sh index 40b0fe6..c924636 100755 --- a/init.sh +++ b/init.sh @@ -10,6 +10,13 @@ then echo "Done installing plugins" fi +if [ "x$NODE_ENV" = "x" ] +then + NODE_ENV=production +fi + +export NODE_ENV + if [ "x$PUID" = "x" ] then echo "Run server" @@ -22,6 +29,6 @@ else echo "Cannot create user" exit 1 else - su - appuser -c "cd /usr/src/app && npm run server" + export NODE_ENV && su - appuser -c "export NODE_ENV=$NODE_ENV && cd /usr/src/app && npm run server" fi fi diff --git a/manifest.sh b/manifest.sh new file mode 100755 index 0000000..0fe86a2 --- /dev/null +++ b/manifest.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +REPO=jasworks/schnack +VARIANT=$1 + +docker manifest create --amend $REPO:$VARIANT \ + $REPO:x86_64-$VARIANT \ + $REPO:aarch64-$VARIANT + +docker manifest inspect $REPO:$VARIANT + +echo -n "Ready to push manifest ?" +read ans + +if [ $ans = "y" ] +then + docker manifest push $REPO:$VARIANT +fi