From 5231d436d11a459cae087d18e03c8411ef775bc1 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 18 Oct 2022 16:16:55 +0100 Subject: [PATCH] Add docker migration guide --- docker-compose.yml | 2 +- docs/docs/installation/docker_en.md | 7 +- .../installation/migrating_to_docker_en.md | 158 ++++++++++++++++++ 3 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 docs/docs/installation/migrating_to_docker_en.md diff --git a/docker-compose.yml b/docker-compose.yml index b8da67a22..0dedbc87e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -58,4 +58,4 @@ services: # volumes: # - ./docker-resources/Caddyfile:/etc/caddy/Caddyfile # - ./caddy-data:/data - # - ./caddy-config:/config \ No newline at end of file + # - ./caddy-config:/config diff --git a/docs/docs/installation/docker_en.md b/docs/docs/installation/docker_en.md index bf67f4d86..64169852f 100644 --- a/docs/docs/installation/docker_en.md +++ b/docs/docs/installation/docker_en.md @@ -6,6 +6,8 @@ This guide will show you how to get akkoma working in a docker container, if you want isolation, or if you run a distribution not supported by the OTP releases. +If you want to migrate from or OTP to docker, check out [the migration guide](./migrating_to_docker_en.md). + ### Prepare the system * Install docker and docker-compose @@ -43,9 +45,6 @@ in our compose environment. ```bash mkdir pgdata -# if you want to use caddy -mkdir caddy-data -mkdir caddy-config ./docker-resources/manage.sh mix deps.get ./docker-resources/manage.sh mix compile ./docker-resources/manage.sh mix pleroma.instance gen @@ -118,6 +117,8 @@ You've got two options. This is by far the easiest option. It'll handle HTTPS and all that for you. ```bash +mkdir caddy-data +mkdir caddy-config cp docker-resources/Caddyfile.example docker-resources/Caddyfile ``` diff --git a/docs/docs/installation/migrating_to_docker_en.md b/docs/docs/installation/migrating_to_docker_en.md new file mode 100644 index 000000000..945f43090 --- /dev/null +++ b/docs/docs/installation/migrating_to_docker_en.md @@ -0,0 +1,158 @@ +# Migrating to a Docker Installation + +If you for any reason wish to migrate a source or OTP install to a docker one, +this guide is for you. + +You have a few options - your major one will be whether you want to keep your +reverse-proxy setup from before. + +You probably should, in the first instance. + +### Prepare the system + +* Install docker and docker-compose + * [Docker](https://docs.docker.com/engine/install/) + * [Docker-compose](https://docs.docker.com/compose/install/) + * This will usually just be a repository installation and a package manager invocation. + +=== "Source" +```bash +git pull +``` + +=== "OTP" +Clone the akkoma repository + +```bash +git clone https://akkoma.dev/AkkomaGang/akkoma.git -b stable +cd akkoma +``` + +### Back up your old database + +Change the database name as needed + +```bash +pg_dump -d akkoma_prod --format c > akkoma_backup.sql +``` + +### Getting your static files in the right place + +This will vary by every installation. Copy your `instance` directory to `instance/` in +the akkoma source directory - this is where the docker container will look for it. + +For *most* from-source installs it'll already be there. + +And the same with `uploads`, make sure your uploads (if you have them on disk) are +located at `uploads/` in the akkoma source directory. + +If you have them on a different disk, you will need to mount that disk into the docker-compose file, +with an entry that looks like this: + +```yaml +akkoma: + volumes: + - .:/opt/akkoma # This should already be there + - type: bind + source: /path/to/your/uploads + target: /opt/akkoma/uploads +``` + +### Set up basic configuration + +```bash +cp docker-resources/env.example .env +echo "DOCKER_USER=$(id -u):$(id -g)" >> .env +``` + +This probably won't need to be changed, it's only there to set basic environment +variables for the docker-compose file. + +=== "From source" + +You probably won't need to change your config. Provided your `config/prod.secret.exs` file +is still there, you're all good. + +=== "OTP" +```bash +cp /etc/akkoma/config.exs config/prod.secret.exs +``` + +**BOTH** + +Set the following config in `config/prod.secret.exs`: +```elixir +config :pleroma, Pleroma.Web.Endpoint, + ..., + http: [ip: {0, 0, 0, 0}, port: 4000] + +config :pleroma, Pleroma.Repo, + ..., + username: "akkoma", + password: "akkoma", + database: "akkoma", + hostname: "db" +``` + +### Building the container + +The container provided is a thin wrapper around akkoma's dependencies, +it does not contain the code itself. This is to allow for easy updates +and debugging if required. + +```bash +./docker-resources/build.sh +``` + +This will generate a container called `akkoma` which we can use +in our compose environment. + +### Setting up the docker resources + +```bash +# These won't exist if you're migrating from OTP +rm -rf deps +rm -rf _build +``` + +```bash +mkdir pgdata +./docker-resources/manage.sh mix deps.get +./docker-resources/manage.sh mix compile +``` + +### Setting up the database + +Now we can import our database to the container. + +```bash +docker-compose run --rm --user akkoma -d db +docker-compose run --rm akkoma pg_restore -v -U akkoma -j $(grep -c ^processor /proc/cpuinfo) -d akkoma -h db akkoma_backup.sql +``` + +### Reverse proxies + +If you're just reusing your old proxy, you may have to uncomment the line in +the docker-compose file under `ports`. You'll find it. + +Otherwise, you can use the same setup as the [docker installation guide](./docker_en.md#reverse-proxies). + +### Let's go + +```bash +docker-compose up -d +``` + +You should now be at the same point as you were before, but with a docker install. + +{! installation/frontends.include !} + +See the [docker installation guide](./docker_en.md) for more information on how to +update. + +#### Further reading + +{! installation/further_reading.include !} + +{! support.include !} +