使用 kutt.tt 自建短网址服务
哪个男孩不想拥有自己的短网址服务呢 (狗头
其实想自己写一个的,一方面现有的好像都没那么满足自己的需求,另一方面也可以运用一下各种技术啥的。比如,用户的注册登录模块,短网址的自动生成,数据库存储和缓存,以及访问记录的收集和统计分析等等。不过,还没想好用什么来做,暂且先用开源的搭建一个吧,后面可以慢慢再开工。
今天就来使用 kutt.tt 这个开源项目来搭建一个短网址服务。使用的操作系统是 Ubuntu 18。
Kutt 源代码:https://github.com/thedevs-network/kutt (opens new window)
注意
非常建议使用 docker 来进行安装。
否则,run 起这个项目需要依赖 postgreSQL、redis 和 nodejs,而安装和配置这些环境,非常麻烦,各种版本问题。折腾了一晚上之后的教训,而使用 docker 整个过程只需要十几分钟。
建议使用 docker。
# docker 搭建
# 安装 docker
没有 docker 的话需要先安装一下
sudo apt install docker.io
sudo apt install docker-compose
2
# 准备配置文件
新建一个目录,从这里 https://github.com/thedevs-network/kutt/blob/develop/docker-compose.yml (opens new window) 下载 docker-compose.yml 文件放进去。
从这里下载 https://raw.githubusercontent.com/thedevs-network/kutt/develop/.docker.env (opens new window) 文件,你需要对里面的一些项目进行修改,比如 网站的名字,你的邮箱,是否开放注册等等。修改完成后,这个文件需要改名为 .env
,同样放到目录下。
这里需要特别提醒几点修改:
- DEFAULT_DOMAIN 因为是自定义域名,所以这项是很有必要的,否则在邮件验证等场景中,生成的链接不生效
- DISALLOW_REGISTRATION=false 这个建议先保留默认,允许注册,因为没有默认账号,所以你的账号也要自己注册。自己注册完了可以再关掉。
- MAIL_ 相关的几项。这里需要填写一个用来发邮件的账号,这项是必填的,因为注册账号和找回密码的邮件验证,以及恶意链接的report,都需要使用这个账号来自动发送邮件。
MAIL_HOST=smtp.exmail.qq.com 根据你的邮箱情况填写
MAIL_PORT=465
MAIL_SECURE=true
MAIL_USER=这里填写邮箱
MAIL_FROM=Auto Mailer <[email protected]> 这里可以填写一个易读的名字,显示为发件人,也可以不填
MAIL_PASSWORD=这里填写密码
2
3
4
5
6
# 启动 docker
然后直接运行
docker-compose up -d
这条语句的作用是让服务跑起来,并且在后台运行。一段时间后,访问 localhost:3000
就可以看到了。
# 配置 nginx
这是一个可选步骤,如果你使用了 nginx 的话。简单的做法,只需要增加一个 proxy_pass 到 localhost:3000
就可以啦。
server {
listen 443;
server_name your.domain;
ssl on;
ssl_certificate /etc/nginx/cert/cert.pem;
ssl_certificate_key /etc/nginx/cert/wkey.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 初始用户
kutt 这个项目默认是没有用户的,需要通过邮箱注册,而注册时要经过邮件验证,这就需要在前边的 env 文件里配置 MAIL_ 相关的项目,来实现发邮件。如果没有配置的话会非常麻烦,需要进入 docker 容器去看数据库。这里不说了。
# 手动搭建
注意
非常建议使用上面的教程用 docker 来搭建,而非手动搭建。
以下是一段失败的搭建记录:
本文参考: https://blog.mypad.in/setting-up-kutt-on-mypad-in-running-ubuntu/
# 安装 PostgreSQL
因为 kutt 使用了 postgres 和 redis 作为数据存储,所以需要先安装这两个依赖项。
sudo apt update
sudo apt install postgresql postgresql-contrib
2
对 postgres 不太熟悉,记录一些后面会用到的命令:
# 切换到postgres专用的linux用户
sudo -i -u postgres
# 切换到其他用户
su user_name
# 切到psql用户后,输入这个命令,进入psql交互模式
psql
# 退出交互模式
\q
2
3
4
5
6
7
8
9
10
11
好的,继续安装过程。
# 为应用创建单独的新用户
sudo -u postgres createuser --interactive
# 根据提示,填写名字(假设是 psql_user 好了),以及一些权限范围设置
# 创建新的数据库
sudo -u postgres createdb kutt
# 使用新角色登入数据库
# 为了使用免密验证(ident based authentication)需要使用跟 postgres 里用户名一致的linux用户名来登入数据库。
# 安装postgres之后默认创建了postgres的角色和linux用户
# 刚才我们用的也是 postgres 这个linux用户在执行操作
# 所以这里创建一个名为 psql_user 的linux用户
sudo adduser psql_user
# 切到这个user
sudo -i -u psql_user
# 切到psql数据库
psql -d kutt
# 设定密码
\password psql_user
# 按提示设定即可
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
到这里,psql相关的安装和用户配置就完成啦。记住刚才设定的用户名和密码
# 安装 redis
redis 也是一个依赖项,所以需要先完成安装。
sudo apt update
sudo apt install redis-server
2
对 redis 的基本配置其实比较简单,更多详细内容可以 参考这里 (opens new window) 。鉴于本文的主题,而且本身也不太熟悉 redis 的配置,这里不能再展开啦。
修改一个配置项,把 /etc/redis/redis.conf 里面的 supervised 这一项配置打开。原本默认是 no, 改成 supervised。
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd
2
3
4
5
6
7
8
9
10
# 安装和配置 kutt
终于来到了主线。下载最新的源代码,并解压放到某个目录下。release 下载地址 https://github.com/thedevs-network/kutt/releases (opens new window)
在 kutt 目录里创建 .env
文件,复制 https://github.com/thedevs-network/kutt/blob/develop/.example.env (opens new window) 这里的内容。
根据 .env 文件里的提示,按需要修改相应的配置项,可以参考 hconfiguration (opens new window) 里面 Configuration 这一段的介绍。
主要需要修改的包括数据库用户名密码,以及 kutt 的一些个性化配置,例如是否开放注册,站点名字,短网址字符长度,访问量限制等。其中有一些项目是 MAIL_ 相关,如果不打算向用户开放注册,可以不填这些。
配置修改完成后,开始安装。
# 安装依赖
npm install
# 如果没有npm,先 sudo apt install nodejs npm
# 如果是开发环境,则运行 npm run dev
# 生产环境
npm run build
npm start
2
3
4
5
6
7
8
9
10
可能会出错的地方是,apt install 来的 nodejs 版本低,小于 npm install 时的要求,这时可以进行升级:
node -v # 查看node版本
npm install -g n # 安装n
n latest # 安装最新版本
n stable # 或者 安装稳定版本
# 安装后如果不生效,需要指定一下环境变量
# 在 .bashrc 中增加
export N_PREFIX=/usr/local/n/versions/node/xxxx你的版本号
export $PATH=$N_PREFIX/bin:$PATH
# 然后 source 一下,再看的话应该就是升级后的版本啦。
2
3
4
5
6
7
8
9
10
注意
后续步骤因为 npm start 这一步没有做起来,所以没有进行下去了。应该还差运行起一个例行服务,然后配置 nginx。