docker搭建MyUrls短链服务,可配合sub-web食用
介绍:
MyUrls 是由CareyWang大佬开源的基于 Go 1.22 与 Redis 实现的本地短链接服务,用于缩短 URL 与短链接还原。
一、效果图
[TOC]
二、开始部署
首先确定你是否安装了docker,docker-compose
没有安装的话去看这篇文章快速安装docker和docker-compose
由于该服务依赖于 Redis 提供长短链接映射关系存储,你需要本地安装 Redis 服务来保证短链接服务的正常运行。
我用三种方法去部署myurls短链服务
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页面,我们点击创建规则
按照顺序依次填写,⑤是填写你设置容器时的域名,⑦是填写你容器的端口号
最后点击部署
2.配置规则
如果不加其他配置直接从其他域调用MyURLs会出现不能返回结果的错误,但是MyURLs后端实际是收到请求并且生成了短链代码,但就是不能返回到其他域。比如MyURLs作者的 Sub-web项目。
修改响应头规则
Access-Control-Allow-Origin *
X-Content-Type-Options nosniff
如果是使用Nginx反向代理
Nginx的配置中添加
location / {
#你的其他内容不变,添加下面内容
add_header 'Access-Control-Allow-Origin' '*';
}
最后点击保存
3.域名解析
将你的的短链域名(docker容器配置的MYURLS_DOMAIN)解析到你的服务器上,注意勾选开启小云朵
4.使用
访问你刚刚解析的域名即可使用短链服务的web界面
四、搭配sub-web使用
参考这里搭建Clash订阅转换前后端教程
将.env文件中的
# 短链接后端 (填入你的短链地址) VUE_APP_MYURLS_API = "https://s.com/short"
改为你的短链链接,请务必在链接后面加上/short,否则你将无法正常使用。
五、lssues
当你运行容器后发现容器为停止状态,使用docker logs 容器名/容器id
来查看哪里有问题
1.目前容器不能在低于500M内存的机器上运行
否则会报错
2.redis链接失败
若redis ping 不是success,可能就是配置redis连接的时候出错了,请仔检查你的连接地址,如果实在不能解决,请使用docker-compose文件中的redis服务。