Dongxing's Wiki Dongxing's Wiki
首页
  • 剑指 Offer
  • LeetCode
  • 算法与数据结构
  • Python 语言
  • Web 开发
  • Hive
  • Elastic Search
  • 机器学习
  • NLP
  • 检索技术
  • 数据分析
  • 经验笔记
  • Linux 配置
  • 博客进化记
  • 杂谈
GitHub (opens new window)
首页
  • 剑指 Offer
  • LeetCode
  • 算法与数据结构
  • Python 语言
  • Web 开发
  • Hive
  • Elastic Search
  • 机器学习
  • NLP
  • 检索技术
  • 数据分析
  • 经验笔记
  • Linux 配置
  • 博客进化记
  • 杂谈
GitHub (opens new window)
  • 经验笔记

    • Git 常用命令速查
    • Let's Encrypt 免费泛域名通配符证书申请
    • 在Vmware虚拟机上搭建Hadoop+Spark集群
    • iTerm2 配置 ssh 记住密码一键登录
    • 使用frp进行内网穿透
    • macOS 上的常用环境配置笔记
    • 使用 kutt.tt 自建短网址服务
      • 安装 docker
      • 准备配置文件
      • 启动 docker
      • 配置 nginx
      • 初始用户
      • 安装 PostgreSQL
      • 安装 redis
      • 安装和配置 kutt
    • 在Ubuntu上自建NextCloud
    • 换路由器后连接不上本地 NAS
  • 经验笔记
  • 经验笔记
anthony
2021-08-29
目录

使用 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
1
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=这里填写密码
1
2
3
4
5
6

# 启动 docker

然后直接运行

docker-compose up -d 
1

这条语句的作用是让服务跑起来,并且在后台运行。一段时间后,访问 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;
	}
}
1
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
1
2

对 postgres 不太熟悉,记录一些后面会用到的命令:

# 切换到postgres专用的linux用户
sudo -i -u postgres

# 切换到其他用户
su user_name

# 切到psql用户后,输入这个命令,进入psql交互模式
psql

# 退出交互模式
\q
1
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
# 按提示设定即可
1
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
1
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
1
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
1
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 一下,再看的话应该就是升级后的版本啦。
1
2
3
4
5
6
7
8
9
10

注意

后续步骤因为 npm start 这一步没有做起来,所以没有进行下去了。应该还差运行起一个例行服务,然后配置 nginx。

上次更新: 2022/11/11, 1:11:00
macOS 上的常用环境配置笔记
在Ubuntu上自建NextCloud

← macOS 上的常用环境配置笔记 在Ubuntu上自建NextCloud→

Theme by Vdoing | Copyright © 2017-2023 anthony 京ICP备17072417-3
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式