Add docker migration guide
authorFloatingGhost <hannah@coffee-and-dreams.uk>
Tue, 18 Oct 2022 15:16:55 +0000 (16:16 +0100)
committerFloatingGhost <hannah@coffee-and-dreams.uk>
Tue, 18 Oct 2022 15:16:55 +0000 (16:16 +0100)
docker-compose.yml
docs/docs/installation/docker_en.md
docs/docs/installation/migrating_to_docker_en.md [new file with mode: 0644]

index b8da67a226037b9cb964e88f3a95360fb615edd9..0dedbc87e62e1a4be4b6b476cb8dd933d8ede298 100644 (file)
@@ -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
index bf67f4d866e835e2ac489303409046fdc2d0eebf..64169852f78b7a093ef7c7125fcc633e6e344f08 100644 (file)
@@ -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 (file)
index 0000000..945f430
--- /dev/null
@@ -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 !}
+