# Copyright © 2025-26 l5yth & contributors # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. x-web-base: &web-base image: ghcr.io/l5yth/potato-mesh-web-${POTATOMESH_IMAGE_ARCH:-linux-amd64}:${POTATOMESH_IMAGE_TAG:-latest} environment: APP_ENV: ${APP_ENV:-production} RACK_ENV: ${RACK_ENV:-production} SITE_NAME: ${SITE_NAME:-PotatoMesh Demo} CHANNEL: ${CHANNEL:-#LongFast} FREQUENCY: ${FREQUENCY:-915MHz} MAP_CENTER: ${MAP_CENTER:-38.761944,-27.090833} MAP_ZOOM: ${MAP_ZOOM:-""} MAX_DISTANCE: ${MAX_DISTANCE:-42} CONTACT_LINK: ${CONTACT_LINK:-#potatomesh:dod.ngo} FEDERATION: ${FEDERATION:-1} PRIVATE: ${PRIVATE:-0} API_TOKEN: ${API_TOKEN} INSTANCE_DOMAIN: ${INSTANCE_DOMAIN} DEBUG: ${DEBUG:-0} command: ["ruby", "app.rb", "-p", "41447", "-o", "0.0.0.0"] volumes: - potatomesh_data:/app/.local/share/potato-mesh - potatomesh_config:/app/.config/potato-mesh - potatomesh_logs:/app/logs - potatomesh_pages:/app/pages restart: unless-stopped deploy: resources: limits: memory: 512M cpus: '0.5' reservations: memory: 256M cpus: '0.25' x-ingestor-base: &ingestor-base image: ghcr.io/l5yth/potato-mesh-ingestor-${POTATOMESH_IMAGE_ARCH:-linux-amd64}:${POTATOMESH_IMAGE_TAG:-latest} environment: CONNECTION: ${CONNECTION:-/dev/ttyACM0} CHANNEL_INDEX: ${CHANNEL_INDEX:-0} ALLOWED_CHANNELS: ${ALLOWED_CHANNELS:-""} HIDDEN_CHANNELS: ${HIDDEN_CHANNELS:-""} API_TOKEN: ${API_TOKEN} INSTANCE_DOMAIN: ${INSTANCE_DOMAIN:-http://web:41447} DEBUG: ${DEBUG:-0} PROTOCOL: ${PROTOCOL:-meshtastic} ENERGY_SAVING: ${ENERGY_SAVING:-0} FEDERATION: ${FEDERATION:-1} PRIVATE: ${PRIVATE:-0} volumes: - potatomesh_data:/app/.local/share/potato-mesh - potatomesh_config:/app/.config/potato-mesh - potatomesh_logs:/app/logs - /dev:/dev device_cgroup_rules: - 'c 166:* rwm' # ttyACM devices - 'c 188:* rwm' # ttyUSB devices - 'c 4:* rwm' # ttyS devices privileged: false restart: unless-stopped deploy: resources: limits: memory: 256M cpus: '0.25' reservations: memory: 128M cpus: '0.1' x-matrix-bridge-base: &matrix-bridge-base image: ghcr.io/l5yth/potato-mesh-matrix-bridge-${POTATOMESH_IMAGE_ARCH:-linux-amd64}:${POTATOMESH_IMAGE_TAG:-latest} volumes: - potatomesh_matrix_bridge_state:/app - type: bind source: ./matrix/Config.toml target: /app/Config.toml read_only: true bind: create_host_path: false restart: unless-stopped deploy: resources: limits: memory: 128M cpus: '0.1' reservations: memory: 64M cpus: '0.05' services: web: <<: *web-base network_mode: host ingestor: <<: *ingestor-base network_mode: host depends_on: - web extra_hosts: - "web:127.0.0.1" web-bridge: <<: *web-base container_name: potatomesh-web-bridge networks: - potatomesh-network ports: - "41447:41447" profiles: - bridge ingestor-bridge: <<: *ingestor-base container_name: potatomesh-ingestor-bridge networks: - potatomesh-network depends_on: - web-bridge profiles: - bridge matrix-bridge: <<: *matrix-bridge-base network_mode: host profiles: - matrix depends_on: - web extra_hosts: - "web:127.0.0.1" matrix-bridge-bridge: <<: *matrix-bridge-base container_name: potatomesh-matrix-bridge networks: - potatomesh-network depends_on: - web-bridge ports: - "41448:41448" profiles: - bridge volumes: potatomesh_data: driver: local potatomesh_config: driver: local potatomesh_logs: driver: local potatomesh_pages: driver: local potatomesh_matrix_bridge_state: driver: local networks: potatomesh-network: driver: bridge