月度归档: 2020 年 1 月

  • FRPS与FRPC常用参数详解

    FRPS服务端配置文件解析

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    [common]
    #服务端监听地址和端口,该端口是和客户端通信的端口,底层通信端口,tcp
    #bind_addr为0.0.0.0含义就是服务端服务器上的所有IP都可以监听外部连接请求
    #如果需要配置单个就将服务器的某一个公网IP写在bind_addr
    bind_addr = 0.0.0.0
    bind_port = 7000
    
    #可以使用nat打洞,进行点对点的连接,这时候数据通信不仅过frp服务端
    bind_udp_port = 7001
    
    #可以使用底层通信端口为kcp
    kcp_bind_port = 7000
    
    #考虑到这个场景:内网的的数据库是个备库,frps这边要把本地的数据库备份到内网机器上,在此使用proxy_bind_addr = 127.0.0.1 就可以达到这个效果,还很安全
    proxy_bind_addr = 127.0.0.1
    
    #域名访问内网的web服务,需要将域名解析到服务器,A记录或者CNAME记录
    vhost_http_port = 80
    vhost_https_port = 443
    
    #http相应超时,默认60s
    vhost_http_timeout = 60
    
    #frpweb统计界面
    dashboard_addr = 0.0.0.0
    dashboard_port = 7500
    
    #web统计界面认证信息
    dashboard_user = admin
    dashboard_pwd = admin
    
    #frp服务端日志文件
    log_file = ./frps.log
    
    #日志等级 trace, debug, info, warn, error
    log_level = info
    
    #日志保留天数
    log_max_days = 3
    
    #frp服务端和客户端通过bind_port端口进行认证的token,服务端和客户端都要一直
    token = 12345678
    
    #服务器上可以用映射的端口
    allow_ports = 2000-3000,3001,3003,4000-50000
    
    
    #默认情况下:当用户请求建立连接后,frps 才会请求 frpc 主动与后端服务建立一个连接 
    #如果由大量短连接的情况呢,是不是很和耗时?因此,该字段会在和frp客户端连接后,主动建立max_pool_count个连接,当有用户来访问业务的是时候就会从该连接池内取出连接来用,使用于大量短连接的情况
    max_pool_count = 5
    
    #限制frpc使用服务端端口的数量。0为不限制
    max_ports_per_client = 0
    
    #该功能需要泛解析,即把*.frps.com A记录到frps在的服务器上,然后frpc就可以只配置subdomain = test 就可以使用 test.frps.com来使用,多人使用很方便
    subdomain_host = frps.com
    
    #启动tcp多路复用
    tcp_mux = true

    frpc客户端

    配置解析common字段

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    [common]
    #和frps底层通信的信息,和bind_addr = 0.0.0.0 bind_port = 7000 保持一致
    server_addr = 0.0.0.0
    server_port = 7000
    
    #frpc通过代理去连接frps。http或socks5代理方式
    #http_proxy = http://user:[email protected]:8080
    http_proxy = socks5://user:passwd@192.168.1.128:1080
    
    #日志文件
    log_file = ./frpc.log
    
    #日志等级 trace, debug, info, warn, error
    log_level = info
    
    #日志最大保留天数
    log_max_days = 3
    
    #和frps底层通信认证token和frps一致
    token = 12345678
    
    #热加载frpc配置使用 frpc reload -c ./frpc.ini
    admin_addr = 127.0.0.1
    admin_port = 7400
    admin_user = admin
    admin_pwd = admin
    
    #和frps刚开始通信时建立的连接数量
    pool_count = 5
    
    #开启tcp多路复用 和frps一致
    tcp_mux = true
    
    #加入frpc标识,下面的模块使用 如 your_name.ssh
    user = your_name
    
    #frpc和frps登陆失败后是否继续持续登陆
    login_fail_exit = true
    
    #和frps通信的底层协议 tcp kcp websocket,  默认是 tcp
    protocol = tcp
    
    #frpc使用的dns服务器
    # dns_server = 8.8.8.8
    
    #frpc中启动的代理模块,模式都启动
    # start = ssh,dns
    
    #ssh代理模块
    [ssh]
    ...
    ...
    
    #dns代理模块
    [dns]
    ...
    ...

    代理模块配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    #代理模块名称,可以存在多个代理模块
    [ssh]
    
    #代理模块类型
    #支持 tcp | udp | http | https | stcp | xtcp, 默认是is tcp
    type = tcp
    
    #客户端本地多要代理的地址和端口
    local_ip = 127.0.0.1
    local_port = 22
    
    #对本地unix监听
    #添加插件
    plugin = unix_domain_socket
    #sock位置
    plugin_unix_path = /var/run/docker.sock
    
    #底层通信中是否加密 默认不加密
    use_encryption = false
    #底层通信信息是否压缩
    use_compression = false
    
    #映射到frps上的远程端口,0为随机端口,由frps来指配
    remote_port = 6001
    
    #端口组映射,需要添加“range:”前缀 tcp udp都可以
    [range:abc]
    local_port = 6010-6020,6022,6024-6028
    remote_port = 6010-6020,6022,6024-6028
    
    #frpc的负载均衡,就是说一个frps映射多个frpc本地端口,
    [test1]
    type = tcp
    local_port = 8080
    #remote_port要一致
    remote_port = 80
    #group group_key 要一致
    group = web
    group_key = 123
    [test2]
    type = tcp
    local_port = 8081
    #remote_port要一致
    remote_port = 80
    #group group_key 要一致
    group = web
    group_key = 123
    
    #frpc健康检查
    #支持tcp和http
    health_check_type = tcp
    #连接本地端口服务超时
    health_check_timeout_s = 3
    #失败多少次就剔除该代理本地端口
    health_check_max_failed = 3
    #检查频率
    health_check_interval_s = 10
    
    
    
    #http基本配置
    [web01]
    type = http
    local_ip = 127.0.0.1
    local_port = 80
    
    #加入http认证
    http_user = admin
    http_pwd = admin
    
    #泛解析使用
    subdomain = web01
    #单个域名使用
    custom_domains = web02.yourdomain.com
    
    #web02.yourdomain.com/pic 到这个服务
    locations = /pic,/abc
    #修改请求头,web02.yourdomain.com会在访问本地网络的时候修改为example.com
    host_header_rewrite = example.com
    #header_开头后面的东东会添加到http请求头中
    header_X-From-Where = frp
    
    #http健康检查
    health_check_type = http
    #请求健康检查的位置
    health_check_url = /status
    health_check_interval_s = 10
    health_check_max_failed = 3
    health_check_timeout_s = 3
    
    #frpc做反向代理,也就是说外网的机器可以连接代理,然后去访问内网的东东
    [plugin_http_proxy]
    type = tcp
    remote_port = 6004
    plugin = http_proxy
    #代理到本地认证
    plugin_http_user = abc
    plugin_http_passwd = abc
    #反向代理还可以是sock方式
    [plugin_socks5]
    type = tcp
    remote_port = 6005
    plugin = socks5
    #代理到本地认证
    plugin_user = abc
    plugin_passwd = abc
    
    
    #创建一个frpc的文件访问服务
    [plugin_static_file]
    type = tcp
    remote_port = 6006
    plugin = static_file
    plugin_local_path = /var/www/blog
    #前缀http://x.x.x.x:6000/static/
    plugin_strip_prefix = static
    #http基本认证
    plugin_http_user = abc
    plugin_http_passwd = abc
    
    
    #stcp可以让自定的人去访问我们所暴露的网络服务,前提是访问我们服务的人也要运行一个frpc服务
    #我们的配置
    [secret_sshaaa]
    type = stcp
    # 只有 sk 一致的用户才能访问到此服务
    sk = abcdefg
    local_ip = 127.0.0.1
    local_port = 22
    
    #另一个可以访问我们服务的货的配置
    [secret_ssh_visitor]
    type = stcp
    # stcp 的访问者
    role = visitor
    # 要访问的 stcp 代理的名字,没有端口标识,使用代理模块名称来标识
    server_name = secret_sshaaa
    sk = abcdefg
    # 绑定本地端口用于访问 ssh 服务,即目的端口是6000
    bind_addr = 127.0.0.1
    bind_port = 6000
    
    
    #nat打洞 请注意 一些nat类型不可以被打洞,frps充当STUN
    #类似于stcp,只是流量不经过frps,是单方向上的打洞
    #我们配置
    # frpc.ini
    [p2p_ssh]
    type = xtcp
    # 只有 sk 一致的用户才能访问到此服务
    sk = abcdefg
    local_ip = 127.0.0.1
    local_port = 22
    
    #另一个想访问p2p_ssh服务的货的配
    [p2p_ssh_visitor]
    type = xtcp
    # xtcp 的访问者
    role = visitor
    # 要访问的 xtcp 代理的名字
    server_name = p2p_ssh
    sk = abcdefg
    # 绑定本地端口用于访问 ssh 服务
    bind_addr = 127.0.0.1
    bind_port = 6000
    
    #stcp和xtcp都是将端口绑定到访问者的本地,而不是远程,通过访问本地端口来访问另一边的服务
    #因此这样很安全,因为公网上的其他人并无法访问
    ssh -oPort=6000 [email protected]

    命令行使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    frps \
        --bind_addr 0.0.0.0 \
        --bind_port 1989 \
        --dashboard_addr 0.0.0.0 \
        --dashboard_port 1990 \
        --dashboard_pwd stest \
        --dashboard_user admin \
        --token stest
    
    ./frpc tcp \
        --local_port 22 \
        --proxy_name kylin \
        --server_addr xxx.xx.xx.xx:1989 \
        --remote_port 1991 \
        --token stest \
        --uc \
        --ue

    来源:

    https://www.li-rui.top/2019/02/20/toos_and_service/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8Ffrp%E9%85%8D%E7%BD%AE%E8%AF%A6%E8%A7%A3/

    https://www.chuantou.org/49.html

  • Docker 空间使用分析与清理

    用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引发宿主机异常,进而对业务造成影响。 本文先对 Docker 的空间分析与清理进行说明,然后对容器的磁盘容量限制与使用建议做简要说明。

    典型问题场景

    用户发现 Docker 宿主机的磁盘空间使用率非常高。通过 du 逐层分析,发现是 Volume 或 overlay2 等目录占用了过高空间。示例如下:

    # 根据使用的存储驱动的不同,相应目录会有所不同:
    [root@node3 docker]# du -h --max-depth=1 |sort
    104K    ./network
    13M    ./image
    20K    ./plugins
    24G    ./overlay2   # 这个目录占用了非常高的磁盘磁盘空间
    25G    .
    283M    ./volumes
    4.0K    ./swarm
    4.0K    ./tmp
    4.0K    ./trust
    518M    ./containers

    空间使用分析

    遇到此类问题,可以参阅如下步骤进行空间分析,定位占用过高空间的业务来源。

    分析 Docker 空间分布

    Docker 的内置 CLI 指令 docker system df ,可用于查询镜像(Images)、容器(Containers)和本地卷(Local Volumes)等空间使用大户的空间占用情况。 示例输出如下:

    [root@node3 docker]# docker system df
    TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
    Images              17                  12                  2.713 GB            1.144 GB (42%)
    Containers          15                  12                  10.75 GB            0 B (0%)
    Local Volumes       8                   4                   282.9 MB            241.8 MB (85%)

    查看空间占用细节

    可以进一步通过 -v 参数查看空间占用细节,以确定具体是哪个镜像、容器或本地卷占用了过高空间。示例输出如下:

    [root@node3 docker]# docker system df -v
    # 镜像的空间使用情况
    Images space usage:
    
    REPOSITORY                                                   TAG                 IMAGE ID            CREATED             SIZE                SHARED SIZE         UNIQUE SIZE         CONTAINERS
    busybox                                                      latest              6ad733544a63        5 days ago          1.129 MB            0 B                 1.129 MB            1
    nginx                                                        latest              b8efb18f159b        3 months ago        107.5 MB            107.5 MB            0 B                 4
    ubuntu                                                       latest              14f60031763d        3 months ago        119.5 MB            0 B                 119.5 MB            0
    alpine                                                       3.3                 606fed0878ec        4 months ago        4.809 MB            0 B                 4.809 MB            0
    tutum/curl                                                   latest              01176385d84a        3 years ago         224.4 MB            0 B                 224.4 MB            1
    
    # 容器的空间使用情况
    Containers space usage:
    
    CONTAINER ID        IMAGE                                                                    COMMAND                  LOCAL VOLUMES       SIZE                CREATED             STATUS                     NAMES
    d1da451ceeab        busybox                                                                  "ping 127.0.0.1"         0                   10.7 GB             About an hour ago   Up About an hour           dstest
    956ae1d241e8        nginx:latest                                                             "nginx -g 'daemon ..."   0                   26 B                3 months ago        Up 3 months                localTest_restserver_2
    74973d237a06        nginx:latest                                                             "nginx -g 'daemon ..."   0                   2 B                 3 months ago        Up 3 months                
    
    # 本地卷的空间使用情况
    Local Volumes space usage:
    
    VOLUME NAME                                                        LINKS               SIZE
    83ba8747f4172a3c02a15f85b71e1565affca59f01352b4a94e0d28e65c26d1c   0                   830 B
    a479c303b278f1442f66644f694a554aac630e72b7a27065a11ef85c4d87b648   0                   22.16 MB
    79a25b6376e0d6587d8f4f24e08f9467981f04daad14bf3353a12d727d065503   1                   18.83 MB
    

    空间清理

    自动清理

    可以通过 Docker 内置的 CLI 指令 docker system prune 来进行自动空间清理。

    Tips 

    不同状态的镜像

    • 已使用镜像(used image): 指所有已被容器(包括已停止的)关联的镜像。即 docker ps -a 看到的所有容器使用的镜像。
    • 未引用镜像(unreferenced image):没有被分配或使用在容器中的镜像,但它有 Tag 信息。
    • 悬空镜像(dangling image):未配置任何 Tag (也就无法被引用)的镜像,所以悬空。这通常是由于镜像 build 的时候没有指定 -t 参数配置 Tag 导致的。比如:
    REPOSITORY                                                   TAG                 IMAGE ID            CREATED             SIZE
    <none>                                                      <none>              6ad733544a63        5 days ago          1.13 MB   # 悬空镜像(dangling image)

    挂起的卷(dangling Volume)
    类似的,dangling=true 的 Volume 表示没有被任何容器引用的卷。

    docker system prune 自动清理说明

    • 该指令默认会清除所有如下资源:
      • 已停止的容器(container)
      • 未被任何容器所使用的卷(volume)
      • 未被任何容器所关联的网络(network)
      • 所有悬空镜像(image)。
    • 该指令默认只会清除悬空镜像,未被使用的镜像不会被删除。
    • 添加 -a 或 --all 参数后,可以一并清除所有未使用的镜像和悬空镜像。
    • 可以添加 -f 或 --force 参数用以忽略相关告警确认信息。
    • 指令结尾处会显示总计清理释放的空间大小。

    操作示例:

    [root@node3 docker]# docker system prune --help
    
    Usage:    docker system prune [OPTIONS]
    
    Remove unused data
    
    Options:
      -a, --all     Remove all unused images not just dangling ones
      -f, --force   Do not prompt for confirmation
          --help    Print usage
    [root@node3 docker]# docker system prune -a
    WARNING! This will remove:
        - all stopped containers
        - all volumes not used by at least one container
        - all networks not used by at least one container
        - all images without at least one container associated to them
    Are you sure you want to continue? [y/N] y
    Deleted Containers:
    c09c31c49491ee7f2324160e43947917940221b4e6cc1274906def640a7a631f
    2aa0180e1a0f4c2c64349a6ed969651052373e7a9471050dce9015701cf1b957
    6d18003b06823c5d76d807a319387b06680fc93d0a32bc29c1cea4c07e8d515d
    
    Deleted Volumes:
    a479c303b278f1442f66644f694a554aac630e72b7a27065a11ef85c4d87b648
    79a25b6376e0d6587d8f4f24e08f9467981f04daad14bf3353a12d727d065503
    
    Deleted Images:
    untagged: tutum/curl:latest
    untagged: tutum/curl@sha256:b6f16e88387acd4e6326176b212b3dae63f5b2134e69560d0b0673cfb0fb976f
    deleted: sha256:01176385d84aeb1d40ed18c6d3f952abf40d2d2b4aa98fcf0a8a4b01010fb9a9
    deleted: sha256:c84f85637212412c1d46d1dd50f789df2c3b44678ee3fee6a820888e734f9b5a
    untagged: test:lastest
    deleted: sha256:794ff09332586a091514eb3d1c44990244e57e34adc71d4b4334c0674a1377e9
    deleted: sha256:636a1e7769d2242556243e9a21fb96bb878ab5b94c41ff485667252c968b375e
    
    Total reclaimed space: 1.565 GB

    手工清理

    网络清理

    网络配置通常占用的空间非常低,略过。

    镜像清理

    如果通过 docker system df 分析,是镜像占用了过高空间。则可以根据业务情况,评估相关镜像的使用情况。对于悬空和未使用的镜像, 可以使用如下指令手工清理:

    # 删除所有悬空镜像,但不会删除未使用镜像:
    docker rmi $(docker images -f "dangling=true" -q)
    
    # 删除所有未使用镜像和悬空镜像。
    # 【说明】:轮询到还在被使用的镜像时,会有类似"image is being used by xxx container"的告警信息,所以相关镜像不会被删除,忽略即可。
    docker rmi $(docker images-q)

    卷清理

    如果通过 docker system df 分析,是卷占用了过高空间。则可以根据业务情况,评估相关卷的使用情况。对于未被任何容器调用的卷(-v 结果信息中,”LINKS” 显示为 0),可以使用如下指令手工清理:

    # 删除所有未被任何容器关联引用的卷:
    docker volume rm $(docker volume ls -qf dangling=true)
    
    # 也可以直接使用如下指令,删除所有未被任何容器关联引用的卷(但建议使用上面的方式)
    # 【说明】轮询到还在使用的卷时,会有类似"volume is in use"的告警信息,所以相关卷不会被删除,忽略即可。
    docker volume rm $(docker volume ls -q)

    容器清理

    如果通过 docker system df 分析,是某个容器占用了过高空间。则可以根据业务情况,评估相关容器的业务归属并进行处理。对于已停止或其它异常状态的容器,可以结合  -f 或 --filter 筛选器,使用类似如下指令来手工清理:

    # 删除所有已退出的容器
    docker rm -v $(docker ps -aq -f status=exited)
    # 删除所有状态为 dead 的容器
    docker rm -v $(docker ps -aq -f status=dead)

    更多关于 ps 指令支持的筛选器信息,可以参阅官方文档

    在用空间资源分析

    对于还在使用的空间资源,可以参阅如下说明做进一步排查分析。

    镜像空间分析

    如果某个镜像占用了过高空间,则可以通过如下方式做进一步空间分析:

    1. 通过 docker system df 获取占用过高空间的镜像信息。
    2. 基于相应镜像创建测试容器。
    3. exec 进入容器后,结合 du 等 shell 指令做进一步空间分析,定位出占用最高空间的目录或文件。
    4. 结合业务情况做进一步处理,重新 build 镜像。

    示例:

    [root@node3]# docker exec -it dstest sh
    / # du -h | head
    8.0K    ./root
    32.0K    ./etc
    4.0K    ./usr/sbin
    8.0K    ./usr
    10.0G    ./home/java/logs
    10.0G    ./home/java
    10.0G    ./home
    1.1M    ./bin
    0    ./dev/shm
    0    ./dev/mqueue

    容器空间分析

    如果某个运行中的容器占用了过高空间,则可以通过如下方式做进一步空间分析:

    Tips 

    容器的只读层与镜像层的空间占用情况
    一个容器的占用的总空间,包含其最顶层的读写层(writable layer)和底部的只读镜像层(base image layer,read-only)。更多相关说明,可以参阅官方文档
    可以通过 docker ps 的 -s 参数来分别显示二者的空间占用情况,进而判断相应容器的空间占用主要是来自原始镜像,还是运行中产生。

    容器空间占用示意图
    示例:

    # 如下容器的原始镜像占用了 422MB 空间,实际运行过程中只占用了 2B 空间:
    CONTAINER ID        IMAGE                                                                                                                                COMMAND                  CREATED             STATUS              PORTS                                           NAMES                                                                                    SIZE
    ac39128ccbc0        registry.aliyuncs.com/acs-sample/wordpress:4.6                                                                                       "/entrypoint.sh ap..."   3 months ago        Up 11 days          0.0.0.0:32779->80/tcp                           Web_web_4                                                                                2 B (virtual 422 MB)

    容器空间占用的分析步骤:

    1. 通过 docker system df 获取占用过高空间的容器信息。
    2. 通过前述 -s 参数确认到底是底层镜像,还是运行过程中产生的数据占用了过高空间。
    3. exec 进入容器,结合 du 等 shell 指令做进一步空间分析,定位出占用最高空间的目录或文件。
    4. 结合业务情况做进一步处理。

    引申:Docker 磁盘空间限制与使用建议

    磁盘空间限制

    使用 Device Mapper 存储驱动限制容器磁盘空间

    如果使用 Device Mapper 作为底层存储驱动,则可以通过 Docker daemon 的如下参数来全局限制单个容器占用空间的大小:

    • --storage-opt dm.basesize=20G 表示限制单个容器最多占用 20G 空间,将应用于任何新建容器。

    更多关于 Device Mapper 存储驱动的说明,可以参阅官方文档

    使用 btrfs 存储驱动限制容器磁盘空间

    btrfs 驱动主要使用 btrfs 所提供的 subvolume 功能来实现。一个容器会对应一个 subvolume。针对容器对应的 subvolume 启用并配置 quota 即可限制其磁盘空间。示例配置:

    btrfs qgroup limit -e 50G /var/lib/docker/btrfs/subvolumes/<CONTAINER_ID>

    btrfs 还有其它很好的特性,比如可以在线扩容(在线加入一块新的块设备,来扩充整个文件系统的大小)。更多关于 btrfs 存储驱动的说明,可以参阅官方文档

    外挂 LVM 卷

    如果使用的是其它不支持对单个容器的磁盘容量进行限制的存储驱动,则可以考虑如下通用方案:

    • 通过 LVM 方式创建一个指定容量的卷,然后挂载到宿主操作系统上特定目录。最后通过 –volume 参数来让容器来挂载使用相应目录。

    注意:该方案的前提条件是,容器中所有落盘操作要全部落到上述 “–volume” 参数指定的卷中,否则容器还会占用默认 aufs 所在盘的空间,进而造成统计不准。

    Docker 存储使用建议

    细化的存储使用最佳实践与采用的存储驱动(storage driver)类型强相关,您可以参阅官方文档做相关了解,本文不做进一步细化说明。
    通用的存储使用建议如下:

    • 容器内的业务日志务必配置轮询覆写,或者使用日志驱动将日志输出到外部存储。避免日志文件持续增长,占用过高磁盘空间。
    • 结合外部监控对宿主机的磁盘空间使用情况进行监控和告警。
    • 可以参阅文档 如何给容器服务的Docker增加数据盘来扩容默认 Docker 存储空间
  • Transmission 2.94 配置文件参数中文解释

    [start-plane type=”1″]原文地址:Transmission 2.94 配置文件参数中文解释 | Ming’s Blog (inkuang.com)[/start-plane]

    配置文件参数

    下面的参数项是直接从 Transmission 2.94 版本的默认配置文件里复制过来的,各个参数作用的解释基本是我根据官方说明翻译归纳的,应该没有啥大问题。

    先附上官方说明地址:https://github.com/transmission/transmission/wiki/Editing-Configuration-Files

    {
        "alt-speed-down": 50,   //开启时段限速时下载速度的最大值,单位KB/s
        "alt-speed-enabled": false,   //是否开启时段限速,默认关闭
        "alt-speed-time-begin": 540,   //时段限速开启时间,默认值540(这个值与具体时间的转换自己去官方说明里查看,此处不过多介绍,下同)
        "alt-speed-time-day": 127,   //时段限速在哪些日子启用,默认值127(每天)
        "alt-speed-time-enabled": false,   //是否启用时段限速日期,默认不开启,如果开启,那么alt-speed-enabled一定要是false,两者之间只能启用一项,如果同时设置为true,则alt-speed-enabled有效
        "alt-speed-time-end": 1020,   //时段限速结束时间,默认值1020
        "alt-speed-up": 50,   //开启时段限速时上传速度的最大值,单位KB/s
        "bind-address-ipv4": "0.0.0.0",   //程序监听的ipv4地址绑定
        "bind-address-ipv6": "::",   //程序监听的ipv6地址绑定
        "blocklist-enabled": false,   //是否启用黑名单,默认不启用
        "blocklist-url": "http://www.example.com/blocklist",   //黑名单列表的url
        "cache-size-mb": 4,   //缓存大小,单位MB
        "dht-enabled": true,   //是否启用DHT网络(通过tracker寻找节点),默认启用
        "download-dir": "/var/lib/transmission-daemon/downloads",   //下载完成的文件保存路径
        "download-limit": 100,   //下载限速,单位KB/s
        "download-limit-enabled": 0,   //是否开启下载限速,0表示不开启
        "download-queue-enabled": true,   //是否开启下载队列,默认开启
        "download-queue-size": 5,   //下载队列数设置,默认5,表示最多只能同时下载5个任务,多余的需要等待
        "encryption": 1,   //加密设置,等于0时不加密,1是优先加密,2是必须加密
        "idle-seeding-limit": 30,   //空闲多长时间停止做种,默认30,单位分钟
        "idle-seeding-limit-enabled": false,   //是否开启空闲时间停止做种,默认关闭
        "incomplete-dir": "/var/lib/transmission-daemon/Downloads",   //未完成任务的文件保存路径
        "incomplete-dir-enabled": false,   //是否启用未下载完成文件保存路径
        "lpd-enabled": false,   //LDP网络(在本地网络寻找节点),默认关闭
        "max-peers-global": 200,
        "message-level": 1,   //日志消息等级,0=None,1=Error,2=Info,3=Debug
        "peer-congestion-algorithm": "",
        "peer-id-ttl-hours": 6,
        "peer-limit-global": 200,   //全局种子最大连接数
        "peer-limit-per-torrent": 50,   //每个种子的最大连接数
        "peer-port": 51413,   //上传下载使用的连接端口号
        "peer-port-random-high": 65535,   //随机端口号上限
        "peer-port-random-low": 49152,   //随机端口号下限
        "peer-port-random-on-start": false,   //是否启用随机端口号,默认关闭,启用后每次重启该软件都会从上面设定的范围里随机选取一个端口使用
        "peer-socket-tos": "default",   //设置传输TCP数据包的服务类型,详情参考:https://en.wikipedia.org/wiki/Type_of_service
        "pex-enabled": true,   //是否开启节点交换,详情参考:https://en.wikipedia.org/wiki/Peer_exchange
        "port-forwarding-enabled": false,   //是否启用端口转发(uPnP),如果路由支持并且也开启了uPnP,则路由会自动做端口映射
        "preallocation": 1,   //预分配磁盘空间,0=关闭,1=快速,2=完全,默认取1,防止文件下载了一半后才发现磁盘空间不够
        "prefetch-enabled": true,
        "queue-stalled-enabled": true,
        "queue-stalled-minutes": 30,
        "ratio-limit": 2,   //分享率(上传下载比率)达到多少后停止做种
        "ratio-limit-enabled": false,   //是否启用分享率达标停止做种,默认关闭
        "rename-partial-files": true,   //在未完成的文件名后添加后缀,默认开启,开启后未完成的文件会带有.part后缀
        "rpc-authentication-required": true,   //是否开启远程控制验证
        "rpc-bind-address": "0.0.0.0",   //rpc服务监听地址
        "rpc-enabled": true,   //是否开启rpc服务(远程连接)
        "rpc-host-whitelist": "",   //rpc域名白名单,值为以逗号分隔的域名列表,用于绑定域名访问的场景
        "rpc-host-whitelist-enabled": true,   //是否开启rpc域名白名单
        "rpc-password": "{cc29d57debb27f83469bbcd7fae81f64c789d3dfgw.f80LY",   //rpc连接密码,这是加密过的,将其修改为自己的密码(明文)后启动软件会自动加密
        "rpc-port": 9091,   //rpc服务监听端口
        "rpc-url": "/transmission/",   //rpc服务路径
        "rpc-username": "transmission",   //rpc连接用户名,跟上面的密码配合使用
        "rpc-whitelist": "127.0.0.1",   //rpc连接白名单,默认只允许本地连接
        "rpc-whitelist-enabled": true,   //是否开启rpc连接白名单,默认开启
        "scrape-paused-torrents-enabled": true,   //是否运行暂停种子
        "script-torrent-done-enabled": false,   //是否在torrent完成时运行脚本,默认关闭
        "script-torrent-done-filename": "",   //在torrent完成时运行的脚本路径
        "seed-queue-enabled": false,   //是否开启做种队列
        "seed-queue-size": 10,   //做种队列大小
        "speed-limit-down": 100,   //下载速度限制,单位KB/s
        "speed-limit-down-enabled": false,   //是否开启下载速度限制,默认关闭
        "speed-limit-up": 100,   //上传速度限制,单位KB/s
        "speed-limit-up-enabled": false,   //是否开其上传速度限制,默认关闭
        "start-added-torrents": true,   //在添加种子文件后立即开始任务
        "trash-original-torrent-files": false,
        "umask": 18,   //文件权限掩码,默认18即755权限,如果改成0是最高权限,下载回来的文件权限就是777
        "upload-limit": 100, 
        "upload-limit-enabled": 0,
        "upload-slots-per-torrent": 14,
        "utp-enabled": true   //UTP传输是否启用
    }
    

     

    注意事项

    修改配置文件时还需要注意以下几点:

    • 在 Linux 系统下,修改 download-dir 和 incomplete-dir 选项时需要注意目录权限问题,使用 apt 安装 Transmission 时会自动创建一个名为 debian-transmission 的用户,你设置的目录需要让该用户有可写权限。
    • DHT 网络可能会造成 tracker 服务器记录数据出错而被认为作弊,一般的 pt 站都会建议关闭这一选项。
    • 在启用 rpc 后大部分配置项可以远程在线修改,建议配置文件中不了解作用的选项不要随意改动,想尝试其作用的话可以通过 rpc 远程连接来临时修改。

    另外,在上面贴出的配置文件中有一些参数是历史遗留选项,已有新的参数替代了它们的功能,只是旧参数在配置文件中还未删去而已。这也就意味着有部分参数的功能是相同的,在启用时需要注意甄别,详情可以在官方说明页面查看。

  • 尝试恢复挂载服务器硬盘的 RAID 5

    前段时间实验室的 DIY 服务器重装了系统 Ubuntu 16.04,但重装后就不知道该怎么挂载原来的硬盘了。经过了解,该服务器上共有两块 SSD,一块用来装系统,一块做硬盘缓存;三块 4T 大小的硬盘,做了软 RAID 5。这里仅记录一下恢复挂载该硬盘的过程,不涉及 RAID 和缓存的知识。

    恢复过程

    1. 查看硬盘信息

    先通过 sudo fdisk -l | grep sd 命令查看硬盘信息,内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Disk /dev/sda: 477 GiB, 512110190592 bytes, 1000215216 sectors
    /dev/sda1 2048 127999999 127997952 61G 82 Linux swap / Solaris
    /dev/sda2 * 128000000 368001023 240001024 114.5G 83 Linux
    /dev/sda3 368003070 1000214527 632211458 301.5G 5 Extended
    /dev/sda5 368003072 1000214527 632211456 301.5G 83 Linux
    Disk /dev/sdb: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
    Disk /dev/sdc: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
    Disk /dev/sdd: 3.7 TiB, 4000787030016 bytes, 7814037168 sectors
    Disk /dev/sde: 477 GiB, 512110190592 bytes, 1000215216 sectors
    /dev/sde1 2046 1000214527 1000212482 477G 5 Extended
    /dev/sde5 2048 1000214527 1000212480 477G 83 Linux

    可以看到,sdbsdcsdd 就是需要挂载的三块硬盘。

    2. 尝试直接挂载三块硬盘。

    如果是普通的硬盘,可以先在 /media/username/ 路径下新建一个文件夹 HD8T(任意命名),然后用 sudo mount /dev/sdb /media/username/HD8T/ 进行挂载。

    但是现在在用该命令挂载时出现了下面的错误:

    1
    mount: unknown filesystem type ‘linux_raid_member’

    这正说明三块硬盘之前是装了 RAID 的,也说明重装系统没有损坏原来的 RAID,数据是可以恢复的。

    3. 恢复硬盘上的 RAID

    经过查阅资料[2],得知 RAID 是可以通过 mdadm 创建或恢复的。

    如果系统没有安装 mdadm,可以先通过 sudo apt update && sudo apt install mdadm 进行安装。安装好 mdadm 后,执行 sudo mdadm --assemble --scan 命令,它会自动检测并安装所有的 md 硬盘。输出如下:

    1
    mdadm: /dev/md/0 has been started with 3 drives.

    这样,mdadm 已经检测并安装了原来硬盘上的 RAID——md0。还可以执行 sudo mdadm --detail /dev/md0 命令,查看更详细的信息:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    dev/md0:
    Version : 1.2
    Creation Time : Thu Dec 31 15:25:00 2015
    Raid Level : raid5
    Array Size : 7813774336 (7451.80 GiB 8001.30 GB)
    Used Dev Size : 3906887168 (3725.90 GiB 4000.65 GB)
    Raid Devices : 3
    Total Devices : 3
    Persistence : Superblock is persistent
    Update Time : Mon Jul 24 13:57:48 2017
    State : clean
    Active Devices : 3
    Working Devices : 3
    Failed Devices : 0
    Spare Devices : 0
    Layout : left-symmetric
    Chunk Size : 512K
    Name : CVBIOUC:0
    UUID : f9ad2c2a:16cf56f5:0956886e:cb512410
    Events : 542
    Number Major Minor RaidDevice State
    0 8 16 0 active sync /dev/sdb
    1 8 32 1 active sync /dev/sdc
    3 8 48 2 active sync /dev/sdd

    4. 挂载 bcache 文件系统的硬盘

    参考《在Linux下使用RAID(四):创建RAID 5》 这篇博客,现在可以对 RAID 硬盘 md0 进行挂载了。

    奇怪的是,利用 mount 命令挂载时,出现了 mount: unknown filesystem type 'bcache' 的错误。看到 cache 这个词,突然想到老师之前说的用了一块 SSD 作为缓存的事情,所以硬盘的文件系统也不一样了。

    查阅资料得知,这种文件系统是由 bcache 这个工具得到的。最初的想法是重装系统,腾出之前的那块SSD,用 bcache 工具恢复它们原来的样子。但后来老师说,做缓存的那块 SSD 不太稳定,不要做缓存了。所以问题一下子简单了,只有想办法把 bcache 文件系统的硬盘挂载上就行了。

    参考 Stack Overflow 上的 How to revert bcache device to regulare filesystem 问题,bcache 的文档里给出了一种解决思路:

    1
    2
    3
    4
    5
    6
    D) Recovering data without bcache:
    If bcache is not available in the kernel, a filesystem on the backing
    device is still available at an 8KiB offset. So either via a loopdev
    of the backing device created with –offset 8K, or any value defined by
    –data-offset when you originally formatted bcache with `make-bcache`.

    也就是说, bcache 只是比原文件系统多了 8KiB 的一个头,“去掉”它就可以得到原来的文件系统了。可以先通过 sudo losetup -o 8192 /dev/loop0 /dev/your_bcache_backing_dev 命令将“去掉” 8KiB 头的设备挂载到 /dev/loop0,然后再将 /dev/loop0 挂载到我们之前定义的 /media/username/HD8T 文件夹。或者简化成一步:sudo mount -o loop,offset=8192 /dev/md0 /media/vision/HD8T

    此外,需要注意挂载到的目录的权限问题,可以执行 sudo chown -R username /media/username/ 等命令来获取相关权限。

    5. 开机自动挂载

    参考[4],可以通过修改 /etc/fstab 文件来实现开机自动挂载硬盘。例如在 /etc/fstab 文件的末尾添加以下内容,就是为了在开机时将 /dev/sdb 自动挂载到 /media/mynewdrive 目录:

    1
    /dev/sdb1 /media/mynewdrive ext4 defaults 0 2

    但是 Ubuntu 更推荐使用 UUID 来标识设备。所有分区和设备,包括上面的 RAID 分区 /dev/md0,都有唯一的 UUID。用 UUID 来标识设备的好处在于它们与磁盘顺序无关。如果你在 BIOS 中改变了你的存储设备顺序,或是重新拔插了存储设备,或是因为一些 BIOS 可能会随机地改变存储设备的顺序,那么用 UUID 来表示将更有效。可以通过 ls -l /dev/disk/by-uuid 命令来查看硬盘设备的 UUID。[5]
    在 /etc/fstab 文件中使用 UUID 的格式如下:

    1
    UUID=d4f1d3fb-6177-4fba-72f4-43189a8b1638 /media/mynewdrive ext4 defaults 0 2

    普通的硬盘用上述方式很容易就实现开机自动挂载了。但是我要挂载的硬盘是 bcache 文件系统的,“去掉” 8KiB 的头后才是 ext4 文件系统。那应该怎么办呢?

    有两种解决的思路:

    1. 把 sudo mount -o loop,offset=8192 /dev/md0 /media/vision/HD8T 命令写入 /etc/init/*.conf 文件, 在系统启动时执行;[6]
    2. 考虑把 loop,offset=8192 这个选项加到 /etc/fstab 文件里,也是在系统启动时自动执行。[7] [8]

    上面两种思路应该都是可行的,最后我只采用了第二种思路。这是因为我不光要挂载恢复的 RAID 硬盘,还要挂载一块 SSD,SSD 只要通过简单地修改常用的 /etc/fstab 文件就行了,不用改动其他文件。为了尽量保持操作的一致性,所以倾向于仅修改一个文件。此外,也有基于上面 UUID 优点的考虑,通过修改 /etc/fstab 文件,两块硬盘都可以通过 UUID 的方式被挂载。

    最终在 /etc/fstab 中添加的内容如下,成功实现了开机自动挂载硬盘:

    1
    2
    3
    4
    5
    # SSD 512G just for storage
    UUID=5ab4e96e-d9b1-4de4-9437-cf03351fc650 /media/username/SSD512G ext4 defaults 0 2
    # Hard Disk 8T with bcache file system
    UUID=76fb6f9c-d02d-42r7-83aa-76d984bfe381 /media/username/HD8T auto defaults,loop,offset=8192 0 2

    注意上面的 defaults,loop,offset=8192 配置里 , 前后不要加空格,否则可能会出现问题。我在尝试的过程中就因为把这个文件写错了,导致无法进入桌面系统,只能进入命名行界面。

    参考资料

    1. RAID,维基百科
    2. Reinstall Ubuntu, do i keep the software RAID?
    3. 在Linux下使用RAID(四):创建RAID 5
    4. Installing A New Hard Drive
    5. Short Tip: Get UUID of Hard Disks
    6. How to set up a loop device at boot time?
    7. losetup and mount during boot
    8. How to mount ext3,ext4 sitting on VDI VirtualBox HDD?
  • BUFFALO LS-WVL升级:1、安装Debian9

    BUFFALO LS-WVL升级:1、安装Debian9

    起因:

    13年的买的一个洋垃圾BUFFALO LS-WVL,主要目的就是存一些临时文件及PT下载使用。一直到今年一直是正常使用,而且稳定性也很不错。

    但是期间出现了几个问题导致,感觉已经无法满足需求。

    1、PT资源我采用的是Flexget订阅RSS到Transmission自动下载,但是17年开始原系统改改机通过entware安装的Flexget开始无法正常工作,原因为软件源(软件源地址:http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable/)内的文件基本停止更新,很多依赖文件都无法更新例如python。但是还是可以正常手动添加资源,也就没在意,继续使用。

    2、18年开始,各PT站点出于安全考虑开始部署https的tracker,导致的问题就是很多部署了tls1.2 1.3的站点Transmission无法连接,而且越来越多。但毕竟有些没升级到https,继续凑合使用。

    但是期间还是买了个蜗牛星际、猫盘、暴风播酷云作为辅助工具。14年左右就知道ls-wvl可以升级到debian,但是看了下教程,头大!而且那时对linux不是很熟悉,所以直接放弃。期间有几次想尝试但是考虑到资源备份及自己的技术,还是想想就放弃了。直到今年,PT站点基本都升级为https了,看样子是大势所趋了,而且实在是影响使用体验。感觉可以试一试了,毕竟这款设备的稳定性还是不错,所以就有了下文。

    过程:

    期间波折很多,捡正确的流程写吧。

    参考教程:buffalo ls-wvl 简便安装debian 10  https://zhuanlan.zhihu.com/p/100524360

    按照上面的步骤操作后,发现无法找到设备IP,也就是无法进行最后一步的安装。期间试了N次,以为是自己操作不当导致的。结果一番google后在github上找到了答案。

    坑1:以上操作需要原来的固件版本为:LS-WVL 1.68 ~ 1.71,而我的是 1.64。

    解决方案:升级固件到 1.71,然后改机开启ssh(感觉改机开启ssh这步不是那么关键,反正我是顺手改了)

    坑2:Linkstation LS-WVL is unreachable when booted with daily images #17

    https://github.com/rogers0/OpenLinkstation/issues/17

    大概的意思就是,2018.5月以后的debian daily images,设置后可能存在找不到设备IP,或者要等很久才可以找到,例如里面的人反馈说一块WD的4t硬盘,差不多等了43分钟。所以我又试了下,等了一个小时,实在没耐心就放弃debian10了。

    解决方案:使用debian9的debian images。成功!

    步骤:

    1、buffalo固件启动时会寻找第一个硬盘第一个分区的uImage.buffalo,所以我们需要拿一块硬盘,分区后,把uImage.buffalo及initrd.buffalo下载到第一分区根目录。

    注:#后为备注,不需要复制。

    $ sudo parted /dev/sdb  #linux系统下查询硬盘的位置。可以使用df命令查询,例如我的是  /dev/sdc

    (parted) mklabel gpt

    (parted) mkpart boot 2048s 1024MiB

    (parted) mkpart root 1024MiB 6144MiB

    (parted) mkpart swap 6144MiB 6400MiB

    (parted)quit

    以下加载第一分区并下载必需的两个文件,

    $sudo mkfs.ext3 /dev/sdb1  #同理,我的是/dev/sdc1

    $ sudo mount /dev/sdb1 /mnt

    $wget http://ftp.debian.org/debian/dists/stretch/main/installer-armel/20170615+deb9u7+b2/images/kirkwood/network-console/buffalo/ls-wvl/uImage.buffalo

    $wget http://ftp.debian.org/debian/dists/stretch/main/installer-armel/20170615+deb9u7+b2/images/kirkwood/network-console/buffalo/ls-wvl

    $cp *.buffalo /mnt

    $sudo umount /mnt

    现在把硬盘插入NAS第一盘位,启动NAS,大约过1-2分钟蓝灯不闪时,SSH登录进入安装界面:

    $ssh [email protected]  #ip地址可以通过路由器里的设备列表查询得知。ssh连接可以使用putty、xshell操作。

    登录密码:install

    登陆后就是安装界面,根据提示一个一个的操作就可以了。建议您在进入Partition Setup (分区设置)时选择“引导整个磁盘”

    然后就等着安装完成,开始玩耍吧。

    坑3:由于众所周知的原因,以上安装是网络安装,安装程序会从debian服务器实时下载安装所需的文件,而debian的服务器都是在国外的,即便安装过程中选了国内镜像,依然会很慢。还有就是安装程序会优先连接debian服务器的ipv6地址下载。

    解决方案:如果不确认自己的网络是否支持ipv6,建议先把路由器的ipv6 DHCP关掉。这样安装程序就会连接ipv4的服务器。速度会快一些。如果还是慢,那就一个字:等!!!

    当然慢还有一个办法,大家自己去摸索吧。这个速度才是解决的王道。

    附镜像文件:

    ls-wvl-debian-20170615+deb9u7+b2

    Debian Installer for Buffalo Linkstation NAS

    PS:希望还有第二篇 Transmission+flexget的安装,及安装omv、webmin的体验。及blstoolscd这个坑

    参考资料:

    1、https://zhuanlan.zhihu.com/p/100524360

    2、https://github.com/rogers0/OpenLinkstation/

    3、http://www.nas1.cn/thread-27060-1-1.html

    4、http://blog.sina.com.cn/s/blog_4da8575c0102v7yc.html

    http://www.gebi1.com/forum.php?mod=viewthread&tid=84205%E2%80%8B

    5、https://miniconf.debian.or.jp/assets/files/Debian Installer for Buffalo Linkstation NAS.pdf

  • Debian/Ubuntu实现RSS订阅自动下载-安装flexget及配置

    1.安装 flexget

    安装 pip

    1. aptget update
    2. aptget install pythonpip pythonsetuptools nano

    更新 pip

    1. pip install upgrade pip

    安装 flexget,因为现在 pip 已经更新到 10.0.X 版本了,名称变成了 pip2。

    1. pip install flexget

    这样 flexget 就安装完成了!

    2.配置 flexget

    首先说明一下,我这里目前只提供最基本的 flexget 的使用方法。

    创建 flexget 的配置目录

    1. mkdir /root/.flexget

    编辑 flexget 的配置文件

    1. nano /root/.flexget/config.yml

    这里提供几个示例供使用

    2.1.Deluge

    1. tasks:
    2. hdhome:
    3. rss: http://hdhome.org/torrentrss.php
    4. accept_all: no
    5. regexp:
    6. accept:
    7. sweety
    8. reject:
    9. 1080
    10. from: title
    11. content_size:
    12. min: 3000
    13. max: 8000
    14. strict: no
    15. download: /home/torrent/
    16. deluge:
    17. password: “deluge”
    18. path: /home/down
    19. u2:
    20. rss: https://u2.dmhy.org/torrentrss.php
    21. accept_all: no
    22. if:
    23. “‘1996’ in title”: accept
    24. “‘720’ in title”: accept
    25. content_size:
    26. min: 3000
    27. max: 8000
    28. strict: no
    29. download: /home/torrent/
    30. deluge:
    31. password: “deluge”
    32. path: /home/down/
    33. web_server: 55555

    这里简单的对几个参数简单说明下

    • tasks:表示添加多少个任务,一个代表一个站点,你可以在这个配置的基础上继续添加被的站点!
    • hdhome | u2 : 这个只是任务的名称,可以随便取,改冒号前面的就可以!
    • accept_all:如果需要筛选标题就选择 no,全部 rss 就选择 yes,然后把 download 之前的全删掉就可以了!
    • if: 用于筛选一些参数,我这里只列出了筛选标题 title 参数,你可以参照上面的写法做出多个筛选!
    • regexp:和 if 类似,可以对多个参数筛选,我一般就对标题 title 筛选,支持正则表达式,比 if 貌似好用,可以 2 选 1
    • content_size:可以筛选文件的大小,如上面就是 3000M~8000M 之间!
    • download:就是种子的下载位置,一个 task 可以对应一个位置,这个位置必须要存在才行!
    • deluge:直接添加到 deluge 下载 ,passwd 直接填 deluge 的密码,path 代表下载的目录!
    • web_server:表示开启 flexget 的网页端,方便编辑 config.yml 文件,端口 55555 代表访问 ip:55555 即可访问 flexget 的 WebUI。
    • path:文件存储的目录

    deluge 还有个 port 参数这里没写了,默认就可以,默认是 58846,在 deluge 设置的 daemon 里可以设置。

    其它的类似,我也直接给出配置文件,可以直接 copy 到 config.yml 中,稍作修改即可!

    2.2.qBittorrent

    修改配置文件 config.yml

    1. tasks:
    2. hdhome:
    3. rss: http://hdhome.org/torrentrss.php
    4. accept_all: no
    5. regexp:
    6. accept:
    7. sweety
    8. reject:
    9. 1080
    10. from: title
    11. content_size:
    12. min: 3000
    13. max: 58000
    14. strict: no
    15. download: /home/torrent/
    16. qbittorrent:
    17. path: /home/down
    18. port: 8080
    19. username: admin
    20. password: “adminadmin”
    21. u2:
    22. rss: https://u2.dmhy.org/torrentrss.php
    23. accept_all: no
    24. if:
    25. “‘1996’ in title”: accept
    26. “‘720’ in title”: accept
    27. content_size:
    28. min: 3000
    29. max: 180000
    30. strict: no
    31. download: /home/torrent/
    32. qbittorrent:
    33. path: /home/down
    34. port: 8080
    35. username: admin
    36. password: “adminadmin”
    37. web_server: 55555

    解释下新出现的参数:

    • port:QB 的 webui 的端口,默认 8080,如果改了也要对应的修改以下
    QB 和 deluge 一样都只需要配置 config 文件!

    2.3.Transmission

    具体参考:https://flexget.com/Plugins/transmission

    以下为简单介绍,利用 flexget 为 TR 进行 rss 时需要安装一个插件

    1. pip install transmissionrpc

    然后修改配置文件 config.yml

    1. tasks:
    2. u2:
    3. rss: https://u2.dmhy.org/torrentrss.php
    4. accept_all: no
    5. regexp:
    6. accept:
    7. sweety
    8. reject:
    9. 1080
    10. from: title
    11. content_size:
    12. min: 3000
    13. max: 180000
    14. strict: no
    15. download: /home/torrent/
    16. transmission:
    17. host: localhost
    18. port: 9091
    19. username: truser
    20. password: “trpass”
    21. clean_transmission:
    22. host: localhost
    23. port: 9091
    24. username: truser
    25. password: “trpass”
    26. finished_for: 24 hours
    27. directories:
    28. \A/+home/+down(\Z|/+.*)
    29. delete_files: Yes
    30. free_space:
    31. path: /home/down
    32. space: 40960
    33. web_server: 55555

    这里主要多使用了一个 clean_transmission 插件,可以自动删除,可以监控磁盘剩余空间!

    解释下新出现的参数:

    • finished_for:这个参数设置的时间表示种子完成后 24 小时删除。
    • space:当剩余空间小于 40960 也就是 40G 时,停止 RSS。

    2.4.rtorrent

    关于 RT 这里就不介绍用法了,因为 rt 本身的 RSS 功能已经足够了!

    以上的配置文件都是经过测试可以直接复制使用的,可以修改,但不要动格式,否则会出现错误!

    3.使用 flexget

    3.1.常用命令

    • flexget check : 用于检查 config.yml 配置文件是否有格式错误。
    • flexget –test execute : 手动模拟一次 RSS 操作,仅供测试,不会下载种子文件到本地。(注意 test 前是 2 个-,显示有问题)
    • flexget execute : 手动开始一次 RSS 下载,就等于正式 RSS 了一次。
    • flexget status : 查看 flexget 的 RSS 记录。

    3.2.配置 webui

    我们注意到,在第二步里,config 每个配置文件的末尾都加上了一个web_server参数,这个是用来开启 flexget 的 webui 的,需要执行以下命令!

    设置 web 密码,注意不太太简单,否则不成功!用户名默认是 flexget

    1. flexget web passwd <要设置的密码>

    开启 webui 后台运行

    1. flexget daemon start daemonize

    这是你打开 http://服务器 IP:55555 就能看到 flexget 的 web 界面了,登录后即可在 config 那里直接修改配置文件了!我目前用到的就是这个,其它功能没研究!!

     

    Debian/Ubuntu 实现 RSS 订阅自动下载-安装 flexget 及配置

    修改完了点击红色箭头指向的 SAVE AND APPLY 就保存成功了,下一次订阅的时候就自动用这个新的 config.yml 配置文件了

    3.3.设置自动 RSS

    查看 flexget 位置

    1. which flexget

    比如我的是/usr/local/bin/flexget

    配置自动订阅

    1. crontab e

    选择通过 nano 编辑,这样方便点,然后在末尾加上

    1. */5 * * * * /usr/local/bin/flexget c /root/.flexget/config.yml execute

    然后保存退出 就表示 5 分钟执行一次订阅了。这个时间你可以根据自己机器的情况修改,建议 2-5 分钟之间!

    教程部分到这里就结束了!撒花✿✿ヽ(°▽°)ノ✿

    4.常见问题

    4.1.多关键字过滤

    可以使用and或者or连接 如

    1. “*中国* and ‘CHDBits’ in title”: accept

    这样就可以同时过滤多个标题字段了!

    4.2.重置 flexget

    这个其实很简单,删除/root/.flexget 目录下除了 config.yml 文件以外的其它文件就可以了!

    4.3.文件不存在

    2018-04-30 10:43 CRITICAL manager [/tasks/u2/download] `/home/torrent/` does not exist
    2018-04-30 10:43 CRITICAL manager Failed to load config file: Did not pass schema validation.
    Could not start manager: Did not pass schema validation.

    提示以上类似的错误,说明你配置文件 config.yml 中设置的某些路径不存在,提前创建好对应的目录就可以了

    5.常用 RSS 示例

    包含了我自己拥有的常见站点的 RSS,大部分主要是刷官种,基本筛选的都是 free 的种子,注意替换自己的 passkey 即可使用!

    点击查看

    注意:将文件内容复制到你的 config.yml 文件中即可,我在文件里展示了用各种客户端下载的例子,你可以类比以下,适当修改即可使用!

    6.总结

    其实总的步骤还是很简单的,这里总结下

    ①安装 flexget

    ②copy 一个我给的 config.yml 文件示例,根据自己情况修改下,保存退出

    ③设置刷新间隔 完事!! 

    So Easy 嘛