Gotify - простой сервер для отправки и получения push-сообщений. Он быстрый, многофункциональный и упакован в один бинарный файл, и единственная зависимость — это база данных Postgres. В этой статье мы узнаем, как установить Gotify на Ubuntu 25.04. Итак, приступим.

Предпосылки

  • Сервер с Ubuntu 25.04 в качестве ОС
  • Права пользователя: пользователь root или обычный пользователь с привилегиями sudo

Конвенции

1
2
# - данные команды должны выполняться с правами root либо непосредственно от имени пользователя root, либо с помощью команды sudo.
$ - данные команды должны выполняться от имени обычного пользователя

Шаг 1. Обновите систему

Свежая установка Ubuntu 25.04 требует обновления пакетов до последних доступных версий.

1
$ sudo apt update -y && sudo apt upgrade -y

Шаг 2. Установите PostgreSQL

Установите пакет Postgres вместе с пакетом contrib, который добавляет некоторые дополнительные утилиты и функции.

1
$ sudo apt install postgresql postgresql-contrib

После установки запустите и включите службу PostgreSQL.

1
$ sudo systemctl enable postgresql.service && sudo systemctl start postgresql.service

Шаг 3. Создание базы данных

Нам нужно создать базу данных для Gotify для работы.

1
2
3
$ sudo -u postgres psql -c "CREATE USER gotify WITH PASSWORD 'yourpassword';"
$ sudo -u postgres psql -c "CREATE DATABASE gotify_db OWNER gotify;"
$ sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE gotify_db TO gotify;"

Шаг 4. Создайте пользователя для запуска

1
$ sudo useradd -s /usr/sbin/nologin -r -M gotify

Шаг 5. Установите Gotify

Загрузите последний бинарный файл со страницы релизов на GitHub.

1
2
3
4
$ wget https://github.com/gotify/server/releases/download/v2.6.3/gotify-linux-amd64.zip
$ unzip gotify-linux-amd64.zip
$ sudo mv gotify-linux-amd64/gotify-linux-amd64 /usr/local/bin/gotify
$ sudo chmod +x /usr/local/bin/gotify

Создайте новый файл конфигурации с помощью следующей команды

1
$ sudo mkdir -p /etc/gotify/

Создайте новый файл с именем /etc/gotify/config.yml

1
$ sudo nano config.yml

Отредактируйте файл config.yml, чтобы он соответствовал вашим данным, включая ваше имя пользователя и безопасный пароль.

1
sudo mkdir -p /var/lib/gotify/images && sudo mkdir /var/lib/gotify/plugins && sudo chown -R gotify /var/lib/gotify
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
server:
  keepaliveperiodseconds: 0 # 0 = use Go default (15s); -1 = disable keepalive; set the interval in which keepalive packets will be sent. Only change this value if you know what you are doing.
  listenaddr: '' # the address to bind on, leave empty to bind on all addresses. Prefix with "unix:" to create a unix socket. Example: "unix:/tmp/gotify.sock".
  port: 9000 # the port the HTTP server will listen on

  ssl:
    enabled: false # if https should be enabled
    redirecttohttps: true # redirect to https if site is accessed by http
    listenaddr: '' # the address to bind on, leave empty to bind on all addresses. Prefix with "unix:" to create a unix socket. Example: "unix:/tmp/gotify.sock".
    port: 443 # the https port
    certfile: # the cert file (leave empty when using letsencrypt)
    certkey: # the cert key (leave empty when using letsencrypt)
    letsencrypt:
      enabled: false # if the certificate should be requested from letsencrypt
      accepttos: false # if you accept the tos from letsencrypt
      cache: data/certs # the directory of the cache from letsencrypt
      hosts: # the hosts for which letsencrypt should request certificates
  #     - mydomain.tld
  #     - myotherdomain.tld
  responseheaders: # response headers are added to every response (default: none)
  # X-Custom-Header: "custom value"
  trustedproxies: # IPs or IP ranges of trusted proxies. Used to obtain the remote ip via the X-Forwarded-For header. (configure 127.0.0.1 to trust sockets)
  #   - 127.0.0.1
  #   - 192.168.178.0/24
  #   - ::1

  cors: # Sets cors headers only when needed and provides support for multiple allowed origins. Overrides Access-Control-* Headers in response headers.
    alloworigins:
    # - ".+.example.com"
    # - "otherdomain.com"
    allowmethods:
    # - "GET"
    # - "POST"
    allowheaders:
  #   - "Authorization"
  #   - "content-type"

  stream:
    pingperiodseconds: 45 # the interval in which websocket pings will be sent. Only change this value if you know what you are doing.
    allowedorigins: # allowed origins for websocket connections (same origin is always allowed, default only same origin)
      - "push.example.com"
database: # see below
  dialect: postgres
  connection: host=localhost port=5432 user=gotify dbname=gotify_db password=yourpassword
defaultuser: # on database creation, gotify creates an admin user (these values will only be used for the first start, if you want to edit the user after the first start use the WebUI)
  name: admin # the username of the default user
  pass: admin # the password of the default user
passstrength: 10 # the bcrypt password strength (higher = better but also slower)
uploadedimagesdir: /var/lib/gotify/images # the directory for storing uploaded images
pluginsdir: /var/lib/gotify/plugins # the directory where plugin resides (leave empty to disable plugins)
registration: false # enable registrations

Добавьте свой домен в настройках stream.

Добавьте пользователя базы данных и перейдите в настройки базы данных.

Обновите пользователя-администратора своей учетной записи.

Сохраните и закройте файл.

1
2
3
$ sudo chmod 600 /etc/gotify/config.yml
$ sudo chmod go-rw /etc/gotify/config.yml
$ sudo chown gotify:gotify /etc/gotify/config.yml

Шаг 6. Настройте службу systemd для запуска Gotify

1
$ sudo nano /etc/systemd/system/gotify.service

Заполните файл следующим.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[Unit]
Description=Gotify
Requires=network.target
After=network.target
After=postgresql.service

[Service]
Type=simple
User=gotify
Group=gotify
WorkingDirectory=/etc/gotify/
EnvironmentFile=/etc/gotify/config.yml
ExecStart=/usr/local/bin/gotify
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

Включите и запустите gotify при загрузке.

1
2
$ sudo systemctl start gotify.service
$ sudo systemctl enable gotify.service

Всё, что осталось - это войти в систему по адресу http://localhost:9000 используя учетные данные администратора, которые мы установили в файле config.yml, и ввести все наши пользовательские настройки на вкладке «Настройки».

Шаг 7. Настройте Nginx в качестве обратного прокси

1
$ sudo apt-get -y install nginx

Создайте обратный конфигурацию прокси-сервера для Gotify.

1
$ sudo nano /etc/nginx/sites-available/gotify.conf

Заполните файл следующей конфигурацией.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
server {
    server_name     push.example.com;
    listen          80;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Включите конфигурацию обратной прокси-сервера

1
$ sudo ln -s /etc/nginx/sites-available/gotify.conf /etc/nginx/sites-enabled/gotify.conf

Наконец, мы можем проверить, не имеет ли наш файл nginx никакой ошибки.

1
2
$ sudo nginx -t
$ sudo systemctl restart nginx.service

Шаг 8. Получите сертификат TLS от Let’s Encrypt

Мы будем использовать Let’s Encrypt для получения SSL-сертификата бесплатно. Пожалуйста, убедитесь, что вы указали свой поддомен на IP-адрес сервера. Шаги, приведенные ниже, будут работать только в том случае, если вы обслуживаете интерфейс управления с помощью Nginx.

1
$ sudo apt install python3-certbot-nginx

Запрос на Let’s Encrypt SSL.

1
$ sudo certbot certonly --nginx -d push.example.com

Проверьте SSL

Откройте следующую ссылку в вашем веб-браузере для проверки.

1
https://push.example.com

Следующая команда гарантирует, что Certbot может проверить ваш поддомен с помощью вашей конфигурации.

1
$ sudo certbot renew --dry-run

Если пробный запуск прошел без ошибок, все готово. Теперь процесс продления будет автоматизирован.

Он автоматически настраивает /etc/nginx/sites-available/gotify.conf для включения SSL.

Обновление Gotify

Загрузите последний бинарный выпуск с GitHub и извлеките его содержимое и замените бинарный файл.

Затем посетите веб-сайт по адресу https://push.example.com для доступа.

Завершение

Собственно на этом всё, теперь вы можете создавать и отправлять push-сообщения всем своим подписчикам обо всех ваших выгодных предложениях.

Если вам понравился этот пост о том, как установить Gotify на Ubuntu 25.04, пожалуйста, поделитесь им со своими друзьями в социальных сетях, которым может быть интересна эта статья или оставьте комментарий ниже.