Skip to content

Setup Maybe

Overview

The OS for your personal finances.

Important Docker Files

.env file

.env
NAME=maybe
SUB=budget
DOMAIN=
PORT=3000
APPDATA=

KEY_BASE=
DB_USER=maybe
DB_PASS=
DB_NAME=maybe

docker-compose.yml file

docker-compose.yml
services:
  maybe:
    container_name: ${NAME}
    image: ghcr.io/maybe-finance/maybe:stable
    restart: unless-stopped
    volumes:
      - ${APPDATA}/${NAME}/config:/rails/storage
    networks:
      - proxy
      - internal-db
    environment:
      SELF_HOSTED: "true"
      RAILS_FORCE_SSL: "false"
      RAILS_ASSUME_SSL: "false"
      GOOD_JOB_EXECUTION_MODE: async
      SECRET_KEY_BASE: ${KEY_BASE}
      DB_HOST: ${NAME}-db
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
    depends_on:
      maybe-db:
        condition: service_healthy
    labels:
      swag: enable
      swag_address: ${NAME}
      swag_port: ${PORT}
      swag_proto: http
      swag_url: ${SUB}.${DOMAIN}
      com.centurylinklabs.watchtower.enable: true
  maybe-db:
    container_name: ${NAME}-db
    image: postgres:17-alpine
    restart: unless-stopped
    volumes:
      - ${APPDATA}/${NAME}/${NAME}-db:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: ${DB_USER}
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_PASSWORD: ${DB_PASS}
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}" ]
      interval: 5s
      timeout: 5s
      retries: 5
    networks:
      - internal-db
    labels:
      com.centurylinklabs.watchtower.enable: true
networks:
  proxy:
    external: true
  internal-db:
    external: true

Start the Container

Start the Container
docker compose up -d