Co-authored-by: FloatingGhost <hannah@coffee-and-dreams.uk> Reviewed-on: #231pull/233/head
parent
60b3c8d17b
commit
66f913355a
@ -0,0 +1,61 @@
|
|||||||
|
version: "3.7"
|
||||||
|
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: akkoma-db:latest
|
||||||
|
build: ./docker-resources/database
|
||||||
|
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
|
||||||
|
volumes:
|
||||||
|
- type: bind
|
||||||
|
source: ./pgdata
|
||||||
|
target: /var/lib/postgresql/data
|
||||||
|
|
||||||
|
akkoma:
|
||||||
|
image: akkoma:latest
|
||||||
|
build: .
|
||||||
|
restart: unless-stopped
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
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",
|
||||||
|
]
|
||||||
|
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
|
@ -0,0 +1,14 @@
|
|||||||
|
# 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
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
#!/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
|
@ -0,0 +1,10 @@
|
|||||||
|
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
|
@ -0,0 +1,4 @@
|
|||||||
|
MIX_ENV=prod
|
||||||
|
DB_NAME=akkoma
|
||||||
|
DB_USER=akkoma
|
||||||
|
DB_PASS=akkoma
|
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
docker-compose run --rm akkoma $@
|
@ -0,0 +1,160 @@
|
|||||||
|
# Installing in Docker
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
### 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.
|
||||||
|
* Clone the akkoma repository
|
||||||
|
* `git clone https://akkoma.dev/AkkomaGang/akkoma.git -b stable`
|
||||||
|
* `cd akkoma`
|
||||||
|
|
||||||
|
### 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.
|
||||||
|
|
||||||
|
### 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.
|
||||||
|
|
||||||
|
### Generating your instance
|
||||||
|
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
This will ask you a few questions - the defaults are fine for most things,
|
||||||
|
the database hostname is `db`, and you will want to set the ip to `0.0.0.0`.
|
||||||
|
|
||||||
|
Now we'll want to copy over the config it just created
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp config/generated_config.exs config/prod.secret.exs
|
||||||
|
```
|
||||||
|
|
||||||
|
### Setting up the database
|
||||||
|
|
||||||
|
We need to run a few commands on the database container, this isn't too bad
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose run --rm --user akkoma -d db
|
||||||
|
# Note down the name it gives here, it will be something like akkoma_db_run
|
||||||
|
docker-compose run --rm akkoma psql -h db -U akkoma -f config/setup_db.psql
|
||||||
|
docker stop akkoma_db_run # Replace with the name you noted down
|
||||||
|
```
|
||||||
|
|
||||||
|
Now we can actually run our migrations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./docker-resources/manage.sh mix ecto.migrate
|
||||||
|
# this will recompile your files at the same time, since we changed the config
|
||||||
|
```
|
||||||
|
|
||||||
|
### Start the server
|
||||||
|
|
||||||
|
We're going to run it in the foreground on the first run, just to make sure
|
||||||
|
everything start up.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up
|
||||||
|
```
|
||||||
|
|
||||||
|
If everything went well, you should be able to access your instance at http://localhost:4000
|
||||||
|
|
||||||
|
You can `ctrl-c` out of the docker-compose now to shutdown the server.
|
||||||
|
|
||||||
|
### Running in the background
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Create your first user
|
||||||
|
|
||||||
|
If your instance is up and running, you can create your first user with administrative rights with the following task:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
./docker-resources/manage.sh mix pleroma.user new MY_USERNAME MY_EMAIL@SOMEWHERE --admin
|
||||||
|
```
|
||||||
|
|
||||||
|
And follow the prompts
|
||||||
|
|
||||||
|
### Reverse proxies
|
||||||
|
|
||||||
|
This is a tad more complex in docker than on the host itself. It
|
||||||
|
|
||||||
|
You've got two options.
|
||||||
|
|
||||||
|
#### Running caddy in a container
|
||||||
|
|
||||||
|
This is by far the easiest option. It'll handle HTTPS and all that for you.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp docker-resources/Caddyfile.example docker-resources/Caddyfile
|
||||||
|
```
|
||||||
|
|
||||||
|
Then edit the TLD in your caddyfile to the domain you're serving on.
|
||||||
|
|
||||||
|
Uncomment the `caddy` section in the docker-compose file,
|
||||||
|
then run `docker-compose up -d` again.
|
||||||
|
|
||||||
|
#### Running a reverse proxy on the host
|
||||||
|
|
||||||
|
If you want, you can also run the reverse proxy on the host. This is a bit more complex, but it's also more flexible.
|
||||||
|
|
||||||
|
Follow the guides for source install for your distribution of choice, or adapt
|
||||||
|
as needed. Your standard setup can be found in the [Debian Guide](../debian_based_en/#nginx)
|
||||||
|
|
||||||
|
### You're done!
|
||||||
|
|
||||||
|
All that's left is to set up your frontends.
|
||||||
|
|
||||||
|
The standard from-source commands will apply to you, just make sure you
|
||||||
|
prefix them with `./docker-resources/manage.sh`!
|
||||||
|
|
||||||
|
{! installation/frontends.include !}
|
||||||
|
|
||||||
|
### Updating Docker Installs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git pull
|
||||||
|
./docker-resources/build.sh
|
||||||
|
./docker-resources/manage.sh mix deps.get
|
||||||
|
./docker-resources/manage.sh mix compile
|
||||||
|
./docker-resources/manage.sh mix ecto.migrate
|
||||||
|
docker-compose restart akkoma
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Further reading
|
||||||
|
|
||||||
|
{! installation/further_reading.include !}
|
||||||
|
|
||||||
|
{! support.include !}
|
Loading…
Reference in new issue