From 84031ff4b3a78add28920af68c7b4b67fcc161a5 Mon Sep 17 00:00:00 2001 From: itepechi <72330683+itepechi@users.noreply.github.com> Date: Sun, 30 Jul 2023 00:45:03 +0900 Subject: [PATCH] Update Docker setup --- .dockerignore | 25 +++++++-- .gitignore | 2 + Dockerfile | 83 ++++++++++++++++++++-------- docker-compose.yml | 66 +++++++--------------- docker-entrypoint.sh | 22 +++++--- docker-resources/Caddyfile.example | 14 ----- docker-resources/build.sh | 4 -- docker-resources/database/Dockerfile | 10 ---- docker-resources/env.example | 5 -- docker-resources/manage.sh | 3 - 10 files changed, 113 insertions(+), 121 deletions(-) delete mode 100644 docker-resources/Caddyfile.example delete mode 100755 docker-resources/build.sh delete mode 100644 docker-resources/database/Dockerfile delete mode 100644 docker-resources/env.example delete mode 100755 docker-resources/manage.sh diff --git a/.dockerignore b/.dockerignore index 1d4f80bdf..56bcbe31a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,17 +1,32 @@ .* *.md +*.yml +*file AGPL-3 +CC-BY-4.0 CC-BY-SA-4.0 COPYING -*file -elixir_buildpack.config -test/ -test +_build benchmarks +ci +deps docs/site -docker-db +docs/venv +config/*.env +config/*.secret.exs +config/generated_config.exs +config/runtime.exs +config/setup_db*.psql +scripts +test +etc +static uploads instance +capture.pcap +erl_crash.dump +coveralls.json +SIGNING_KEY.pub # Required to get version !.git diff --git a/.gitignore b/.gitignore index 1a6a82c37..62f1cb194 100644 --- a/.gitignore +++ b/.gitignore @@ -79,3 +79,5 @@ docs/venv # docker stuff docker-db *.iml +static +etc diff --git a/Dockerfile b/Dockerfile index db67b9d6e..b71c7d61c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,34 +1,69 @@ -FROM hexpm/elixir:1.15.2-erlang-26.0.2-alpine-3.17.4 +FROM elixir:1.14-alpine as build ENV MIX_ENV=prod ENV ERL_EPMD_ADDRESS=127.0.0.1 -ARG HOME=/opt/akkoma +ARG BUILD_DIR=/opt/akkoma/ +ARG UID=1000 +ARG GID=1000 -LABEL org.opencontainers.image.title="akkoma" \ - org.opencontainers.image.description="Akkoma for Docker" \ - org.opencontainers.image.vendor="akkoma.dev" \ - org.opencontainers.image.documentation="https://docs.akkoma.dev/stable/" \ - org.opencontainers.image.licenses="AGPL-3.0" \ - org.opencontainers.image.url="https://akkoma.dev" \ - org.opencontainers.image.revision=$VCS_REF \ - org.opencontainers.image.created=$BUILD_DATE +RUN addgroup -g ${GID} akkoma \ + && adduser -u ${UID} -G akkoma -s /bin/sh -D akkoma \ + && apk add --no-cache \ + git \ + gcc \ + g++ \ + musl-dev \ + make \ + cmake \ + file-dev -RUN apk add git gcc g++ musl-dev make cmake file-dev exiftool ffmpeg imagemagick libmagic ncurses postgresql-client +WORKDIR ${BUILD_DIR} + +COPY . . + +RUN mkdir -p "${BUILD_DIR}_build/" \ + && mix local.hex --force \ + && mix local.rebar --force \ + && mix deps.get --only prod \ + && mix release --path "${BUILD_DIR}_build" + + +FROM elixir:1.14-alpine as web + +ENV MIX_ENV=prod +ENV ERL_EPMD_ADDRESS=127.0.0.1 + +ARG DATA_DIR=/var/lib/akkoma/ +ARG INSTALL_DIR=/opt/akkoma/ +ARG CONFIG_DIR=/etc/akkoma/ +ARG UID=1000 +ARG GID=1000 + +RUN addgroup -g ${GID} akkoma \ + && adduser -u ${UID} -G akkoma -s /bin/sh -D akkoma \ + && apk add --no-cache \ + exiftool \ + ffmpeg \ + imagemagick \ + libmagic \ + ncurses \ + postgresql-client + +RUN mkdir -p "${DATA_DIR}uploads/" \ + && mkdir -p "${DATA_DIR}static/" \ + && mkdir -p "${INSTALL_DIR}" \ + && mkdir -p "${CONFIG_DIR}" + +COPY --from=build ${INSTALL_DIR}_build/ ${INSTALL_DIR} +COPY ./docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh + +ENV PATH="/opt/akkoma/bin:${PATH}" + +WORKDIR ${INSTALL_DIR} EXPOSE 4000 -ARG UID=1000 -ARG GID=1000 -ARG UNAME=akkoma +ENTRYPOINT [ "docker-entrypoint.sh" ] -RUN addgroup -g $GID $UNAME -RUN adduser -u $UID -G $UNAME -D -h $HOME $UNAME - -WORKDIR /opt/akkoma - -USER $UNAME -RUN mix local.hex --force &&\ - mix local.rebar --force - -CMD ["/opt/akkoma/docker-entrypoint.sh"] +CMD [ "pleroma", "start" ] diff --git a/docker-compose.yml b/docker-compose.yml index 0dedbc87e..27a11947f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,61 +1,33 @@ +# This file is for testing only, as I don't recommend using Docker Compose in a production environment version: "3.7" services: db: - image: akkoma-db:latest - build: ./docker-resources/database + image: postgres:14-alpine restart: unless-stopped - user: ${DOCKER_USER} - environment: { - # This might seem insecure but is usually not a problem. - # You should leave this at the "akkoma" default. - # The DB is only reachable by containers in the same docker network, - # and is not exposed to the open internet. - # - # If you do change this, remember to update "config.exs". - POSTGRES_DB: akkoma, - POSTGRES_USER: akkoma, - POSTGRES_PASSWORD: akkoma, - } - env_file: - - .env + environment: + POSTGRES_DB: akkoma + POSTGRES_USER: akkoma + POSTGRES_PASSWORD: akkoma + # Comment out the volume below if you encounter any permission errors volumes: - - type: bind - source: ./pgdata - target: /var/lib/postgresql/data + - ./docker-db/:/var/lib/postgresql/data/:Z akkoma: image: akkoma:latest build: . restart: unless-stopped - env_file: - - .env + environment: + MIX_ENV: prod + ERL_EPMD_ADDRESS: 127.0.0.1 + DB_NAME: akkoma + DB_USER: akkoma + DB_PASS: akkoma links: - db - ports: [ - # Uncomment/Change port mappings below as needed. - # The left side is your host machine, the right one is the akkoma container. - # You can prefix the left side with an ip. - - # Webserver (for reverse-proxies outside of docker) - # If you use a dockerized proxy, you can leave this commented - # and use a container link instead. - "127.0.0.1:4000:4000", - ] + ports: + - "0.0.0.0:4000:4000" volumes: - - .:/opt/akkoma - - # Uncomment the following if you want to use a reverse proxy - #proxy: - # image: caddy:2-alpine - # restart: unless-stopped - # links: - # - akkoma - # ports: [ - # "443:443", - # "80:80" - # ] - # volumes: - # - ./docker-resources/Caddyfile:/etc/caddy/Caddyfile - # - ./caddy-data:/data - # - ./caddy-config:/config + - ./static/:/var/lib/akkoma/static/:Z + - ./uploads/:/var/lib/akkoma/uploads/:Z + - ./etc/:/etc/akkoma/:Z diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 778ef08e2..7c0fe8353 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,14 +1,18 @@ -#!/bin/ash - +#!/bin/sh set -e -echo "-- Waiting for database..." -while ! pg_isready -U ${DB_USER:-pleroma} -d postgres://${DB_HOST:-db}:5432/${DB_NAME:-pleroma} -t 1; do +if [ "$1" = 'pleroma' ] || [ "$1" = 'pleroma_ctl' ]; then + echo "-- Waiting for database..." + while ! pg_isready -U "${DB_USER:-pleroma}" -d postgres://"${DB_HOST:-db}:5432/${DB_NAME:-pleroma}" -t 1; do sleep 1s -done + done +fi -echo "-- Running migrations..." -mix ecto.migrate +if [ "$1" = 'pleroma' ]; then + echo "-- Running migrations..." + pleroma_ctl migrate -echo "-- Starting!" -mix phx.server + echo "-- Starting!" +fi + +exec "$@" diff --git a/docker-resources/Caddyfile.example b/docker-resources/Caddyfile.example deleted file mode 100644 index 47b8c7c74..000000000 --- a/docker-resources/Caddyfile.example +++ /dev/null @@ -1,14 +0,0 @@ -# default docker Caddyfile config for Akkoma -# -# Simple installation instructions: -# 1. Replace 'example.tld' with your instance's domain wherever it appears. - -example.tld { - log { - output file /var/log/caddy/akkoma.log - } - - encode gzip - - reverse_proxy akkoma:4000 -} diff --git a/docker-resources/build.sh b/docker-resources/build.sh deleted file mode 100755 index ce4f30f8d..000000000 --- a/docker-resources/build.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -docker compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g) akkoma -docker compose build --build-arg UID=$(id -u) --build-arg GID=$(id -g) db diff --git a/docker-resources/database/Dockerfile b/docker-resources/database/Dockerfile deleted file mode 100644 index 2a38dd16b..000000000 --- a/docker-resources/database/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM postgres:14-alpine - -ARG UID=1000 -ARG GID=1000 -ARG UNAME=akkoma - -RUN addgroup -g $GID $UNAME -RUN adduser -u $UID -G $UNAME -D -h $HOME $UNAME - -USER akkoma diff --git a/docker-resources/env.example b/docker-resources/env.example deleted file mode 100644 index 23ca15221..000000000 --- a/docker-resources/env.example +++ /dev/null @@ -1,5 +0,0 @@ -MIX_ENV=prod -ERL_EPMD_ADDRESS=127.0.0.1 -DB_NAME=akkoma -DB_USER=akkoma -DB_PASS=akkoma diff --git a/docker-resources/manage.sh b/docker-resources/manage.sh deleted file mode 100755 index acb6618c3..000000000 --- a/docker-resources/manage.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -docker compose run --rm akkoma $@