Compare commits

...

19 Commits

Author SHA1 Message Date
sn0w bd80fb5df1
Update alpine, test with akkoma 2022-06-08 15:22:05 +02:00
sn0w 3d84817593
Add note about postgres 2021-08-16 18:58:22 +02:00
sn0w 65fe5d85c2
Add exiftool and upgrade pg 2021-08-13 10:56:12 +02:00
sn0w c19fb6a6d3
Add ffmpeg for media_preview_proxy 2021-07-19 23:29:30 +02:00
sn0w a80d553d09 Update 'README.md' 2021-03-25 10:14:55 +00:00
sn0w 298b6a3acc Update 'README.md' 2021-03-25 10:08:09 +00:00
sn0w c8411e848c
Fix pleroma build on new versions 2021-01-28 01:30:33 +01:00
sn0w 7995f16a68
emoji mountpoint fixup (#10) 2020-09-07 19:12:09 +02:00
sn0w 9398a1b816
Create persistent emoji mount (Fixes #8) 2020-09-04 23:18:07 +02:00
sn0w caf0252937
Fix compilation 2020-09-04 22:58:48 +02:00
sn0w c1a919f228
Rename default branch (Fixes #7) 2020-09-04 22:38:55 +02:00
sn0w f0dde31dee Merge pull request 'Follow pleroma docs customization advice' (#9) from raziel2244/pleroma-docker:master into master
Reviewed-on: https://memleak.eu/sn0w/pleroma-docker/pulls/9
2020-09-04 20:37:23 +00:00
raziel2244 3e6bababac Update 'README.md' 2020-09-04 15:41:53 +00:00
sn0w 139cbf402b
Update git link and initdb 2020-05-03 16:52:01 +02:00
sn0w 568f3a67f5 Update 'README.md' 2020-05-03 14:33:01 +00:00
sn0w b20f3875b9 Update 'README.md' 2020-05-03 14:31:53 +00:00
sn0w 011bce7840
Upgrade base image 2020-03-08 20:18:03 +01:00
sn0w 6f4747304a add basic healthcheck support 2019-09-05 13:12:05 +00:00
sn0w d417805d53 Update 'README.md' 2019-09-05 12:52:27 +00:00
9 changed files with 95 additions and 46 deletions

View File

@ -1,2 +1,3 @@
data/
cache/
emoji/

View File

@ -1,5 +1,5 @@
# Pleroma tag, commit, or branch to build
PLEROMA_VERSION=master
PLEROMA_VERSION=stable
# The directory where the containers store their stuff
# Can be an absolute or relative path
@ -24,3 +24,4 @@ DOCKER_GID=1000
# or if you do not trust the admins of pleroma's Gitlab instance.
#
PLEROMA_GIT_REPO=https://git.pleroma.social/pleroma/pleroma.git
# or, for example, https://git.ihatebeinga.live/IHBAGang/akkoma.git

1
.gitignore vendored
View File

@ -1,5 +1,6 @@
data/
cache/
emoji/
custom.d/
!custom.d/.gitkeep
config.exs

View File

@ -1,4 +1,4 @@
FROM alpine:3.10
FROM alpine:3.16
ARG __VIA_SCRIPT
RUN \
@ -25,12 +25,11 @@ RUN \
git curl rsync postgresql-client \
&& \
apk add --no-cache --virtual .sdk \
build-base \
build-base cmake file-dev \
&& \
apk add --no-cache --virtual .runtime \
imagemagick \
elixir erlang erlang-runtime-tools \
erlang-xmerl erlang-ssl erlang-ssh erlang-eldap erlang-mnesia
imagemagick ffmpeg exiftool \
elixir erlang erlang-dev
# Add entrypoint
COPY ./entrypoint.sh /
@ -51,10 +50,17 @@ USER pleroma
WORKDIR /home/pleroma
# Get pleroma sources
#
# Also make sure that instance/static/emoji exists.
# Pleroma does not ship with an `instance` folder by default, causing docker to create `instance/static` for us at launch.
# In itself that wouldn't be much of an issue, but said folder(s) are created as root:pleroma with 2755.
# This breaks the custom.d step in entrypoint.sh which relies on writing there (See #10).
#
ARG PLEROMA_GIT_REPO
RUN \
echo "#> Getting pleroma sources from $PLEROMA_GIT_REPO..." 1>&2 && \
git clone --progress $PLEROMA_GIT_REPO ./pleroma
git clone --progress $PLEROMA_GIT_REPO ./pleroma && \
mkdir -p ./pleroma/instance/static/emoji
WORKDIR /home/pleroma/pleroma
@ -79,3 +85,12 @@ RUN \
cp ./config/dev.exs ./config/prod.secret.exs && \
BUILDTIME=1 /entrypoint.sh && \
rm ./config/prod.secret.exs
# Register healthcheck
# You might need to change these values on slow or busy servers.
HEALTHCHECK \
--interval=10s \
--start-period=50s \
--timeout=4s \
--retries=3 \
CMD curl -sSLf http://localhost:4000/api/pleroma/healthcheck || exit 1

View File

@ -1,6 +1,6 @@
# Pleroma-Docker (Unofficial)
[Pleroma](https://pleroma.social/) is a selfhosted social network that uses OStatus/ActivityPub.
[Pleroma](https://pleroma.social/) is a selfhosted social network that uses ActivityPub.
This repository dockerizes it for easier deployment.
@ -17,8 +17,7 @@ This repository dockerizes it for easier deployment.
* thermonuclear war, or you getting fired because your boss saw your NSFW posts.
*
* Please do some research if you have any concerns about the
* included features or software ***before*** using it.
*
* included features or software *before* using it.
*/
```
@ -26,10 +25,15 @@ This repository dockerizes it for easier deployment.
## In the Wild
My own instance is managed by this script.<br>
Take a look at [hosted/pleroma](https://glitch.sh/hosted/pleroma) if you get stuck or need some inspiration.
`cofe.rocks` is always managed by this script.<br/>
Take a look at [hosted/pleroma](/hosted/pleroma) if you get stuck or need some inspiration.
Does your instance use pleroma-docker?<br>
Additionally it's known to run on (in no particular order):
- social.interhop.org
- social.technodruide.ca
- is.badat.dev
Does your instance use pleroma-docker?<br/>
Let me know and I'll add you to this list.
## Docs
@ -37,7 +41,7 @@ Let me know and I'll add you to this list.
These docs assume that you have at least a basic understanding
of the pleroma installation process and common docker commands.
If you have questions about Pleroma head over to https://docs.pleroma.social/.<br>
If you have questions about Pleroma head over to https://docs.pleroma.social/.
For help with docker check out https://docs.docker.com/.
For other problems related to this script, contact me or open an issue :)
@ -58,61 +62,74 @@ For other problems related to this script, contact me or open an issue :)
- [Configure a reverse-proxy](#my-instance-is-up-how-do-i-reach-it)
- Profit!
Hint:<br>
You can also use normal `docker-compose` commands to maintain your setup.<br>
Hint:
You can also use normal `docker-compose` commands to maintain your setup.<br/>
The only command that you cannot use is `docker-compose build` due to build caching.
### Configuration
All the pleroma options that you usually put into your `*.secret.exs` now go into `config.exs`.
`.env` stores config values that need to be known at orchestration/build time.<br>
All the pleroma options that you usually put into your `*.secret.exs` now go into `config.exs`.<br/>
`.env` stores config values that need to be known at orchestration/build time.<br/>
Documentation for the possible values is inside of that file.
### Updates
Run `./pleroma.sh build` again and start the updated image with `./pleroma.sh up`.
Run `./pleroma.sh build` again and start the updated image with `./pleroma.sh up`.<br/>
You don't need to stop your pleroma server for either of those commands.
### Maintenance
Pleroma maintenance is usually done with mix tasks.
You can run these tasks in your running pleroma server using `./pleroma.sh mix [task] [arguments...]`.
For example: `./pleroma.sh mix pleroma.user new sn0w ...`
Pleroma maintenance is usually done with mix tasks.<br/>
You can run these tasks in your running pleroma server using `./pleroma.sh mix [task] [arguments...]`.<br/>
For example: `./pleroma.sh mix pleroma.user new sn0w ...`<br/>
If you need to fix bigger problems you can also spawn a shell with `./pleroma.sh enter`.
### Postgres Upgrades
Postgres upgrades are a slow process in docker (even more than usual) because we can't utilize `pg_upgrade` in any sensible way.<br/>
If you ever wish to upgrade postgres to a new major release for some reason, here's a list of things you'll need to do.
- Inform your users about the impending downtime
- Seriously this can take anywhere from a couple hours to a week depending on your instance
- Make sure you have enough free disk space or some network drive to dump to, we can't do in-place upgrades
- Stop pleroma (`docker-compose stop server`)
- Dump the current database into an SQL file (`docker-compose exec db pg_dumpall -U pleroma > /my/sql/location/pleroma.sql`)
- Remove the old containers (`docker-compose down`)
- Modify the postgres version in `docker-compose.yml` to your desired release
- Delete `data/db` or move it into some different place (might be handy if you want to abort/revert the migration)
- Start the new postgres container (`docker-compose up -d db`)
- Start the import (`docker-compose exec -T db psql -U pleroma < /my/sql/location/pleroma.sql`)
- Wait for a possibly ridculously long time
- Boot pleroma again (`docker-compose up -d`)
- Wait for service to stabilize while federation catches up
- Done!
### Customization
Add your customizations (and their folder structure) to `custom.d/`.<br>
They will be copied into the right place when the container starts.<br>
You can even replace/patch pleromas code with this,
because the project is recompiled at startup if needed.
Add your customizations (and their folder structure) to `custom.d/`.<br/>
They will be copied into the right place when the container starts.<br/>
You can even replace/patch pleromas code with this, because the project is recompiled at startup if needed.
In general: Prepending `custom.d/` to pleromas customization guides should work all the time.<br>
In general: Prepending `custom.d/` to pleromas customization guides should work all the time.<br/>
Check them out in the [pleroma documentation](https://docs.pleroma.social/small_customizations.html#content).
For example: A custom thumbnail now goes into `custom.d/` + `priv/static/instance/thumbnail.jpeg`.
For example: A custom thumbnail now goes into `custom.d/` + `instance/static/instance/thumbnail.jpeg`.
### Patches
Works exactly like customization, but we have a neat little helper here.
Works exactly like customization, but we have a neat little helper here.<br/>
Use `./pleroma.sh mod [regex]` to mod any file that ships with pleroma, without having to type the complete path.
### My instance is up, how do I reach it?
To reach Gopher or SSH, just uncomment the port-forward in your `docker-compose.yml`.
To reach HTTP you will have to configure a "reverse-proxy".
Older versions of this project contained a huge amount of scripting to support all kinds of reverse-proxy setups.
This newer version tries to focus only on providing good pleroma tooling.
To reach HTTP you will have to configure a "reverse-proxy".<br/>
Older versions of this project contained a huge amount of scripting to support all kinds of reverse-proxy setups.<br/>
This newer version tries to focus only on providing good pleroma tooling.<br/>
That makes the whole process a bit more manual, but also more flexible.
You can use Caddy, Traefik, Apache, nginx, or whatever else you come up with.<br>
You can use Caddy, Traefik, Apache, nginx, or whatever else you come up with.<br/>
Just modify your `docker-compose.yml` accordingly.
One example would be to add an [nginx server](https://hub.docker.com/_/nginx) to your `docker-compose.yml`:
@ -136,18 +153,18 @@ Then take a look at [the pleroma nginx example](https://git.pleroma.social/plero
Using apache would work in a very similar way (see [Apache Docker Docs](https://hub.docker.com/_/httpd) and [the pleroma apache example](https://git.pleroma.social/pleroma/pleroma/blob/develop/installation/pleroma-apache.conf)).
The target that you proxy to is called `http://server:4000/`.<br>
The target that you proxy to is called `http://server:4000/`.<br/>
This will work automagically when the proxy also lives inside of docker.
If you need help with this, or if you think that this needs more documentation, please let me know.
Something that cofe.rocks uses is simple port-forwarding of the `server` container to the host's `127.0.0.1`.
From there on, the natively installed nginx server acts as a proxy to the open internet.
You can take a look at cofe's [compose yaml](https://glitch.sh/hosted/pleroma/src/branch/master/docker-compose.yml#L37) and [proxy config](https://glitch.sh/hosted/pleroma/src/branch/master/proxy.xconf) if that setup sounds interesting.
Something that cofe.rocks uses is simple port-forwarding of the `server` container to the host's `127.0.0.1`.<br/>
From there on, the natively installed nginx server acts as a proxy to the open internet.<br/>
You can take a look at cofe's [compose yaml](/hosted/pleroma/src/branch/master/docker-compose.yml) and [proxy config](/hosted/pleroma/src/branch/master/proxy.xconf) if that setup sounds interesting.
### Attribution
Thanks to [Angristan](https://github.com/Angristan/dockerfiles/tree/master/pleroma) and [RX14](https://github.com/RX14/kurisu.rx14.co.uk/blob/master/services/iscute.moe/pleroma/Dockerfile) for their dockerfiles, which served as an inspiration for the early versions of this script.
The current version is based on the [offical install instructions](https://docs.pleroma.social/alpine_linux_en.html).<br>
The current version is based on the [offical install instructions](https://docs.pleroma.social/alpine_linux_en.html).
Thanks to all people who contributed to those.

View File

@ -30,6 +30,9 @@ config :pleroma, Pleroma.Repo,
# You should not change this.
config :pleroma, Pleroma.Uploaders.Local, uploads: "/uploads"
config :pleroma, :instance,
healthcheck: true
#
# vvv Your awesome config options go here vvv
#

View File

@ -2,7 +2,7 @@ version: "3.7"
services:
db:
image: postgres:10-alpine
image: postgres:13-alpine
init: true
restart: unless-stopped
environment: {
@ -46,4 +46,5 @@ services:
- ./custom.d:/custom.d:ro
- ./config.exs:/home/pleroma/pleroma/config/prod.secret.exs:ro
- ./config.exs:/home/pleroma/pleroma/config/dev.secret.exs:ro
- ./emoji:/home/pleroma/pleroma/instance/static/emoji
- $DOCKER_DATADIR/uploads:/uploads

View File

@ -1,2 +1,3 @@
CREATE EXTENSION IF NOT EXISTS citext;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

View File

@ -196,6 +196,15 @@ action__restart() {
}
action__start() {
if [[ ! -d ./data/uploads ]] || [[ ! -d ./emoji ]]; then
if [[ "$(id -u)" != "$DOCKER_UID" ]]; then
echo "Please create the folders ./data/uploads and ./emoji, and chown them to $DOCKER_UID"
exit 1
fi
mkdir -p ./data/uploads ./emoji
fi
docker_compose up --remove-orphans -d
}
@ -302,7 +311,7 @@ Actions:
----------------------------
You can report bugs or contribute to this project at:
https://glitch.sh/sn0w/pleroma-docker
https://memleak.eu/sn0w/pleroma-docker
"
}