# Instalacja w kontenerze Docker

{% tabs %}
{% tab title="Docker" %}

## Wdrożenie <a href="#deployment" id="deployment"></a>

1. Aby zainstalować **agenta Xopero ONE** wewnątrz **kontenera Docker**, użyj obrazów dostępnych w serwisie **Docker Hub**:

```docker
docker pull xopero/gitprotect-agent:latest
```

2. Utwórz na hoście katalog dla baz danych kontenera (które wewnątrz kontenera znajdują się w lokalizacji `/app/Xopero`), aby przechowywać je poza kontenerem:

```docker
mkdir -p /opt/gitprotect-agent/data
```

3. Uruchom kontener z prawidłowym montowaniem wolumenu i zmiennymi środowiskowymi, używając poniższego polecenia:

```docker
docker run -v /host/path:/container/path -e ENV_VAR=value image_name
```

```docker
docker run -d \
  --name <container_name> \
  -e ManagementServiceUrl="<your_xopero_one_service_URL>" \
  -e XoperoOverriddenHostName="<device_name>" \
  -v /opt/gitprotect-agent/data:/app/Xopero \
  --restart unless-stopped \
  xopero/gitprotect-agent:latest
```

{% code title="Przykład" overflow="wrap" %}

```docker
docker run -d \
  --name xopero-agent \
  -e ManagementServiceUrl="https://192.168.1.10:28555" \
  -e XoperoOverriddenHostName="Docker_agent" \
  -v /opt/gitprotect-agent/data:/app/Xopero \
  --restart unless-stopped \
  xopero/gitprotect-agent:latest
```

{% endcode %}

4. Sprawdź, czy kontener działa poprawnie, używając następującego polecenia:

```docker
docker ps
```

5. Po wykonaniu wszystkich powyższych kroków agent pojawi się w panelu **XMS** celem aktywacji.
   {% endtab %}

{% tab title="QNAP NAS (CS > 3.0)" %}

<p align="center"><a href="#prerequisites" class="button primary" data-icon="circle-1">Wymagania wstępne</a>    <a href="#environment_setup" class="button primary" data-icon="circle-2">Konfiguracja środowiska</a>    <a href="#deployment-1" class="button primary" data-icon="circle-3">Wdrożenie</a></p>

## Wymagania wstępne <a href="#prerequisites" id="prerequisites"></a>

**QNAP**:

* [x] Procesor x86 lub x64 (architektura ARM <mark style="color:red;">**nie jest obsługiwana**</mark>).
* [x] Minimum 2GB pamięci RAM.
* [x] Aplikacja **Container Station** z **App Center.**

***

## Konfiguracja środowiska <a href="#environment_setup" id="environment_setup"></a>

1. Zaloguj się do **panelu webowego** **QNAP** i otwórz aplikację **App Center**. Przejdź do **QNAP Store** > **All Apps** i wyszukaj **Container Station** (**CS**).
2. Pobierz aplikację **Container Station**. Po pobraniu otwórz ją i wybierz ścieżkę, która będzie używana jako **katalog danych kontenera Docker**.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/KIRW2D2w8RdfqVCOluLO/image.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/dEnKr4A45J0axCXrkPqf/image.png" alt=""><figcaption></figcaption></figure>

3. Kliknij **Start Now**, aby kontynuować.

***

## Wdrożenie <a href="#deployment" id="deployment"></a>

1. W aplikacji **Container Station** otwórz menu **Containers** i kliknij przycisk **Create**.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/HhRySNZoRxCyNJgkpfR3/image.png" alt=""><figcaption></figcaption></figure>

2. W sekcji **Image Configuration** wybierz **Advanced mode**. Jako typ obrazu wybierz **Docker image**, a w polu **Image** wklej:

```docker
xopero/gitprotect-agent:latest
```

3. Upewnij się, że opcja **Try pulling the image from the registry before creating the container** jest zaznaczona, a następnie kliknij **Next**.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/oOJmswzsMmkkAhRTlsbM/image.png" alt=""><figcaption></figcaption></figure>

4. W karcie **Configure Container**, skonfiguruj kontener **Docker Xopero ONE** i kliknij **Next**, aby kontynuować:

> **Name** — ustaw własną nazwę kontenera.
>
> **Restart policy** — określa, czy kontener powinien uruchamiać się automatycznie (np. po restarcie **QNAP**).

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/P7E9kk83gIzL75SgYLh5/image.png" alt=""><figcaption></figcaption></figure>

5. W tej samej karcie przejdź do ⚙️**Advanced Settings**.
6. Przejdź do sekcji **Environments** section i kliknij **Add New Variable,** aby dodać zmienne środowiskowe o następujących wartościach:

{% code title="ASPNETCORE\_URLS" overflow="wrap" %}

```docker
http://+:80
```

{% endcode %}

{% code title="DOTNET\_RUNNING\_IN\_CONTAINER" overflow="wrap" %}

```docker
true
```

{% endcode %}

{% code title="ManagementServiceUrl" overflow="wrap" %}

```docker
Xopero ONE Management Service address
```

{% endcode %}

{% hint style="warning" %}
Zastąp `Xopero ONE Management Service address` <mark style="color:red;">**własnym adresem**</mark> **Xopero ONE Management Service\***.
{% endhint %}

**‼️\*ManagementServiceUrl** – <mark style="color:red;">**własny adres**</mark> **Xopero ONE Management Service** (**XMS**) w jednym z następujących formatów (w zależności od modelu wdrożenia **XMS**):

> a. `http://ipaddress:port`, np. `http://192.168.0.1:28555`&#x20;
>
> b. `https://XMSID.ads.xopero.com`, np. `https://a00b0dc0-0116-0000-0000-d0000028960e.ads.xopero.com`

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/3dwnA74Yz2Ni2Sq4q5tl/image.png" alt=""><figcaption><p><em>Example of correctly filled environments variables.</em></p></figcaption></figure>

7. Kliknij **Apply,** aby zapisać zmiany.
8. Przejdź do karty **Storage** — tutaj możesz podmontować wolumeny **QNAP** do **kontenera Docker agenta Xopero ONE**.

{% hint style="success" %}
Możesz zamontować wiele katalogów, klikając przycisk **Add Volume** i powtarzając operację.
{% endhint %}

{% hint style="info" %}
Aby wykonywać kopię zapasową danych z **QNAP**, wybierz **Bind Mount Host Path** z menu rozwijanego **Add Volume** — pozwoli to określić, do których danych kontener **Xopero ONE** ma dostęp. Wybierz katalog z hosta i wprowadź ścieżkę, pod którą będzie on widoczny wewnątrz kontenera w polu **Container**.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/BdnZxFPALj3rBLLs8kQV/image.png" alt="" width="563"><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/sDAwPRUA9urR2FC4JtRM/image.png" alt="" width="563"><figcaption></figcaption></figure>

9. Sprawdź ponownie i potwierdź ustawienia, a następnie kliknij **Finish** aby utworzyć kontener.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/1OmhQehwHnWjmiFlOwu6/image.png" alt="" width="563"><figcaption></figcaption></figure>

10. **Container Station** pobierze najnowszy obraz **Xopero ONE** i utworzy na jego podstawie kontener.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/kXfr5TYtbHBh8Tdcgp1P/image.png" alt=""><figcaption></figcaption></figure>

11. Po zakończeniu procesu nowy kontener będzie widoczny w karcie **Container** w **Container Station**.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/HN7YODHVwb1VJti9WcbF/image.png" alt=""><figcaption></figcaption></figure>

12. Możesz teraz połączyć się z panelem administracyjnym **Xopero ONE Management Service**, aby aktywować agenta.
    {% endtab %}

{% tab title="QNAP NAS (CS < 3.0)" %}

<p align="center"><a href="#prerequisites-sec" class="button primary" data-icon="circle-1">Wymagania wstępne</a>    <a href="#environment_setup-sec" class="button primary" data-icon="circle-2">Konfiguracja środowiska</a>    <a href="#deployment-sec" class="button primary" data-icon="circle-3">Wdrożenie</a></p>

## Wymagania wstępne <a href="#prerequisites-sec" id="prerequisites-sec"></a>

**QNAP**:

* [x] Procesor x86 lub x64 (architektura ARM <mark style="color:red;">**nie jest obsługiwana**</mark>).
* [x] Minimum 2GB pamięci RAM.
* [x] Aplikacja **Container Station** z **App Center.**

***

## Konfiguracja środowiska <a href="#environment_setup-sec" id="environment_setup-sec"></a>

1. Zaloguj się do **panelu webowego** **QNAP** i otwórz aplikację **App Center**. Przejdź do **QNAP Store** > **All Apps** i wyszukaj **Container Station** (**CS**).
2. Pobierz aplikację **Container Station**. Po pobraniu otwórz ją i wybierz ścieżkę, która będzie używana jako **katalog danych kontenera Docker**.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/KIRW2D2w8RdfqVCOluLO/image.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/dEnKr4A45J0axCXrkPqf/image.png" alt=""><figcaption></figcaption></figure>

3. Kliknij **Start Now**, aby kontynuować.
4. Gdy to zrobisz, pobierz obraz **Docker agenta Xopero ONE**, który jest dostępny na naszym [oficjalnym serwerze](https://xopero.com/download/xopero_one/latest/client-image.tar).

***

## Wdrożenie <a href="#deployment-sec" id="deployment-sec"></a>

1. Otwórz aplikację **Container Station** i przejdź do karty **Import**.
2. Kliknij przycisk ➕**Import** aby przesłać pobrany wcześniej **plik obrazu Docker**.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/E1akG4H8FtafDK1QiOIu/Importing%20the%20docker%20file.png" alt="Importing the docker file"><figcaption></figcaption></figure>

3. W oknie **Create Import Task** wybierz typ źródła i ścieżkę do pliku obrazu **agenta Xopero ONE**, a następnie kliknij **Next**.&#x20;

{% hint style="info" %}
Wybranie pliku ze źródła lokalnego umożliwia wybór plików zapisanych na urządzeniu. Alternatywnie możesz użyć opcji **NAS**, aby uzyskać dostęp do plików bezpośrednio z **QNAP**.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/czL4WOvKcwbN2LZckiYA/Creating%20import%20task.png" alt="Creating import task" width="375"><figcaption></figcaption></figure>

4. W karcie **Create Container** formularz zawiera kilka pól, z których najważniejsze to:

> **Name** — tutaj możesz ustawić własną nazwę kontenera.
>
> **Auto start** — określa, czy kontener uruchomi się automatycznie, np. w przypadku restartu QNAP.
>
> **CPU Limit** — pozwala określić procent użycia procesora przydzielony dla kontenera.
>
> **Memory Limit** — limit pamięci RAM dla kontenera.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/rwNoe0H11pUOipDj0ZGc/Creating%20container.png" alt="Creating container"><figcaption></figcaption></figure>

5. Kliknij przycisk ⚙️**Advanced Settings >>** przejdź do sekcji **Environment**.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/YSpXbq5wA90LreYWNPYc/image.png" alt=""><figcaption></figcaption></figure>

6. Aby dodać nową zmienną środowiskową, kliknij przycisk **Add**, nazwij ją `ManagementServiceUrl` i ustaw jej wartość na adres usługi **Xopero ONE Management Service\***.

**‼️\*ManagementServiceUrl** – <mark style="color:red;">**własny adres**</mark> **Xopero ONE Management Service** (**XMS**) w jednym z następujących formatów (w zależności od modelu wdrożenia **XMS**):

> a. `http://ipaddress:port`, np. `http://192.168.0.1:28555`&#x20;
>
> b. `https://XMSID.ads.xopero.com`, np. `https://a00b0dc0-0116-0000-0000-d0000028960e.ads.xopero.com`

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/pbZ0KU4yENNe6W4BZNsk/create%20container.png" alt="create container"><figcaption></figcaption></figure>

7. Przejdź do sekcji **Shared Folders** — tutaj możesz podmontować wolumeny **QNAP** do **kontenera Docker agenta Xopero ONE**.

{% hint style="success" %}
Możesz zamontować wiele katalogów, klikając przycisk **Add Volume** i powtarzając operację.
{% endhint %}

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/YhZBTtfZ1G1VBPhvwjgG/Setting%20shared%20folders.png" alt="Setting shared folders"><figcaption></figcaption></figure>

8. by wykonywać kopię zapasową danych z urządzenia **QNAP**, wybierz **Add** w sekcji **Volume from host** — pozwoli to określić, do których danych kontener **Xopero ONE** ma mieć dostęp. Wybierz katalog z hosta w polu **Volume from host** i wprowadź ścieżkę widoczną wewnątrz kontenera w polu **Mount Point**.

{% hint style="info" %}
Na przykład, jeśli chcesz wykonać kopię zapasową katalogu o nazwie `Backup` wewnątrz folderu udostępnionego `Public`, ustaw pole **Volume from the host** na `/Public/Backup`. **Mount Point** może być inny, np. `/Backup`.
{% endhint %}

9. Po wykonaniu powyższych kroków kliknij **Create** aby kontynuować.
10. W oknie **Summary** sprawdź ponownie swoje ustawienia, a następnie kliknij **OK**, aby zakończyć konfigurację.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/3JtFbA8Tb3mONfnn81ir/Summary%20window.png" alt="Summary window"><figcaption></figcaption></figure>

10. Możesz teraz połączyć się z panelem administracyjnym **Xopero ONE Management Service**, aby aktywować agenta.
    {% endtab %}

{% tab title="Synology NAS" %}

## Wdrożenie

{% hint style="warning" %}
Aby wdrożyć **agenta Xopero ONE** na urządzeniu **Synology** za pomocą **Dockera**, użyj aplikacji **Container Manager**. Jeśli nie jest ona zainstalowana, pobierz ją z **Package Center**.
{% endhint %}

1. Przejdź do karty **Container** i kliknij przycisk **Create**. Rozwiń sekcj **Image** i kliknij **Add image**, a następnie wyszukaj obraz: `xopero/gitprotect-agent`.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/moiOFIil9SfvZHfUT8oY/1.PNG" alt="" width="563"><figcaption></figcaption></figure>

2. Wybierz obraz, kliknij **Download**, i wybierz wersję oznaczoną jako [<mark style="color:red;">**latest**</mark>](#user-content-fn-1)[^1]. Kliknij **Select** aby potwierdzić.
3. Gdy obraz zostanie pobrany, wybierz go z menu rozwijanego w polu **Image.**
4. Następnie zdefiniuj własną nazwę dla kontenera. W razie potrzeby skonfiguruj również limity zasobów kontenera.
5. Zaznacz opcję **Enable auto-restart** aby upewnić się, że kontener uruchomi się automatycznie po zrestartowaniu urządzenia, a następnie kliknij **Next**.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/vhDlt71ccccN318YeEhw/2.PNG" alt="" width="563"><figcaption></figcaption></figure>

6. W sekcji **Volume Settings**, kliknij przycisk ➕**Add Folder**, i wybierz katalogi wymagające ochrony. Kontener musi mieć podmontowane katalogi zewnętrzne, aby mieć do nich dostęp podczas wykonywania kopii zapasowych.

{% hint style="info" %}
Aby chronić dane przechowywane w katalogu `Public`, wybierz ten folder i określ <mark style="color:red;">**tę samą ścieżkę**</mark> wewnątrz kontenera, aby zapewnić spójność między systemami plików hosta i kontenera.
{% endhint %}

{% hint style="success" %}
Możesz podmontować wiele katalogów, klikając przycisk ➕ **Add Folder** i powtarzając operację.
{% endhint %}

7. Dodatkowo, aby zapewnić trwałość danych podczas aktualizacji kontenera lub prac konserwacyjnych, zamontuj bazy danych agenta w katalogu zewnętrznym. Bazy te znajdują się w lokalizacji `/app/Xopero` i powinny zostać zmapowane do wyznaczonego miejsca poza kontenerem, aby uniknąć utraty lub niespójności danych.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/2TKXNBFsSWr5e2fiFjAA/3.PNG" alt=""><figcaption></figcaption></figure>

8. W sekcji **Environment** definiuj wymagane zmienne:

> **ManagementServiceUrl** — <mark style="color:red;">**własny adres**</mark> **Xopero ONE Management Service** (**XMS**) w jednym z następujących formatów (w zależności od modelu wdrożenia **XMS**):
>
> a. `http://ipaddress:port`, np. `http://192.168.0.1:28555`&#x20;
>
> b. `https://XMSID.ads.xopero.com`, np. `https://a00b0dc0-0116-0000-0000-d0000028960e.ads.xopero.com`
>
> **XoperoOverriddenHostName** — określ nazwę agenta, aby ułatwić jego identyfikację w systemie.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/kcZ1iTHfBG62vDKuiN1W/4.PNG" alt=""><figcaption></figcaption></figure>

9. Kliknij **Next** aby potwierdzić konfigurację. W oknie **Summary**, prawdź ponownie swoje ustawienia i jeśli wszystko się zgadza, kliknij **Done**, aby sfinalizować proces.

<figure><img src="https://content.gitbook.com/content/wg6DDqlTFok8F9zv6rqa/blobs/VUdKk4kZdIBuhiXx7SHw/5.PNG" alt=""><figcaption></figcaption></figure>
{% endtab %}
{% endtabs %}

[^1]: najnowsza
