archive
This commit is contained in:
4
gollum/.dockerignore
Normal file
4
gollum/.dockerignore
Normal file
@@ -0,0 +1,4 @@
|
||||
mnt
|
||||
**.sw*
|
||||
**/*.sw*
|
||||
*.sw*
|
||||
3
gollum/.gitignore
vendored
Executable file
3
gollum/.gitignore
vendored
Executable file
@@ -0,0 +1,3 @@
|
||||
mnt/
|
||||
*.sw*
|
||||
goftp
|
||||
15
gollum/Dockerfile
Executable file
15
gollum/Dockerfile
Executable file
@@ -0,0 +1,15 @@
|
||||
FROM frolvlad/alpine-glibc:alpine-3.9_glibc-2.28
|
||||
|
||||
RUN apk update; \
|
||||
apk add --no-cache ruby dcron bash cmake ruby-dev make icu-dev gcc libc-dev zlib-dev g++ openssl openssl-dev git; \
|
||||
gem install rdoc || true; \
|
||||
gem install github-linguist gollum org-ruby thin etc || true; \
|
||||
gem install rdoc || true; \
|
||||
apk del gcc g++ libc-dev zlib-dev openssl openssl-dev cmake make;
|
||||
RUN gem install github-markup commonmarker || true;
|
||||
# TODO what gems needed to render tables with markdown
|
||||
ENV PORT=8080
|
||||
CMD []
|
||||
WORKDIR /wiki
|
||||
COPY . /opt/
|
||||
ENTRYPOINT ["/bin/bash", "/opt/entrypoint.sh"]
|
||||
63
gollum/build_and_run.sh
Executable file
63
gollum/build_and_run.sh
Executable file
@@ -0,0 +1,63 @@
|
||||
#! /bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
dir="$PWD"
|
||||
|
||||
if [ ! -e ./goftp ]; then
|
||||
pushd $GOPATH/src/local/goftp
|
||||
CGO_ENABLED=0 GOOS=linux go build -o "$dir/goftp" -a -installsuffix cgo
|
||||
popd
|
||||
fi
|
||||
|
||||
img_tag="${1:-"dev:dev"}"
|
||||
|
||||
docker build -t "$img_tag" .
|
||||
|
||||
mkdir -p $PWD/mnt
|
||||
sudo chmod -R 777 $PWD/mnt
|
||||
|
||||
rm -rf $PWD/mnt/this
|
||||
mkdir -p $PWD/mnt/this/is\ a/test/path
|
||||
rm -f $PWD/mnt/this/{_Header.md,file.md}
|
||||
echo '# hello' > $PWD/mnt/this/file.md
|
||||
|
||||
pushd $PWD/mnt
|
||||
if [ ! -e Home.md ]; then
|
||||
echo 'immediate pages
|
||||
<<ImmediatePages()>>
|
||||
|
||||
immediate pages from /this/
|
||||
<<ImmediatePages("/this/")>>
|
||||
|
||||
path segments
|
||||
<<PathSegments()>>
|
||||
|
||||
drop down
|
||||
<<DropDown("title", "hidden")>>
|
||||
|
||||
h1, h2, h3, para
|
||||
# Hello
|
||||
## h2
|
||||
### h3
|
||||
paragraph
|
||||
' > Home.md
|
||||
fi
|
||||
popd
|
||||
|
||||
function clean() {
|
||||
docker rm -f gollum-dev
|
||||
}
|
||||
trap clean EXIT
|
||||
|
||||
if [ -z "${BUILD:-""}" ]; then
|
||||
docker run --rm -it \
|
||||
--name gollum-dev \
|
||||
-e PORT=38080 \
|
||||
-p 38180:38080 \
|
||||
-p 38181:38081 \
|
||||
-v $PWD/mnt:/wiki \
|
||||
$img_tag
|
||||
fi
|
||||
72
gollum/config.rb
Executable file
72
gollum/config.rb
Executable file
@@ -0,0 +1,72 @@
|
||||
=begin
|
||||
This file can be used to (e.g.):
|
||||
- alter certain inner parts of Gollum,
|
||||
- extend it with your stuff.
|
||||
|
||||
It is especially useful for customizing supported formats/markups. For more information and examples:
|
||||
- https://github.com/gollum/gollum#config-file
|
||||
|
||||
=end
|
||||
|
||||
module Gollum
|
||||
class Macro
|
||||
class ImmediatePages < Gollum::Macro
|
||||
def render(toc_root_path = nil, max_depth = 1, min_depth = 0)
|
||||
if toc_root_path == nil
|
||||
if @page.path == "Home.md"
|
||||
toc_root_path = ""
|
||||
else
|
||||
toc_root_path = @page.path.sub(/\.[a-z]+$/,'/')
|
||||
end
|
||||
end
|
||||
if toc_root_path.start_with?("/")
|
||||
toc_root_path[0] = ''
|
||||
end
|
||||
if toc_root_path != "" and not toc_root_path.end_with?("/")
|
||||
toc_root_path << '/'
|
||||
end
|
||||
if @wiki.pages.size > 0
|
||||
list_items = @wiki.pages.map do |page|
|
||||
if @page.url_path != page.url_path and page.url_path.start_with?(toc_root_path)
|
||||
path_display = page.url_path_display.sub(toc_root_path.gsub("-", " "), "").sub(/^\//,'')
|
||||
depth = path_display.count("/")
|
||||
if depth.to_i < max_depth.to_i and depth.to_i >= min_depth.to_i
|
||||
" <li><a href=\"/#{page.url_path}\">#{path_display}</a></li>"
|
||||
end
|
||||
end
|
||||
end
|
||||
result = "<ul>#{list_items.join}</ul>"
|
||||
end
|
||||
title = toc_root_path
|
||||
"<div class=\"toc\"><div class=\"toc-title\">#{title}</div>#{result}</div>"
|
||||
end
|
||||
end
|
||||
class PathSegments < Gollum::Macro
|
||||
def render(append = "")
|
||||
segments = @page.path.split('/')
|
||||
segments = segments.first(segments.size - 1)
|
||||
if append != ""
|
||||
segments << append
|
||||
end
|
||||
full = ""
|
||||
list_items = segments.map do |segment|
|
||||
full = "#{full}/#{segment}"
|
||||
" / <a href=\"#{full}\">#{segment}</a>"
|
||||
end
|
||||
list_items.insert(0, " / <a href=\"/Home\">Home</a>")
|
||||
list_items << " / <a id='last_segment' onload='load_segment();' href='#'></a>"
|
||||
"<div>#{list_items.join}</div>"
|
||||
end
|
||||
end
|
||||
class DropDown < Gollum::Macro
|
||||
def render(summary, detail)
|
||||
"<details><summary>#{summary}</summary><div class=\"toc\">#{detail}</div></details"
|
||||
end
|
||||
end
|
||||
class ImgDropDown < Gollum::Macro
|
||||
def render(img_link, title = "Image")
|
||||
"<details><summary>#{title}</summary><div class=\"img-drop-down\"><img src=\"#{img_link}\"/></div></details"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
67
gollum/custom.css
Executable file
67
gollum/custom.css
Executable file
@@ -0,0 +1,67 @@
|
||||
#head
|
||||
> .actions
|
||||
> .minibutton:nth-last-child(-n+2)
|
||||
, #head
|
||||
> .actions
|
||||
> .minibutton:nth-child(6)
|
||||
, #head
|
||||
> .actions
|
||||
> .minibutton:nth-child(4)
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
body
|
||||
{
|
||||
background-color: #222;
|
||||
-webkit-filter: invert(85%);
|
||||
filter: invert(85%);
|
||||
}
|
||||
|
||||
img
|
||||
{
|
||||
-webkit-filter: invert(100%);
|
||||
filter: invert(100%);
|
||||
}
|
||||
|
||||
.img-drop-down
|
||||
{
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.img-drop-down
|
||||
> img
|
||||
{
|
||||
text-align: center;
|
||||
margin: 0 auto;
|
||||
padding: 1em 0;
|
||||
max-width: 100%;
|
||||
max-height: 400px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.markdown-body
|
||||
h1
|
||||
{
|
||||
border-top: 1px solid #ddd;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
#head
|
||||
> h1
|
||||
{
|
||||
/*display: none;*/
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
summary
|
||||
> h1
|
||||
, summary
|
||||
> h2
|
||||
, summary
|
||||
> h3
|
||||
, summary
|
||||
> h4
|
||||
{
|
||||
display: inline-block;
|
||||
}
|
||||
13
gollum/custom.js
Executable file
13
gollum/custom.js
Executable file
@@ -0,0 +1,13 @@
|
||||
function load_segment() {
|
||||
var elem = document.getElementById("last_segment")
|
||||
if (elem) {
|
||||
var arr = window.location.href.split('/')
|
||||
elem.innerHTML = arr[arr.length-1]
|
||||
elem.setAttribute("href", window.location.href.split('#')[0])
|
||||
} else {
|
||||
setTimeout(function() {
|
||||
load_segment()
|
||||
}, 50)
|
||||
}
|
||||
}
|
||||
load_segment()
|
||||
27
gollum/entrypoint.sh
Executable file
27
gollum/entrypoint.sh
Executable file
@@ -0,0 +1,27 @@
|
||||
#! /bin/bash
|
||||
|
||||
function main() {
|
||||
set -e
|
||||
|
||||
cd /wiki
|
||||
git init || true
|
||||
crontab /opt/routine.cron
|
||||
bash /opt/index.sh
|
||||
|
||||
/opt/goftp \
|
||||
-port $((PORT+1)) \
|
||||
-root /wiki/uploads-ftp \
|
||||
& gollum \
|
||||
--port $PORT \
|
||||
--no-live-preview \
|
||||
--config /opt/config.rb \
|
||||
--collapse-tree \
|
||||
--allow-uploads=dir \
|
||||
--css \
|
||||
--js \
|
||||
"$@"
|
||||
}
|
||||
|
||||
if [ "$0" == "${BASH_SOURCE[0]}" ]; then
|
||||
main "$@"
|
||||
fi
|
||||
88
gollum/index.sh
Executable file
88
gollum/index.sh
Executable file
@@ -0,0 +1,88 @@
|
||||
#! /bin/bash
|
||||
|
||||
function main() {
|
||||
set -e
|
||||
|
||||
fill_missing_files
|
||||
format_files
|
||||
init_git
|
||||
}
|
||||
|
||||
function fill_missing_files() {
|
||||
pushd "${1:-/wiki}" > /dev/null 2>&1
|
||||
fill_if_missing ./Home.md
|
||||
fill_if_missing ./_Header.md
|
||||
find ./* -type d | while read -r i; do
|
||||
i="${i%/}"
|
||||
fill_if_missing "$i.md"
|
||||
fill_if_missing "$i/_Header.md"
|
||||
done
|
||||
rm -f .git/hooks/pre-commit || true
|
||||
for i in .git/hooks/pre-commit custom.css custom.js; do
|
||||
fill_if_missing ./$i "$(cat /opt/${i##*/})"
|
||||
done
|
||||
mkdir -p ./uploads-ftp
|
||||
cp /opt/favicon.ico . || true
|
||||
popd > /dev/null 2>&1
|
||||
}
|
||||
|
||||
function format_files() {
|
||||
pushd ${1:-/wiki} > /dev/null 2>&1
|
||||
|
||||
local patterns=('^[0-9][0-9]*\. *' ' 1. ')
|
||||
local f="/tmp/switch"
|
||||
|
||||
find . -type f -name "*.md" | grep -v '\/_[^\/]*.md' | while read -r path; do
|
||||
for ((i=0; i<${#patterns[@]}; i+=2)); do
|
||||
local from="${patterns[i]}"
|
||||
local to="${patterns[i+1]}"
|
||||
if [ -n "$(grep "${from// /.}" "$path")" ]; then
|
||||
cat "$path" \
|
||||
| sed "s/$from/$to/g" \
|
||||
> "$f"
|
||||
cp "$f" "$path"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
rm -f "$f"
|
||||
|
||||
popd > /dev/null 2>&1
|
||||
}
|
||||
|
||||
function init_git() {
|
||||
pushd ${1:-/wiki} > /dev/null 2>&1
|
||||
git config user.email bel@bel.bel
|
||||
git config user.name bel
|
||||
git add -A :/
|
||||
if [ "${JUST_ADD:-""}" != "true" ]; then
|
||||
JUST_ADD=true git commit --author="auto <>" -m "routine" || true
|
||||
fi
|
||||
popd > /dev/null 2>&1
|
||||
}
|
||||
|
||||
function fill_if_missing() {
|
||||
local relative_path="$1"
|
||||
shift
|
||||
mkdir -p "$(dirname "$relative_path")"
|
||||
local full_path="$(printf "%s/%s" \
|
||||
"$(realpath \
|
||||
"$(dirname "$relative_path")" \
|
||||
)" \
|
||||
"$(basename "$relative_path")" \
|
||||
)"
|
||||
if [ ! -e "$full_path" ]; then
|
||||
if [ "$#" -gt 0 ]; then
|
||||
echo "$@" > "$full_path"
|
||||
elif [[ "$relative_path" == *"_Header.md" ]]; then
|
||||
echo "<<PathSegments()>>" > "$full_path"
|
||||
else
|
||||
echo "<<ImmediatePages()>>" > "$full_path"
|
||||
fi
|
||||
fi
|
||||
chmod +x "$full_path"
|
||||
}
|
||||
|
||||
if [ "$0" == "${BASH_SOURCE[0]}" ]; then
|
||||
main "$@"
|
||||
fi
|
||||
5
gollum/pre-commit
Executable file
5
gollum/pre-commit
Executable file
@@ -0,0 +1,5 @@
|
||||
#!/bin/sh
|
||||
|
||||
echo DO INDEX.sh;
|
||||
git status;
|
||||
JUST_ADD=true bash /opt/index.sh || true;
|
||||
1
gollum/review
Executable file
1
gollum/review
Executable file
@@ -0,0 +1 @@
|
||||
ruby scripting is fantastic and fun, but tags/metadata are hard
|
||||
1
gollum/routine.cron
Executable file
1
gollum/routine.cron
Executable file
@@ -0,0 +1 @@
|
||||
0 0/2 * * * /bin/bash /opt/index.sh
|
||||
9
kanboard/kanboard/kanboard.sh
Executable file
9
kanboard/kanboard/kanboard.sh
Executable file
@@ -0,0 +1,9 @@
|
||||
#! /bin/bash
|
||||
|
||||
echo USER admin PASS admin ON 8036
|
||||
|
||||
docker run --rm -it \
|
||||
--name kanboard \
|
||||
-p 8036:80 \
|
||||
-v $(pwd)/kanboard-data:/var/www/app/data \
|
||||
kanboard/kanboard:v1.2.5
|
||||
0
kanboard/kanboard/kanboard_is_win
Executable file
0
kanboard/kanboard/kanboard_is_win
Executable file
36
kanboard/kanboarddocker/Dockerfile
Normal file
36
kanboard/kanboarddocker/Dockerfile
Normal file
@@ -0,0 +1,36 @@
|
||||
FROM kanboard/kanboard:v1.2.14
|
||||
|
||||
RUN apk update \
|
||||
&& apk add --no-cache \
|
||||
postgresql \
|
||||
dcron \
|
||||
curl \
|
||||
&& mkdir -p /var/lib/postgresql/12/main \
|
||||
&& chown -R postgres:postgres /var/lib/postgresql \
|
||||
&& chmod -R 750 /var/lib/postgresql \
|
||||
&& su postgres -c "initdb -D /var/lib/postgresql/12/main/" \
|
||||
&& mkdir -p /var/run/postgresql/ \
|
||||
&& chown -R postgres:postgres /var/run/postgresql \
|
||||
&& chmod -R 750 /var/run/postgresql
|
||||
RUN su postgres -c 'postgres --config-file=/var/lib/postgresql/12/main/postgresql.conf -D /var/lib/postgresql/12/main' \
|
||||
& until su postgres -c 'psql --command "CREATE USER admin WITH SUPERUSER PASSWORD '"'"'admin'"'"';"'; do sleep 1; done \
|
||||
&& su postgres -c 'psql --command "CREATE DATABASE db;"' \
|
||||
&& su postgres -c 'psql --command "GRANT ALL PRIVILEGES ON DATABASE db TO admin;"' \
|
||||
&& kill %1 \
|
||||
&& wait
|
||||
|
||||
RUN mkdir -p \
|
||||
/etc/nginx/ssl \
|
||||
/var/www/app/data \
|
||||
/var/www/app/plugins \
|
||||
&& chown -R nginx:nginx /var/www/app
|
||||
|
||||
RUN echo '0 */4 * * * bash -c "true; bash /backup.sh &>> /tmp/backup.log"' >> /etc/crontabs/root
|
||||
|
||||
ENV DATABASE_URL=postgres://admin:admin@127.0.0.1/db
|
||||
COPY backup.sh /backup.sh
|
||||
COPY restore.sh /restore.sh
|
||||
|
||||
CMD []
|
||||
ENTRYPOINT ["bash", "-c", "true; clean() { bash /backup.sh; echo cleaned; exit 0; }; set -e; crond; (set -m; su postgres -c 'postgres --config-file=/var/lib/postgresql/12/main/postgresql.conf -D /var/lib/postgresql/12/main' & wait) &> /var/log/postgres.log & disown; until psql $DATABASE_URL < /dev/null; do sleep 1; done; bash /restore.sh; trap clean EXIT ERR INT; echo rm and start; rm -rf /etc/services.d/cron; bash /usr/local/bin/entrypoint.sh"]
|
||||
|
||||
14
kanboard/kanboarddocker/backup.sh
Normal file
14
kanboard/kanboarddocker/backup.sh
Normal file
@@ -0,0 +1,14 @@
|
||||
#! /bin/bash
|
||||
|
||||
date
|
||||
mkdir -p /mnt/save
|
||||
d=/mnt/save/$(date +%Y-%m-%d-%H-%M-%S).dump
|
||||
echo backing up as $d...
|
||||
pg_dump $DATABASE_URL --clean \
|
||||
> $d \
|
||||
|| rm -f $d
|
||||
total=$(ls /mnt/save/* | wc -l)
|
||||
to_del=$((total-${BACKUPS:-10}))
|
||||
if ((to_del>0)); then
|
||||
rm -f $(ls /mnt/save/* | head -n $to_del)
|
||||
fi
|
||||
1
kanboard/kanboarddocker/build.sh
Normal file
1
kanboard/kanboarddocker/build.sh
Normal file
@@ -0,0 +1 @@
|
||||
docker build -t bel/kanboard:v0.1 .
|
||||
24
kanboard/kanboarddocker/postgresql.conf
Normal file
24
kanboard/kanboarddocker/postgresql.conf
Normal file
@@ -0,0 +1,24 @@
|
||||
data_directory = '/var/lib/postgresql/10/main' # use data in another directory
|
||||
hba_file = '/etc/postgresql/10/main/pg_hba.conf' # host-based authentication file
|
||||
ident_file = '/etc/postgresql/10/main/pg_ident.conf' # ident configuration file
|
||||
external_pid_file = '/var/run/postgresql/10-main.pid' # write an extra PID file
|
||||
port = 5432 # (change requires restart)
|
||||
max_connections = 100 # (change requires restart)
|
||||
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories
|
||||
ssl = on
|
||||
ssl_cert_file = '/etc/ssl/certs/ssl-cert-snakeoil.pem'
|
||||
ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'
|
||||
shared_buffers = 128MB # min 128kB
|
||||
dynamic_shared_memory_type = posix # the default is the first option
|
||||
log_line_prefix = '%m [%p] %q%u@%d ' # special values:
|
||||
log_timezone = 'America/Denver'
|
||||
cluster_name = '10/main' # added to process titles if nonempty
|
||||
stats_temp_directory = '/var/run/postgresql/10-main.pg_stat_tmp'
|
||||
datestyle = 'iso, mdy'
|
||||
timezone = 'America/Denver'
|
||||
lc_messages = 'C.UTF-8' # locale for system error message
|
||||
lc_monetary = 'C.UTF-8' # locale for monetary formatting
|
||||
lc_numeric = 'C.UTF-8' # locale for number formatting
|
||||
lc_time = 'C.UTF-8' # locale for time formatting
|
||||
default_text_search_config = 'pg_catalog.english'
|
||||
include_dir = 'conf.d' # include files ending in '.conf' from
|
||||
18
kanboard/kanboarddocker/restore.sh
Normal file
18
kanboard/kanboarddocker/restore.sh
Normal file
@@ -0,0 +1,18 @@
|
||||
#! /bin/bash
|
||||
|
||||
until psql $DATABASE_URL < /dev/null; do
|
||||
sleep 1
|
||||
done
|
||||
for f in /mnt/save/$(ls /mnt/save | sort -r); do
|
||||
echo restore $f
|
||||
psql $DATABASE_URL < $f &> /dev/null
|
||||
ret=$?
|
||||
echo restore result: $ret
|
||||
# TODO server isn't started to assert db is OK
|
||||
exit $ret
|
||||
if [ $ret == 0 ]; then
|
||||
if curl -sS -i localhost:80 | grep login; then
|
||||
exit $ret
|
||||
fi
|
||||
fi
|
||||
done
|
||||
3
kanboard/restya/build_and_run.sh
Executable file
3
kanboard/restya/build_and_run.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#! /bin/bash
|
||||
|
||||
docker-compose up
|
||||
33
kanboard/restya/docker-compose.yaml
Executable file
33
kanboard/restya/docker-compose.yaml
Executable file
@@ -0,0 +1,33 @@
|
||||
version: '2'
|
||||
volumes:
|
||||
restyaboard_db:
|
||||
driver: local
|
||||
restyaboard_media:
|
||||
driver: local
|
||||
services:
|
||||
restyaboard:
|
||||
image: restyaplatform/restyaboard:dev
|
||||
environment:
|
||||
POSTGRES_DB: restyaboard
|
||||
POSTGRES_HOST: postgres
|
||||
POSTGRES_PASSWORD: admin
|
||||
POSTGRES_USER: admin
|
||||
SMTP_DOMAIN: domain
|
||||
SMTP_USERNAME: user
|
||||
SMTP_PASSWORD: pass
|
||||
SMTP_SERVER: server
|
||||
SMTP_PORT: 465
|
||||
TZ: Etc/UTC
|
||||
volumes:
|
||||
- restyaboard_media:/usr/share/nginx/html/media
|
||||
ports:
|
||||
- "8344:80"
|
||||
postgres:
|
||||
image: postgres:9-alpine
|
||||
environment:
|
||||
POSTGRES_DB: restyaboard
|
||||
POSTGRES_HOST: postgres
|
||||
POSTGRES_PASSWORD: admin
|
||||
POSTGRES_USER: admin
|
||||
volumes:
|
||||
- restyaboard_db:/var/lib/postgresql/data
|
||||
1
kanboard/restya/review
Executable file
1
kanboard/restya/review
Executable file
@@ -0,0 +1 @@
|
||||
cannot sign up/log in without valid smtp
|
||||
11
kanboard/tracks/build_and_run.sh
Executable file
11
kanboard/tracks/build_and_run.sh
Executable file
@@ -0,0 +1,11 @@
|
||||
#! /bin/bash
|
||||
|
||||
img="staannoe/tracks"
|
||||
tag="latest"
|
||||
docker pull $img:$tag
|
||||
|
||||
docker run --rm -it \
|
||||
--name ${img##*/} \
|
||||
-p 8344:80 \
|
||||
-v $(pwd)/mnt:/data \
|
||||
$img:$tag
|
||||
1
kanboard/tracks/review
Executable file
1
kanboard/tracks/review
Executable file
@@ -0,0 +1 @@
|
||||
too much, red* was better
|
||||
2
leanote/.gitignore
vendored
Executable file
2
leanote/.gitignore
vendored
Executable file
@@ -0,0 +1,2 @@
|
||||
data
|
||||
files
|
||||
54
leanote/Dockerfile
Executable file
54
leanote/Dockerfile
Executable file
@@ -0,0 +1,54 @@
|
||||
FROM frolvlad/alpine-glibc:alpine-3.9_glibc-2.28 as builder
|
||||
|
||||
RUN apk add --no-cache \
|
||||
libc-dev \
|
||||
gcc \
|
||||
go \
|
||||
git \
|
||||
mongodb \
|
||||
mongodb-tools
|
||||
|
||||
RUN mkdir -p /go/src \
|
||||
&& mkdir -p /go/pkg \
|
||||
&& mkdir -p /go/bin
|
||||
|
||||
ENV GOPATH=/go
|
||||
|
||||
RUN go get github.com/revel/cmd/revel \
|
||||
&& go get github.com/leanote/leanote/app \
|
||||
&& go get github.com/golang/dep/cmd/dep \
|
||||
&& cd $GOPATH/src/github.com/revel/cmd/revel && go install \
|
||||
&& cd $GOPATH/src/github.com/golang/dep/cmd/dep && go install \
|
||||
&& sed -i 's/Get[\t ][ \t]*\/[\t ][\t ]*.*$/Get \/ Auth.Login/' $GOPATH/src/github.com/leanote/leanote/conf/routes
|
||||
|
||||
RUN mkdir -p /mnt/data \
|
||||
&& mongod --dbpath /mnt/data \
|
||||
& mongorestore -h localhost -d leanote --dir $GOPATH/src/github.com/leanote/leanote/mongodb_backup/leanote_install_data/ \
|
||||
&& kill %1
|
||||
|
||||
FROM frolvlad/alpine-glibc:alpine-3.9_glibc-2.28
|
||||
|
||||
WORKDIR /opt
|
||||
ENV GOPATH=/go
|
||||
RUN apk add --no-cache \
|
||||
fcron \
|
||||
bash \
|
||||
mongodb \
|
||||
go \
|
||||
gcc libc-dev \
|
||||
&& crond \
|
||||
&& addgroup -S user && adduser -S -G user user \
|
||||
&& mkdir -p \
|
||||
/mnt/data \
|
||||
$GOPATH/src/github.com/leanote/leanote/files
|
||||
|
||||
COPY --from=builder /go/src $GOPATH/src
|
||||
COPY --from=builder /go/pkg $GOPATH/pkg
|
||||
COPY --from=builder /go/bin $GOPATH/bin
|
||||
COPY --from=builder /mnt/data /mnt/data
|
||||
ENV PATH=${PATH}:$GOPATH/bin
|
||||
RUN chown -R user /mnt $GOPATH
|
||||
|
||||
USER user
|
||||
CMD []
|
||||
ENTRYPOINT ["bash", "-c", "mongod --dbpath /mnt/data & revel run github.com/leanote/leanote"]
|
||||
28
leanote/build_and_run.sh
Executable file
28
leanote/build_and_run.sh
Executable file
@@ -0,0 +1,28 @@
|
||||
#! /bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
img="bel/leanote"
|
||||
tag="v0.0"
|
||||
|
||||
docker build -t $img:$tag .
|
||||
|
||||
if [ ! -d "$PWD/data" ]; then
|
||||
mkdir "$PWD/data" "$PWD/files"
|
||||
sudo chmod -R 777 "$PWD/data"
|
||||
docker run --rm -it \
|
||||
--entrypoint cp \
|
||||
-v "$(pwd):/mnt2" \
|
||||
$img:$tag \
|
||||
-r /mnt/data /mnt2/
|
||||
fi
|
||||
|
||||
sudo chmod -R 777 "$PWD/data" "$PWD/files"
|
||||
|
||||
docker run --rm -it \
|
||||
--name ${img##*/} \
|
||||
-p 9000:9000 \
|
||||
-v "$(pwd)/data:/mnt/data" \
|
||||
-v "$(pwd)/files:/go/src/github.com/leanote/leanote/files" \
|
||||
$img:$tag
|
||||
|
||||
1
leanote/review
Executable file
1
leanote/review
Executable file
@@ -0,0 +1 @@
|
||||
requires mongo and only mongo. Defer.
|
||||
15
mytinytodo/build_and_run.sh
Executable file
15
mytinytodo/build_and_run.sh
Executable file
@@ -0,0 +1,15 @@
|
||||
#! /bin/bash
|
||||
|
||||
img="php"
|
||||
tag="7.1.26-alpine3.9"
|
||||
docker pull $img:$tag
|
||||
|
||||
cp $PWD/entrypoint.sh $PWD/mnt/entrypoint.sh
|
||||
|
||||
docker run --rm -it \
|
||||
--entrypoint sh \
|
||||
--name ${img##*/} \
|
||||
-p 8345:8080 \
|
||||
-v $(pwd)/mnt:/mnt \
|
||||
$img:$tag \
|
||||
/mnt/entrypoint.sh
|
||||
28
mytinytodo/entrypoint.sh
Executable file
28
mytinytodo/entrypoint.sh
Executable file
@@ -0,0 +1,28 @@
|
||||
#! /bin/sh
|
||||
|
||||
cd /mnt
|
||||
|
||||
apk add --no-cache \
|
||||
ca-certificates \
|
||||
bash \
|
||||
git
|
||||
|
||||
#if [ ! -d ./mytinytodo ]; then
|
||||
if [ ! -d ./mytinytodo2 ]; then
|
||||
#wget https://bitbucket.org/maxpozdeev/mytinytodo/downloads/mytinytodo-v1.4.3.zip
|
||||
#unzip mytinytodo-v1.4.3.zip
|
||||
git clone https://github.com/ptrckkk/myTinyTodo.git mytinytodo2
|
||||
fi
|
||||
|
||||
if [ -z "$(grep invert ./mytinytodo2/themes/default/style.css)" ]; then
|
||||
echo '
|
||||
body {
|
||||
filter: invert(80%);
|
||||
background-color: #222;
|
||||
}
|
||||
' | tr '\n' ' ' >> ./mytinytodo2/themes/default/style.css
|
||||
fi
|
||||
|
||||
#cd mytinytodo
|
||||
cd mytinytodo2
|
||||
php -S 0.0.0.0:8080
|
||||
23
mytinytodo/mnt/entrypoint.sh
Executable file
23
mytinytodo/mnt/entrypoint.sh
Executable file
@@ -0,0 +1,23 @@
|
||||
#! /bin/sh
|
||||
|
||||
cd /mnt
|
||||
|
||||
apk add --no-cache \
|
||||
ca-certificates \
|
||||
bash \
|
||||
git
|
||||
|
||||
#if [ ! -d ./mytinytodo ]; then
|
||||
if [ ! -d ./mytinytodo2 ]; then
|
||||
#wget https://bitbucket.org/maxpozdeev/mytinytodo/downloads/mytinytodo-v1.4.3.zip
|
||||
#unzip mytinytodo-v1.4.3.zip
|
||||
git clone https://github.com/ptrckkk/myTinyTodo.git mytinytodo2
|
||||
fi
|
||||
|
||||
if [ -z "$(grep invert ./mytinytodo2/themes/default/style.css)" ]; then
|
||||
echo 'body { filter: invert(80%); background-color: #222; }' >> ./mytinytodo2/themes/default/style.css
|
||||
fi
|
||||
|
||||
#cd mytinytodo
|
||||
cd mytinytodo2
|
||||
php -S 0.0.0.0:8080
|
||||
16
no/mininote/build_and_run.sh
Executable file
16
no/mininote/build_and_run.sh
Executable file
@@ -0,0 +1,16 @@
|
||||
#! /bin/bash
|
||||
|
||||
img="bel/mininote"
|
||||
tag="latest"
|
||||
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
git clone https://github.com/n1try/mininote
|
||||
pushd ./mininote
|
||||
docker build -t $img:$tag .
|
||||
popd
|
||||
|
||||
docker run --rm -it \
|
||||
--name ${img##*/} \
|
||||
-p 8344:3000 \
|
||||
-v $(pwd)/mnt:/app/data \
|
||||
$img:$tag
|
||||
1
no/mininote/review
Executable file
1
no/mininote/review
Executable file
@@ -0,0 +1 @@
|
||||
cute but not super effective--each notebook is a user/pass and it's just a flat sheet to manually save
|
||||
5
no/tiddlywiki/review
Executable file
5
no/tiddlywiki/review
Executable file
@@ -0,0 +1,5 @@
|
||||
ehhhhh
|
||||
|
||||
- supports everything except nested storage
|
||||
- can manually list and script titles but tags was a nightmare
|
||||
- got stuck and froze every so often
|
||||
11
no/trilium/build_and_run.sh
Executable file
11
no/trilium/build_and_run.sh
Executable file
@@ -0,0 +1,11 @@
|
||||
#! /bin/bash
|
||||
|
||||
img="zadam/trilium"
|
||||
tag="0.29.1"
|
||||
docker pull $img:$tag
|
||||
|
||||
docker run --rm -it \
|
||||
--name ${img##*/} \
|
||||
-p 8344:8080 \
|
||||
-v $(pwd)/mnt:/root/trilium-data \
|
||||
$img:$tag
|
||||
6
no/trilium/review
Executable file
6
no/trilium/review
Executable file
@@ -0,0 +1,6 @@
|
||||
shit because it doesnt work on firefox
|
||||
|
||||
Great aside from shit mobile view. Good for gcp!
|
||||
|
||||
SO close, cannot mark as complete
|
||||
|
||||
Reference in New Issue
Block a user