WIP: Prebuilt docker image #803
4 changed files with 95 additions and 47 deletions
39
docker-resources/docker-compose.pgsql-tuning.yml
Normal file
39
docker-resources/docker-compose.pgsql-tuning.yml
Normal file
|
@ -0,0 +1,39 @@
|
|||
services:
|
||||
db:
|
||||
# If you use a config generator, use the value below for your
|
||||
# "ram" size
|
||||
shm_size: 4gb
|
||||
command:
|
||||
- "postgres"
|
||||
- "-c"
|
||||
- "max_connections=40"
|
||||
- "-c"
|
||||
- "shared_buffers=1GB"
|
||||
- "-c"
|
||||
- "effective_cache_size=3GB"
|
||||
- "-c"
|
||||
- "maintenance_work_mem=512MB"
|
||||
- "-c"
|
||||
- "checkpoint_completion_target=0.9"
|
||||
- "-c"
|
||||
- "wal_buffers=16MB"
|
||||
- "-c"
|
||||
- "default_statistics_target=500"
|
||||
- "-c"
|
||||
- "random_page_cost=1.1"
|
||||
- "-c"
|
||||
- "effective_io_concurrency=200"
|
||||
- "-c"
|
||||
- "work_mem=6553kB"
|
||||
- "-c"
|
||||
- "min_wal_size=4GB"
|
||||
- "-c"
|
||||
- "max_wal_size=16GB"
|
||||
- "-c"
|
||||
- "max_worker_processes=4"
|
||||
- "-c"
|
||||
- "max_parallel_workers_per_gather=2"
|
||||
- "-c"
|
||||
- "max_parallel_workers=4"
|
||||
- "-c"
|
||||
- "max_parallel_maintenance_workers=2"
|
5
docker-resources/env.example
Normal file
5
docker-resources/env.example
Normal file
|
@ -0,0 +1,5 @@
|
|||
MIX_ENV=prod
|
||||
ERL_EPMD_ADDRESS=127.0.0.1
|
||||
DB_NAME=akkoma
|
||||
DB_USER=akkoma
|
||||
DB_PASS=akkoma
|
|
@ -8,9 +8,7 @@ mkdir -p pgdata
|
|||
docker compose run \
|
||||
--rm \
|
||||
-e "PLEROMA_CTL_RPC_DISABLED=true" \
|
||||
akkoma ./bin/pleroma_ctl instance gen --no-sql-user --no-db-creation --dbhost db --dbname akkoma --dbuser akkoma --dbpass akkoma --listen-ip 0.0.0.0 --listen-port 4000 --static-dir /opt/akkoma/instance/ --uploads-dir /opt/akkoma/uploads/ --db-configurable true --output /opt/akkoma/config/generated_config.exs --output-psql /opt/akkoma/config/setup_db.psql
|
||||
|
||||
echo "Instance generated!"
|
||||
akkoma ./bin/pleroma_ctl instance gen --no-sql-user --no-db-creation --dbhost db --dbname akkoma --dbuser akkoma --dbpass akkoma --listen-ip 0.0.0.0 --listen-port 4000 --static-dir /opt/akkoma/instance/ --uploads-dir /opt/akkoma/uploads/ --db-configurable y --output /opt/akkoma/config/generated_config.exs --output-psql /opt/akkoma/config/setup_db.psql
|
||||
|
||||
# setup database from generated config
|
||||
# we run from the akkoma container to ensure we have the right environment! can't connect to a DB that doesn't exist yet...
|
||||
|
@ -19,3 +17,10 @@ docker compose run \
|
|||
-e "PLEROMA_CTL_RPC_DISABLED=true" \
|
||||
-e "PGPASSWORD=akkoma" \
|
||||
akkoma psql -h db -U akkoma -d akkoma -f /opt/akkoma/config/setup_db.psql
|
||||
|
||||
# stop tzdata trying to write to places it shouldn't
|
||||
echo "config :tzdata, :data_dir, "/var/tmp/elixir_tzdata_storage" >> /opt/akkoma/config/generated_config.exs
|
||||
|
||||
echo "Instance generated!"
|
||||
|
||||
echo "Make sure you check your config and copy it to config/prod.secret.exs before starting the instance!"
|
|
@ -28,31 +28,14 @@ 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
|
||||
./docker-resources/manage.sh mix deps.get
|
||||
./docker-resources/manage.sh mix compile
|
||||
./docker-resources/manage.sh mix pleroma.instance gen
|
||||
./docker-resources/generate-instance.sh
|
||||
```
|
||||
|
||||
This will ask you a few questions - the defaults are fine for most things,
|
||||
the database hostname is `db`, the database password is `akkoma`
|
||||
(not auto generated), and you will want to set the ip to `0.0.0.0`.
|
||||
This will ask you a few questions - the defaults are fine for most things!
|
||||
|
||||
Now we'll want to copy over the config it just created
|
||||
|
||||
|
@ -60,24 +43,6 @@ Now we'll want to copy over the config it just created
|
|||
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
|
||||
|
@ -102,7 +67,7 @@ docker compose up -d
|
|||
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
|
||||
./docker-resources/manage.sh user new MY_USERNAME MY_EMAIL@SOMEWHERE --admin
|
||||
```
|
||||
|
||||
And follow the prompts
|
||||
|
@ -154,23 +119,43 @@ If you want, you can also run the reverse proxy on the host. This is a bit more
|
|||
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)
|
||||
|
||||
### Applying Postgresql optimisations
|
||||
|
||||
Your postgresql server will behave better if you tune its settings to your machine.
|
||||
|
||||
There is a file at `docker-resources/docker-compose.pgsql-tuning.yml` which shows you how to apply settings, for example
|
||||
those generated by [PgTune](https://pgtune.leopard.in.ua/)
|
||||
|
||||
You can merge this config into a `docker-compose.override.yml` file to apply them. Make sure that you generate your options
|
||||
based on the shm_size you allocate!
|
||||
|
||||
### 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
|
||||
The standard OTP commands will apply to you, just make sure you
|
||||
prefix them with `./docker-resources/manage.sh`!
|
||||
|
||||
So, for example, if an OTP command would be
|
||||
|
||||
```
|
||||
./bin/pleroma_ctl user new myuser
|
||||
```
|
||||
|
||||
The equivalent docker command would be
|
||||
|
||||
```
|
||||
./docker-resources/manage.sh user new myuser
|
||||
```
|
||||
|
||||
{! 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 pull
|
||||
./docker-resources/manage.sh migrate
|
||||
docker compose restart akkoma db
|
||||
```
|
||||
|
||||
|
@ -180,6 +165,20 @@ create a new file called `docker-compose.override.yml`. There you can add any
|
|||
overrides or additional services without worrying about git conflicts when a
|
||||
new release comes out.
|
||||
|
||||
### Migrating from the old docker install system
|
||||
|
||||
If you were running akkoma in docker before 2024.06, you will need to do a few little migration steps.
|
||||
|
||||
First off, we need to migrate our postgres installation to a newer version!
|
||||
|
||||
```bash
|
||||
./docker-resources/migrate-postgresql-version.sh pgdata 14 16
|
||||
```
|
||||
|
||||
This should be nice and quick.
|
||||
|
||||
After that you can just `docker compose pull` and all should be fine.
|
||||
|
||||
#### Further reading
|
||||
|
||||
{! installation/further_reading.include !}
|
||||
|
|
Loading…
Reference in a new issue