yourls 相关工具和API调用

自己的 yourls 已经搭建完毕 ,重要的就是如何高效的用起来了, yourls 自身提供了很不错的快速访问工具,安装完毕之后直接浏览

https://域名/admin/tools.php

可以得到书签栏中的快速访问工具,直接拖拽到浏览器的地址栏就可以快速的将当前的页面地址缩短。这个工具也就不多介绍了,这篇文章主要摸索一下 yourls 的API调用,以及如何在PC,和移动端快速的使用短链接服务。

API 访问

yourls 提供了丰富的API,使用自身的API可以实现

  • 产生或者获取短链接
  • 获取短链接的统计信息,包括点击最高的链接,最后一次点击的链接,或者新产生的链接等等
  • 可以以 JSON, XML 或者纯文本输出
  • 通过用户名密码或者安全的无密码token机制授权

请求的地址

https://域名/yourls-api.php

通过 GET 或者 POST 请求(GET请求需要URL Encode)

参数

两种方式获得授权,一种是使用 username / password 对发送请求,但是这种方式不安全,可能导致用户名密码在传输过程中被截取泄露;另一种方式是使用不需要密码的 token 机制,在 admin/tools.php 页面会产生当前用户的验证 token。

动作 action 参数有很多个选项

  • shorturl 获取链接的短链接

    在使用了值之后,另外两个参数

      - `url` 用来缩短的原始链接
      - `keyword` 或者 `title` 可选参数,用来自定义短链接
    
  • expand 获取短链接的原始长链接

    将短链接展开

      - `shorturl` 值可以为 `abc` 或者完整的短链接
    
  • url-stats 获取短链接的信息

    短链接的统计信息

      - `shorturl` 值可以为 `abc` 或者完整的短链接
    
  • stats 获取链接的信息

    获取链接的信息

      - `filter` 值可以为 `top`, `bottom`, `rand`, `last`
      - `limit` 返回的数量
    
  • db-stats 获取全局的链接和点击数

输出格式 format 参数用来指定API输出的格式,有如下值

  • jsonp
  • json
  • xml
  • simple

举例

请求缩短链接

curl -X POST \
  https://gtk.pw/yourls-api.php \
  -F signature=xxxxxx \
  -F action=shorturl \
  -F url=https://gtk.pw/readme.html \
  -F format=json

返回结果

因为之前已经请求过,所以报了fail,不过结果依然能够从 shorturl 中拿到

{
    "status": "fail",
    "code": "error:url",
    "url": {
        "keyword": "OStH3",
        "url": "https://gtk.pw/readme.html",
        "title": "YOURLS: Your Own URL Shortener",
        "date": "2018-05-18 03:27:36",
        "ip": "123.123.123.7",
        "clicks": "0"
    },
    "message": "https://gtk.pw/readme.html already exists in database",
    "title": "YOURLS: Your Own URL Shortener",
    "shorturl": "https://gtk.pw/OStH3",
    "statusCode": 200
}

其他几个API同理,返回结果结构稍有差异不过都类似。

iOS 移动平台快速获取短链接

iOS 上可以借助 Workflow 快速实现,主要的步骤

  • Get Clipboard
  • Get URLs from Input
  • URL -> API地址 https://域名/yourls-api.php
  • Get Contents of URL -> 构造参数
  • Get Dictionart Value -> shorturl
  • Copy to Clipboard

然后每一次将链接复制到粘贴板,然后运行该 workflow ,短链接就在 Clipboard 中了。

第二中方法,是直接在浏览器中,在链接前面加上,yourls 的域名,比如

https://blog.einverne.info

加入yourls 的域名是 https://gtk.pw

那么在链接前加上 gtk.pw,yourls 会跳转到 admin 页面并添加该链接

gtk.pw/https://blog.einverne.info

其他平台同理,不过需要登录 admin 略麻烦。


2018-05-18 yourls , url-shorten , api , domain , linux

chevereto 备份及恢复记录

之前安装 Chevereto 时还没有折腾 Docker,后来发现 Docker 安装 实在太方便了,所以现在就将数据迁移到 Docker 中,备份和恢复的方式主要可以参考之前写的文章

备份

对于 Chevereto 这样的程序主要备份的就是数据库和文件,mysql 备份没啥说的,文件也直接打包即可。

恢复

这里主要展开下恢复,一方面在 docker-compose.yml 文件中,我映射列两个 volumes,

volumes:
  - chevereto:/var/www/html/images
  - chevereto_content:/var/www/html/content

这两个文件路径,images 主要存放的是上传的图片,而 content 目录一开始的时候我们并没有加上,导致一些系统的logo还有用户的头像消失了,我对比了下目录中存放的文件,发现 Chevereto 将这些资源文件存放在了 content 目录中,映射出来,然后恢复的时候将之前备份的内容恢复到这两个目录即可。

数据库恢复也比较容易

sudo cat backup.sql | sudo docker exec -i chevereto_db /usr/bin/mysql -u root --password=password chevereto

然后文件恢复时直接恢复到 volumes 的目录,sudo docker volume inspect volume_name 然后查看 volume 的位置,将文件解压到该目录下。

然后 chown www-data:www-data * 来改变权限即可。

这个备份和恢复的操作同理可以应用到任何类似 WordPress,Chevereto 这样的PHP应用上。


2018-05-16 chevereto , photo , backup , docker , docker-compose

HTTP协议学习笔记

HTTP 协议全称 Hyper Text Transfer Protocol 超文本传输协议,基于 TCP/IP 协议用来传递数据。HTTP 面向应用层,HTTP协议是万维网的基石。

HTTP 请求

HTTP请求由以下部分组成

  • 请求行(Request line),用来说明请求类型,要访问的资源以及所使用的HTTP版本
  • 请求头部(Request Headers),紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
  • 空行(Blank line),请求头部后面的空行是必须的
  • 请求数据也叫主体(Request Body),可以添加任意的其他数据。

HTTP请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

  • HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

Request Headers

Referer

Referer 头允许客户端指定请求的URI的源地址,服务端通过检查该头信息可以知道客户端请求的资源的原始来源。

Connection

HTTP 1.1 中请求和应答头都可能出现 Connection ,表示 client 和 server 通信时对于长连接如何处理。

HTTP 响应

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

  • 状态行(Status line),由HTTP协议版本号, 状态码, 状态消息 三部分组成。
  • 消息报头(Response Headers),用来说明客户端要使用的一些附加信息
  • 空行(Blank line),消息报头后面的空行是必须的
  • 响应正文(Response Body),服务器返回给客户端的文本信息。

HTTP 状态码

  • 1xx:指示信息–表示请求已接收,继续处理
  • 2xx:成功–表示请求已被成功接收、理解、接受
  • 3xx:重定向–要完成请求必须进行更进一步的操作
  • 4xx:客户端错误–请求有语法错误或请求无法实现
  • 5xx:服务器端错误–服务器未能实现合法的请求

理解 HTTPS

看到一篇使用信鸽来解释HTTPS的文章,信息量足够,也很生动的解释了非对称加密以及产生的问题和解法。

通过信鸽传递盒子,解释了HTTPS的非对称加密公私钥的问题

  • 鲍勃向爱丽丝送一只没有携带任何信息的鸽子。
  • 爱丽丝给鲍勃送回鸽子,并且这只鸽子带有一个有开着的锁的盒子,爱丽丝保管着锁的钥匙。
  • 鲍勃把信放进盒子中,把锁锁上然后把盒子送给爱丽丝。
  • 爱丽丝收到盒子,用钥匙打开然后阅读信息。

盒子是公钥,而爱丽丝手上的钥匙是私钥

如何信任盒子一节引入泰德这个第三方签名,在HTTPS中是认证机构。而沉重的盒子这一个小节,总结了HTTPS存在的问题,虽然加密的HTTPS要慢,但未来的趋势已经不可避免了。

长连接 VS 短连接

长连接,也叫持久连接,在TCP层握手成功后,不立即断开连接,并在此连接的基础上进行多次消息(包括心跳)交互,直至连接的任意一方(客户端OR服务端)主动断开连接,此过程称为一次完整的长连接。HTTP 1.1 相对于1.0 最重要的新特性就是引入了长连接。

短连接,顾名思义,与长连接的区别就是,客户端收到服务端的响应后,立刻发送FIN消息,主动释放连接。也有服务端主动断连的情况,凡是在一次消息交互(发请求-收响应)之后立刻断开连接的情况都称为短连接。

注:短连接是建立在TCP协议上的,有完整的握手挥手流程,区别于UDP协议。

需要频繁交互的场景使用长连接,如即时通信工具(微信/QQ,QQ也有UDP),相反则使用短连接,比如普通的web网站,只有当浏览器发起请求时才会建立连接,服务器返回相应后,连接立即断开。

维持长连接会有一定的系统开销,用户量少不容易看出系统瓶颈,一旦用户量上去了,就很有可能把服务器资源(内存/CPU/网卡)耗尽,所以使用需谨慎。

301 vs 302

HTTP 协议 redirect 有两个状态码 301 和 302,对于这两个状态码协议上是这么写的

  • 301 Permanently Moved
  • 302 Temporarily Moved

浏览器在处理这两个状态码时行为不一样,对于 Chrome / Firefox 会永久的缓存 301 跳转1,浏览器会尽可能的永久保存该跳转,除非手动清除浏览器缓存,或者浏览器缓存将满为新内容腾出空间。如果不想跳转被浏览器缓存,可以使用 Cache-ControlExpires 两个头。

  • Cache-Control: max-age=3600
  • Expires: Thu, 01 Dec 2014 16:00:00 GMT
  • Cache-Control: no-cache
  • Cache-Control: no-store

关于Chrome中如何清除永久的301跳转可以参考这篇文章

reference

  • wikipedia
  1. https://stackoverflow.com/a/21396547/1820217 


2018-05-15 http , web , tcp-ip

使用 flask migrate 来迁移数据结构

最近在学习使用 Flask 生成一个短链接服务时看到了 Flask-Migrate 这样一款插件,之前学习 Django 的时候自带数据库迁移工具, Flask 中也有这样一款,不过是以插件的形式出现,Flask Migrate 基于 Alembic,Alembic 是 SQLAlchemy 作者开发的数据迁移工具。

文档主页:https://flask-migrate.readthedocs.io/en/latest/

安装

pip install Flask-Migrate

在安装完成之后需要在代码中添加如下代码

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'

db = SQLAlchemy(app)
migrate = Migrate(app, db)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))

在添加代码之后需要运行

flask db init

来初始化项目,命令运行之后会在项目中生成 migrations 文件夹,该文件夹需要添加到版本控制。

之后可以使用 migrate 命令来初始化迁移

flask db migrate

迁移脚本不会检测models 的所有变更, Alembic 目前无法检测表名修改,列名修改,其他限制可以在Alembic网站查看。

之后可以应用该迁移

flask db upgrade

运行该命令来将修改应用到数据库,以后对model的每一次修改需要重复 migrateupgrade 命令。如果要在不同机器之间同步数据库结构,只需要同步 migrations 文件夹,并且在另一台机器上运行 flask db upgrade 即可。

Flask Migrate 也支持直接使用脚本的方式运行,具体可参考官方的文档,非常易懂。


2018-05-14 flask , sql , migrate , sqlalchemy , alembic

在屏幕上显示敲击的键盘 screencast

之前在做一次 Vim 演示的时候想要更加直观的在屏幕上实时显示出当前敲击的字母,所以找到了 screencast 这个解决方法。

安装

GitHub发布页面 下载安装包

wget "https://github.com/wavexx/screenkey/archive/screenkey-0.9.tar.gz"
tar xvf screenkey-0.9.tar.gz
# 安装依赖
sudo apt-get install python-gtk2 python-setuptools python-setuptools-git python-distutils-extra

然后执行安装

sudo ./setup.py install

然后启动

screenkey

使用

然后可以设置各种参数,延迟时间,字体,大小,颜色,透明度等等

reference


2018-05-13 screencast , keyboard , linux

自驾游必备 App

今年五一开车 2000 多公里,一路上找景点,找路线,找美食,这里记录一些比较好用的 App,当然在记录这写应用的时候,又发现了其他人推荐的应用,虽然之前并没有用上,但可以做一个备份期望可以用上。

PS 部分免责声明,PS 部分我并没有深入的用过,但是口碑还不错。

去哪里

这个问题早已经应该在心中确定,但如果没有确定,可以浏览马蜂窝 站点,一来对目的地有一个基本的了解,二来可以留心目的地的路况等等。虽然市场上游记类网站和应用也是泛滥的,但是马蜂窝确实多少年来一直兢兢业业专攻旅行的网站。写到这里不免想起,一直萦绕在我脑海里面的一个疑问,其实做内容的网站很容易转型做“工具”,比如马蜂窝就可以很轻松的售卖旅行产品,包括机票火车票,住宿等等,反而携程,去哪儿这一类“工具”类网站要转型做“内容”就要难很多。虽然携程也有游记,但终究只是为买票而生的辅助。

PS. 穷游锦囊,有个叫浪浪的,常有人推荐

选好车

说到选车,我只能推荐神州租车了,其他租车行并没有接触过,所以也不好推荐。而针对性的选择一辆舒适的车就成了关键,因为可能需要长时间在车上度过,选择一辆空间大,舒适的 SUV 就比较好。而如果目的地都是平原,可以选择轻便的小汽车

PS. 并没有使用过的租租车

制定路线

推荐 Google My Maps,使用 Google My Maps 可以快速制定一条大致路线,可以从宏观上对整个路线有个了解。

google my map plan

当然还要推荐另外一个很好用的工具 Trello,然后可以制作出如下的计划

trello plan

当然真正出行的时候,少不了导航应用,Google Map 看卫星图,高德导航

google map satellite

天气

国内墨迹,国外雅虎天气

找美食

大众点评,必不可少。在不熟悉的地方,选择一个品类,往往评价不错的菜肴是不会有什么差错的。

PS. 国外似乎有这俩 Yelp 和 Trip advisor,还有预订位置的 Open Table

住宿

强推 Airbnb,虽然很久前注册过 Airbnb 但是一直没怎么使用过,然而突然发现这么好用,每一个房子主人都很友好,房子也都非常新,房子里面各种设置都很不错。但是 Airbnb 可能有一个不好的地方,就是可能有些地方并没有那么多的选择,这个时候就需要携程,马蜂窝等等有旅馆预定的应用了。

airbnb

如果不嫌弃你可以点击我的邀请链接:https://zh.airbnb.com/c/einv 注册成功后你会得到 175 的优惠券。

PS. Booking 也是个好网站。

其他

绝大部分情况下停车并没有太大问题,可是如果真的到了城市环境,有一个 ETCP 还是需要的。

当然以上大部分只能局限于国内自驾的大部分情况,国外去如果要租车,可能还需要准备驾照翻译件或者国际驾照,不同国家的国情可能都需要调整。


2018-05-11 driving , tour , travel , app , collection

关于抖音的一点想法

去年年底装上了头条系全系列产品包括新闻,抖音,火山小视频,而半年多过去了,最后留下来的只有抖音。而之前不久也刚刚看到新闻报道抖音日活已经超 1.5 亿了。所以想整理下自己的看法。

以产品划分用户

全年年底的时候看过一篇文章,其核心思想就是 “头条以产品划分用户群”,虽然并不知道这是不是头条内部有意而为之或者就是产品定位的问题,确实头条内部关于视频的应用报的上名字的就有仨,火山,西瓜,抖音。这三个应用却各有特点,虽然我并没有很深入的使用,但也能快速的感觉到他们的差别,抖音明显要更年轻化,年龄 10+,20+ 主打的产品,而火山则是主打 ugc,各种内容都有,质量参差不齐,西瓜视频,后来者,却继承了头条视频的大量的积淀。而着三款应用能很明显的区分出一部分用户群,如果按照现在 2017 年底的时间来看,明显子女一代用抖音,父母一代更加偏向用火山和西瓜,这是天然的划分。如果要以地域划分,明显大城市是抖音的用户群,而中小城市就是西瓜的天下。

虽然我对这样的产品划分理念并不是那么的“理解”,但确确实实现在移动互联网的发展就是那样的一个趋势,这或许也是有了 Facebook 也还有 Instagram 和 Snapchat 的原因,当随着年龄的变化,一个平台的用户逐渐增多,下一个年龄层的用户自然的就去寻找代替品,或许是为了潮流,或者只是为了凸显不同。就像厌倦了 QQ,逃到了 Wechat,厌倦了 Wechat 的一代,或许又逃回了 QQ。

为什么抖音会火

很多人说拍抖音简单,但我想很多说这个话的人应该没怎么自己拍过。抖音的短视频看起来简单,那是因为他的难度系数正好介于普通用户和专业自媒体拍摄难度系数的中间,抖音大量的视频都只需要用一部手机就能拍摄出来,但是仔细看这短短的十几秒,里面可能包含十几个场景,包括大量的剪辑,而曾经这些剪辑手法我都只在 YouTube 等等平台的长视频或者电影片段中才能看到;另外一点很多人说抖音的成功是将视频引入音乐,可是这难道不是常识吗,电影电视剧 OST,或者 YouTube 去搜一下会看到很多教你如何给视频选择 BGM 的教程,而抖音成功的是让音乐成为了用户拍摄视频的入口,创作相同主题的短视频,一来带动了 BGM 的流行,二来将用户的视频天然的进行了分类。

基于这一点认识,我之前曾经和朋友聊天聊起,抖音流行的歌甚至可能改写音乐的发行历史,如果歌手的歌拿来在抖音发行,或许比拿去发专辑,或者拿去音乐平台要流传更广,毕竟好的音乐只有被人知道,歌才有他的价值,中国目前最缺乏的就是一个有效的渠道让有价值的内容让人知道,抖音或者头条的出现正是弥补了这一空缺。或许有人要说以前也出现过优酷土豆还有 bilibili 等等的网站,还有门户网站推出的新闻客户端为什么无法做到,其实道理很简单,对于优酷等等他们太慢以至于跟不上快速发展的移动互联网,而且对于长视频其实无形中过滤了很大一批的入门却能制作出很有趣内容的作者。而门户网站往往都是自上而下的内容输出,很多用户其实并不关心那些国家大事,而更关心和我们一样的普通人,并且门户网站的写作者和庞大的互联网用户贡献的内容来看几乎就是沧海一粟,Web2.0 带来的就是源源不断的内容输出。

关于运营

不可否认的一点就是运营在产品中的重要地位,抖音这样一款产品我相信以任何一家大公司的实力就能够在几个月的时间内轻松的复制,但是大家都做不到抖音的一点就是大家仅仅认为抄袭一个同样的产品就能够刮分一片市场,这个想法是多么的天真。虽然我也并没有那么关注抖音产品的发展历史,但是作为一个普通用户能够感受到抖音玩法的变化,这无疑是有引导性质的,抛出一个亮点,大家跟风也好,抛砖引玉也好,对任何一个内容型产品都是帮助。而现在大部分场内的玩家能够复制他的系统却抓不到他们的精神内核。

抖音这样一个产品的出现是好是坏?很多人都在想这个问题,其实完全不需要担心,你说他消耗时间也好,让人沉迷也好,如果它能够在流行文化中烙下自己的印记就已经是他产品的胜利。至于他所带来的话题效应,好坏,留待后人判别吧。


2018-05-10 youtube , toutiao , 抖音 , 头条 , 短视频

青海游记思绪整理

7 天的旅程已经结束,更加准确的说应该是完整的 6 天,还有一天时间在路上。这一次经历很多第一次,第一次使用 Trello 规划出行,第一次长时间驾驶超过 2000 公里,第一次使用 Airbnb 来计划住宿,第一次上 3000 多米的高原,这许许多多的第一次让我感受了很多也收获了很多。

旅途遥远记得欣赏沿途的风景

大环线的路程相较于短短 6 天,时间非常赶,但是尤其是从大柴旦到敦煌,以及从张掖到西宁的路上,会路过无数的山脉和平原,别那么赶,看看两边风景。在很大一段时间内,你会看到两边延伸到天边的大漠,以及面前一直通向天边的公路,还有远处层叠的群山。当我们从张掖沿着 G227 穿过祁连山的时候,山上的积雪还没有化尽,从远处看云雾缭绕,太壮观了。

提前计划好住宿

如果说对行程有什么遗憾的话,那么就是没有提前预定好住宿,虽然其实并没有那么的失望,但是如果提前制定好落脚点,那么行程会完美很多。这一次的行程让我爱上了 Airbnb ,虽然很早就已经注册,却一直呆在无数的应用中没有体现出他的价值,我可以说这是我使用至今体验最好的应用了,不管是界面友好程度,还是下单预定,或是之后联系房东,没有人我这个第一次使用的他的人感受到一点点阻碍,而且在绝大部分情况下过滤结果的前几个都是能够满足我的要求的,正因为时间赶,所以预定也很赶,但是却都超出意外,尤其是在西宁和敦煌,家中设施齐全,更甚至敦煌的房东也给我们准备了葡萄干、杏仁干等等特色干果,我最关心的电视也是资源充足。且不说住宿条件,虽然也预订到了一些不那么满意的房子,但是 Airbnb 总体给我的感觉都还是不错的。

Trello

使用 Trello 的时间并没有那么的长,但却一点一点慢慢地适应了 Trello 并且喜欢上了 Trello 独特的设计。“看板” 的概念接触没多久,甚至之前一直拿他当做 todo list,但现在我是知道我小看了这个概念,看板可以让很多工作得到有效的管理,甚至可以提前规划,他提供的图片,附件,checklist 等等功能可以让计划有条不紊的执行,并且界面非常美观。

trello

雅丹和丹霞的区别

过去西北最多被提及的就是这两个容易弄混的名词。

雅丹地貌,或者称为风蚀脊(Yardang)是典型的风蚀性地貌。“雅丹”在维吾尔语中的意思是“具有陡壁的小山包”。由于风的磨蚀作用,小山包的下部往往遭受较强的剥蚀作用,并逐渐形成向里凹的形态。如果小山包上部的岩层比较松散,在重力作用下就容易垮塌形成陡壁,形成雅丹地貌,有些地貌外观如同古城堡,俗称魔鬼城。

丹霞地貌的定义为“有陡崖的陆上红层地貌”,形成丹霞地貌的是一种沉积在内陆盆地的红色岩层,这种岩层在千百万年的地质变化过程中,被水切割侵蚀,形成了红色山块群。

张掖丹霞因其与众不同的岩石色彩而举世闻名。这些岩石光滑而险峻,高数百米,是砂岩和其他矿物经过 2400 万年的沉淀堆积而成。


2018-05-06 travel , trip , plan , trello , qinghai , thinking

BitTorrent 客户端简单比较

横向比较一下 BitTorrent 客户端。

Transmission

开源地址:

特性:

  • 占用资源少
  • 跨平台支持
  • Daemon 守护进程方便在服务器,嵌入式系统,Headless(无 GUI) 运行
  • 可以通过 Web 或者终端来进行控制
  • Local peer discovery
  • Full encryption, DHT, µTP, PEX and Magnet Link support 1

Tranmission 在日常中使用完全没有问题,不过唯一的不足就是 Transmission 是无法制作 torrent 的。

Transmission 的扩展,包括 Android 开源的 Remote control Transdroid, RSS Tool FlexGet 等等。2

Docker

docker create \
  --name=transmission \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/London \
  -e TRANSMISSION_WEB_HOME=/combustion-release/ `#optional` \
  -e USER=username `#optional` \
  -e PASS=password `#optional` \
  -p 9091:9091 \
  -p 51413:51413 \
  -p 51413:51413/udp \
  -v path to data:/config \
  -v path to downloads:/downloads \
  -v path to watch folder:/watch \
  --restart unless-stopped \
  linuxserver/transmission

更多参考这里

rTorrent

rTorrent 是一个用 C++ 编写的纯文本 BitTorrent 客户端。rTorrent 适合在 Tmux, screen, dtach 中使用,配和 ruTorrent 作为 GUI。

Docker

docker create \
  --name=rutorrent \
  -e PUID=1000 \
  -e PGID=1000 \
  -p 80:80 \
  -p 5000:5000 \
  -p 51413:51413 \
  -p 6881:6881/udp \
  -v /path/to/rutorrent/config:/config \
  -v /path/to/rutorrent/downloads:/downloads \
  --restart unless-stopped \
  linuxserver/rutorrent

更多参考这里

ruTorrent

ruTorrent 是一款 PHP 写的 rTorrent 的 Web UI

Flood

Flood 是 rTorrent 的一个 UI 界面,用 Node.js 实现。

qBitTorrent

官网:

特性:

  • 开源,跨平台
  • RSS feed
  • magnet links, DHT, PEX, LSD

Docker

docker create \
  --name=qbittorrent \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/London \
  -e UMASK_SET=022 \
  -e WEBUI_PORT=8080 \
  -p 6881:6881 \
  -p 6881:6881/udp \
  -p 8080:8080 \
  -v /path/to/appdata/config:/config \
  -v /path/to/downloads:/downloads \
  --restart unless-stopped \
  linuxserver/qbittorrent

更多参考这里

Deluge

官网:

Deluge 比较优秀的一点是支持 Plugin,官网上有非常丰富的插件可供选择。

Docker

docker create \
  --name=deluge \
  --net=host \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=timezone \
  -e UMASK_SET=022 `#optional` \
  -e DELUGE_LOGLEVEL=error `#optional` \
  -v /path/to/deluge/config:/config \
  -v /path/to/your/downloads:/downloads \
  --restart unless-stopped \
  linuxserver/deluge

更多参考这里

uTorrent

支持平台:Windows, macOS, Android。

不支持 Linux, 不开源,就不说了。

VUZE

看到有推荐,支持三大主流桌面平台。


2018-04-24 bittorrent , transmission , linux , docker

VPS 安全保护:使用 fail2ban 防止暴力破解

之前的文章里面也总结过一些 fail2ban 的简单使用,这里就扩展开来,把一些常见的使用方式记录一下,以便后面回顾。

今天想起这件事情主要是看到日志发现新建的服务(非标准端口)也有人不断的扫描,尝试登录,虽然已经设置过 SSH,nginx 端口的 fail2ban,但是没有考虑到所有的服务端口。

Installation

sudo apt install fail2ban

Configurarion

fail2ban 的主要配置都集中在 /etc/fail2ban/ 目录下

  • fail2ban.conf 主要是 fail2ban 自身的配置,包括日志级别,日志存储位置,PID 等
  • jail.conf 是配置 fail2ban 功能配置

fail2ban 的功能可以分散在不同的文件中进行管理,配置优先顺序是:

  • jail.conf
  • jail.d/*.conf
  • jail.local
  • jail.d/*.local

jail.local 中配置

[ssh]
enabled  = true
port     = ssh, 10022
filter   = sshd
logpath = /var/log/auth.log
maxretry = 5

修改配置后可以使用如下方法来重新加载配置:

fail2ban-client reload

N 次尝试后永久禁止 IP

用上面的方法配置 ssh 后查看 Nginx access 日志还依然有非常多的 IP 再不停的扫描,所以想办法如果能把 fail2ban 的日志过滤出来然后再给 fail2ban 就可以把 fail2ban 中发现的 IP 再 block 掉。

参考该链接 中内容新增 filter,然后配置:

[fail2ban]
enabled = true
filter = fail2ban
action = iptables-allports[name=fail2ban]
logpath = /var/log/fail2ban.log
# findtime: 1 day
findtime = 86400
# bantime: 1 year
bantime = 31536000

解决方法来自 stackoverflow

fail2ban-client

查看状态:

fail2ban-client status

分析

测试筛选规则设否匹配当前的日志格式 auth.log

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

查看生效

用 iptables 来查看:

sudo iptables -L -v -n

2018-04-23 linux , fail2ban , security , sshd , password

电子书

最近文章

  • 使用命令行远程网络唤起主机 在 Linux 下可以通过 etherwake 命令来网络唤醒设备。
  • Cloud-init 初始化虚拟机配置 在安装 Proxmox 后在它的文档中了解到了 cloud-init。所以就来梳理一下。
  • BitTorrent 协议中的 BenCode 编码 在了解 BitTorrent 协议的时候,想着 .torrent 文件是如何生成的,所以就找了几个 CLI,比如 transmission-cli 和 mktorrent这两个开源的制作 torrent 文件的开源项目,发现他们就是按照一种约定的格式来生成文件。而这个约定的结构中就少不了现在要谈的 BenCode 编码。
  • Proxmox 设定直通硬盘 之前的文章讲了 Proxmox 的安装,以及在此基础上又安装了 OpenMediaVault,现在我的机器上一共三块硬盘,120 G SSD 安装了系统,并作为默认的 lvm,放一些 ISO,以及存放一些系统盘,另外的 1T 准备做 Proxmox 相关的数据盘,而剩下的一块 4T 盘想要直通给 OpenMediaVault 做数据盘。所以就产生了这样的一个需求。
  • OpenMediaVault 设置 OpenMediaVault,是一个开源的基于 Debian Linux 的下一代网络附加存储 (NAS) 解决方案。