anchr

其他类别 2025-08-17

anchr

anchr是用于Internet上常见任务的小工具箱,包括书签链接缩短图像上传

特征

  • Link Shortener
  • 可搜索的书签集
  • 加密图像上传,使用cryptojs
  • 恶意链接检查,使用安全浏览API
  • 自托管和开源
  • 在anchr .io托管,符合GDPR的服务
  • 官方Android应用
  • 铬和Firefox浏览器扩展
  • 普罗米修斯指标
  • 与Sharex集成
  • OAuth 2身份验证(Google,Facebook,...)
  • 电报机器人(@ anchr bot)

如果您喜欢这个项目,请考虑赞助它!

?描述

有一天,我认为有一个想法的想法是有用的,它可以从任何地方访问任何网络链接或书签(例如您在Chrome或Firefox中的书签),而无需同步您的浏览器配置文件。就像您在另一台PC上的某个地方一样,在Internet上找到一篇有用的文章,并希望快速保存它以备以后在家中。这就是anchr的集合功能所做的。它保存了链接 - 具有可选的描述,可更轻松地搜索并分为类别 /集合。

第二个功能是上传图像。您可以轻松地从计算机或移动设备上传一张或多张照片,并将其发送给朋友,或将其包括在论坛帖子等中。与anchr的图像托管有关的特殊之处是,用户有机会使用密码加密映像。结果,没有密码的人都不会看到他们的照片的内容。

最后一个功能是短链接- 实际上与您从goo.gl或bit.ly中知道的那些没有什么不同。如果您有一个很长的网络链接,其中包括许多查询参数,访问令牌,会话ID,特殊字符等,并且想共享它们,则很有用。通常,特殊字符打破链接或您的聊天应用程序的超链接最大长度。或者,您只想在文档或电子邮件中保持清晰度。在这种情况下,尽可能短的链接可能会非常有帮助。此外,还针对Google安全浏览API检查了短链接,以防止您的网站参考网站钓鱼网站之类的。

anchr的重点是轻松和快速使用 - 短加载时间,平面菜单层次结构等。还有一个Chrome扩展名,您可以直接从网站上保存或缩短链接。

?如何运行?

先决条件

为了自己托管anchr ,您需要一些东西。

  • node.js> = 21.x
  • mongodb> = 6.x
    • 替代性1:Mongo Atlas(托管云Mongodb)
    • 替代2:ferretdb(带有邮政或sqlite)

数据库设置

anchr ' as your database $ > db.createUser({user: ' anchr ', pwd: passwordPrompt(), roles: [{ role: 'dbOwner', db: ' anchr ' }]}); // create user ' anchr ' $ > exit">
$ mongosh
$ > use anchr ;  // choose ' anchr ' as your database
$ > db.createUser({user: ' anchr ' , pwd: passwordPrompt (), roles: [{ role: ' dbOwner ' , db: ' anchr ' }]});  // create user ' anchr '
$ > exit

配置

  1. $ git clone https://gith*u*b.c*om/muety/anchr
  2. .env.example复制到.env并编辑内容以设置环境变量:
    • PORT :启动服务器的TCP端口(默认: 3000
    • LISTEN_ADDR :IPv4地址,使服务器在聆听(默认值: 127.0.0.1 )上
    • anchr _PUBLIC_URL :托管实例的公共基础URL(无尾斜线)(默认: http://localhos*t**:3000
    • anchr _DB_USER :mongodb用户名(默认: anchr
    • anchr _DB_PASSWORD :mongoDB密码(必需
    • anchr _DB_HOST :mongodb主机名(默认: localhost
    • anchr _DB_PORT :MONGODB端口(默认: 27017
    • anchr _DB_NAME :mongoDB数据库名称(默认: anchr
    • anchr _UPLOAD_DIR :通往文件系统目录的绝对路径(必须存在!),以将图像上传到(默认值: /var/data/ anchr
    • anchr _SECRET :a(最好是长),随机字符序列,用于JSON Web令牌(默认: shhh
    • anchr _LOG_PATH :访问日志的绝对文件路径(必须存在目录!)(默认值: /var/log/ anchr /access.log
    • anchr _ERROR_LOG_PATH :错误日志的绝对文件路径(必须存在目录!)(默认: /var/log/ anchr /error.log
    • anchr _GOOGLE_API_KEY :Google API的API键(安全浏览检查输入短链接需要),您可以从开发人员控制台中获得(默认值: '' ,留空白以禁用安全浏览检查)
    • anchr _FB_CLIENT_ID and anchr _FB_SECRET :Facebook登录的oauth凭据(默认值: '' ,留空白以禁用Facebook登录)
    • anchr _GOOGLE_CLIENT_ID and anchr _GOOGLE_SECRET :Google登录的oauth凭据(默认值: '' ,留空白以禁用Google登录)
    • anchr _ALLOW_SIGNUP :是否允许注册新用户(默认: true
    • anchr _VERIFY_USERS :是否要求新用户使用电子邮件链接激活其帐户(需要邮件)(默认: true
    • anchr _BASIC_AUTH :是否允许使用HTTP BASIC AUTH(默认值: true )进行身份验证
    • anchr _EXPOSE_METRICS :是否在公共/api/metrics端点下公开Prometheus指标(默认值: false
    • anchr _MAIL_SENDER : anchr .IO的邮件中的发件人地址(默认: anchr .io
    • anchr _SMTP_HOST :用于发送邮件的SMTP服务器主机(留空邮件)
    • anchr _SMTP_PORT :SMTP服务器端口(默认: 587
    • anchr _SMTP_TLS :是否要与SMTP服务器建立TLS连接(不要与StartTL相混淆)(默认: false
    • anchr _SMTP_USER :SMTP服务器登录用户名
    • anchr _SMTP_PASS :SMTP服务器登录密码
    • anchr _MAILWHALE_URL :将其用于邮件而不是smtp的邮件实例的公共URL(默认: https://mai*lwha*le.*dev ://mailwhale.dev)
    • anchr _MAILWHALE_CLIENT_ID :身份验证的mailwhale客户端ID
    • anchr _MAILWHALE_CLIENT_SECRET :邮件客户端秘密验证
    • anchr _TELEGRAM_BOT_TOKEN :电报机器人令牌(来自@botfather)。空白以禁用电报集成。
    • anchr _TELEGRAM_URL_SECRET :用于安全目的的秘密将电信网hook路径附加到telegram webgram路径。可以是任何随机字符串。

跑步

设置

  1. $ source env.sh
  2. $ corepack enable
  3. $ yarn
  4. $ cd public && ../node_modules/.bin/bower install && cd ..

选项1:本地运行

用于发展
  1. 运行后端$ yarn start
  2. 运行前端$ yarn start:frontend
  3. 访问http:// localhost:9000,享受现场重新加载
在生产中
  1. $ yarn run build (构建前端)
  2. $ yarn run production

选项2:与Docker一起运行

  1. source env.sh
  2. docker-compose up

?电报机器人设置

  1. 使用@botfather创建一个新机器人
  2. configure anchr _TELEGRAM_BOT_TOKENanchr _TELEGRAM_URL_SECRET变量
  3. 配置Webhook:
curl https://api.te*legr**am.org/bot < BOT_TOKEN > /setWebhook ? url=https:// < anchr_URL > /api/telegram/updates/ < URL_SECRET > 

?工具

Sharex(仅Windows)

您可以将anchr与Windows上的sharex集成在一起,并将其用作图像上传短链接的自定义目标。

  1. 生成http Basic auth hash base64 hash of youremail@example.org:yourpassword
    • 选项1(linux): echo "youremail@example.org:yourpassword" | base64
    • 选项2:使用在线工具
  2. 将您新生成的哈希插入
    • sharex-images.json
    • sharex-shortlinks.json
  3. 将两个文件作为Sharex中的自定义上传器导入

?项目历史

该项目的起源在2014年,当时平均堆栈是Sh*t。这是作者的第一个真正的网络项目,也是一个很好的学习机会。但是,从那时起,该项目就一直被视为主要完整的。依赖偶尔会更新。由于该项目始于几年前,因此有些部分仍基于老式的JavaScript ES5语法,以及grunt和Bower等老式工具。当然,这不再是Web开发人员的最新技术。但是,为了与现有代码保持一致,原始代码样式仍应在新的贡献中遵循。更新:就在最近,所有后端侧代码均已重构为现代JavaScript语法以简化开发。

?‍开发人员注意

API测试

npm install -g newman
anchr.postman_collection.json" -e " anchr Environment.postman_environment.json" --env-var "test_password=ssshhhh"">
newman run " anchr .postman_collection.json " 
    -e " anchr Environment.postman_environment.json " 
    --env-var " test_password=ssshhhh "

升级包装

 # Backend
$ yarn plugin import interactive-tools
$ yarn upgrade-interactive

# Frontend
$ cat bower.json | jq   ' .dependencies | keys[] ' -r | xargs npx bower update

?许可证

GNU通用公共许可证V3(GPL-3) @FerdinandMütsch

下载源码

通过命令行克隆项目:

git clone https://github.com/muety/anchr.git