configs/paivana: add Containerfile and compose on :9025
This commit is contained in:
parent
96961f23f5
commit
7f769aaf8f
8 changed files with 167 additions and 0 deletions
55
configs/paivana/Containerfile
Normal file
55
configs/paivana/Containerfile
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# Build paivana-httpd from source against Taler libs (deb.taler.net)
|
||||
FROM docker.io/library/debian:trixie AS build
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN mkdir -p /etc/apt/keyrings
|
||||
COPY taler-systems.gpg /etc/apt/keyrings/taler-systems.gpg
|
||||
RUN apt-get update -yqq \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
ca-certificates curl gnupg git \
|
||||
meson ninja-build pkg-config gcc g++ make \
|
||||
zlib1g-dev libmicrohttpd-dev libcurl4-gnutls-dev \
|
||||
libjansson-dev libgcrypt20-dev libpq-dev \
|
||||
python3 python3-jinja2 \
|
||||
&& printf "%s\n" "deb [signed-by=/etc/apt/keyrings/taler-systems.gpg] https://deb.taler.net/apt/debian trixie main" \
|
||||
> /etc/apt/sources.list.d/taler.list \
|
||||
&& apt-get update -yqq \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
libgnunet-dev libtalerexchange-dev libtalermerchant-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /src
|
||||
RUN git clone --depth 1 https://git.taler.net/paivana.git . \
|
||||
&& if [ -x ./bootstrap ]; then ./bootstrap; fi \
|
||||
&& if [ -x ./configure ]; then \
|
||||
./configure --prefix=/usr/local && make -j"$(nproc)" && make install; \
|
||||
else \
|
||||
meson setup build --prefix=/usr/local && meson compile -C build && meson install -C build; \
|
||||
fi
|
||||
|
||||
FROM docker.io/library/debian:trixie-slim
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN mkdir -p /etc/apt/keyrings
|
||||
COPY taler-systems.gpg /etc/apt/keyrings/taler-systems.gpg
|
||||
RUN apt-get update -yqq \
|
||||
&& apt-get install -yqq --no-install-recommends ca-certificates curl \
|
||||
&& printf "%s\n" "deb [signed-by=/etc/apt/keyrings/taler-systems.gpg] https://deb.taler.net/apt/debian trixie main" \
|
||||
> /etc/apt/sources.list.d/taler.list \
|
||||
&& apt-get update -yqq \
|
||||
&& apt-get install -yqq --no-install-recommends \
|
||||
libtalerexchange libtalermerchant libgnunet \
|
||||
libmicrohttpd12t64 libcurl3t64-gnutls libjansson4 libgcrypt20 zlib1g libpq5 \
|
||||
&& rm -rf /var/lib/apt/lists/* \
|
||||
&& useradd --system --home /var/lib/paivana --shell /usr/sbin/nologin paivana-httpd \
|
||||
&& mkdir -p /etc/paivana /var/lib/paivana \
|
||||
&& chown -R paivana-httpd:paivana-httpd /var/lib/paivana /etc/paivana
|
||||
|
||||
COPY --from=build /usr/local/ /usr/local/
|
||||
RUN ldconfig || true
|
||||
COPY entrypoint.sh /usr/local/bin/paivana-entrypoint
|
||||
COPY conf/paivana.conf.template /etc/paivana/paivana.conf.template
|
||||
RUN chmod 755 /usr/local/bin/paivana-entrypoint \
|
||||
&& chown paivana-httpd:paivana-httpd /etc/paivana/paivana.conf.template
|
||||
|
||||
USER paivana-httpd
|
||||
EXPOSE 9967
|
||||
ENTRYPOINT ["/usr/local/bin/paivana-entrypoint"]
|
||||
13
configs/paivana/README.md
Normal file
13
configs/paivana/README.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# paivana — `paivana.hacktivism.ch`
|
||||
|
||||
GNU Taler **paivana-httpd** reverse-proxy paywall, GOA payments.
|
||||
|
||||
| Item | Value |
|
||||
|------|--------|
|
||||
| Live | `/home/hernani/koopa-paivana/` |
|
||||
| Containers | `koopa-paivana`, `koopa-paivana-upstream` |
|
||||
| Host port | **9025** |
|
||||
| Currency | **GOA** |
|
||||
| Merchant | `https://taler.hacktivism.ch/instances/goa-shop/` |
|
||||
|
||||
Build: `Containerfile` from `git.taler.net/paivana` + deb.taler.net libs.
|
||||
42
configs/paivana/compose.yml
Normal file
42
configs/paivana/compose.yml
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
# koopa-paivana — host :9025 → Caddy paivana.hacktivism.ch
|
||||
# Live: /home/hernani/koopa-paivana/
|
||||
services:
|
||||
paivana:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Containerfile
|
||||
image: localhost/koopa-paivana:latest
|
||||
container_name: koopa-paivana
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9025:9967"
|
||||
extra_hosts:
|
||||
- "taler.hacktivism.ch:host-gateway"
|
||||
- "bank.hacktivism.ch:host-gateway"
|
||||
- "exchange.hacktivism.ch:host-gateway"
|
||||
volumes:
|
||||
- ./conf/paivana.conf.template:/etc/paivana/paivana.conf.template:ro
|
||||
- ./entrypoint.sh:/usr/local/bin/paivana-entrypoint:ro
|
||||
- ./secrets/merchant-access-token:/run/secrets/merchant-access-token:ro
|
||||
- ./secrets/paivana-secret:/run/secrets/paivana-secret:ro
|
||||
depends_on:
|
||||
- upstream
|
||||
labels:
|
||||
org.hacktivism.service: paivana
|
||||
org.hacktivism.host_port: "9025"
|
||||
org.hacktivism.site: paivana.hacktivism.ch
|
||||
org.hacktivism.managed_by: koopa-admin
|
||||
org.hacktivism.currency: GOA
|
||||
|
||||
upstream:
|
||||
image: docker.io/library/nginx:1.27-alpine
|
||||
container_name: koopa-paivana-upstream
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- ./upstream:/usr/share/nginx/html:ro
|
||||
expose:
|
||||
- "80"
|
||||
command: ["nginx", "-g", "daemon off;"]
|
||||
labels:
|
||||
org.hacktivism.service: paivana-upstream
|
||||
org.hacktivism.managed_by: koopa-admin
|
||||
18
configs/paivana/conf/paivana.conf.template
Normal file
18
configs/paivana/conf/paivana.conf.template
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# paivana.hacktivism.ch — paywall reverse proxy
|
||||
# Secrets injected by entrypoint from /run/secrets/
|
||||
|
||||
[paivana]
|
||||
SERVE = tcp
|
||||
PORT = 9967
|
||||
BIND_TO = 0.0.0.0
|
||||
|
||||
BASE_URL = https://paivana.hacktivism.ch/
|
||||
|
||||
DESTINATION_BASE_URL = http://upstream:80/
|
||||
|
||||
MERCHANT_BACKEND_URL = https://taler.hacktivism.ch/instances/goa-shop/
|
||||
MERCHANT_ACCESS_TOKEN = @MERCHANT_ACCESS_TOKEN@
|
||||
|
||||
SECRET = @PAIVANA_SECRET@
|
||||
|
||||
WHITELIST = ^/(favicon\.ico|robots\.txt)$
|
||||
29
configs/paivana/entrypoint.sh
Executable file
29
configs/paivana/entrypoint.sh
Executable file
|
|
@ -0,0 +1,29 @@
|
|||
#!/bin/sh
|
||||
set -eu
|
||||
TOKEN_FILE="${MERCHANT_TOKEN_FILE:-/run/secrets/merchant-access-token}"
|
||||
SECRET_FILE="${PAIVANA_SECRET_FILE:-/run/secrets/paivana-secret}"
|
||||
TEMPLATE="${PAIVANA_CONF_TEMPLATE:-/etc/paivana/paivana.conf.template}"
|
||||
OUT="${PAIVANA_CONF:-/tmp/paivana.conf}"
|
||||
|
||||
if [ ! -r "$TOKEN_FILE" ]; then
|
||||
echo "missing merchant token: $TOKEN_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -r "$SECRET_FILE" ]; then
|
||||
echo "missing paivana secret: $SECRET_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TOKEN=$(tr -d '\n\r' < "$TOKEN_FILE")
|
||||
SECRET=$(tr -d '\n\r' < "$SECRET_FILE")
|
||||
|
||||
awk -v t="$TOKEN" -v s="$SECRET" '
|
||||
{
|
||||
gsub(/@MERCHANT_ACCESS_TOKEN@/, t)
|
||||
gsub(/@PAIVANA_SECRET@/, s)
|
||||
print
|
||||
}
|
||||
' "$TEMPLATE" > "$OUT"
|
||||
chmod 600 "$OUT"
|
||||
|
||||
exec paivana-httpd -c "$OUT" -g -f -L INFO
|
||||
BIN
configs/paivana/taler-systems.gpg
Normal file
BIN
configs/paivana/taler-systems.gpg
Normal file
Binary file not shown.
8
configs/paivana/upstream/index.html
Normal file
8
configs/paivana/upstream/index.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head><meta charset="utf-8"/><title>Protected — paivana.hacktivism.ch</title></head>
|
||||
<body>
|
||||
<h1>Payment verified</h1>
|
||||
<p>Demo upstream behind Paivana (GOA). Site: <code>https://paivana.hacktivism.ch/</code></p>
|
||||
</body>
|
||||
</html>
|
||||
2
configs/paivana/upstream/robots.txt
Normal file
2
configs/paivana/upstream/robots.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
User-agent: *
|
||||
Disallow: /
|
||||
Loading…
Add table
Add a link
Reference in a new issue