|
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"]
|