Omnibus-style container for Rebased and Soapbox
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

117 lines
4.0 KiB

FROM ubuntu:22.04 as build
ARG MIX_ENV=prod \
OAUTH_CONSUMER_STRATEGIES="twitter facebook google microsoft slack github keycloak:ueberauth_keycloak_strategy"
WORKDIR /src
RUN apt-get update &&\
apt-get install -y git elixir erlang-dev erlang-nox build-essential cmake libssl-dev libmagic-dev automake autoconf libncurses5-dev unzip curl &&\
mix local.hex --force &&\
mix local.rebar --force
RUN git clone https://gitlab.com/soapbox-pub/rebased.git /src
RUN cd /src &&\
mix deps.get --only prod &&\
mkdir release &&\
mix release --path release
FROM ubuntu:22.04
ARG BUILD_DATE
ARG VCS_REF
ARG DEBIAN_FRONTEND="noninteractive"
ENV TZ="Etc/UTC"
ARG HOME=/opt/pleroma
ARG DATA=/var/lib/pleroma
RUN apt-get update &&\
apt-get install -y --no-install-recommends imagemagick libmagic-dev ffmpeg libimage-exiftool-perl libncurses5 postgresql-client curl unzip ca-certificates jq &&\
adduser --system --shell /bin/false --home ${HOME} pleroma &&\
mkdir -p ${DATA}/uploads &&\
mkdir -p ${DATA}/static &&\
curl -L "https://gitlab.com/soapbox-pub/soapbox/-/jobs/artifacts/develop/download?job=build-production" -o soapbox.zip &&\
mkdir -p release &&\
unzip soapbox.zip -d ${DATA} &&\
chown -R pleroma ${DATA} &&\
mkdir -p /etc/pleroma &&\
chown -R pleroma /etc/pleroma
# Caddy
ENV XDG_DATA_HOME /caddy/data
ENV XDG_CONFIG_HOME /caddy/config
RUN apt-get install -y debian-keyring debian-archive-keyring apt-transport-https curl gnupg &&\
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg &&\
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list &&\
apt-get update &&\
apt-get install caddy &&\
adduser --system --shell /bin/false --home /caddy caddy &&\
mkdir /caddy && chown -R caddy:caddy /caddy
# PostgreSQL
RUN apt-get install -y postgresql-14 postgresql-client-14 &&\
mkdir /db &&\
chown -R postgres:postgres /db
# Gosu
ENV GOSU_VERSION 1.14
RUN set -eux; \
# save list of currently installed packages for later so we can clean up
savedAptMark="$(apt-mark showmanual)"; \
apt-get update; \
apt-get install -y --no-install-recommends ca-certificates wget; \
if ! command -v gpg; then \
apt-get install -y --no-install-recommends gnupg2 dirmngr; \
elif gpg --version | grep -q '^gpg (GnuPG) 1\.'; then \
# "This package provides support for HKPS keyservers." (GnuPG 1.x only)
apt-get install -y --no-install-recommends gnupg-curl; \
fi; \
rm -rf /var/lib/apt/lists/*; \
\
dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
\
# verify the signature
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
command -v gpgconf && gpgconf --kill all || :; \
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
\
# clean up fetch dependencies
apt-mark auto '.*' > /dev/null; \
[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
\
chmod +x /usr/local/bin/gosu; \
# verify that the binary works
gosu --version; \
gosu nobody true
USER pleroma
COPY --from=build --chown=pleroma:0 /src/release ${HOME}
COPY ./docker.exs /etc/pleroma/config.exs
USER caddy
COPY ./Caddyfile /etc/Caddyfile
USER root
COPY ./docker-entrypoint.sh /run/docker-entrypoint.sh
RUN chmod 755 /run/docker-entrypoint.sh
COPY ./postgres.sh /run/postgres.sh
RUN chmod 755 /run/postgres.sh
VOLUME "/caddy"
VOLUME "/var/lib/postgresql/14/pleroma"
VOLUME "${DATA}/uploads"
EXPOSE 80
EXPOSE 443
ENTRYPOINT ["/run/docker-entrypoint.sh"]