# Single Instance

Bindplane server's default architecture is monolithic. In this mode, Bindplane depends only on a PostgreSQL database. All other components are bundled with the Bindplane server installation.

Bindplane manages several sub-processes:

* Prometheus: For recording collector throughput metrics
* Transform Agent: For [Live Preview](https://docs.bindplane.com/production-checklist/bindplane/broken-reference)

The Prometheus and Transform Agent software are included with the Bindplane server installation and do not require configuration by the user.

Installing Bindplane on Linux is as simple as running the installation script and following the initialization prompts.

```bash
curl -fsSlL https://storage.googleapis.com/bindplane-op-releases/bindplane/latest/install-linux.sh -o install-linux.sh && bash install-linux.sh --init && rm install-linux.sh
```

Read more by checking out the [Quick Start Guide](https://docs.bindplane.com/production-checklist/bindplane/broken-reference).

### Event Bus

#### Local

The Local event bus is the default event bus used by Bindplane. Unless operating Bindplane in high availability mode, the Local event bus is sufficient.

The configuration will look like this by default:

```yaml
eventBus:
  type: local
```

### Store

#### PostgreSQL

PostgreSQL is the storage backend used for all Bindplane installations. When operating Bindplane as a single instance, it is safe to install PostgreSQL on the same server as Bindplane.

Follow the [PostgreSQL installation instructions](https://docs.bindplane.com/deployment/virtual-machine/bindplane/postgresql) to install PostgreSQL.

You can avoid using username and password credentials by configuring PostgreSQL to allow processes owned by the `bindplane` user to connect to the database over localhost without a password. Update your `pg_hba.conf` configuration with the following entries:

```pg_hba.conf
host    all   bindplane   ::1/128        trust
host    all   bindplane   127.0.0.1/32   trust
```

### Prometheus

All Bindplane installations include a bundled version of Prometheus. Bindplane will use the bundled Prometheus as its default measurement metrics storage backend.

It is unnecessary to configure Prometheus when using the bundled option. This documentation can be used as a reference for the default Prometheus installation.

#### Configuration

The configuration file at `/etc/bindplane/config.yaml` will contain the following `prometheus`\
block after the installation is configured.

```yaml
prometheus:
  localFolder: /var/lib/bindplane/prometheus
  host: localhost
  port: '9090'
  remoteWrite:
    endpoint: /api/v1/write
  auth:
    type: none
```

#### Directory Structure

Once Bindplane is started, the `/var/lib/bindplane/prometheus`directory structure will look like this:

```
/var/lib/bindplane/prometheus
├── console_libraries
│   ├── menu.lib
│   └── prom.lib
├── consoles
│   ├── index.html.example
│   ├── node-cpu.html
│   ├── node-disk.html
│   ├── node.html
│   ├── node-overview.html
│   ├── prometheus.html
│   └── prometheus-overview.html
├── data
│   ├── chunks_head
│   ├── lock
│   ├── queries.active
│   └── wal
│       └── 00000000
├── LICENSE
├── NOTICE
├── prometheus
├── prometheus.yml
├── promtool
├── rules.yml
└── web.yml
```

Prometheus's configuration and storage are located at `/var/lib/bindplane/prometheus`.

#### Process

Bindplane manages the Prometheus process directly as a subprocess. When viewing the process list\
with `ps`, you will notice the following:

```
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
bindplane  143936  0.0  0.0 1319104 64000 ?       Sl   12:20   0:00 /var/lib/bindplane/prometheus/prometheus --config.file prometheus.yml --web.config.file web.yml --storage.tsdb.retention.time 2d --web.listen-address :9090 --web.enable-remote-write-receiver
```

The Prometheus process is executed with the following flags:

* `--config.file prometheus.yml`: The main Prometheus configuration file, managed by Bindplane.
* `--web.config.file web.yml`: The Prometheus web configuration file, managed by Bindplane.
* `--storage.tsdb.retention.time 2d`: The retention time, managed by Bindplane. Bindplane uses rollup metrics for tracking collector measurements over time and does not require Prometheus to store data for longer than two days.
* `--web.listen-address localhost:9090`: Listen address, managed by Bindplane. Prometheus is not reachable outside of the Bindplane system.
* `--web.enable-remote-write-receiver`: Bindplane uses remote write to push metrics to Prometheus.
