Как разместить собственный сервер bit.ly с помощью Shlink в Linux

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, чтобы проверить, работает ли он правильно.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.maketecheasier.com

Похожие статьи

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