docker搭建MyUrls短链服务,可配合sub-web食用

介绍:

MyUrls 是由CareyWang大佬开源的基于 Go 1.22 与 Redis 实现的本地短链接服务,用于缩短 URL 与短链接还原。

一、效果图

[TOC]

二、开始部署

首先确定你是否安装了docker,docker-compose

没有安装的话去看这篇文章快速安装docker和docker-compose

由于该服务依赖于 Redis 提供长短链接映射关系存储,你需要本地安装 Redis 服务来保证短链接服务的正常运行。

我用三种方法去部署myurls短链服务

  1. Docker一键部署
  2. docker-compose配置文件部署
  3. docker-compose构建镜像部署

1.Docker一键部署

1.1docker run命令部署

现在你可以无需安装其他服务,使用 docker 部署本项目。

docker run -d --restart always \
  --name myurls \
  -p 8080:8080 \
  -v /path/to/myurls/logs:/app/logs \
  -e MYURLS_DOMAIN=example.com \
  -e REDIS_IP=redis \
  -e REDIS_PORT=6379 \
  -e REDIS_PASSWORD= \
  xiao6666/myurls:latest

1.2参数介绍

变量名非空描述
MYURLS_DOMAIN你的域名,例如s.com
REDIS_IP默认地址localhost,如果你有远程redis服务,请将docker-compose.yaml中的redis服务删除。如果没有远端redis则保持默认即可。
REDIS_PORT你的redis服务端口,默认端口6379
REDIS_PASSWORD你的redis服务的密码,有就填,没有留空即可

2.docker-compose配置文件部署

2.1docker-compose配置文件编辑

services:
  myurls:
    image: xiao6666/myurls:latest
    environment:
      - MYURLS_DOMAIN=s.example.com
      - MYURLS_PROTO=https
      - REDIS_IP=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=
    volumes:
      - ./data/myurls/logs:/app/logs    
    ports:
      - "8080:8080"
    depends_on:
      - redis
    restart: always

  redis:
    image: redis:latest
    volumes:
      - ./data/redis:/data
    restart: always

2.2参数介绍

变量名非空描述
MYURLS_DOMAIN你的域名,例如s.example.com
MYURLS_PROTO是否开启https,可选参数https,http
REDIS_IP默认地址localhost,如果你有远程redis服务,请将docker-compose.yaml中的redis服务删除。如果没有远端redis则保持默认即可。
REDIS_PORT默认地址6379,同上
REDIS_PASSWORD有就填,没有留空即可

2.3启动容器

在当前目录(例如:/root/docker/MyUrls)运行docker-compose up -d命令启动容器

3.docker-compose构建镜像部署

注:作者仓库提供的方法构建

此方法需要拉取项目仓库,请检查你的依赖文件git是否安装。
注:有关连接远程redis的方式请看这里

apt-get update && apt-get install -y git

3.1拉取仓库

git clone https://github.com/CareyWang/MyUrls.git
#如拉取过慢请使用加速地址
git clone https://gh.dzkeji.us.kg/https://github.com/CareyWang/MyUrls.git

#cd 到Myurls目录
cd MyUrls
#复制.env.example 文件并重命名为.env,请务必执行这一项,否则无法运行容器
cp .env.example .env

3.2更改.env文件

vim .env使用vim打开.env文件

MYURLS_PORT=8080
MYURLS_DOMAIN=example.com
MYURLS_PROTO=https

参数介绍

  • MYURLS_PORT:指定容器端口
  • MYURLS_DOMAIN:你要设置的短链域名
  • MYURLS_PROTO:开启https

3.3更改docker-compose文件

无特殊需求,不需要更改,直接跳到下一步

version: "3"
services:
  myurls:
    build: .
    container_name: myurls
    restart: always
    env_file: .env
    ports:
      - "${MYURLS_PORT}:${MYURLS_PORT}"
    volumes:
      - ./data/myurls/logs:/app/logs      
    depends_on:
      - myurls-redis
    entrypoint: ["/app/myurls", "-domain", "${MYURLS_DOMAIN}", "-conn", myurls-redis:6379]

  myurls-redis:
    image: "redis:7"
    container_name: myurls-redis
    restart: always
    volumes:
      - ./data/redis:/data
    expose:
      - "6379"

参数介绍

Usage of ./MyUrls:
  -conn string
        address of the redis server (default "localhost:6379")
  -domain string
        domain of the server (default "localhost:8080")
  -h    display help
  -password string
        password of the redis server
  -port string
        port to run the server on (default "8080")
  -proto string
        protocol of the server (default "https")

更改entrypoint: ["/app/myurls", "-domain", "${MYURLS_DOMAIN}", "-conn", myurls-redis:6379]中的myurls-redis:6379即可更换远程redis。

如果配置了远程redis请删除myurls-redis服务相关配置。

3.4启动容器

docker-compose up -d启动容器

三、配置反向代理

1.使用cloudflare提供的Origin Rules

进入cloudflare网站,选择你在上面配置的域名(或子域名)

来到Origin Rules页面,我们点击创建规则

image-20240817044337823

image-20240817044945943

按照顺序依次填写,⑤是填写你设置容器时的域名,⑦是填写你容器的端口号

最后点击部署

2.配置规则

如果不加其他配置直接从其他域调用MyURLs会出现不能返回结果的错误,但是MyURLs后端实际是收到请求并且生成了短链代码,但就是不能返回到其他域。比如MyURLs作者的 Sub-web项目。

image-20240817045450082

image-20240817045830364

修改响应头规则

Access-Control-Allow-Origin *
X-Content-Type-Options nosniff

如果是使用Nginx反向代理
Nginx的配置中添加

    location / {
        #你的其他内容不变,添加下面内容
        add_header 'Access-Control-Allow-Origin' '*';
    }

最后点击保存

3.域名解析

将你的的短链域名(docker容器配置的MYURLS_DOMAIN)解析到你的服务器上,注意勾选开启小云朵

image-20240817050405850

4.使用

访问你刚刚解析的域名即可使用短链服务的web界面

image-20240817053853519

四、搭配sub-web使用

参考这里搭建Clash订阅转换前后端教程

将.env文件中的

# 短链接后端 (填入你的短链地址) VUE_APP_MYURLS_API = "https://s.com/short"

改为你的短链链接,请务必在链接后面加上/short,否则你将无法正常使用。

五、lssues

当你运行容器后发现容器为停止状态,使用docker logs 容器名/容器id来查看哪里有问题

1.目前容器不能在低于500M内存的机器上运行

否则会报错

image-20240817053212861

2.redis链接失败

image-20240817053316721

若redis ping 不是success,可能就是配置redis连接的时候出错了,请仔检查你的连接地址,如果实在不能解决,请使用docker-compose文件中的redis服务。

努力成为赛博糕手(●'◡'●)