前言

所谓工欲善其事必先利其器,在使用P2P提供的资源时,我们依旧需要借助许多相关工具才能省心,高效地享受它们。在实际使用中,各类工具各司其职,共同为我们构建了自己的资源图书馆:根据下载协议不同,我们可能会需要transmissionnzbgetaria2等各类下载工具;索引资源时,Jackettnzbhydra通常又是我们的绝佳伴侣了;文件整理,多媒体中心的建立也要求着各式各样的工具….

当所需要的工具越来愈多,如何安装,管理他们也就成了所要解决的一个大问题了。Swizzin 管理面板就是解决该问题的一个方案,它整合了多种常用工具的管理,可以通过相关命令实现一键安装/卸载/更新软件,同时其支持多用户使用,十分方便。

swizzin-panel

除了Swizzin外,QuickBox也是常用的模板化管理工具

Swizzin 安装

Swizzin官网: https://swizzin.ltd/
Swizzin官方仓库: https://github.com/swizzin/swizzin

配置要求

Swizzin 目前支持以下系统:

  • Debian 9, 10 and 11
  • Ubuntu 18.04 and 20.04

官方推荐的硬件配置如下:

  • KVM架构的VPS或者独立服务器
  • 2+ CPU cores KVM or Intel Atom c2750
  • 4 GB of RAM
  • amd64arm64 的cpu架构

安装过程

官方提供了一键安装脚本,因此安装十分简单:

1
2
3
# 请在全新安装的服务器上运行该命令!
sudo -i
bash <(curl -sL git.io/swizzin) && . ~/.bashrc

运行上述命令后,Swizzin 会开始更新系统软件并安装相关依赖。更新完毕后,系统会要求新建主账户,输入新建的用户名和密码即可,完成后开始选择需要安装的软件包,使用空格选择相关所需软件,回车确定即可。为了方便后续演示,这里我们不安装任何一个软件包。

安装成功后会有以下提示:

Swizzin installation complete!
1
2
3
4
5
INFO	You can now use the box command to manage swizzin features, e.g. `box install nginx panel`
DOCS Further reference: https://swizzin.ltd/getting-started/box-basics
INFO Shell completions for the box command have been installed. They will be applied the next time you log into a bash shell
... Executing post-install commands
✔ Post-install commands finished

Swizzin 使用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#列出所有可用包
box list
#安装可用包,以nginx为例
box install nginx
#移除安装的包,以nginx为例
box remove nginx
#添加新用户,用户为moerats
box adduser moerats
#删除指定的用户
box deluser moerats
#修改用户密码
box chpasswd moerats
#更新最新包
box update
#升级指定的包,以nginx为例
box upgrade nginx
#启动r(u)Torrent附加管理界面
box rtx or rtx

Swizziin 使用实例

软件包的安装-以Transmission为例

1
sudo box install transmission

输入安装命令后,Swizzin将开始安装相关软件,安装日志会输出在控制台上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
INFO	Installing transmission
DOCS Further reference: https://swizzin.ltd/applications/transmission
... Performing installation of 3 apt packages
(transmission-cli transmission-common transmission-daemon)
✔ Apt install complete
... Disabling default non-multiuser service
✔ Done
... Creating systemd services
✔ Done
... Setting up transmission for box
... Creating directories for box
✔ Directories created
... Creating config for box
✔ Config created
INFO Transmission RPC port for box = 9091
✔ Transmission set up for box
... Starting transmission instance for box
✔ Instance started
SUCCESS Transmission installed

安装完成后输入打开浏览器进入IP:9091即可看到全新安装的Transmission,其中用户名和密码即为安装Swizzin时创建的用户。

原版的Transmission UI较为简陋,可以尝试更换为自定义UI

卸载软件包也十分方便,输入以下命令即可完成软件包的卸载:

1
sudo box remove transmission

使用Nginx进行反向代理并启用SSL加密

默认安装好的软件访问方案都是IP:端口的形式,这种模式不但暴露了服务端的IP,同时也十分难看;SSL加密在这种情况下也并未启动,意味着和服务端的通讯信息有被窃取的风险。本节的目标即是解决上述问题,主要采用以下思路:

  • 通过域名访问,解决访问难看的问题,同时为SSL加密提供前置条件
  • 利用Cloudflare的代理CDN,实现隐藏服务器IP的功效
  • 申请let's encrypt 的免费SSL实现SSL加密

前置条件:

  • 专属域名一个,没有域名的可以前往namesilo注册一美元一年的6位数字xyz域名
  • Cloudflare账号,并将域名托管至Cloudflare,可以前往cloudflare 官网免费注册

安装过程

1
2
3
4
# 安装nginx
sudo box install nginx
# 安装 let's encrypt
sudo box install letsencrypt

在安装let's encrypt的过程中,会要求输入预绑定的域名,此时前往Cloudflare DNS界面,为域名添加一个A记录:

a-record

test为域名前缀,IPv4地址为服务器的IPv4地址

添加完毕后,在SSH中输入该域名后回车一直选y直到要求输入API key:

1
2
3
4
5
6
7
8
9
10
INPUT	Enter domain name to secure with LE
> test.mydomain.xyz
INPUT Do you want to apply this certificate to your swizzin default conf?
(y/n) > y
INPUT Is your DNS managed by CloudFlare?
(y/n) > y
INPUT Does the record for this subdomain already exist?
(y/n) > y
INPUT Enter CF API key
>

此时前往Cloudflare的API 管理页面,查看Global API Key并复制后输入并继续输入Cloudflare的注册邮箱:

1
2
3
4
INPUT	Enter CF API key
> asdsfsafafgerawdagfaggfsafa
INPUT CF Email
> email@google.com

安装完成,现在可以通过 域名/transmission的方式访问相关页面了,那把绿色的小锁也成功挂上了!

ssl

安装灯大版 Filebrowser Enhanced 并整合控制面板

Panel 安装

PanelSwizizn自带的控制面板系统,其提供了服务器性能监控,流量统计,快捷导航等功能;更为重要的是,安装Panel以后,仅需要在Panel面板登录,便可自动通过其他软件的http验证,避免多次重复验证的情况。

1
sudo box install panel

swizzin-panel

灯大版 Filebrowser Enhanced安装

File Browser 是一个基于 Web 的文件管理器。它可以使你随时随地的对设备的文件进行基本的管理操作,如:创建、删除、移动、复制等。它除了可以让你进行文件管理之外,还有一些其他的功能。它支持多个用户的管理,而且每个用户可以拥有自己可以访问的文件和权限。它还支持文件分享,就行网盘那样,你可以通过它来向你的朋友分享文件。你还可以用它来执行一些 Linux 命令,比如你想要在当前目录下克隆一个代码库,就可以用它来执行git等命令。

Swizzin本身支持一键安装原版Filebrowser,不过灯大版Filebrowser Enhanced(简称FBE) 在原版的基础上添加了 查看mediainfo、提取字幕、一键做种、快速截图等各种强大的功能,显然更适合我们使用,因此这里我们使用docker安装FBE

FBE Docker仓库:https://hub.docker.com/r/80x86/filebrowser

  1. 安装Docker

    1
    apt install docker-compose #安装docker-compose同时安装好docker
  2. 运行FBE容器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # 推荐使用Swizzin主账户sudo运行而非root用户运行,否者请注意GUID相关变量配置
    IMAGE_NAME=80x86/filebrowser

    WEB_PORT=8082
    FB_AUTH_SERVER_ADDR="127.0.0.1"
    mkdir -p $HOME/docker/fb/config $HOME/docker/fb/myfiles #请将这两个替换为要存储的配置文件路径和需要通过FBE浏览的目录路径
    docker run -d --name fb \
    --restart=unless-stopped \
    -e PUID=$UID \
    -e PGID=$GID \
    -e UMASK_SET=133 \
    -e WEB_PORT=$WEB_PORT \
    -e FB_AUTH_SERVER_ADDR=$FB_AUTH_SERVER_ADDR \
    -e FB_BASEURL=/fileborwser \
    -p $WEB_PORT:$WEB_PORT \
    -v $HOME/docker/fb/config:/config \
    -v $HOME/docker/fb/myfiles:/myfiles \
    --mount type=tmpfs,destination=/tmp \
    ${IMAGE_NAME}:2.9.3-amd64
  3. 修改nginx文件,实现fbe的反向代理

    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
    sudo -i
    cat > /etc/nginx/apps/fbe.conf << EOF
    location /filebrowser {
    # 注意端口和上述端口一致
    proxy_pass http://localhost:8082;
    #
    proxy_pass_request_headers on;
    #
    proxy_set_header Host $host;
    #
    proxy_http_version 1.1;
    #
    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;
    proxy_set_header X-Forwarded-Protocol $scheme;
    proxy_set_header X-Forwarded-Host $http_host;
    #
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;
    #
    proxy_set_header X-Forwarded-Ssl on;
    #
    proxy_redirect off;
    proxy_buffering off;
    auth_basic off;

    }
    EOF
  4. 修改Panel配置文件,实现自定义侧边栏

    关于如何自定义侧边栏,Swizzin的官网有非常详细的文档提供。这里我们只是为了整合FBE,可以采取取巧一点的办法,借尸还魂利用原版的FB,只需要通过以下命令告诉Swizzin我们已经安装了FB即可

    1
    2
    sudo touch /install/.filebrowser.lock
    systemctl restart panel

安装 web shell 并更启用自定义样式

软件仓库: https://github.com/shellinabox/shellinabox

通常情况下,我们在访问任何远程服务器时,会使用常见的通信工具如OpenSSHPutty等。但是,有可能我们在防火墙后面不能使用这些工具访问远程系统,或者防火墙只允许HTTPS流量才能通过。不用担心!即使你在这样的防火墙后面,我们依然有办法来访问你的远程系统。而且,你不需要安装任何类似于OpenSSHPutty的通讯工具。你只需要有一个支持JavaScriptCSS的现代浏览器,并且你不用安装任何插件或第三方应用软件。

这个 Shell In A Box,发音是shellinabox,是由Markus Gutschke开发的一款自由开源的基于Web的Ajax的终端模拟器。它使用AJAX技术,通过Web浏览器提供了类似原生的 Shell 的外观和感受。

对于我个人而言,安装这个web shell的主要原因是ssh连接会经常掉线,而使用web shell则能够明显减轻这种情况。不过由于其默认的亮色模式配合闪瞎眼特效容易对视力造成不可逆的损伤,我们还需要通过自定义CSS来实现暗色模式。

  1. 安装shellinabox

    1
    sudo box install shellinabox
  2. 修改shellinabox.service

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    sudo cat > /etc/systemd/system/shellinabox.service <<EOF
    [Unit]
    Description=Shell in a Box service
    After=sshd.service

    [Service]
    User=root
    Type=forking
    EnvironmentFile=/etc/default/shellinabox
    ExecStart=/usr/bin/shellinaboxd -q --background=/var/run/shellinaboxd.pid -c /var/lib/shellinabox -p 4200 -u shellinabox -g shellinabox --user-css "Gruvbox Monaco:+/etc/shellinabox/options-enabled/02_GruvboxMonaco.css;Color Terminal:+/etc/shellinabox/options-enabled/01+Color Terminal.css" $SHELLINABOX_ARGS
    ExecReload=/bin/kill -HUP
    KillMode=process
    Restart=on-abort

    [Install]
    WantedBy=multi-user.target
    EOF
  3. 添加自定义CSS

    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
    sudo vi /etc/shellinabox/options-available/02_GruvboxMonaco.css <<EOF
    #vt100 #cursor.bright {
    background-color: #fbf1c7;
    color: #282828;
    }

    #vt100 .ansiDef {
    color: #fbf1c7;
    }

    #vt100 .ansiDefR {
    color: #282828;
    }

    #vt100 .bgAnsiDef {
    background-color: #282828;
    }

    #vt100 .bgAnsiDefR {
    background-color: #fbf1c7;
    }

    #vt100 #scrollable.inverted .ansiDef {
    color: #fbf1c7;
    }

    #vt100 #scrollable.inverted .ansiDefR {
    color: #282828;
    }

    #vt100 #scrollable.inverted .bgAnsiDef {
    background-color: #282828;
    }

    #vt100 #scrollable.inverted .bgAnsiDefR {
    background-color: #fbf1c7;
    }

    @font-face {
    font-family: "Monaco";
    src: url(https://github.com/todylu/monaco.ttf/raw/master/monaco.ttf);
    }

    #vt100 #console, #vt100 #alt_console, #vt100 #cursor, #vt100 #lineheight, #vt100 .hidden pre {
    font-family: "Monaco","Monaco","Monaco","Monaco","Monaco","Monaco";
    font-size: 13px;
    }
    EOF
    sudo cd /etc/shellinabox/options-enabled
    sudo ln -s /etc/shellinabox/options-available/02_GruvboxMonaco.css 02_GruvboxMonaco.css
    sudo systemctl restart shellinabox.service