# Gmid - багатофункціональний сервер для Gemini

Gmid - багатофункціональний сервер з відкритим кодом для протоколу Gemini.

Зокрема, його зручно використовувати у якості проксі серверу для віртуальних хостів, аналогічно тому як цю функцію виконує Nginx для HTTP.

Це може бути зручно, коли немає змоги піднімати для кожного серверу маску підмережі, або коли сайт працює на VPS з одним виділеним IP.

## Встановлення

Написаний Gmid на "C", перед його збіркою потрібно додати наступні бібліотеки:

```
apt install bison byacc
```

Буде правильним запускати і відповідно виконувати процес Gmid від окремого користувача, якого спочатку створимо та виконаємо вхід:

```
useradd -m gmid
su gmid
```

Клонуємо останню версію з офіційного дзеркала на GitHub і виконуємо компіляцію:

```
git clone https://github.com/omar-polo/gmid.git
cd gmid
./configure
make
```

## Налаштування reverse-proxy

Нижче описаний приклад створення двох віртуальних хостів "host1.com" та "host2.com", які працюють на умовних адресах "1.2.3.4:1965" та "4.3.2.1:1965" відповідно.

Таким чином, файл конфігурації виглядатиме так:

``` /home/gmid/gmid.conf
server "host1.com" {

    listen on 0.0.0.0 port 1965

    cert "/home/gmid/host/host1.com/cert.pem"
    key "/home/gmid/host/host1.com/key.rsa"

    proxy {
        sni "host1.com"
        relay-to 1.2.3.4 port 1965
        verifyname off
    }
}

server "host2.com" {

    listen on 0.0.0.0 port 1965

    cert "/home/gmid/host/host2.com/cert.pem"
    key "/home/gmid/host/host2.com/key.rsa"

    proxy {
        sni "host2.com"
        relay-to 4.3.2.1 port 1965
        verifyname off
    }
}
```

## Створення сертифікатів

На прикладі конфігурації вище, додамо само-підписаний сертифікат на прикладі "host1.com", необхідний для роботи протоколу Gemini.

Аналогічним способом створюється й сертифікат для "host2.com", замінивши значення атрибуту "CN":

```
mkdir /home/gmid/host/host1.com
cd /home/gmid/host/host1.com
openssl req -x509 -newkey rsa:4096 -keyout key.rsa -out cert.pem -days 3650 -nodes -subj "/CN=host1.com"
```

## Автозапуск

Щоб наш проксі-сервер стартував разом з системою і працював як процес "systemd", додамо для Gmid юніт:

``` /etc/systemd/system/gmid.service
[Unit]
Description=gmid
After=network.target

[Service]
Type=simple
User=gmid
Group=gmid
WorkingDirectory=/home/gmid/
ExecStart=/home/gmid/gmid/gmid -c /home/gmid/gmid.conf -f -v
StandardOutput=file:/home/gmid/output.log
StandardError=file:/home/gmid/debug.log
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

* "-f" - запуск в режимі "foreground", інакше процес стартуватиме у фоновому режимі без журналювання
* "-v" - або "verbose" для звітів відлагодження

Оновлюємо конфігурацію та запускаємо сервер:

```
systemctl daemon-reload
systemctl enable gmid
systemctl start gmid
```

## Посилання

=> gemini://gmid.omarpolo.com Офіційна сторінка проєкту
=> https://github.com/omar-polo/gmid Дзеркало на GitHub

### Дивіться також

=> gemini-protocol-as-http-alternative.gmi Протокол Gemini як альтернатива HTTP