# Deployment

## 1. Docker Compose Services

<span style="white-space: pre-wrap;">Our </span>`<span class="editor-theme-code">docker-compose.yml</span>`<span style="white-space: pre-wrap;"> runs four key services</span>

<table id="bkmrk-serviceimage%2Fbuildro" style="margin-bottom: 32px;"><colgroup><col></col><col></col><col></col></colgroup><tbody><tr><td style="border: 1px solid;">**Service**

</td><td style="border: 1px solid;">**Image/Build**

</td><td style="border: 1px solid;">**Role**

</td></tr><tr><td style="border: 1px solid;">`<span class="editor-theme-code">frontend</span>`

</td><td style="border: 1px solid;">`<span class="editor-theme-code">./frontend/...</span>`

</td><td style="border: 1px solid;"><span style="white-space: pre-wrap;">Nginx server; handles port 80 and proxies </span>`<span class="editor-theme-code">/api</span>`<span style="white-space: pre-wrap;"> to the backend.</span>

</td></tr><tr><td style="border: 1px solid;">`<span class="editor-theme-code">backend</span>`

</td><td style="border: 1px solid;">`<span class="editor-theme-code">./backend/...</span>`

</td><td style="border: 1px solid;">The Spring Boot REST API.

</td></tr><tr><td style="border: 1px solid;">`<span class="editor-theme-code">postgres</span>`

</td><td style="border: 1px solid;">`<span class="editor-theme-code">postgres:15</span>`

</td><td style="border: 1px solid;">Relational database.

</td></tr><tr><td style="border: 1px solid;">`<span class="editor-theme-code">postgres-backup</span>`

</td><td style="border: 1px solid;">`<span class="editor-theme-code">./db_backup</span>`

</td><td style="border: 1px solid;">Custom service that runs automated DB dumps via crontab.

</td></tr></tbody></table>

## 2. Maintenance Commands

To help a new dev manage the site, here are the main commands:

- **Start everything:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">docker compose up -d</span>`
- **Stop everything:** `<span class="editor-theme-code">docker compose down</span>`<span style="white-space: pre-wrap;"> (you can add -v flag to delete all volumes)</span>
- **View Backend Logs:**<span style="white-space: pre-wrap;"> </span>`<span class="editor-theme-code">docker compose logs -f backend</span>`
- **Check Backups:**<span style="white-space: pre-wrap;"> Logs are stored in </span>`<span class="editor-theme-code">./db_backup/logs</span>`<span style="white-space: pre-wrap;"> and actual dumps are in </span>`<span class="editor-theme-code">./db_backup/backups</span>`.
- **Build**: When in frontend/ or backend/ route directories use:  
    `<span class="editor-theme-code">docker build . -t roboteamtwente/website-{name, e.g. "frontend"}:{version}</span>`
- **Pushing**: First login to RoboTeam docker account on your device. Then -&gt;  
    `<span class="editor-theme-code">docker push roboteamtwente/website-{name, e.g. "frontend"}:{version}</span>`

## 3. Deployment

When you are done developing, please consider building the images of services and push them.  
After that you are able to ssh into our VPS that hosts a lot of products (main landing page included).

```bash
ssh user@h2960363.stratoserver.net
```

You have to add your user to that VPS's whitelist beforehand in order to login.  
In there:

1. `<span class="editor-theme-code">sudo -i </span>`<span style="white-space: pre-wrap;"> to switch to superuser.</span>
2. `<span class="editor-theme-code">cd docker </span>`to the main directory where all containers are started from.
3. `<span class="editor-theme-code">vim docker-compose.yml </span>`<span style="white-space: pre-wrap;"> and edit the used version of desired service(s) to the newest one.</span>
4. `<span class="editor-theme-code">docker pull roboteamtwente/name:version </span>`<span style="white-space: pre-wrap;"> pull desired updated images</span>
5. `<span class="editor-theme-code">docker compose up -d nameOfTheContainer</span>`<span style="white-space: pre-wrap;"> start the container(s)</span>