Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Self hosting documentation and image improvements #732

Merged
merged 1 commit into from
May 10, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 46 additions & 30 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,36 +3,35 @@

# Maybe: The OS for your personal finances

<b>Get involved: [Discord](https://link.maybe.co/discord)[Website](https://maybe.co)[Issues](https://github.com/maybe-finance/maybe/issues)</b>
<b>Get
involved: [Discord](https://link.maybe.co/discord)[Website](https://maybe.co)[Issues](https://github.com/maybe-finance/maybe/issues)</b>

_If you're looking for the previous React codebase, you can find it at [maybe-finance/maybe-archive](https://github.com/maybe-finance/maybe-archive)._
_If you're looking for the previous React codebase, you can find it
at [maybe-finance/maybe-archive](https://github.com/maybe-finance/maybe-archive)._

## Backstory

We spent the better part of 2021/2022 building a personal finance + wealth management app called, Maybe. Very full-featured, including an "Ask an Advisor" feature which connected users with an actual CFP/CFA to help them with their finances (all included in your subscription).
We spent the better part of 2021/2022 building a personal finance + wealth
management app called, Maybe. Very full-featured, including an "Ask an Advisor"
feature which connected users with an actual CFP/CFA to help them with their
finances (all included in your subscription).

The business end of things didn't work out, and so we shut things down mid-2023.

We spent the better part of $1,000,000 building the app (employees + contractors, data providers/services, infrastructure, etc.).
We spent the better part of $1,000,000 building the app (employees +
contractors, data providers/services, infrastructure, etc.).

We're now reviving the product as a fully open-source project. The goal is to let you run the app yourself, for free, and use it to manage your own finances and eventually offer a hosted version of the app for a small monthly fee.
We're now reviving the product as a fully open-source project. The goal is to
let you run the app yourself, for free, and use it to manage your own finances
and eventually offer a hosted version of the app for a small monthly fee.

## Self Hosting
## Maybe Hosting

You can find [detailed setup guides for self hosting here](docs/self-hosting.md).
There are 3 primary ways to use the Maybe app:

### One-Click Render deploy (recommended)

<a href="https://render.com/deploy?repo=https://github.com/maybe-finance/maybe">
<img src="https://render.com/images/deploy-to-render-button.svg" alt="Deploy to Render" />
</a>

1. Click the button above
2. Follow the instructions in the [Render self-hosting guide](docs/self-hosting/render.md)

### Docker

To host Maybe with Docker Compose, please follow our [Docker self-hosting guide](docs/self-hosting/docker.md).
1. Managed (easiest) - _coming soon..._
2. [One-click deploy](docs/hosting/one-click-deploy.md)
3. [Self-host with Docker](docs/hosting/docker.md)

## Local Development Setup

Expand All @@ -53,7 +52,8 @@ bin/dev
rake demo_data:reset
```

And visit http://localhost:3000 to see the app. You can use the following credentials to log in (generated by DB seed):
And visit http://localhost:3000 to see the app. You can use the following
credentials to log in (generated by DB seed):

- Email: `[email protected]`
- Password: `password`
Expand All @@ -64,43 +64,59 @@ For further instructions, see guides below.

If you'd like multi-currency support, there are a few extra steps to follow.

1. Sign up for an API key at [Synth](https://synthfinance.com). It's a Maybe product and the free plan is sufficient for basic multi-currency support.
1. Sign up for an API key at [Synth](https://synthfinance.com). It's a Maybe
product and the free plan is sufficient for basic multi-currency support.
2. Add your API key to your `.env` file.

### Setup Guides

#### Dev Container (optional)

This is 100% optional and meant for devs who don't want to worry about installing requirements manually for their platform. You can follow [this guide](https://code.visualstudio.com/docs/devcontainers/containers) to learn more about Dev Containers.
This is 100% optional and meant for devs who don't want to worry about
installing requirements manually for their platform. You can
follow [this guide](https://code.visualstudio.com/docs/devcontainers/containers)
to learn more about Dev Containers.

If you run into `could not connect to server` errors, you may need to change your `.env`'s `DB_HOST` environment variable value to `db` to point to the Postgres container.
If you run into `could not connect to server` errors, you may need to change
your `.env`'s `DB_HOST` environment variable value to `db` to point to the
Postgres container.

#### Mac

Please visit our [Mac dev setup guide](https://github.com/maybe-finance/maybe/wiki/Mac-Dev-Setup-Guide).
Please visit
our [Mac dev setup guide](https://github.com/maybe-finance/maybe/wiki/Mac-Dev-Setup-Guide).

#### Linux

Please visit our [Linux dev setup guide](https://github.com/maybe-finance/maybe/wiki/Linux-Dev-Setup-Guide).
Please visit
our [Linux dev setup guide](https://github.com/maybe-finance/maybe/wiki/Linux-Dev-Setup-Guide).

#### Windows

Please visit our [Windows dev setup guide](https://github.com/maybe-finance/maybe/wiki/Windows-Dev-Setup-Guide).
Please visit
our [Windows dev setup guide](https://github.com/maybe-finance/maybe/wiki/Windows-Dev-Setup-Guide).

### Testing Emails

In development, we use `letter_opener` to automatically open emails in your browser. When an email sends locally, a new browser tab will open with a preview.
In development, we use `letter_opener` to automatically open emails in your
browser. When an email sends locally, a new browser tab will open with a
preview.

## Contributing

Before contributing, you'll likely find it helpful to [understand context and general vision/direction](https://github.com/maybe-finance/maybe/wiki).
Before contributing, you'll likely find it helpful
to [understand context and general vision/direction](https://github.com/maybe-finance/maybe/wiki).

Once you've done that, please visit our [contributing guide](https://github.com/maybe-finance/maybe/blob/main/CONTRIBUTING.md) to get started!
Once you've done that, please visit
our [contributing guide](https://github.com/maybe-finance/maybe/blob/main/CONTRIBUTING.md)
to get started!

## Repo Activity

![Repo Activity](https://repobeats.axiom.co/api/embed/7866c9790deba0baf63ca1688b209130b306ea4e.svg "Repobeats analytics image")

## Copyright & license

Maybe is distributed under an [AGPLv3 license](https://github.com/maybe-finance/maybe/blob/main/LICENSE). "Maybe" is a trademark of Maybe Finance, Inc.
Maybe is distributed under
an [AGPLv3 license](https://github.com/maybe-finance/maybe/blob/main/LICENSE). "
Maybe" is a trademark of Maybe Finance, Inc.
4 changes: 1 addition & 3 deletions config/cable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,4 @@ test:
adapter: test

production:
adapter: redis
url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
channel_prefix: maybe_production
adapter: postgresql
14 changes: 9 additions & 5 deletions docker-compose.example.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,20 @@ services:

app:
image: ghcr.io/maybe-finance/maybe:latest
volumes:
- ./storage:/rails/storage
ports:
- 127.0.0.1:3000:3000
restart: unless-stopped
env_file:
- .env
environment:
DB_HOST: "postgres"
RAILS_ENV: "production"
SELF_HOSTING_ENABLED: true
DB_HOST: postgres
RAILS_FORCE_SSL: false
RAILS_ASSUME_SSL: false
POSTGRES_USER: postgres
GOOD_JOB_EXECUTION_MODE: async
depends_on:
postgres:
condition: service_healthy
Expand All @@ -22,8 +26,8 @@ services:
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_USER: ${POSTGRES_USER:?}
POSTGRES_DB: ${POSTGRES_DB:-postgres}
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_DB: ${POSTGRES_DB:-maybe_production}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?}
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U $$POSTGRES_USER" ]
Expand All @@ -32,4 +36,4 @@ services:
retries: 5

volumes:
postgres-data:
postgres-data:
104 changes: 104 additions & 0 deletions docs/hosting/docker.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Self Hosting Maybe with Docker

## Quick Start

_The below quickstart assumes you're running on Mac or Linux. Windows will
be different._

Make sure [Docker is installed](https://docs.docker.com/engine/install/) and
setup your local environment:

```bash
# Create a directory on your computer for Docker files
mkdir -p ~/docker-apps/maybe
cd ~/docker-apps/maybe

# Download the sample docker-compose.yml file from the Maybe Github repository
curl -o docker-compose.yml https://raw.githubusercontent.com/maybe-finance/maybe/main/docker-compose.example.yml

# Create an .env file (make sure to fill in empty variables manually)
cat << EOF > .env
# Use "openssl rand -hex 64" to generate this
SECRET_KEY_BASE=
# Can be any value, set to what you'd like
POSTGRES_PASSWORD=
EOF
```

Make sure to generate your `SECRET_KEY_BASE` value and save the `.env` file.
Then you're ready to run the app, which will be available at
`http://localhost:3000` in your browser:

```bash
docker-compose up -d
```

Lastly, go to `http://localhost:3000` in your browser, **create a new
account**, and you're ready to start tracking your finances!

## Detailed Setup Guide

### Prerequisites

- Install Docker Engine by
following [the official guide](https://docs.docker.com/engine/install/)
- Start the Docker service on your machine

### App Setup

1. Create a new directory on your machine (we suggest something like
`$HOME/docker-apps/maybe`)
2. Create a `docker-compose.yml` file (we suggest
using [our example](/docker-compose.example.yml)
if
you're new to self-hosting and Docker)
3. Create a `.env` file and add the required variables. Currently,
`SECRET_KEY_BASE` is the only required variable, but you can take a look
at our [.env.example](/.env.example) file to see all available options.

### Run app with Docker Compose

1. Run `docker-compose up -d` to start the maybe app in detached mode.
2. Access the Maybe app by navigating to http://localhost:3000 in your web
browser.

### Updating the App

The mechanism that updates your self-hosted Maybe app is the GHCR (Github
Container Registry) Docker image that you see in the `docker-compose.yml` file:

```yml
image: ghcr.io/maybe-finance/maybe:latest
```
We recommend using one of the following images, but you can pin your app to
whatever version you'd like (
see [packages](https://github.com/maybe-finance/maybe/pkgs/container/maybe)):
- `ghcr.io/maybe-finance/maybe:latest` (latest commit)
- `ghcr.io/maybe-finance/maybe:stable` (latest release)

By default, your app _will NOT_ automatically update. To update your
self-hosted app, you must run the following commands:

```bash
docker-compose pull # This pulls the "latest" published image from GHCR
docker-compose up -d # Restarts the app
```

#### Changing the image

If you'd like to pin the app to a specific version or tag, all you need to do is
edit the `docker-compose.yml` file:

```yml
image: ghcr.io/maybe-finance/maybe:stable
```

## Troubleshooting

This section will provide troubleshooting tips and solutions for common issues
encountered during deployment. Check back later for updates!

Loading