# Upgrading

Musare upgrade process.

To install a new instance please see [Installation](./Installation.md).

## Docker

### Instructions

1. Make a backup! `./musare.sh backup`
2. Execute `./musare.sh update`. If an update requires any configuration changes
or database migrations, you will be notified.
    - To update configuration compare example configs against your own and
    add/update/remove any properties as needed. For more information on
    properties see [Configuration](./Configuration.md). Frontend and backend
    configuration updates always update the `configVersion` property.
        - Backend, compare `backend/config/template.json` against
        `backend/config/default.json`.
        - Frontend, compare `frontend/dist/config/template.json` against
        `frontend/dist/config/default.json`.
        - Environment, compare `.env.example` against `.env`.
    - To migrate database;
        - `./musare.sh stop backend`
        - Set `migration` to `true` in  `backend/config/default.json`
        - `./musare.sh start backend`.
        - Follow backend logs and await migration completion notice
        `./musare.sh attach backend`.
        - `./musare.sh stop backend`
        - Set `migration` to `false` in  `backend/config/default.json`
        - `./musare.sh start backend`.

---

## Non-Docker

### Instructions

1. Make a backup!
2. Stop all services
3. `git pull`
4. `cd frontend && npm install`
5. `cd ../backend && npm install`
6. Compare example configs against your own and add/update/remove any properties
as needed. For more information on properties see [Configuration](./Configuration.md).
Frontend and backend configuration updates always update the `configVersion` property.
    - Backend, compare `backend/config/template.json` against `backend/config/default.json`.
    - Frontend, compare `frontend/dist/config/template.json` against `frontend/dist/config/default.json`.
7. Start MongoDB and Redis services.
8. Run database migration;
    - Set `migration` to `true` in  `backend/config/default.json`
    - Start backend service.
    - Follow backend logs and await migration completion notice.
    - Stop backend service.
    - Set `migration` to `false` in  `backend/config/default.json`
9. Start backend and frontend services.

## Upgrade/downgrade MongoDB

Make sure to always look at the upgrade/downgrade instructions in the
[MongoDB release notes](https://docs.mongodb.com/manual/release-notes) before,
and always make a full backup of your data before proceeding.

### Docker

#### Instructions

1. Stop the backend (`./musare.sh stop backend`)
2. Make a backup of MongoDB (`./musare.sh backup`)
3. Stop and reset the mongo container and delete the database folder
(`./musare.sh reset mongo`)
4. Change the MongoDB version inside your .env file.
5. Start the mongo container (`./musare.sh start mongo`)
6. Import your backup of MongoDB (`./musare.sh restore`)
    - Note: backups are stored inside the backups folder by default.
7. Start the backend (`./musare.sh start backend`)

### Non-Docker

#### Instructions

1. Stop your backend
2. Make a backup of MongoDB
3. Stop and reset MongoDB
4. Upgrade/downgrade MongoDB
5. Start MongoDB
6. Restore your MongoDB backup
7. Start your backend