Self-hosted URL shortener + Raycast

от автора

Привет Хабр!

Я обожаю сокращать ссылки через собственный URL shortener. Это как clck.ru, только всё работает на собственной архитектуре и данные об использовании никуда не утекают. При этом домен я тоже могу поставить какой-нибудь красивый (к примеру — hdla.cloud).

В данном гайде пробегусь по настройке chhoto-url — минималистичного self-hosted решения написанном на Rust. Также для любителей Raycast покажу расширение, которое сам написал, чтобы сокращать ссылки было blazingly fast ⚡.

Статья предполагает, что вы знакомы с основами SSH, Docker и Linux.


Для начала подключаемся к своей VPS по SSH (у кого нет, взять можно за пару минут буквально загуглив «аренда VPS»):

ssh root@<ip вашей vps>

Устанавливаем Docker если еще не сделали этого:

bash <(curl -sSL https://get.docker.com)

Создаём директорию для chhoto-url и переходим в неё:

mkdir chhoto-url && cd chhoto-url

Далее через vim или nano создаём compose.yml(для новичков лучше nano):

vim compose.yml
services:   chhoto-url:     image: sintan1729/chhoto-url:latest     restart: unless-stopped     container_name: chhoto-url     environment:       - db_url=/db/urls.sqlite       - password=${CHHOTO_URL_PASSWORD}     volumes:       - ./data/:/db

Теперь по аналогии создаём .env для переменных окружения:

vim .env
CHHOTO_URL_PASSWORD="<сюда пишем длинный и безопасный пароль>"

Далее нужно контейнер поставить за reverse-proxy которых миллион на любой вкус и цвет. Знатокам с этого момента можно поставить свою по предпочтениям, в то время как для новичков покажу как это сделать с traefik.


Добавляем в compose.yml необходимую конфигурацию:

services:   traefik:     image: traefik:v3.4     restart: always     container_name: traefik     user: "0:0"  # Run as root to access the acme.json file     ports:       - "80:80"       - "443:443"     volumes:       - /var/run/docker.sock:/var/run/docker.sock       - ./traefik.toml:/etc/traefik/traefik.toml       - ./acme/acme.json:/acme/acme.json   chhoto-url:     image: sintan1729/chhoto-url:latest     restart: unless-stopped     container_name: chhoto-url     labels:       - traefik.enable=true       - traefik.http.routers.chhoto-url.rule=Host(`EXAMPLE.COM`)       - traefik.http.routers.chhoto-url.entrypoints=websecure       - traefik.http.routers.chhoto-url.tls.certresolver=letsencrypt       - traefik.http.services.chhoto-url.loadbalancer.server.port=4567       # HTTP to HTTPS redirect       - traefik.http.routers.chhoto-url-http.rule=Host(`EXAMPLE.COM`)       - traefik.http.routers.chhoto-url-http.entrypoints=web       - traefik.http.routers.chhoto-url-http.middlewares=redirect-to-https       - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https     environment:       - db_url=/db/urls.sqlite       - password=${CHHOTO_URL_PASSWORD}     volumes:       - ./data/:/db

Важно заменить EXAMPLE.COM на свой домен как в compose.yml, так и в traefik.toml (настройка собственного домена выходит за рамки этого гайда).

Создаём traefik.toml:

# Entry Points [entryPoints]   [entryPoints.web]     address = ":80"   [entryPoints.websecure]     address = ":443"  # Provider for Docker [providers.docker]   endpoint = "unix:///var/run/docker.sock"   exposedByDefault = false  # Certificate Resolvers [certificatesResolvers.letsencrypt.acme]   email = "admin@EXAMPLE.COM"   storage = "/acme/acme.json"   caServer = "https://acme-v02.api.letsencrypt.org/directory"   keyType = "EC256"   [certificatesResolvers.letsencrypt.acme.httpChallenge]     entryPoint = "web"  # API and Dashboard (optional - remove if not needed) [api]   dashboard = false   insecure = false

Создаём специальный файл для certbot(он нужен для автоматического TLS):

touch acme/acme.json && chmod 600 acme/acme.json

И наконец запускаем сервис:

docker compose up -d

Теперь по указанному домену можно пользоваться сервисом (пароль тот что указывали в .env) .


Для использования с Raycast просто устанавливаем расширение из официального магазина.

При конфигурации указываем наш домен и пароль:

Экран настройки расширения

Экран настройки расширения

Исходники моей конфигурации доступны на GitHub.


ссылка на оригинал статьи https://habr.com/ru/articles/919354/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *