Привет Хабр!
Я обожаю сокращать ссылки через собственный 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/
Добавить комментарий