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

6 months ago
6 months ago
6 months ago
6 months ago
  1. FROM ubuntu:22.04 as build
  2. ARG MIX_ENV=prod \
  3. OAUTH_CONSUMER_STRATEGIES="twitter facebook google microsoft slack github keycloak:ueberauth_keycloak_strategy"
  4. WORKDIR /src
  5. RUN apt-get update &&\
  6. apt-get install -y git elixir erlang-dev erlang-nox build-essential cmake libssl-dev libmagic-dev automake autoconf libncurses5-dev unzip curl &&\
  7. mix local.hex --force &&\
  8. mix local.rebar --force
  9. RUN git clone https://gitlab.com/soapbox-pub/rebased.git /src
  10. RUN cd /src &&\
  11. mix deps.get --only prod &&\
  12. mkdir release &&\
  13. mix release --path release
  14. FROM ubuntu:22.04
  15. ARG BUILD_DATE
  16. ARG VCS_REF
  17. ARG DEBIAN_FRONTEND="noninteractive"
  18. ENV TZ="Etc/UTC"
  19. ARG HOME=/opt/pleroma
  20. ARG DATA=/var/lib/pleroma
  21. RUN apt-get update &&\
  22. apt-get install -y --no-install-recommends imagemagick libmagic-dev ffmpeg libimage-exiftool-perl libncurses5 postgresql-client curl unzip ca-certificates jq &&\
  23. adduser --system --shell /bin/false --home ${HOME} pleroma &&\
  24. mkdir -p ${DATA}/uploads &&\
  25. mkdir -p ${DATA}/static &&\
  26. curl -L "https://gitlab.com/soapbox-pub/soapbox/-/jobs/artifacts/develop/download?job=build-production" -o soapbox.zip &&\
  27. mkdir -p release &&\
  28. unzip soapbox.zip -d ${DATA} &&\
  29. chown -R pleroma ${DATA} &&\
  30. mkdir -p /etc/pleroma &&\
  31. chown -R pleroma /etc/pleroma
  32. # Caddy
  33. ENV XDG_DATA_HOME /caddy/data
  34. ENV XDG_CONFIG_HOME /caddy/config
  35. RUN apt-get install -y debian-keyring debian-archive-keyring apt-transport-https curl gnupg &&\
  36. curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg &&\
  37. curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-stable.list &&\
  38. apt-get update &&\
  39. apt-get install caddy &&\
  40. adduser --system --shell /bin/false --home /caddy caddy &&\
  41. mkdir /caddy && chown -R caddy:caddy /caddy
  42. # PostgreSQL
  43. RUN apt-get install -y postgresql-14 postgresql-client-14 &&\
  44. mkdir /db &&\
  45. chown -R postgres:postgres /db
  46. # Gosu
  47. ENV GOSU_VERSION 1.14
  48. RUN set -eux; \
  49. # save list of currently installed packages for later so we can clean up
  50. savedAptMark="$(apt-mark showmanual)"; \
  51. apt-get update; \
  52. apt-get install -y --no-install-recommends ca-certificates wget; \
  53. if ! command -v gpg; then \
  54. apt-get install -y --no-install-recommends gnupg2 dirmngr; \
  55. elif gpg --version | grep -q '^gpg (GnuPG) 1\.'; then \
  56. # "This package provides support for HKPS keyservers." (GnuPG 1.x only)
  57. apt-get install -y --no-install-recommends gnupg-curl; \
  58. fi; \
  59. rm -rf /var/lib/apt/lists/*; \
  60. \
  61. dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')"; \
  62. wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch"; \
  63. wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc"; \
  64. \
  65. # verify the signature
  66. export GNUPGHOME="$(mktemp -d)"; \
  67. gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \
  68. gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
  69. command -v gpgconf && gpgconf --kill all || :; \
  70. rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
  71. \
  72. # clean up fetch dependencies
  73. apt-mark auto '.*' > /dev/null; \
  74. [ -z "$savedAptMark" ] || apt-mark manual $savedAptMark; \
  75. apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
  76. \
  77. chmod +x /usr/local/bin/gosu; \
  78. # verify that the binary works
  79. gosu --version; \
  80. gosu nobody true
  81. USER pleroma
  82. COPY --from=build --chown=pleroma:0 /src/release ${HOME}
  83. COPY ./docker.exs /etc/pleroma/config.exs
  84. USER caddy
  85. COPY ./Caddyfile /etc/Caddyfile
  86. USER root
  87. COPY ./docker-entrypoint.sh /run/docker-entrypoint.sh
  88. RUN chmod 755 /run/docker-entrypoint.sh
  89. COPY ./postgres.sh /run/postgres.sh
  90. RUN chmod 755 /run/postgres.sh
  91. VOLUME "/caddy"
  92. VOLUME "/var/lib/postgresql/14/pleroma"
  93. VOLUME "${DATA}/uploads"
  94. EXPOSE 80
  95. EXPOSE 443
  96. ENTRYPOINT ["/run/docker-entrypoint.sh"]