Gopeed – менеджер загрузок с открытым исходным кодом, реализованный на языке Go и распространяемый под лицензией MIT. Сервис позволяет управлять загрузками файлов из интернета через удобный интерфейс, представляющий собой либо графическую оболочку на рабочем столе, либо веб-страницу, подключающуюся к серверу. С его помощью можно ставить файлы в очередь, загружать несколько файлов одновременно, использовать многопоточность для ускорения закачек, ставить загрузку на паузу, возобновлять её, докачивать прерванные загрузки, ограничивать скорость передачи, организовывать хранение в определённых каталогах, а также запускать сервис в режиме фоновой службы, чтобы управлять загрузками удалённо. Gopeed подходит для скачивания архивов, ISO-образов, медиаконтента и любых других файлов. Веб-интерфейс делает возможным управление даже с телефона или планшета, без необходимости держать открытым отдельное приложение.
Сервис работает по принципу многопоточной загрузки. Это означает, что каждый файл разбивается на сегменты, которые загружаются параллельно. Такой подход позволяет максимально задействовать доступную пропускную способность. Архитектурно Gopeed представлен в двух вариантах: графический клиент с интерфейсом на основе GTK, предназначенный для настольных ОС, и серверная сборка, запускаемая в виде самостоятельного процесса, который поднимает веб-сервер и предоставляет доступ через веб-интерфейс. Второй вариант удобно использовать в качестве сервиса, размещённого на VPS.
В статье разберём, как установить и запустить веб-сервис Gopeed на виртуальном выделенном сервере, работающем под управлением Ubuntu или Debian.
Как запустить Gopeed на Ubuntu и Debian
Дистрибутивы Gopeed доступны в разделе релизов официальной страницы на GitHub. Поскольку в данном случае нужен именно веб-сервер, то в списке дистрибутивов найдите веб-версию для 64-разрядной Linux-системы. После чего при помощи контекстного меню скопируйте ссылку на данный архив.

Для дальнейшей работы понадобятся консольные утилиты для распаковки zip-архивов и для загрузки файлов из сети. Поэтому обновите списки пакетов и установите в системе необходимый софт:
$ sudo apt update
$ sudo apt install unzip wget
Затем при помощи утилиты wget
и скопированной ранее ссылки загрузите архив дистрибутива в текущий каталог:
$ wget https://github.com/GopeedLab/gopeed/releases/download/v1.7.1/gopeed-web-v1.7.1-linux-amd64.zip
После чего распакуйте его:
$ unzip gopeed-web-v1.7.1-linux-amd64.zip
Перейдите в каталог, созданный в результате распаковки архива:
$ cd gopeed-web-v1.7.1-linux-amd64/
Далее создайте директорию, которую можно будет использовать в качестве рабочей для Gopeed:
$ sudo mkdir /opt/gopeed/
В созданный каталог переместите исполняемый файл Gopeed:
$ sudo mv gopeed /opt/gopeed/
Как запустить Gopeed в качестве системного сервиса
Чтобы Gopeed работал постоянно в фоне и не зависел от пользовательских сессий, необходимо настроить его запуск в качестве системного сервиса. Когда приложение оформлено как служба в системе инициализации systemd
, оно автоматически стартует при загрузке сервера и остаётся активным всё время. Такой режим гарантирует, что веб-интерфейс и функции загрузчика будут доступны круглосуточно. Кроме того, systemd
может следить за состоянием процесса. При сбое в работе службы система инициализации перезапускает её, тем самым повышая надёжность функционирования.
Создание системного пользователя
В целях снижения рисков безопасности для работы сервиса необходимо использовать ограниченного системного пользователя. Поэтому на следующем шаге создайте такую системную учётную запись с именем, например, gopeed-user
:
$ sudo useradd --system --no-create-home --shell /usr/sbin/nologin gopeed-user
Опции, используемые в приведённой выше команде, говорят о следующем:
--system
– создание системного аккаунта с UID ниже диапазона обычных пользователей: такие аккаунты обычно применяются для служб и не предназначены для входа в систему;--no-create-home
– домашняя директория для учётной записи не создаётся, поскольку не нужна сервисному пользователю;--shell /usr/sbin/nologin
– аккаунту назначается оболочкаnologin
, что делает использование этого пользователя для интерактивной работы невозможным, поскольку при попытке входа сессия сразу будет завершаться.
Далее рекурсивно измените владельца и группу всех файлов и каталогов внутри /opt/gopeed/
на пользователя gopeed-user
и группу gopeed-user
. Это нужно для того, чтобы у сервисного пользователя gopeed-user
, под которым запускается процесс Gopeed, были права на чтение, запись и выполнение внутри каталога /opt/gopeed/
.
$ sudo chown -R gopeed-user:gopeed-user /opt/gopeed/
Создание юнит-файла и запуск службы
Для описания того, как systemd
должна управлять службой, используется юнит-файл. В данном случае это текстовый файл с расширением .service
, в котором задаются определённые параметры. Следующим шагом создайте юнит-файл для сервиса Gopeed:
$ sudo nano /etc/systemd/system/gopeed.service
В файл скопируйте следующее содержимое:
[Unit]
Description=Gopeed Download Manager
After=network.target
[Service]
ExecStart=/opt/gopeed/gopeed
WorkingDirectory=/opt/gopeed
Restart=always
User=gopeed-user
[Install]
WantedBy=multi-user.target
В данном случае:
After=network.target
указывает на то, что запускать сервис нужно только после того, как будет инициализирована сеть, поскольку Gopeed поднимает веб-интерфейс и зависит от сетевого стека;ExecStart=/opt/gopeed/gopeed
– полный путь к бинарному файлу Gopeed, который должен запускаться;WorkingDirectory=/opt/gopeed
– рабочая директория Gopeed;User=gopeed-user
означает, что процесс будет запущен от имени ограниченного системного пользователяgopeed-user
;WantedBy=multi-user.target
означает, что служба будет автоматически стартовать при переходе системы в многопользовательский режим, то есть по умолчанию при загрузке сервера.
Сохраните изменения в файле и закройте его. Затем сообщите системе инициализации об изменении в конфигурации юнит-файлов:
$ sudo systemctl daemon-reload
После чего запустите службу Gopeed:
$ sudo systemctl start gopeed
Установите службу Gopeed в автозагрузку:
$ sudo systemctl enable gopeed
Запустите вывод текущего состояния службы на экран, чтобы убедиться в корректном старте нового сервиса:
$ systemctl status gopeed
Вывод команды не должен содержать сообщений об ошибках:

По умолчанию веб-интерфейс Gopeed работает через порт 9999. Поэтому необходимо открыть доступ к виртуальному серверу через этот порт. Для этого добавьте в брандмауэр UFW соответствующее разрешающее правило:
$ sudo ufw allow 9999
После чего откройте браузер и перейдите на веб-страницу Gopeed по адресу http://X.X.X.X:9999
, где вместо X.X.X.X
укажите IP-адрес вашей виртуальной машины.
