diff --git a/Dockerfile b/Dockerfile index e6f5a93..05a3d45 100644 --- a/Dockerfile +++ b/Dockerfile @@ -98,7 +98,7 @@ COPY --from=build --chown=pleroma:0 /src/release ${HOME} COPY ./docker.exs /etc/pleroma/config.exs USER caddy -COPY ./Caddyfile /caddy/Caddyfile +COPY ./Caddyfile /etc/Caddyfile USER root COPY ./docker-entrypoint.sh /run/docker-entrypoint.sh @@ -108,7 +108,7 @@ COPY ./postgres.sh /run/postgres.sh RUN chmod 755 /run/postgres.sh VOLUME "/caddy" -VOLUME "/var/lib/postgresql/14/main" +VOLUME "/var/lib/postgresql/14/pleroma" VOLUME "${DATA}/static" VOLUME "${DATA}/uploads" diff --git a/README.md b/README.md index 3cae73b..a9e83c4 100644 --- a/README.md +++ b/README.md @@ -17,17 +17,18 @@ docker build . -t rebased-omnibus:latest ## Run it -First, point your domain name at the public IP of your instance, so Caddy can get a proper TLS certificate. Then, boot up Docker: +First, point your domain name at the public IP of your server, so Caddy can get a proper TLS certificate. Then, boot up Docker: ``` docker run -it \ - -e DOMAIN=your.domain.tld \ - -e INSTANCE_NAME=yourdomaintld \ - -e ADMIN_EMAIL=me@your.domain.tld \ - -e NOTIFY_EMAIL=notify@your.domain.tld \ - -v ./caddy:/caddy \ - -v ./db:/var/lib/postgresql/14/main \ - -v ./uploads:/var/lib/pleroma/uploads \ + -e DOMAIN=pl.your.domain \ + -e INSTANCE_NAME=Soapbox \ + -e ADMIN_EMAIL=me@your.domain \ + -e NOTIFY_EMAIL=notify@your.domain \ + -v /home/omnibus/caddy:/caddy \ + -v /home/omnibus/db:/var/lib/postgresql/14/pleroma \ + -v /home/omnibus/uploads:/var/lib/pleroma/uploads \ + -v /home/omnibus/static:/var/lib/pleroma/static \ -p 0.0.0.0:80:80 \ -p 0.0.0.0:443:443 \ rebased-omnibus:latest diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 574bcc6..36a30b6 100644 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -2,18 +2,39 @@ set -e -export DATABASE_URL="postgres://pleroma:bleromer@localhost:5432/pleroma" +export DATABASE_URL="postgres://pleroma:bleromer@localhost:5433/pleroma" echo "-- Setting up PostgreSQL..." -pg_ctlcluster 14 main start +chown -R postgres:postgres /var/lib/postgresql/14 +chmod -R 750 /var/lib/postgresql/14 + +set +e +pg_createcluster 14 pleroma +cp /etc/postgresql/14/pleroma/*.conf /var/lib/postgresql/14/pleroma +set -e + +pg_ctlcluster 14 pleroma start gosu postgres /run/postgres.sh echo "-- Starting Caddy..." -sed -i -e "s/{{domain}}/$DOMAIN/" /caddy/Caddyfile -gosu caddy caddy start --config /caddy/Caddyfile +chown -R caddy:caddy /caddy +sed -i -e "s/{{domain}}/$DOMAIN/" /etc/Caddyfile +gosu caddy caddy start --config /etc/Caddyfile echo "-- Running migrations..." gosu pleroma sh -c "/opt/pleroma/bin/pleroma_ctl migrate" +if [ ! -f "/var/lib/pleroma/static/.migrated" ]; then + echo "-- Transferring config to database" + gosu pleroma sh -c "/opt/pleroma/bin/pleroma start" & + sleep 10 + gosu pleroma sh -c "/opt/pleroma/bin/pleroma_ctl config migrate_to_db" + gosu pleroma sh -c "/opt/pleroma/bin/pleroma stop" & + echo "migrated" > /var/lib/pleroma/static/.migrated + sleep 10 +else + echo "-- Already migrated config to DB. Skipping." +fi + echo "-- Starting!" -gosu pleroma sh -c "/opt/pleroma/bin/pleroma start" +gosu pleroma sh -c "/opt/pleroma/bin/pleroma start" \ No newline at end of file diff --git a/docker.exs b/docker.exs index 4d9c05e..ea99d96 100644 --- a/docker.exs +++ b/docker.exs @@ -32,6 +32,8 @@ config :pleroma, :database, rum_enabled: false config :pleroma, :instance, static_dir: "/var/lib/pleroma/static" config :pleroma, Pleroma.Uploaders.Local, uploads: "/var/lib/pleroma/uploads" +config :pleroma, configurable_from_database: true + # We can't store the secrets in this file, since this is baked into the docker image if not File.exists?("/var/lib/pleroma/secret.exs") do secret = :crypto.strong_rand_bytes(64) |> Base.encode64() |> binary_part(0, 64) diff --git a/postgres.sh b/postgres.sh index 647a11a..048a1eb 100644 --- a/postgres.sh +++ b/postgres.sh @@ -7,11 +7,11 @@ while ! pg_isready -d $DATABASE_URL -t 1; do sleep 1s done -COUNT=$(psql -q -c "select count(datname) from pg_catalog.pg_database where datname = 'pleroma'" -t -A | tr -d '\n'); +COUNT=$(psql -p 5433 -q -c "select count(datname) from pg_catalog.pg_database where datname = 'pleroma'" -t -A | tr -d '\n'); if [ "$COUNT" -lt "1" ]; then echo "Creating database..." - psql -q -c "create user pleroma with encrypted password 'bleromer'" - psql -q -c "create database pleroma with owner = 'pleroma'" - psql -q -c "grant all privileges on database pleroma to pleroma" + psql -p 5433 -q -c "create user pleroma with encrypted password 'bleromer'" + psql -p 5433 -q -c "create database pleroma with owner = 'pleroma'" + psql -p 5433 -q -c "grant all privileges on database pleroma to pleroma" fi \ No newline at end of file