archive
commit
77c332040f
|
|
@ -0,0 +1,52 @@
|
|||
### BUILDER
|
||||
FROM ubuntu:18.10 as builder
|
||||
RUN apt -y update \
|
||||
&& apt -y install gcc
|
||||
COPY ./pause /pause
|
||||
RUN cd /pause && gcc ./main.c -o pauser
|
||||
|
||||
### RUNNER
|
||||
FROM ubuntu:18.10
|
||||
|
||||
COPY --from=builder /pause/pauser /pauser
|
||||
|
||||
### POSTGRES
|
||||
RUN groupadd postgres && useradd -d /home/postgres -ms /bin/bash -g postgres -G sudo postgres
|
||||
RUN apt -y update \
|
||||
&& apt -y install \
|
||||
curl \
|
||||
rsync \
|
||||
cron \
|
||||
postgresql postgresql-contrib \
|
||||
&& mkdir -p /mnt/save
|
||||
USER postgres
|
||||
RUN service postgresql start && sleep 10 \
|
||||
&& psql --command "CREATE USER bel WITH SUPERUSER PASSWORD 'letme123in';" \
|
||||
&& createdb -O bel letme123in \
|
||||
&& psql --command "CREATE DATABASE db;" \
|
||||
&& psql --command "GRANT ALL PRIVILEGES ON DATABASE db TO bel;" \
|
||||
&& service postgresql stop && sleep 10
|
||||
|
||||
ENV DATABASE_URL=postgres://bel:letme123in@localhost/db?sslmode=disable
|
||||
USER root
|
||||
|
||||
### Synapse/matrix
|
||||
RUN wget -qO - https://matrix.org/packages/debian/repo-key.asc \
|
||||
| apt-key add - \
|
||||
&& add-apt-repository https://matrix.org/packages/debian/ \
|
||||
&& apt install -y matrix-synapse
|
||||
|
||||
### CRON BACKUPS
|
||||
RUN true \
|
||||
&& echo 'service postgresql stop && sleep 5 && b=$(date +%Y%m%d%H) && mkdir -p /mnt/save/$b && rsync -avzP --delete /var/lib/postgresql/10/main/ /mnt/save/$b/ && service postgresql start' > /backup.sh \
|
||||
&& echo 'service postgresql stop && sleep 5 && b=$(find /mnt/save -mindepth 1 -maxdepth 1 | sort | tail -n 1); if [ -n "$b" ]; then rsync -avzP --delete "${b%/}/" /var/lib/postgresql/10/main/; fi && chown -R postgres /var/lib/postgresql && chmod -R 0700 /var/lib/postgresql && service postgresql start;' > /restore.sh \
|
||||
&& echo '0 4,8,12,16,20 * * * bash /backup.sh >> /var/log/cronj.log 2>&1' > /etc/cron.d/backups \
|
||||
&& echo '' >> /etc/cron.d/backups \
|
||||
&& chmod 0644 /etc/cron.d/backups \
|
||||
&& touch /var/log/cronj.log
|
||||
|
||||
ENTRYPOINT \
|
||||
bash /restore.sh \
|
||||
&& service postgresql start \
|
||||
&& sleep 10 \
|
||||
&& miniflux & exec /pauser
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
FROM ubuntu:18.10 as builder
|
||||
RUN apt -y update \
|
||||
&& apt -y install gcc
|
||||
COPY ./pause /pause
|
||||
RUN cd /pause && gcc ./main.c -o pauser
|
||||
|
||||
FROM ubuntu:18.10
|
||||
RUN groupadd postgres && useradd -d /home/postgres -ms /bin/bash -g postgres -G sudo postgres
|
||||
RUN apt -y update \
|
||||
&& apt -y install \
|
||||
curl \
|
||||
rsync \
|
||||
cron \
|
||||
postgresql postgresql-contrib \
|
||||
&& curl -L \
|
||||
https://github.com/miniflux/miniflux/releases/download/2.0.12/miniflux_2.0.12_amd64.deb \
|
||||
> /miniflux.deb \
|
||||
&& dpkg -i /miniflux.deb \
|
||||
&& mkdir -p /mnt/save
|
||||
USER postgres
|
||||
RUN service postgresql start && sleep 10 \
|
||||
&& psql --command "CREATE USER mini WITH SUPERUSER PASSWORD 'pwd';" \
|
||||
&& createdb -O mini pwd \
|
||||
&& psql --command "CREATE DATABASE miniflux;" \
|
||||
&& psql --command "GRANT ALL PRIVILEGES ON DATABASE miniflux TO mini;" \
|
||||
&& service postgresql stop && sleep 10
|
||||
|
||||
ENV DATABASE_URL=postgres://mini:pwd@localhost/miniflux?sslmode=disable
|
||||
ENV LISTEN_ADDR=:8032
|
||||
ENV RUN_MIGRATIONS=1
|
||||
ENV CREATE_ADMIN=1
|
||||
ENV ADMIN_USERNAME=username
|
||||
ENV ADMIN_PASSWORD=password
|
||||
|
||||
ENV RUN_MIGRATIONS=0
|
||||
ENV CREATE_ADMIN=0
|
||||
|
||||
COPY --from=builder /pause/pauser /pauser
|
||||
|
||||
USER root
|
||||
### CRON BACKUPS
|
||||
RUN true \
|
||||
&& echo 'service postgresql stop && sleep 5 && b=$(date +%Y%m%d%H) && mkdir -p /mnt/save/$b && rsync -avzP --delete /var/lib/postgresql/10/main/ /mnt/save/$b/ && service postgresql start' > /backup.sh \
|
||||
&& echo 'service postgresql stop && sleep 5 && b=$(find /mnt/save -mindepth 1 -maxdepth 1 | sort | tail -n 1); if [ -n "$b" ]; then rsync -avzP --delete "${b%/}/" /var/lib/postgresql/10/main/; fi && chown -R postgres /var/lib/postgresql && chmod -R 0700 /var/lib/postgresql && service postgresql start;' > /restore.sh \
|
||||
&& echo '0 4,8,12,16,20 * * * bash /backup.sh >> /var/log/cronj.log 2>&1' > /etc/cron.d/backups \
|
||||
&& echo '' >> /etc/cron.d/backups \
|
||||
&& chmod 0644 /etc/cron.d/backups \
|
||||
&& touch /var/log/cronj.log
|
||||
|
||||
ENTRYPOINT \
|
||||
bash /restore.sh \
|
||||
&& service postgresql start \
|
||||
&& sleep 10 \
|
||||
&& miniflux -migrate \
|
||||
&& miniflux -create-admin \
|
||||
&& miniflux \
|
||||
& exec /pauser
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main() {
|
||||
int stat;
|
||||
int sig;
|
||||
sigset_t set;
|
||||
sigemptyset(&set);
|
||||
printf("add signal SIGINT: %i\n", sigaddset(&set, SIGINT));
|
||||
printf("add signal SIGKILL: %i\n", sigaddset(&set, SIGKILL));
|
||||
printf("add signal SIGTERM: %i\n", sigaddset(&set, SIGTERM));
|
||||
sigprocmask(SIG_BLOCK, &set, NULL);
|
||||
printf("Waiting...\n");
|
||||
stat = sigwait(&set, &sig);
|
||||
printf("Wait complete: %i (%i)\n", sig, stat);
|
||||
printf("Stopped postgres: %i\n", system("service postgresql stop && sleep 5"));
|
||||
printf("Saved postgres: %i\n", system("bash /backup.sh"));
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
#! /bin/bash
|
||||
|
||||
img="avhost/docker-matrix-riot:v1.0.0"
|
||||
|
||||
docker run \
|
||||
--rm -it \
|
||||
-v $(pwd)/riot:/data \
|
||||
-p 8765:8765 \
|
||||
$img
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
#! /bin/bash
|
||||
|
||||
img="avhost/docker-matrix:v0.34.1.1"
|
||||
|
||||
docker pull $img
|
||||
|
||||
docker run -v $(pwd)/synapse:/data --rm -it -e SERVER_NAME=localhost -e REPORT_STATS=no $img generate
|
||||
|
||||
sudo chmod 777 synapse/homeserver.yaml
|
||||
f="$(mktemp)"
|
||||
sed 's/enable_registration:.*/enable_registration: True/' synapse/homeserver.yaml > "$f" && sudo mv "$f" synapse/homeserver.yaml
|
||||
|
||||
docker run --rm -it \
|
||||
-p 8443:8443 \
|
||||
-p 8008:8008 \
|
||||
-p 3478:3478 \
|
||||
-v $(pwd)/synapse:/data $img start
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
FROM ubuntu:18.10 as builder
|
||||
RUN apt -y update \
|
||||
&& apt -y install gcc
|
||||
COPY ./pause /pause
|
||||
RUN cd /pause && gcc ./main.c -o pauser
|
||||
|
||||
FROM ubuntu:18.10
|
||||
RUN groupadd postgres && useradd -d /home/postgres -ms /bin/bash -g postgres -G sudo postgres
|
||||
RUN apt -y update \
|
||||
&& apt -y install \
|
||||
curl \
|
||||
rsync \
|
||||
cron \
|
||||
postgresql postgresql-contrib \
|
||||
&& mkdir -p /mnt/save
|
||||
USER postgres
|
||||
RUN service postgresql start && sleep 10 \
|
||||
&& psql --command "CREATE USER bel WITH SUPERUSER PASSWORD 'letme123in';" \
|
||||
&& createdb -O bel letme123in \
|
||||
&& psql --command "CREATE DATABASE db;" \
|
||||
&& psql --command "GRANT ALL PRIVILEGES ON DATABASE db TO bel;" \
|
||||
&& service postgresql stop && sleep 10
|
||||
|
||||
ENV DATABASE_URL=postgres://bel:letme123in@localhost/db?sslmode=disable
|
||||
|
||||
COPY --from=builder /pause/pauser /pauser
|
||||
|
||||
USER root
|
||||
### CRON BACKUPS
|
||||
RUN true \
|
||||
&& echo 'service postgresql stop && sleep 5 && b=$(date +%Y%m%d%H) && mkdir -p /mnt/save/$b && rsync -avzP --delete /var/lib/postgresql/10/main/ /mnt/save/$b/ && service postgresql start' > /backup.sh \
|
||||
&& echo 'service postgresql stop && sleep 5 && b=$(find /mnt/save -mindepth 1 -maxdepth 1 | sort | tail -n 1); if [ -n "$b" ]; then rsync -avzP --delete "${b%/}/" /var/lib/postgresql/10/main/; fi && chown -R postgres /var/lib/postgresql && chmod -R 0700 /var/lib/postgresql && service postgresql start;' > /restore.sh \
|
||||
&& echo '0 4,8,12,16,20 * * * bash /backup.sh >> /var/log/cronj.log 2>&1' > /etc/cron.d/backups \
|
||||
&& echo '' >> /etc/cron.d/backups \
|
||||
&& chmod 0644 /etc/cron.d/backups \
|
||||
&& touch /var/log/cronj.log
|
||||
|
||||
ENTRYPOINT \
|
||||
bash /restore.sh \
|
||||
&& service postgresql start \
|
||||
&& sleep 10 \
|
||||
&& miniflux & exec /pauser
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
[submodule "docker-matrix"]
|
||||
path = docker-matrix
|
||||
url = https://github.com/AVENTER-UG/docker-matrix.git
|
||||
[submodule "docker-matrix-riot"]
|
||||
path = docker-matrix-riot
|
||||
url = https://github.com/AVENTER-UG/docker-matrix-riot.git
|
||||
[submodule "matrix-appservice-discord"]
|
||||
path = matrix-appservice-discord
|
||||
url = https://github.com/Half-Shot/matrix-appservice-discord.git
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
bash ./build.sh
|
||||
|
||||
register with http://localhost:8008 or maybe 8448, http://localhost:3478
|
||||
|
|
@ -0,0 +1,125 @@
|
|||
#! /bin/bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
VERSION=v0.0
|
||||
SYN_HTTP_PORT=8008
|
||||
SYN_HTTPS_PORT=8448
|
||||
DISC_PORT=9006
|
||||
RIOT_PORT=8889
|
||||
DOMAIN=localhost
|
||||
|
||||
function main() {
|
||||
cd "$(dirname "${BASH_SOURCE[0]}")"
|
||||
setup_modules
|
||||
build_modules | while read -r line; do
|
||||
echo EVAL: $line
|
||||
eval "$line"
|
||||
done
|
||||
run_modules
|
||||
}
|
||||
|
||||
function setup_modules() {
|
||||
git submodule update
|
||||
for i in $(cat ./.gitmodules | grep path | awk '{print $NF}'); do
|
||||
pushd "./${i}"
|
||||
echo SETUP $(basename "$i")
|
||||
checkout_latest_tag
|
||||
popd
|
||||
done
|
||||
}
|
||||
|
||||
function checkout_latest_tag() {
|
||||
git fetch --tags
|
||||
local tag="$(git tag | sort | tail -n 1)"
|
||||
git checkout $tag
|
||||
}
|
||||
|
||||
function build_modules() {
|
||||
( docker network create riot-matrix-net || true ) >&2
|
||||
for i in $(cat ./.gitmodules | grep path | awk '{print $NF}' | sed 's/docker-matrix-riot/docker-matrix-riot-ptt/' ); do
|
||||
pushd "./${i}" >&2
|
||||
echo BUILD $(basename "$i") >&2
|
||||
build_module "$(basename "$i")" | tail -n 1
|
||||
popd >&2
|
||||
done
|
||||
}
|
||||
|
||||
function build_module() {
|
||||
local basename="$1"
|
||||
local img="bel/$basename:$VERSION"
|
||||
local mnt="$(dirname "$(pwd)")/mnt/$basename"
|
||||
local pre=()
|
||||
local post=()
|
||||
local run=""
|
||||
local f=$(mktemp)
|
||||
local g=$(mktemp)
|
||||
case "$basename" in
|
||||
docker-matrix )
|
||||
run="-p $SYN_HTTPS_PORT:$SYN_HTTPS_PORT -p $SYN_HTTP_PORT:$SYN_HTTP_PORT -p 3478:3478 $img start"
|
||||
post+=("docker run --rm -i -e SERVER_NAME=$DOMAIN -e REPORT_STATS=no -v $mnt:/data $img generate")
|
||||
post+=("sudo cp $mnt/homeserver.yaml $f")
|
||||
post+=("sed 's/enable_registration:.*/enable_registration: True/' $f > $g; mv $g $f")
|
||||
post+=("sed 's/enable_group_creation: false/enable_group_creation: true/' $f > $g; mv $g $f")
|
||||
post+=("sed 's/ - port: 8008/ - port: $SYN_HTTP_PORT/' $f > $g; mv $g $f")
|
||||
post+=("sed 's/ port: 8448/ port: $SYN_HTTPS_PORT/' $f > $g; mv $g $f")
|
||||
post+=("sed 's/ bind_addresses:.*/ bind_addresses: [\"::\", \"0.0.0.0\"]/' $f > $g; mv $g $f")
|
||||
post+=("sed 's/app_service_config_files.*$/app_service_config_files: [ \\/data\\/discord-registration.yaml ]/' $f > $g; mv $g $f")
|
||||
post+=("echo 'auto_join_rooms: [ \"#welcome:$DOMAIN\" ]' >> $f")
|
||||
post+=("sudo mv $f $mnt/homeserver.yaml")
|
||||
;;
|
||||
docker-matrix-riot* )
|
||||
run="-p $RIOT_PORT:$RIOT_PORT $img"
|
||||
post+=("touch $mnt/riot.im.conf")
|
||||
post+=("echo '-p $RIOT_PORT' > $mnt/riot.im.conf")
|
||||
post+=("echo '-A 0.0.0.0' >> $mnt/riot.im.conf")
|
||||
post+=("echo '-c 3500' >> $mnt/riot.im.conf")
|
||||
post+=("curl https://raw.githubusercontent.com/vector-im/riot-web/develop/config.sample.json > $mnt/config.json")
|
||||
post+=("sed 's/\"default_hs_url\".*/\"default_hs_url\":\"http:\\/\\/docker-matrix:8008\",/' $mnt/config.json > $f; mv $f $mnt/config.json")
|
||||
post+=("sed 's/\"default_is_url\".*/\"default_is_url\":\"http:\\/\\/docker-matrix:8008\",/' $mnt/config.json > $f; mv $f $mnt/config.json")
|
||||
#post+=("echo '--ssl' >> $mnt/config.json")
|
||||
#post+=("echo '--cert /data/cert.pem' >> $mnt/config.json")
|
||||
#post+=("echo '--key /data/key.pem' >> $mnt/config.json")
|
||||
;;
|
||||
matrix-appservice-discord* )
|
||||
run="-p $DISC_PORT:$DISC_PORT $img"
|
||||
post+=("cp config/config.sample.yaml $mnt/config.yaml")
|
||||
post+=("sed 's/ domain: .*$/ domain: $DOMAIN/' $mnt/config.yaml > $f; mv $f $mnt/config.yaml")
|
||||
post+=("sed 's/ homeserverUrl: .*$/ homeserverUrl: http:\\/\\/$DOMAIN:$SYN_HTTP_PORT/' $mnt/config.yaml > $f; mv $f $mnt/config.yaml")
|
||||
post+=("sed 's/ userStorePath:.*$/ userStorePath: \/data\/user-store.db/' $mnt/config.yaml > $f; mv $f $mnt/config.yaml")
|
||||
post+=("sed 's/ roomStorePath:.*$/ roomStorePath: \/data\/room-store.db/' $mnt/config.yaml > $f; mv $f $mnt/config.yaml")
|
||||
post+=("sed 's/ filename:.*$/ filename: \/data\/discord.db/' $mnt/config.yaml > $f; mv $f $mnt/config.yaml")
|
||||
post+=("npm install")
|
||||
post+=("npm run build")
|
||||
post+=("node build/src/discordas.js -r -u 'http:\\/\\/$DOMAIN:$DISC_PORT' -c $mnt/config.yaml")
|
||||
post+=("cp discord-registration.yaml ${mnt%$basename*}/docker-matrix/")
|
||||
post+=("cp discord-registration.yaml $mnt/discord-registration.yaml")
|
||||
;;
|
||||
* )
|
||||
return
|
||||
;;
|
||||
esac
|
||||
mkdir -p "$mnt"
|
||||
for i in "${pre[@]:-}"; do
|
||||
eval "$i"
|
||||
done
|
||||
docker build -t $img .
|
||||
for i in "${post[@]}"; do
|
||||
eval "$i"
|
||||
done
|
||||
rm -f "$f" "$g"
|
||||
echo "docker run --name $basename --rm -d -v $mnt:/data --network riot-matrix-net --net-alias $basename $run"
|
||||
}
|
||||
|
||||
function run_modules() {
|
||||
local run_cmds=("${@:-}")
|
||||
for cmd in "${run_cmds[@]}"; do
|
||||
echo RUN $(basename "$cmd")
|
||||
echo $cmd
|
||||
done
|
||||
}
|
||||
|
||||
if [ "$0" == "${BASH_SOURCE[0]}" ]; then
|
||||
main "$@"
|
||||
fi
|
||||
Loading…
Reference in New Issue