forked from fediversity/fediversity
		
	Added more workers documentation and added worker compatibility for Draupnir.
This commit is contained in:
		
							parent
							
								
									2a85439e40
								
							
						
					
					
						commit
						59c83817ad
					
				
					 2 changed files with 48 additions and 116 deletions
				
			
		|  | @ -53,9 +53,10 @@ Copy it to `production.yaml` and change what you must. | |||
| 
 | ||||
| | Option | Value | Meaning | | ||||
| | :---- | :---- | :---- | | ||||
| | `homeserverUrl` | `http://localhost:8008` | Where to communicate with Synapse | | ||||
| | `homeserverUrl` | `http://localhost:8008` | Where to communicate with Synapse when using network port| | ||||
| | `homeserverUrl` | `http://unix://run/matrix-synapse/incoming_main.sock` | Where to communicate with Synapse when using UNIX sockets (see [Workers](../synapse/workers.md)) | | ||||
| | `rawHomeserverUrl` | `https://matrix.example.com` | Same as `server_name` | | ||||
| | `accessToken` | access token | Copy from login session | | ||||
| | `accessToken` | access token | Copy from login session or create in [Synapse Admin](../synapse-admin)) | | ||||
| | `password` | password | Password for the account | | ||||
| | `dataPath` | `/opt/Draupnir/datastorage` | Storage | | ||||
| | `managementRoom` | room ID | Room where moderators command Draupnir | | ||||
|  |  | |||
|  | @ -230,11 +230,11 @@ instance_map: | |||
|     path: "/run/matrix-synapse/replication_mediaworker.sock" | ||||
| ... | ||||
|   normal_sync1: | ||||
|     path: "unix:/run/matrix-synapse/inbound_normal_sync1.sock" | ||||
|     path: "unix:/run/matrix-synapse/replication_normal_sync1.sock" | ||||
|   normal_sync2: | ||||
|     path: "unix:/run/matrix-synapse/inbound_normal_sync2.sock" | ||||
|     path: "unix:/run/matrix-synapse/replication_normal_sync2.sock" | ||||
|   normal_sync3: | ||||
|     path: "unix:/run/matrix-synapse/inbound_normal_sync3.sock" | ||||
|     path: "unix:/run/matrix-synapse/replication_normal_sync3.sock" | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
|  | @ -320,8 +320,7 @@ worker the same layout. Here's the configuration for the `login` worker: | |||
| version: 1 | ||||
| formatters: | ||||
|   precise: | ||||
|     format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s | ||||
| - %(message)s' | ||||
|     format: '%(asctime)s - %(name)s - %(lineno)d - %(levelname)s - %(request)s - %(message)s' | ||||
| handlers: | ||||
|   file: | ||||
|     class: logging.handlers.TimedRotatingFileHandler | ||||
|  | @ -370,8 +369,43 @@ documentation](https://docs.python.org/3/library/logging.config.html#configurati | |||
| for all the ins and outs of logging. | ||||
| 
 | ||||
| 
 | ||||
| # Systemd | ||||
| 
 | ||||
| # The rest | ||||
| You want Synapse and its workers managed by systemd. First of all we define a | ||||
| `target`: a group of services that belong together. | ||||
| 
 | ||||
| ``` | ||||
| systemctl edit --force --full matrix-synapse.target | ||||
| ``` | ||||
| 
 | ||||
| Feed it with this bit: | ||||
| 
 | ||||
| ``` | ||||
| [Unit] | ||||
| Description=Matrix Synapse with all its workers | ||||
| After=network.target | ||||
| 
 | ||||
| [Install] | ||||
| WantedBy=multi-user.target | ||||
| ``` | ||||
| 
 | ||||
| First add `matrix-synapse.service` to this target by overriding the `WantedBy` | ||||
| in the unit file (`systemctl edit matrix-synapse.service`): | ||||
| 
 | ||||
| ``` | ||||
| [Install] | ||||
| WantedBy=matrix.target | ||||
| ``` | ||||
| 
 | ||||
| The same `WantedBy` need to go in the unit files for every worker. For the | ||||
| workers we're using a template instead of separate unit files for every single | ||||
| one. Create the template: | ||||
| 
 | ||||
| ``` | ||||
| systemctl edit --full --force matrix-synapse-worker@ | ||||
| ``` | ||||
| 
 | ||||
| Fill it with this content: | ||||
| 
 | ||||
| ``` | ||||
| [Unit] | ||||
|  | @ -402,115 +436,12 @@ SyslogIdentifier=matrix-synapse-%i | |||
| WantedBy=matrix-synapse.target | ||||
| ``` | ||||
| 
 | ||||
| And create the `matrix-synapse.target`, which combines all Synapse parts into | ||||
| one systemd target: | ||||
| Every worker needs to be enabled and started individually. Quickest way to do | ||||
| that, is to run a loop in the directory: | ||||
| 
 | ||||
| ``` | ||||
| [Unit] | ||||
| Description=Matrix Synapse with all its workers | ||||
| After=network.target | ||||
| 
 | ||||
| [Install] | ||||
| WantedBy=multi-user.target | ||||
| cd /etc/matrix-synapse/workers | ||||
| for worker in `ls *yaml`; do systemctl enable --now matrix-synapse-worker@$worker; done | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| # Create workers | ||||
| 
 | ||||
| We need a configuration file for each worker, and the main process needs to | ||||
| know which workers there are and how to contact them. | ||||
| 
 | ||||
| The latter is done in the ... | ||||
| 
 | ||||
| 
 | ||||
| ## Temporary block | ||||
| 
 | ||||
| We're going to configure a few different workers: | ||||
| 
 | ||||
| * client-sync | ||||
| * roomworker | ||||
| * federation-sender | ||||
| * mediaworker | ||||
| 
 | ||||
| 
 | ||||
| ### Client-sync | ||||
| 
 | ||||
| This type needs both an inbound socket to receive stuff from nginx, and a | ||||
| replication socket to communicate with the rest. We probably want a few of | ||||
| these workers. The configuration should look like this: | ||||
| 
 | ||||
| ``` | ||||
| worker_app: "synapse.app.generic_worker" # Always this unless "synapse.app.media_repository" | ||||
| worker_name: "clientsync1" # Name of worker specified in instance map | ||||
| worker_log_config: "/etc/matrix-synapse/logconf.d/clientsync.yaml" # Log config file | ||||
| 
 | ||||
| worker_listeners: | ||||
|   # Include for any worker in the instance map above: | ||||
|   - path: "/run/matrix-synapse/replication_clientsync1.sock" | ||||
|     type: http | ||||
|     resources: | ||||
|       - names: [replication] | ||||
|         compress: false | ||||
|   # Include for any worker that receives requests in Nginx: | ||||
|   - path: "/run/matrix-synapse/synapse_inbound_client_sync1.sock" | ||||
|     type: http | ||||
|     x_forwarded: true # Trust the X-Forwarded-For header from Nginx | ||||
|     resources: | ||||
|       - names: | ||||
|         - client | ||||
|         - consent | ||||
| ``` | ||||
| 
 | ||||
| ### Roomworker | ||||
| 
 | ||||
| These don't need a replication socket as they're not in the instance map, but | ||||
| they do need an inboud socket for nginx to pass stuff to them. We want a few | ||||
| of these workers, we may even configure a worker for one specific busy room... | ||||
| 
 | ||||
| Configuration should look like this: | ||||
| 
 | ||||
| ``` | ||||
| worker_app: "synapse.app.generic_worker" | ||||
| worker_name: "roomworker1" | ||||
| worker_log_config: "/etc/matrix-synapse/logconf.d/roomworker.yaml" | ||||
| 
 | ||||
| worker_listeners: | ||||
|   - path: "/run/matrix-synapse/inbound_roomworker1.sock" | ||||
|     type: http | ||||
|     x_forwarded: true | ||||
|     resources: | ||||
|       - names: | ||||
|         - client | ||||
|         - consent | ||||
|         - federation | ||||
|         compress: false | ||||
| ``` | ||||
| 
 | ||||
| ### Mediaworker | ||||
| 
 | ||||
| To make sure the worker takes care of handling media, and not the main | ||||
| process. You need to tell the main process to to keep its hands off media, and | ||||
| which worker will take care of it: | ||||
| 
 | ||||
| ``` | ||||
| enable_media_repo: false | ||||
| media_instance_running_background_jobs: "mediaworker1" | ||||
| ``` | ||||
| 
 | ||||
| Then define the worker, like this: | ||||
| 
 | ||||
| 
 | ||||
| ``` | ||||
| worker_app: "synapse.app.media_repository" | ||||
| worker_name: "mediaworker1" | ||||
| worker_log_config: "/etc/matrix-synapse/logconf.d/mediaworker.yaml" | ||||
| 
 | ||||
| worker_listeners: | ||||
|   - path: "/run/matrix-synapse/inbound_mediaworker1.sock" | ||||
|     type: http | ||||
|     x_forwarded: true | ||||
|     resources: | ||||
|       - names: [media] | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
| After a reboot, Synapse and all its workers should be started. | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Hans van Zijst
						Hans van Zijst