initial commit
This commit is contained in:
commit
4f42666bf4
2
.gitignore
vendored
Executable file
2
.gitignore
vendored
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
*~
|
||||||
|
.DS_Store
|
12
.gitlab-ci.yml
Normal file
12
.gitlab-ci.yml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
stages:
|
||||||
|
- build
|
||||||
|
|
||||||
|
variables:
|
||||||
|
IMAGE_NAME: thallian/molly-brown
|
||||||
|
CI_BUILD_ARCHS: "linux/amd64,linux/arm64"
|
||||||
|
|
||||||
|
build:
|
||||||
|
stage: build
|
||||||
|
script:
|
||||||
|
- docker login -u $DOCKER_USER -p $DOCKER_PASSWORD $DOCKER_REGISTRY
|
||||||
|
- docker buildx build --platform "$CI_BUILD_ARCHS" --progress plain --pull --tag "$IMAGE_NAME:$CI_COMMIT_SHA" --tag "$IMAGE_NAME:$CI_COMMIT_REF_NAME" --tag "$IMAGE_NAME:latest" --push .
|
28
Dockerfile
Normal file
28
Dockerfile
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
FROM golang:1.15.0-alpine3.12 AS builder
|
||||||
|
|
||||||
|
ENV GO111MODULE=on
|
||||||
|
|
||||||
|
ENV VERSION=48f9a206c03c0470e1c132b9667c6daa3583dada
|
||||||
|
RUN go get tildegit.org/solderpunk/molly-brown@$VERSION
|
||||||
|
|
||||||
|
FROM thallian/confd-env:latest
|
||||||
|
|
||||||
|
RUN addgroup -g 2222 molly-brown
|
||||||
|
RUN adduser -h /home/molly-brown -S -D -u 2222 -G molly-brown molly-brown
|
||||||
|
|
||||||
|
RUN mkdir -p /var/gemini
|
||||||
|
RUN chown molly-brown:molly-brown /var/gemini
|
||||||
|
|
||||||
|
RUN apk --no-cache add \
|
||||||
|
openssl \
|
||||||
|
coreutils
|
||||||
|
|
||||||
|
COPY --from=builder /go/bin/molly-brown /bin/molly-brown
|
||||||
|
|
||||||
|
ADD /rootfs /
|
||||||
|
|
||||||
|
WORKDIR /
|
||||||
|
|
||||||
|
VOLUME /etc/molly-brown/keys /var/gemini/
|
||||||
|
|
||||||
|
EXPOSE 1965
|
18
README.md
Normal file
18
README.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
[Molly Brown](https://tildegit.org/solderpunk/molly-brown) server for the
|
||||||
|
[Gemini](https://gemini.circumlunar.space/) protocol.
|
||||||
|
|
||||||
|
# Volumes
|
||||||
|
- `/var/gemini/`: root directory for files
|
||||||
|
- `/etc/molly-brown/keys`: key files
|
||||||
|
|
||||||
|
# Environment Variables
|
||||||
|
## HOST_NAME
|
||||||
|
The hostname to respond to requests for.
|
||||||
|
|
||||||
|
## DEFAULT_LANG
|
||||||
|
- default: en
|
||||||
|
|
||||||
|
`lang` parameter of the MIME type for all `text/gemini` content.
|
||||||
|
|
||||||
|
# Ports
|
||||||
|
- 1965
|
3
rootfs/etc/confd/conf.d/molly.conf.toml
Normal file
3
rootfs/etc/confd/conf.d/molly.conf.toml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[template]
|
||||||
|
dest = "/etc/molly-brown/molly.conf"
|
||||||
|
src = "molly.conf.tmpl"
|
20
rootfs/etc/confd/templates/molly.conf.tmpl
Normal file
20
rootfs/etc/confd/templates/molly.conf.tmpl
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
## Basic settings
|
||||||
|
#
|
||||||
|
Port = 1965
|
||||||
|
Hostname = "{{ getenv "HOST_NAME" }}"
|
||||||
|
CertPath = "/etc/molly-brown/keys/{{ getenv "HOST_NAME" }}-cert.pem"
|
||||||
|
KeyPath = "/etc/molly-brown/keys/{{ getenv "HOST_NAME" }}-key.pem"
|
||||||
|
DocBase = "/var/gemini/"
|
||||||
|
HomeDocBase = "users"
|
||||||
|
GeminiExt = "gmi"
|
||||||
|
DefaultLang = "{{ getenv "DEFAULT_LANG" "en" }}"
|
||||||
|
AccessLog = "/home/molly-brown/access.log"
|
||||||
|
ErrorLog = "/home/molly-brown/error.log"
|
||||||
|
ReadMollyFiles = true
|
||||||
|
|
||||||
|
#
|
||||||
|
## MIME type overrides
|
||||||
|
#
|
||||||
|
[MimeOverrides]
|
||||||
|
"atom.xml$" = "application/atom+xml"
|
||||||
|
"rss.xml$" = "application/rss+xml"
|
21
rootfs/etc/cont-init.d/02-tls
Normal file
21
rootfs/etc/cont-init.d/02-tls
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/with-contenv sh
|
||||||
|
|
||||||
|
KEY="/etc/molly-brown/keys/$HOST_NAME-key.pem"
|
||||||
|
CERT="/etc/molly-brown/keys/$HOST_NAME-cert.pem"
|
||||||
|
|
||||||
|
if [ ! -f "$KEY" ] || [ ! -f "$CERT" ]; then
|
||||||
|
openssl req -x509 -newkey rsa:4096 -keyout "$KEY" -out "$CERT" -days 3650 -nodes -subj "/CN=$HOST_NAME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
chown molly-brown:molly-brown "$KEY"
|
||||||
|
chown molly-brown:molly-brown "$CERT"
|
||||||
|
|
||||||
|
date_valid="$(openssl x509 -in "$CERT" -enddate -noout | sed "s/.*=\(.*\)/\1/")"
|
||||||
|
seconds_valid="$(date --date "$date_valid" +"%s")"
|
||||||
|
now="$(date "+%s")"
|
||||||
|
days="$(echo "($seconds_valid - $now)/(60 * 60 * 24)" | bc)"
|
||||||
|
|
||||||
|
if [ "$days" -lt 7 ]; then
|
||||||
|
echo "only $days to go, generating new certificate..."
|
||||||
|
openssl req -x509 -key "$KEY" -out "$CERT" -days 3650 -nodes -subj "/CN=$HOST_NAME"
|
||||||
|
fi
|
1
rootfs/etc/fix-attrs.d/01-data
Normal file
1
rootfs/etc/fix-attrs.d/01-data
Normal file
@ -0,0 +1 @@
|
|||||||
|
/var/gemini/ true molly-brown:molly-brown 0664 0775
|
3
rootfs/etc/services.d/molly-brown/run
Normal file
3
rootfs/etc/services.d/molly-brown/run
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/with-contenv sh
|
||||||
|
|
||||||
|
exec s6-setuidgid molly-brown molly-brown -c /etc/molly-brown/molly.conf
|
Loading…
Reference in New Issue
Block a user