Shlink – это мощный самодостаточный сервис сокращения ссылок для Linux. Он предоставляет простую, но эффективную структуру, в которой вы можете использовать свое собственное доменное имя в качестве корня для ваших сокращенных ссылок. В этой статье мы покажем вам, как установить собственный экземпляр Shlink на Ubuntu Linux с помощью Docker и Nginx
Зачем сокращать ссылки с помощью Shlink?
Одним из главных преимуществ Shlink является то, что вы можете использовать собственный домен для коротких ссылок, оставаясь при этом самостоятельным хостером. Это, в свою очередь, обеспечивает гибкость SaaS-сервиса сокращения ссылок, а также конфиденциальность программного обеспечения на вашей собственной машине.

Кроме того, Shlink может похвастаться разнообразным набором функций, таких как создание QR-кодов, автоматическая переадресация запросов на ссылки и создание многосегментных пользовательских ссылок. Это делает Shlink удобным инструментом, если вы ищете службу сокращения ссылок в Linux, где вы можете настраивать внешний вид и поведение ваших ссылок.
Получение Docker для Shlink
Допущение: В этой статье предполагается, что вы устанавливаете Shlink на Ubuntu 22.04 VPS и что у вас есть доменное имя.
Первым шагом в развертывании Shlink на Linux является получение копии Docker. Для этого возьмите ключ подписи проекта Docker с его сайта:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg
Создайте файл репозитория для двоичных файлов Docker:
sudo nano /etc/apt/sources.list.d/docker.list
Вставьте следующую строку кода в новый файл репозитория:
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable
Перезагрузите листинг репозитория вашей системы, выполнив apt update
:
sudo apt update && sudo apt upgrade
Установка зависимостей для Shlink
Запустив репозитории Docker, вы можете использовать apt для получения зависимостей для Shlink:
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-buildx-plugin nginx
Убедитесь, что пакет snap «core» доступен в вашей системе:
sudo snap install core
Получите и установите пакет snap «certbot» от Electronic Frontier Foundation:
sudo snap install certbot --classic
Получение лицензионного ключа Geolite2
Еще одной отличительной особенностью Shlink является то, что он может отслеживать общее местоположение пользователя, перешедшего по вашим ссылкам. Чтобы воспользоваться этим, откройте страницу Geolite2 Licensing Sign Up.

Заполните форму своими данными, затем нажмите Continue .
Откройте свой почтовый ящик, затем найдите письмо с подтверждением от MaxMind.
Перейдите по ссылке из письма, затем укажите пароль для вашей новой учетной записи MaxMind.

Войдите в свою учетную запись MaxMind, затем нажмите Управление лицензионными ключами на панели управления.

Нажмите Генерировать новый лицензионный ключ, затем нажмите Подтвердить, чтобы создать ключ Geolite2.

Копируйте лицензионный ключ Geolite2 в текстовый файл на вашей машине, затем сохраните его.
Получение и установка Shlink
Чтобы установить Shlink, сначала нужно создать виртуальную сеть Docker. Она будет служить частной сетью приложения, через которую оно сможет общаться с другими контейнерами, которые вы развернете:
sudo docker network create -d bridge \ --subnet=10.0.0.0/24 \ --gateway=10.0.0.1 \ shlink-network
Разверните базу данных PostgreSQL и свяжите ее с новой виртуальной сетью Docker:
sudo docker run -d \ --name shlink-db \ -e POSTGRES_PASSWORD=!REPLACE_ME! \ -e POSTGRES_USER=postgres \ -e POSTGRES_DB=shlink \ -p 127.0.0.1:5432:5432 \ --restart always \ --network="shlink-network" \ postgres:12.1
Измените значение переменной окружения «POSTGRES_PASSWORD» на случайную строку текста.

Примечание: Вы можете создать эту случайную строку текста с помощью «/dev/urandom»: cat /dev/urandom | tr -dc 'A-Za-z0-9' | fold -w 32 | head -n 1
Вставьте следующую команду в новую сессию терминала:
sudo docker run -d \ --name shlink-stable \ -p 8081:8080 \ -e DEFAULT_DOMAIN=YOUR-ROOT.DOMAIN \ -e IS_HTTPS_ENABLED=true \ -e GEOLITE_LICENSE_KEY=!REPLACE_ME! \ -e DB_DRIVER=postgres \ -e DB_USER=postgres \ -e DB_PASSWORD=!REPLACE_ME! \ -e DB_HOST=shlink-db \ --network="shlink-network" \ shlinkio/shlink:stable
Замените значение переменной DEFAULT_DOMAIN на ваше доменное имя.

Примечание: Убедитесь, что ваш домен имеет запись A, которая указывает на IP-адрес вашей машины.
Измените значение переменной «GEOLITE_LICENSE_KEY» на ваш персональный лицензионный ключ.

Замените переменную «DB_PASSWORD» на ваш пароль базы данных PostgreSQL.

Нажмите Enter, чтобы запустить ваш экземпляр Shlink.
Установка и подключение интерфейса Shlink
Получите ключ API из контейнера Shlink и скопируйте его в буфер обмена:
sudo docker exec -it shlink-stable shlink api-key:generate
Вставьте следующую команду в новую сессию терминала:
sudo docker run -d \ --name shlink-client \ -p 8080:8080 \ -e SHLINK_SERVER_URL=https://YOUR-ROOT.DOMAIN \ -e SHLINK_SERVER_API_KEY=!REPLACE-ME! \ --network="shlink-network" shlinkio/shlink-web-client
Замените «SHLINK_SERVER_URL» на значение из вашей переменной «DEFAULT_DOMAIN» в контейнере бэкенда.

Вставьте свой ключ API в качестве значения для «SHLINK_SERVER_API_KEY.»

Нажмите Enter, чтобы запустить интерфейс фронтенда Shlink.
Убедитесь, что база данных, бэкенд Shlink и фронтенд Shlink работают правильно, просмотрев список всех активных контейнеров в системе:
sudo docker container list

Creating an SSL Reverse Proxy using Nginx
На данный момент у вас на сервере запущен рабочий программный комплекс Shlink. Однако для доступа к нему необходимо создать SSL-прокси, который делегирует два контейнера на разных доменах.
Для начала создайте новую запись A для внешнего интерфейса Shlink. В моем случае я задам A-запись для фронтенда как «admin».

Создайте файл конфигурации сайта для экземпляра Shlink с помощью вашего любимого текстового редактора:
sudo nano /etc/nginx/sites-available/shlink
Вставьте следующий блок кода в файл конфигурации:
server { server_name YOUR-ROOT.DOMAIN; location / { proxy_pass http://127.0.0.1:8081; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; } } server { server_name SUBDOMAIN.YOUR-ROOT.DOMAIN; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; } }
Замените переменную «YOUR-ROOT.DOMAIN» на ваш корневой домен, а «SUBDOMAIN.YOUR-ROOT.DOMAIN» – на субдомен для вашего интерфейса фронтенда.
Сохраните файл конфигурации, затем включите веб-приложение в Nginx:
sudo ln -s /etc/nginx/sites-available/shlink /etc/nginx/sites-enabled/
Перезагрузите демон Nginx, чтобы применить новые настройки:
sudo systemctl reload nginx
Зарегистрируйте свой сервер в Electronic Frontier Foundation:
sudo certbot register --agree-tos -m YOUR@EMAIL.ADDRESS
Запросите новый мультидоменный SSL-сертификат для экземпляра Shlink:
sudo certbot --nginx -d YOUR-ROOT.DOMAIN -d SUBDOMAIN.YOUR-ROOT.DOMAIN
Убедитесь, что ваш сервер Shlink работает правильно, перейдя в консоль администратора вашего экземпляра. В моем случае это «https://admin.helloserver.top.»

Полезно знать: Узнайте больше о веб-шифровании, создав собственные SSL-сертификаты с помощью OpenSSL.
Creating Your First Link using Shlink
Чтобы использовать свой новый экземпляр, щелкните пункт меню Shlink на целевой странице.

Вставьте свой длинный URL в текстовое поле URL to be shortened в категории Create a short URL.
Укажите метаданные для своей короткой ссылки, затем нажмите Save для создания ссылки.

Откройте свой новый короткий URL на новой вкладке браузера, затем нажмите кнопку Visits на приборной панели Shlink, чтобы проверить, работает ли он правильно.

Комментарии (0)