# Setup & Configuration

We need to install the service through Portainer and configure any necessary settings.

# Preparation

There are some things we need to do in preparation to install this service.

## Volumes

<details id="bkmrk-media-folders-radarr"><summary>Persistent Data</summary>

This is where the service will store its own application data and ensures we can quickly update the service image.

<p class="callout warning">Ensure your user has permissions to access the folder.</p>

</details>## Environment

<details id="bkmrk-tz-this-is-the-curre"><summary>DB\_USER</summary>

This is the user account that will be used behind-the-scenes for logging into the database.

<p class="callout info">*For example:* monica\_admin</p>

</details><details id="bkmrk-gid-%C2%A0"><summary>APP\_URL</summary>

This is the URL that will be used as primary access point for this service.

<p class="callout info">*For example:* monica.example.com</p>

</details>### Passwords

<p class="callout danger">Keep these securely stored in a password manager, such as [VaultWarden](https://hub.subspace.services/books/vaultwarden "VaultWarden").</p>

<details id="bkmrk-db_root_pass-this-is"><summary>DB\_PASS</summary>

This is the password that will be used for root access to the database.

<p class="callout warning">It is important to use secure, randomly generated password.</p>

You can use a random alphanumeric string from a password manager, or open the terminal and run the command:

```
tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 32; echo
```

This pulls a random string from the '[urandom](https://en.wikipedia.org/wiki//dev/random)' device, removes unwanted characters and trim it to an appropriate length.

</details><details id="bkmrk-app_key-this-is-the-"><summary>APP\_KEY</summary>

This is the key that will be used for encrypting data within the services database.

<p class="callout warning">It is important to use secure, randomly generated password.</p>

You can use a random alphanumeric string from a password manager, or open the terminal and run the command:

```
tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 32; echo
```

This pulls a random string from the '[urandom](https://en.wikipedia.org/wiki//dev/random)' device, removes unwanted characters and trim it to an appropriate length.

</details>

# Installation

The service can be installed through the Portainer web interface.

<p class="callout info">Learn about [creating a new stack](https://hub.subspace.services/books/portainer/page/creating-a-new-stack "Creating a New Stack").</p>

## Docker Compose

Use the following code to install the service:

```yaml
---
services:
  app:
    image: monica:apache
    depends_on:
      - db
    ports:
      - 9011:80
    environment:
      - DB_HOST=db
      - DB_USERNAME=${DB_USER}
      - DB_PASSWORD=${DB_PASS}
      - APP_URL=${APP_URL}
      - APP_KEY=${APP_KEY}
    volumes:
      # Persistent Data 
      - /srv/monica/config:/var/www/html/storage
    restart: unless-stopped

  db:
    image: lscr.io/linuxserver/mariadb:11
    environment:
      - MYSQL_RANDOM_ROOT_PASSWORD=true
      - MYSQL_DATABASE=monica
      - MYSQL_USER=${DB_USER}
      - MYSQL_PASSWORD=${DB_PASS}
    volumes:
      - /srv/monica/db:/var/lib/mysql
    restart: unless-stopped
```

## Environment

Use the following environment to configure the service using the values prepared earlier:

```bash
DB_USER=
DB_PASS=
APP_URL=monica.example.com
APP_KEY=
```

# Updating

<p class="callout warning">Backup and Re-Deploy the Stack</p>

This service has been optimized for running in Docker. We recommend backing up your data before doing major updates.

This allows you to [re-deploy the stack through Portainer](https://hub.subspace.services/books/portainer/page/updating-a-stack "Updating a Stack") to download the latest updates.