Using PostgreSQL on host machine from Synapse container in a more isolated way. #25

Merged
skobkin merged 2 commits from feature_synapse_postgres_on_host into master 2022-03-19 02:32:20 +00:00
4 changed files with 57 additions and 3 deletions

View file

@ -21,6 +21,11 @@ docker-compose logs -f
Some services may require additional configuration. Check for additional `README.md` files Some services may require additional configuration. Check for additional `README.md` files
or comments in the `docker-compose.yml` files or `.env.dist` templates. or comments in the `docker-compose.yml` files or `.env.dist` templates.
## Using a database server on the host from the container
You need to change your database configuration to be able to do that. Check
[this](_docs/access_database_on_host_from_docker.md) documentation.
## Is it working? ## Is it working?
Not every stack is tested to fully work. Not every stack is tested to fully work.

View file

@ -0,0 +1,37 @@
# Using database on host machine from Docker
## Database configuration
### PostgreSQL
You need to make PostgreSQL listen not only `localhost`, but also Docker's network interface.
To do that you need to add host machine IP address in the Docker network (usually `172.17.0.1`) to the `postgresql.conf`:
```ini
# Listen local interface and also Docker's network
listen_addresses = 'localhost,172.17.0.1'
```
Then you need to allow apps inside Docker containers to authenticate. That could be done in the `pg_hba.conf`:
```
# Docker network
host all all 172.17.0.0/12 md5
```
Do not forget to restart your PostgreSQL server. For PostgreSQL 12 it could be usually done like that:
```shell
systemctl restart postgresql@12-main.service
```
### MySQL / MariaDB
TBW
## Application configuration inside Docker
Stacks which allow to use external database back-end should also map `host.docker.internal` to the host machine
address inside Docker's default network.
So to connect to the database from the application inside the container you should use `host.docker.internal` as the
database host/address.

View file

@ -10,7 +10,10 @@ docker-compose run synapse generate
After that you can edit `./data/homeserver.yaml` according to your needs. After that you can edit `./data/homeserver.yaml` according to your needs.
If you want to use full-fledged PostgreSQL instead of SQLite, you can check [this documentation](https://github.com/matrix-org/synapse/blob/master/docs/postgres.md). If you want to use full-fledged PostgreSQL instead of SQLite, you can check
[this documentation](https://github.com/matrix-org/synapse/blob/master/docs/postgres.md).
To use PostgreSQL running on the host machine, use [this](../_docs/access_database_on_host_from_docker.md) configuration.
# Running the server # Running the server

View file

@ -1,13 +1,22 @@
version: '3.7' version: '3.7'
networks:
# You need to create this network manually first!
synapse:
external: true
services: services:
synapse: synapse:
# https://hub.docker.com/r/matrixdotorg/synapse # https://hub.docker.com/r/matrixdotorg/synapse
# https://github.com/matrix-org/synapse/tree/master/docker # https://github.com/matrix-org/synapse/tree/master/docker
image: "matrixdotorg/synapse:${IMAGE_VERSION:-latest}" image: "matrixdotorg/synapse:${IMAGE_VERSION:-latest}"
container_name: synapse container_name: synapse
# This way we'll be able to access PostgreSQL on local machine using 'localhost' when it's listening only locally. hostname: synapse
network_mode: host extra_hosts:
- 'host.docker.internal:host-gateway'
networks:
- default
- synapse
ports: ports:
- "${INTERFACE_EXT:-127.0.0.1}:${HTTP_PORT_EXT:-8008}:${HTTP_PORT_INT:-8008}/tcp" - "${INTERFACE_EXT:-127.0.0.1}:${HTTP_PORT_EXT:-8008}:${HTTP_PORT_INT:-8008}/tcp"
volumes: volumes: