文字 「教程」创建自己的影视库和各种服务
文字
取消

「教程」创建自己的影视库和各种服务

服务器相关配置

万一服务器有问题,按这个步骤来。带星号* 是舍弃的项目。

设置su密码:

1
sudo passwd

0 终端设置与美化

0.1 命令行使用代理

安装:

1
sudo apt install proxychains4

打开配置文件

1
sudo nano /etc/proxychains4.conf

在尾部添加代理服务器协议 + ip + port

1
2
# socks4 127.0.0.1 9050 # 把原来的注释掉
socks5 127.0.0.1 1080

使用:

1
proxychains4 <命令>

0.2 安装nushell和配置Oh-my-posh

0.2.1 安装 Rust

1
2
3
sudo apt install gcc #rust必需要的

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

0.2.2 安装依赖

1
2
sudo apt install pkg-config libssl-dev
sudo apt install libxcb-composite0-dev libx11-dev

0.2.3 使用 crates.io 进行构建

1
cargo install nu

安装完毕后,我们可以使用 nu 命令运行 Nu。

0.2.4 nu安装扩展

将扩展的仓库clone 下来,然后构建执行文件。

1
2
3
4
5
git clone <repositories.git>

cd <repositories>
cargo build --release
register ./target/release/<repositories>

0.2.5 Oh-my-posh

参考 官方文档 ,很详尽。

1 fstab文件的配置

1.1 查看磁盘空间

1
sudo fdisk -l

1.2 查看磁盘信息

1
blkid

1.3 找到fstab文件

1
cd /etc

1.4 打开fstab,我习惯用nano

1
sudo nano fstab

1.5 编辑

在尾部加入以下

1
2
3
4
5
6
LABEL=writable  /       ext4    discard,errors=remount-ro       0 1
UUID="3C2831055A5270C3" /mdata ntfs defaults 0 1
UUID="5CB7E03A333A1F21" /movie ntfs defaults 0 1
UUID="26BADED554B2A139" /rdata ntfs defaults 0 1
UUID="30B8B9F6B8B9BB24" /avdata ntfs defaults 0 1
UUID="451F30BC5E8250E3" /home/ubuntu/pdata ntfs defaults 0 1

ctrl + x保存,重启生效。

2 samba配置

2.1 安装samba

要安装 Samba,我们运行:

1
2
sudo apt update
sudo apt install samba

2.2 设置Samba

现在安装了 Samba,我们需要创建一个目录供其共享:

1
mkdir <pathname>

上面的命令创建一个新文件夹 sambashare在我们稍后将共享的主目录中,我直接分享 ~ 目录。

Samba 的配置文件位于 /etc/samba/smb.conf. 要将新目录添加为共享,我们通过运行以下命令来编辑文件:

1
sudo nano /etc/samba/smb.conf

在文件底部,添加以下行:

1
2
3
4
5
[sambashare] 
		comment = <title>
    path = <pathname>
    read only = no
    browsable = yes

然后按 Ctrl-O保存和 Ctrl-X退出文本编辑器。

现在我们已经配置了新共享,保存它并重新启动 Samba 使其生效:

1
sudo service smbd restart

更新防火墙规则以允许 Samba 流量:

1
sudo ufw allow samba

由于 Samba 不使用系统帐户密码,因此我们需要为我们的用户帐户设置一个 Samba 密码:

1
sudo smbpasswd -a username //username为用户名

windows用IPv6访问:

1
\\240e-335-2805-2be0-dea6-32ff-fefe-1496.ipv6-literal.net

:- 分隔。

3 安装Emby

3.1 下载Emby

链接:Arm64架构X64架构

3.2 安装

1
2
dpkg -i emby-server-deb_4.7.11.0_arm64.deb //arm64架构
dpkg -i emby-server-deb_4.7.11.0_amd64.deb //X64架构

4 安装Docker

安装docker的命令很简单

1
2
sudo apt update
sudo apt install -y docker.io

安装的时间可能有一点长,请耐心等待。。。 安装完成后可能需要启动下。。

1
systemctl start docker

设置开机就启动docker

1
systemctl enable docker

查看docker是否安装成功

1
docker version

注意这里只显示了Client的信息,下面有一个报错: persission denied…,这个是因为我们安装的时候是用的sudo安装,在这里是没有权限连接docker的服务端,解决办法是把当前用户加入到docker组里面去。

首先新建一个docker组

1
sudo groupadd docker

但是很可能已经有了docker组了,已有的话就不用管了,继续下一步

然后把当前用户加入docker组

1
sudo gpasswd -a ${USER} docker

重启docker

1
sudo service docker restart

最后一步肥肠重要。。切换当前会话到新 group

1
newgrp - docker

最后测试下效果

1
docker version
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
Client:
 Version:           20.10.12
 API version:       1.41
 Go version:        go1.17.3
 Git commit:        20.10.12-0ubuntu4
 Built:             Mon Mar  7 17:11:41 2022
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.12
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.3
  Git commit:       20.10.12-0ubuntu4
  Built:            Mon Mar  7 15:57:50 2022
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.5.9-0ubuntu3.1
  GitCommit:
 runc:
  Version:          1.1.0-0ubuntu1.1
  GitCommit:
 docker-init:
  Version:          0.19.0
  GitCommit:

最后的最后,因为国内网速问题,下载镜像比较慢所以可以使用国内大厂提供的加速器,我这里使用的是阿里云提供的加速器,使用镜像加速必须得改一下docker的配置文件 /etc/docker/daemon.json

1
sudo nano /etc/docker/daemon.json

在里面加入镜像加速器地址。。

1
2
3
{  
		"registry-mirrors": ["https://registry.docker-cn.com"]
}

完成。

5 安装Bitwarden

一款密码管理器

开启HTTPS:

1
2
3
4
5
6
docker run -d --name bitwarden \
	-e ROCKET_TLS='{certs="/ssl/certs.pem",key="/ssl/key.key"}' \
  -v /home/ubuntu/Nginx/:/ssl/ \
  -v /Bitwarden/:/data/ \
  -p 443:80 \
  vaultwarden/server:latest

6 安装Alist*

一款小云盘

1
2
docker pull xhofe/alist:latest
docker run -d --restart=always -v /home/ubuntu:/opt/alist/data -p 5244:5244 -e UMASK=022 --name="alist" xhofe/alist:latest

查看管理员信息:

1
docker exec -it alist ./alist admin

可以使用另外一个项目:

1
2
3
4
5
6
7
sudo docker run -d \
    --name=zfile \
    --restart=always \
    -p 3555:8080 \
    -v /root/zfile/conf:/root/.zfile-v4 \
    -v /home/ubuntu/pdata/zfile/file:/root/zfile/data \
		stilleshan/zfile

7 安装DDNS

1
docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go

8 安装Excalidraw

一款画板工具

1
docker run --rm -dit --name excalidraw -p 5000:80 jauderho/excalidraw

9 Apache配置

9.1 安装Apache

1
sudo apt-get  install  -y apache2

9.2 开启Apache中对Webdav协议的支持

9.2.1 开启Apache中对Webdav协议的支持 (记住最好在用户目录下执行否则报错)

1
2
3
cd ~
sudo a2enmod dav
sudo a2enmod dav_fs

9.2.2 创建共享目录并修改权限

1
2
sudo mkdir -p /var/www/webdav
sudo chown -R www-data:www-data  /var/www/webdav

9.2.3 创建Webdav的访问用户数据库,顺便创建用户piguest

1
2
sudo htpasswd -c /etc/apache2/webdav.password pi
#sudo htpasswd /etc/apache2/webdav.password guest

9.2.4 修改用户数据库访问权限

1
2
sudo chown root:www-data /etc/apache2/webdav.password
sudo chmod 640 /etc/apache2/webdav.password

9.2.5 打开默认配置文件

1
sudo nano /etc/apache2/sites-available/000-default.conf

全部替换为以下内容(记得先备份):

1
2
3
4
5
6
7
8
9
10
Alias /webdav  /var/www/webdav

<Location /webdav>
 Options Indexes
 DAV On
 AuthType Basic
 AuthName "webdav"
 AuthUserFile /etc/apache2/webdav.password
 Require valid-user
</Location>

原文件:

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
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>
1
2
sudo /etc/init.d/apache2 force-reload
sudo /etc/init.d/apache2 restart

9.3 设置https

前提条件

  • 已下载Apache服务器证书。
  • 已安装Open SSL。

环境准备

  • 操作系统:Ubuntu
  • Web服务器:Apache 2

1 执行以下命令,在apache2目录下创建ssl目录。

1
mkdir /etc/apache2/cert

2 执行以下命令,将下载的阿里云证书文件复制到ssl目录中。

1
2
3
cp -r YourDomainName_public.pem /etc/apache2/cert
cp -r YourDomainName_chain.pem /etc/apache2/cert
cp -r YourDomainName.key /etc/apache2/cert

3 执行以下命令,启用SSL模块

1
sudo a2enmod ssl

4 执行以下命令,修改SSL配置文件default-ssl.conf

1
nano /etc/apache2/sites-available/default-ssl.conf

在default-ssl.conf文件中找到以下参数,修改后保存并退出。

1
2
3
4
5
6
7
8
9
10
11
<IfModules mod_ssl.c>
<VirtualHost *:443>  
...
ServerName   #修改为证书绑定的域名。
SSLEngine on
SSLCertificateFile /home/ubuntu/.ssl/apache2/rainsin.cn_cert.pem
SSLCertificateKeyFile /home/ubuntu/.ssl/apache2/rainsin.cn_key.key
SSLCertificateChainFile /home/ubuntu/.ssl/apache2/rainsin.cn_chain.pem
...
</VirtualHost>
</IfModules

5 执行以下命令,把default-ssl.conf映射至/etc/apache2/sites-enabled文件夹中建立软链接,实现两者之间的自动关联。

1
sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl.conf

6 执行以下命令,重新加载Apache 2配置文件。

1
sudo /etc/init.d/apache2 force-reloadsudo /etc/init.d/apache2 restart

完成。

9.4 设置反向代理

1
2
3
4
5
sudo a2enmod rewrite    //启用.htaccess规则,打开重写

sudo a2enmod proxy

sudo a2enmod proxy_http  //启用反向代理

安装好后,Apache2 HTTP 服务器关于站点的配置文件位于 /etc/apache2/sites-enabled/ 中,我们使用熟悉的编辑器(比如 nano 或者 vim)编辑默认生成的文件:

1
sudo nano /etc/apache2/sites-enabled/000-default.conf

在该配置文件的最底部,添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
<VirtualHost *:2000>
  ServerName <二级域名>.rainsin.cn
  ServerAlias <二级域名>.rainsin.cn
  SSLProxyEngine on
  SSLEngine on
  SSLCertificateFile /etc/apache2/cert/rainsin.cn/cert.pem
  SSLCertificateKeyFile /etc/apache2/cert/rainsin.cn/key.key
  SSLCertificateChainFile /etc/apache2/cert/rainsin.cn/chain.pem
  
  ProxyPass / http://localhost:<port>
  ProxyPassReverse / http://localhost:<port>
</VirtualHost>

我统一将所有的内部端口映射在2000端口上,用二级域名区分应用,在这之前需要将2000端口加入到ports.conf中,不然无法访问。

1
Listen 2000 //你在apache中用的的端口都要在这里配置

服务器相关配置

10 安装rss服务器

1
2
3
4
5
6
7
8
9
docker run -d \
  --name=freshrss \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -p 3444:80 \
  -v /home/ubuntu/rss:/config \
  --restart unless-stopped \
  lscr.io/linuxserver/freshrss:latest

11 安装komga

一款漫画管理阅读软件

1
2
3
4
5
6
7
8
docker run -d \
  --name=komga \
  --user 1000:1000 \
  -p 2666:8080 \
  -v /home/ubuntu/komga/config:/config \
  -v /home/ubuntu/pdata/komga:/data \
  --restart unless-stopped \
  gotson/komga

12 安装webdav

主要用来zotero的备份

1
2
3
4
5
6
7
8
9
docker run --name webdav \
  --restart=unless-stopped \
  -p 3478:80 \
  -v <webdav-path>:/data \
  -e USERNAME=<webdav> \
  -e PASSWORD=<webdav> \
  -e UDI=1000 \
  -e GID=1000 \
  -d  derkades/webdav

13 图床安装

13.1 蓝空图床:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker network create lsky-pro-net

docker run -d -p 3306:3306 --name mysql8.0.29 --network lsky-pro-net --network-alias mysql --restart=always -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.29

docker run -d --name=lsky-pro --restart=always --network lsky-pro-net -v /home/ubuntu/pdata/lsky-pro-data:/var/www/html -p 7791:80 dko0/lsky-pro:2.0.4

docker exec -it mysql8.0.29 bash

mysql -uroot -p123456

create user 'lskypro'@'%' identified by '123456';
grant all privileges on *.* to 'lskypro'@'%' with grant option;
flush privileges;
create database lskypro;

13.2 Chevereto-free安装:

1
docker run -d   --name=chevereto   -e PUID=1000   -e PGID=1000   -e TZ=Asia/Shanghai   -p 5080:80   -p 9999:443   -v /chevereto/config:/config   -v /mdata:/data   --restart unless-stopped   linuxserver/chevereto:latest

13.3 LightPicture的安装:

这个没有docker镜像,安装可能比较麻烦,过程中可能会有问题。

先决条件:

大环境:

  • apache2
  • php (7.2~7.4)
  • MySQL(≥5.5)

PHP环境:

  • PDO扩展
  • GD库
  • fileinfo扩展
  • curl扩展
  • ZipArchive 支持

Apache环境:

  • rewrite模块
  • SSL模块

13.3.1 安装php(7.4版本)

1. 使用apt-fast 提升下载速度的软件,安装软件时,通过增加线程使下载软件速度加快。

1
2
sudo add-apt-repository ppa:apt-fast/stable
sudo apt-get install apt-fast

2. 卸载系统中已有的php版本和扩展,如果以前安装过比7.4更高或比7.2更低的版本则需要运行。

1
sudo apt-get autoremove php*

3. 添加php7.4的源

1
sudo add-apt-repository ppa:ondrej/php && sudo apt-get update

4. 使用apt-fast 安装php7.4

1
sudo apt-fast -y install php7.4

5. 可能需要安装的扩展

1
sudo apt-fast install php7.4-fpm php7.4-mysql php7.4-curl php7.4-json php7.4-mbstring php7.4-xml php7.4-intl php7.4-gd php7.4-bcmath php7.4-zip*

13.3.2 MySQL的配置

MySQL的安装在第17节。

需要执行的sql文件在public/install路径下的lp.sql文件。

首先,需要创建database,可以使用MySQL管理软件创建也可以命令行进入MySQL创建,然后执行在public/install路径下的lp.sql文件。

我使用的是Navicat for windows,mac端好像也有,mac端也可以用Sequel Ace、MySQL Workbench、TablePlus等等。

也可以使用命令行:

1
sudo mysql -u root -p

输入密码,进入mysql:

1
2
3
4
5
CREATE DATABASE <name>;

use <name>;

source /path/to/lp.sql;
1
systemctl restart php-fpm.service

13.3.3 Apache2配置

将以下配置添加进apache的任意可生效的conf文件中:

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
<VirtualHost *:2000>
				#你的域名,端口2000可以改
        ServerName  <url-name>
        ServerAlias <title>

				#HTTPS配置
        SSLEngine on

        SSLCertificateFile /home/ubuntu/.ssl/apache2/rainsin.cn_cert.pem
        SSLCertificateKeyFile /home/ubuntu/.ssl/apache2/rainsin.cn_key.key
        SSLCertificateChainFile /home/ubuntu/.ssl/apache2/rainsin.cn_chain.pem
				
				#设置为public的绝对路径
        DocumentRoot /path/to/public
				#首页文件
        DirectoryIndex index.html index.php
				#public文件的权限必须为可读可写,运行 chmod 755 /项目根目录/public
        <Directory "/LightPicture/public">
                Options FollowSymLinks ExecCGI
                AllowOverride All
                Order allow,deny
                Allow from all
                Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

将以下文字添加进 public/.htaccess 中:

1
2
3
4
5
6
7
8
<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

开启rewrite模块:

1
sudo **a2enmod rewrite**

重启apache2:

1
2
sudo /etc/init.d/apache2 force-reload
sudo /etc/init.d/apache2 restart

13.3.4 安装完成

设置config/database.php 文件:

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
<?php

return [
    // 默认使用的数据库连接配置
    'default'         => env('database.driver', 'mysql'),

    // 自定义时间查询规则
    'time_query_rule' => [],

    // 自动写入时间戳字段
    // true为自动识别类型 false关闭
    // 字符串则明确指定时间字段类型 支持 int timestamp datetime date
    'auto_timestamp'  => true,

    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',

    // 时间字段配置 配置格式:create_time,update_time
    'datetime_field'  => '',

    // 数据库连接配置信息
    'connections'     => [
        'mysql' => [
            // 数据库类型
            'type'            => env('database.type', 'mysql'),
            // 服务器地址
            'hostname'        => env('database.hostname', '127.0.0.1'),
            // 数据库名
            'database'        => env('database.database', 'name'),
            // 用户名
            'username'        => env('database.username', 'root'),
            // 密码
            'password'        => env('database.password', 'password'),
            // 端口
            'hostport'        => env('database.hostport', '3306'),
            // 数据库连接参数
            'params'          => [],
            // 数据库编码默认采用utf8
            'charset'         => env('database.charset', 'utf8'),
            // 数据库表前缀
            'prefix'          => env('database.prefix', 'osuu_'),

            // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
            'deploy'          => 0,
            // 数据库读写是否分离 主从式有效
            'rw_separate'     => false,
            // 读写分离后 主服务器数量
            'master_num'      => 1,
            // 指定从服务器序号
            'slave_no'        => '',
            // 是否严格检查字段是否存在
            'fields_strict'   => true,
            // 是否需要断线重连
            'break_reconnect' => false,
            // 监听SQL
            'trigger_sql'     => env('app_debug', true),
            // 开启字段缓存
            'fields_cache'    => false,
        ],

        // 更多的数据库配置信息
    ],
];

在浏览器中输入http(s)://ip+port/install 进行安装,第一步会检查环境是否配置完成,会显示未配置好的部分,根据它的提示配置好后第二步就填写MySQL的信息,最后完成。

14 博客安装*

1
2
3
4
5
6
7
8
9
docker run \
  -it -d \
  --name halo \
  -p 8090:8090 \
  -v <path>:/root/.halo2 \
  halohub/halo:2.2.0 \
  --halo.external-url=http://localhost:8090/ \
  --halo.security.initializer.superadminuser=admin \
  --halo.security.initializer.superadminpassword=P@88w0rd

备份数据(重要)

1
cp -r <path> <备份path>

15 minio安装*

这是一个对象存储服务。

首先将域名的证书文件复制到<config-path>/certs下,<config-path>这是自定义的一个路径,将在后面映射在docker容器中,证书命名为private.keypublic.crt,注意pem可以直接重命名为crt

然后运行:

1
2
3
4
5
6
7
8
9
 docker run --network=host \
    -p 9000:9000 -p 9001:9001 --name minio \
    -d --restart=always \
    -e "MINIO_ACCESS_KEY=<username>" \
    -e "MINIO_SECRET_KEY=<password>" \
    -e "MINIO_SERVER_URL=https://minio.rainsin.cn:9000" \
    -v <data-path>:/data \
    -v <config-path>:/root/.minio \
    minio/minio server /data --console-address "minio.rainsin.cn:9001" --address "minio.rainsin.cn:9000"

不加network=host(访问宿主机网络),可能minio.rainsin.cn这个域名无法使用。

MINIO_SERVER_URL为分享链接域名。

以下弃用:

1
nohup sudo MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=ABC871220 minio server /home/ubuntu/pdata/minio/data --console-address ":9001" &

16 MySQL安装

1
sudo apt-get install mysql-server

设置root账户配置为使用密码进行身份验证,并且设置密码:

1
2
3
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword';

FLUSH PRIVILEGES;

'localhost' 可以改为'%'mypassword 是你的密码。

然后输入:

1
sudo mysql_secure_installation

输入上面设置的密码,之后全部n

设置外网访问:

1
2
3
4
5
6
7
8
9
mysql -u root -p

mysql>use mysql;

mysql>update user set host = '%' where user =root;

mysql>flush privileges;

mysql>select host,user from user where user='root';

使用sql文件初始化数据库:

1
mysql -u root -p dbname<filename.sql

注意:dbname是自定义的数据库名,且必须先创建好。

17 图书管理系统*

1
docker run -d --restart=always --name calibresrv_web -p 8083:8083 -v /mdata/book/config:/config -v /mdata/book/Library:/books -v /mdata/book/Books_Calibre:/Books_Calibre -v /mdata/book/Books_Calibre_Backup:/Books_Calibre_Backup \-v /mdata/book/Backup_Library:/Backup_Library  -e NOTIFICATIONS=enabled -e TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxx" -e CHATID="xxxxxxxxx"  -d mephistoxol/calibresrv_web
1
docker run -d --name=calibre --security-opt seccomp=unconfined `#optional` -e PUID=1000 -e PGID=1000 -e TZ=Asia/Shanghai -e PASSWORD= `#optional` -e CLI_ARGS= `#optional` -p 8082:8080 -p 8081:8081 -v /path/to/data:/config --restart unless-stopped linuxserver/calibre:latest

18 Bt下载管理器*

18.1 transmission和qBittorrent的安装及配置

下载种子和做种工具。

qBittorrent的默认用户名/密码:admin/adminadmin

舍弃:

1
2
3
docker create --name=qbittorrent  -e WEBUIPORT=8080 -e PUID=1026 -e PGID=100 -e TZ=Asia/Shanghai -p 6881:6881 -p 6881:6881/udp -p 8087:8080 -v /mdata/bt/config:/config  -v /mdata/bt/download:/downloads --restart unless-stopped superng6/qbittorrent:latest

docker start qbittorrent
1
docker run -d --name=transmission -e PUID=1000 -e PGID=1000 -e TZ=Asia/Shanghai -e TRANSMISSION_WEB_HOME=/transmission-web-control/src -e USER=<user> -e PASS=<pass> -e WHITELIST=* -e PEERPORT=51413 -e HOST_WHITELIST=* -p 9091:9091 -p 51413:51413 -p 51413:51413/udp -v /mdata/config:/config -v /mdata/bt/downloads:/downloads -v /mdata/bt/watch/folder:/watch -v /home/ubuntu/transmission-web-control:/transmission-web-control --restart unless-stopped linuxserver/transmission:latest

18.1.1 下载 transmission-web-control

GitHub地址:https://github.com/ronggang/transmission-web-control

Gitee 地址: https://gitee.com/culturist/transmission-web-control

国内推荐在 Gitee 下载。

解压文件到本地目录。

18.1.2 配置邮箱通知

  1. 安装bsd-mailx

    1
    2
    
     sudo apt-fast install bsd-mailx
        
    
  2. 配置s-nail

    1
    
     sudo nano /etc/s-nail.rc
    

    配置邮箱SMTP服务:

    1
    2
    3
    4
    5
    
     set from="xxxxxxxx@qq.com"   #用来发送邮件的邮箱
     set smtp="smtps://smtp.qq.com:465" #你所选邮箱的SMTP服务器
     set smtp-auth-user="xxxxxxxx@qq.com" 
     set smtp-auth-password="XXXXXXXXXXXX"  #邮箱授权码
     set smtp-auth=login
    
  3. 测试

    1
    
     echo "小可爱!" | s-nail -s "这是个测试邮件!" xxxxxxxx@qq.com 
    
  4. Tg通知准备

    https://t.me/BotFather,打开与它的聊天界面,不论是 Windows mac 还是 Android iOS 的 telegram 客户端。

    1. 创建 bot 以及获取 token

      输入 /newbot后回车,它会回复以下内容:

      Alright, a new bot. How are we going to call it? Please choose a name for your bot.

    2. 这个名字是显示名称 (display name),不是唯一识别码,现在随便设置一下,之后可以通过 /setname修改,比如设置成Zhang san's sweety bot
    3. 接着会让你设置唯一名称。字符串必须 endsWith bot,比如 abc_botHellobot都是合法的。如果你设置的名字已经被占用需要重新设置。比如你设置成了 test_bot

      Good. Now let’s choose a username for your bot. It must end in bot . Like this, for example: TetrisBot or tetris_bot.

    4. 恭喜!设置成功。会返回给你重要的 API token,务必要保存好它。另外你的 bot 的唯一 url 就已经生成: [https://t.me/test_bot](https://t.me/test_bot)

      Done! Congratulations on your new bot. You will find it at t.me/test_bot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you’ve finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

      Use this token to access the HTTP API: 12345678:sdfsfadsfasdfasdfasdfgdfhdfghfgh Keep your token secure and store it safely, it can be used by anyone to control your bot.

      For a description of the Bot API, see this page: https://core.telegram.org/bots/api

      红色的字符就是BOT API的TOKEN。

    5. 一些其他必要的命令:
      • /setdescription 帮助你设置 bot 的描述
      • /setuserpic 设置 bot 的头像。上传的图片 size 需要大于等于 150x150。而且上传图片需要选择压缩,不能上传文件!
    6. 获取chat_id

      使用的url:https://api.telegram.org/bot{token}/getUpdates

      使用第4步获得的 token替换上述 url 中的 {token}然后得到新的 url,复制粘贴到浏览器地址栏,回车请求。不出意外你会得到如下 response

      1
      2
      3
      4
      
       {
           "ok": true,
           "result": []
       }
      

      很好。这时你打开你的 bot,随便和它说一句话,比如给它发一句 “Hello World”,或者将机器人添加进一个自建的群组或者频道,然后重新请求一遍上述的 url(替换过 token 的),不出意外你收到的 response 是这样了

      1
      2
      3
      4
      5
      6
      7
      
       {"ok":true,"result":[{"update_id":248345768,
       "my_chat_member":{"chat":{**"id":-1001779449685**,"title":"BT\u72b6\u6001\u673a","type":"supergroup"},"from":{"id":1270423426,"is_bot":false,"first_name":"Bill","last_name":"Wang","username":"Rainsins"},"date":1678610811,"old_chat_member":{"user":{"id":6213936314,"is_bot":true,"first_name":"chatGPT","username":"rainsinchat_bot"},"status":"left"},"new_chat_member":{"user":{"id":6213936314,"is_bot":true,"first_name":"chatGPT","username":"rainsinchat_bot"},"status":"member"}}},{"update_id":248345769,
       "message":{"message_id":4,"from":{"id":1270423426,"is_bot":false,"first_name":"Bill","last_name":"Wang","username":"Rainsins"},"chat":{"id":-929935885,"title":"BT\u72b6\u6001\u673a","type":"group","all_members_are_administrators":false},"date":1678610811,"migrate_to_chat_id":-1001779449685}},{"update_id":248345770,
       "message":{"message_id":1,"from":{"id":1087968824,"is_bot":true,"first_name":"Group","username":"GroupAnonymousBot"},"sender_chat":{"id":-1001779449685,"title":"BT\u72b6\u6001\u673a","type":"supergroup"},"chat":{"id":-1001779449685,"title":"BT\u72b6\u6001\u673a","type":"supergroup"},"date":1678610811,"migrate_from_chat_id":-929935885}},{"update_id":248345771,
       "message":{"message_id":2,"from":{"id":1270423426,"is_bot":false,"first_name":"Bill","last_name":"Wang","username":"Rainsins"},"chat":{"id":-1001779449685,"title":"BT\u72b6\u6001\u673a","type":"supergroup"},"date":1678610813,"new_chat_participant":{"id":5042722248,"is_bot":true,"first_name":"\u5c0fC-\u5de5\u5177\u4eba","username":"CAOYYDS_BOT"},"new_chat_member":{"id":5042722248,"is_bot":true,"first_name":"\u5c0fC-\u5de5\u5177\u4eba","username":"CAOYYDS_BOT"},"new_chat_members":[{"id":5042722248,"is_bot":true,"first_name":"\u5c0fC-\u5de5\u5177\u4eba","username":"CAOYYDS_BOT"}]}},{"update_id":248345772,
       "message":{"message_id":3,"from":{"id":1270423426,"is_bot":false,"first_name":"Bill","last_name":"Wang","username":"Rainsins"},"chat":{"id":-1001779449685,"title":"BT\u72b6\u6001\u673a","type":"supergroup"},"date":1678610831,"new_chat_participant":{"id":1745206100,"is_bot":true,"first_name":"\u6d88\u606f\u4e91\u2601\ufe0f","username":"MsgWikiBot"},"new_chat_member":{"id":1745206100,"is_bot":true,"first_name":"\u6d88\u606f\u4e91\u2601\ufe0f","username":"MsgWikiBot"},"new_chat_members":[{"id":1745206100,"is_bot":true,"first_name":"\u6d88\u606f\u4e91\u2601\ufe0f","username":"MsgWikiBot"}]}},{"update_id":248345773,
       "message":{"message_id":5,"from":{"id":1270423426,"is_bot":false,"first_name":"Bill","last_name":"Wang","username":"Rainsins","language_code":"zh-hans"},"chat":{"id":1270423426,"first_name":"Bill","last_name":"Wang","username":"Rainsins","type":"private"},"date":1678614094,"text":"/start","entities":[{"offset":0,"length":6,"type":"bot_command"}]}}]}
      

      如果有json美化插件,可能会好找一些,如果浏览器没有安装一些 json 美化插件,那么复制它们到任何一个在线 json 解析格式化网站,比如https://www.sojson.com/选择对应的格式化功能格式化文本。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      
       {
         "ok": true,
         "result": [
           {
             "update_id": 248345768,
             "my_chat_member": {
               "chat": {
                 **"id": -1001779449685,**
                 "title": "BT状态机",
                 "type": "supergroup"
               },
               ......
             }
           },
           .....
         ]
       }
      

      知道了 token 和 chatId 就可以使用 bot 了。

      curl 测试

      1
      
       curl -s -X POST https://api.telegram.org/bot{token}/sendMessage -d chat_id={chatId} -d text="Hello World"
      
  5. 配置通知脚本

    transmission和qbittorrent的参数不同需要分别配置。可以将它们的脚本分别放在两个文件夹。

    1
    2
    3
    4
    5
    6
    
     cd /var
     sudo mkdir tm qb
     cd tm && sudo touch btmail.sh btadd.sh btseed.sh 
     cd ../
     cd qb && sudo touch btmail.sh btadd.sh
     sudo chmod +xr  /var/tm/*.sh /var/qb/*.sh
    

    然后分别编辑,可以自己写一些功能,比如通知tg、通知邮件、磁力管理(需要bash的一些知识)。

    btmail.sh 为磁力下载完成时运行,btadd.sh为添加磁力成功后运行,btseed.sh为磁力任务完成后运行。

    transmission变量规则:

    • TR_APP_VERSION - Transmission的版本, e.g. 4.0.0
    • TR_TIME_LOCALTIME
    • TR_TORRENT_BYTES_DOWNLOADED - 磁力下载字节数
    • TR_TORRENT_DIR - 磁力下载位置
    • TR_TORRENT_HASH - 磁力哈希
    • TR_TORRENT_ID
    • TR_TORRENT_LABELS - 磁力标签
    • TR_TORRENT_NAME - 磁力名字 (不是文件名)
    • TR_TORRENT_TRACKERS - 磁力trcaker列表

    transmission可以添加以下内容,可以自由更改:

    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
    
     #!/bin/sh
        
     NAIL=/usr/bin/s-nail
     PROXY=/usr/bin/proxychains4 #代理命令,telegram需要。
        
     totalsize=${TR_TORRENT_BYTES_DOWNLOADED}
        
     #格式化容量,将B转换为MB,GB等单位
     totalsize=${torrent_size}
     if [ 1024 -gt $totalsize ];
            then size="$totalsize"B
     elif [ 1048576 -gt $totalsize ];
            then
            size=`echo  "scale=3; a = $totalsize / 1024 ; if (length(a)==scale(a)) print 0;print a"  | bc `
     	size="$size"KB
     elif [ 1073741824 -gt $totalsize ];
            then
            size=`echo  "scale=3; a = $totalsize / 1048576 ; if (length(a)==scale(a)) print 0;print a"  | bc `
     	size="$size"MB
     elif [ 1073741824 -le $totalsize ];
            then
            size=`echo  "scale=3; a = $totalsize / 1073741824 ; if (length(a)==scale(a)) print 0;print a"  | bc `
     	size="$size"GB
     else
            size="0"
             fi
        
     #telegram通知
        
     TMPFILETG=$(mktemp -t qbittorent.XXXXXXXXXX)
     #bot的TOKEN,和chat_id,获取方法参见上条。
     TOKEN=********:**************************
     chat_ID=-***************
        
     #信息内容
     cat > $TMPFILETG << EOF
     *亲,transmission有个磁力🧲下载完成了,赶紧去看看!*
     ---
     客户端:transmission-${TR_APP_VERSION},
     磁力名称:${TR_TORRENT_NAME},
     磁力大小:${size},
     保存地址:${TR_TORRENT_DIR},
     磁力链接:*magnet:?xt=urn:btih:${TR_TORRENT_HASH}*,
     添加时间:$(date '+%Y-%m-%d %H:%M:%S'),
     发扬互联网精神,抵制迅雷吸血💩。
     发扬互联网精神,让每一个种子都生根发芽❀。
     EOF
        
     #读取内容
     DATA=`cat $TMPFILETG`
        
     MODE='Markdown'
     URL="https://api.telegram.org/bot${TOKEN}/sendMessage"
        
     #还可以发送视频,图片等,具体可以参考tg bot api官网
        
     $PROXY curl -s -o /dev/null -X POST $URL -d chat_id=${chat_ID} -d parse_mode=${MODE} -d text="${DATA}"
        
     #邮件通知
        
     #要发送的邮件
     TO_ADDR1="**********@gmail.com"
     TO_ADDR2="***********@qq.com"
     #TO_ADDR2="***********@163.com"
        
     #邮件主题
     SUBJECT="亲,transmission有个磁力🧲下载完成了,赶紧去看看!"
        
     #发送邮件
     $NAIL -s "$SUBJECT" "$TO_ADDR1" < "$TMPFILETG"
     $NAIL -s "$SUBJECT" "$TO_ADDR2" < "$TMPFILETG"
        
     #删除临时文件
     rm "$TMPFILETG"
    

    qbittorrent变量规则:

    • %N:Torrent 名称
    • %L:分类
    • %G:标签(以逗号分隔)
    • %F:内容路径(与多文件 torrent 的根目录相同)
    • %R:根目录(第一个 torrent 的子目录路径)
    • %D:保存路径
    • %C:文件数
    • %Z:Torrent 大小(字节)
    • %T:当前 tracker
    • %I: 信息哈希值 v1
    • %J:信息哈希值 v2
    • %K: Torrent ID

    qbittorrent的设置与transmission不一样,transmission直接输入脚本路径就行,qb的不一样

    1
    
     bash /var/qb/btadd.sh "%N" "%F" "%R" "%D" "%C" "%Z" "%I" "%J"
    

    参数的传入次序很重要,在脚本中我们要用这个次序接收参数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
     #!/bin/sh
        
     torrent_name=$1
     content_dir=$2
     root_dir=$3
     save_dir=$4
     files_num=$5
     torrent_size=$6
     file_hash=$7
     file_hash2=$8
     label=$9
     ......
    

    我的qbittorrent脚本:

    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
    
     #!/bin/sh
        
     torrent_name=$1
     content_dir=$2
     root_dir=$3
     save_dir=$4
     files_num=$5
     torrent_size=$6
     file_hash=$7
     file_hash2=$8
     label=$9
        
     totalsize=${torrent_size}
        
     if [ 1024 -gt $totalsize ];
            then size="$totalsize"B
     elif [ 1048576 -gt $totalsize ];
            then
            size=`echo  "scale=3; a = $totalsize / 1024 ; if (length(a)==scale(a)) print 0;print a"  | bc `
     	size="$size"KB
     elif [ 1073741824 -gt $totalsize ];
            then
            size=`echo  "scale=3; a = $totalsize / 1048576 ; if (length(a)==scale(a)) print 0;print a"  | bc `
     	size="$size"MB
     elif [ 1073741824 -le $totalsize ];
            then
            size=`echo  "scale=3; a = $totalsize / 1073741824 ; if (length(a)==scale(a)) print 0;print a"  | bc `
     	size="$size"GB
     else
            size="0"
             fi
        
     PROXY=/usr/bin/proxychains4
     NAIL=/usr/bin/s-nail
        
     TMPFILETG=$(mktemp -t qbittorent.XXXXXXXXXX)
     TOKEN=***********:***************************
     chat_ID=-*************
        
     cat > $TMPFILETG << EOF
     *亲,有个磁力🧲播种完成了,功德加一!*
     ---
     客户端:qBittorent 4.5.2
     磁力名称:${torrent_name},
     磁力大小:${size},
     保存地址:${save_dir},
     磁力链接:*magnet:?xt=urn:btih:${file_hash}*,
     添加时间:$(date '+%Y-%m-%d %H:%M:%S'),
     发扬互联网精神,抵制迅雷吸血💩。
     发扬互联网精神,让每一个种子都生根发芽❀。
     [动图番号:SSNI-784](https://qcc.woimg.net/images/2020/10/06/ssni-784-1.gif)
     EOF
        
     DATA=`cat $TMPFILETG`
        
     MODE='Markdown'
     URL="https://api.telegram.org/bot${TOKEN}/sendMessage"
        
     $PROXY curl -s -o /dev/null -X POST $URL -d chat_id=${chat_ID} -d parse_mode=${MODE} -d text="${DATA}"
        
     #TO_ADDR为你要通知的邮箱
     TO_ADDR1="********@gmail.com"
     TO_ADDR2="***********@qq.com"
        
     SUBJECT="亲,有个磁力🧲播种完成了,功德加一!"
        
     $NAIL -s "$SUBJECT" "$TO_ADDR1" < "$TMPFILETG"
     $NAIL -s "$SUBJECT" "$TO_ADDR2" < "$TMPFILETG"
        
     rm "$TMPFILETG"
    

18.1.3 安装transmission

  1. 安装

    1
    2
    3
    4
    5
    6
    
     sudo add-apt-repository ppa:ubuntuhandbook1/transmission #最新版PPA
        
     sudo apt-fast update
        
     sudo apt-fast install transmission
     sudo apt-fast install transmission-daemon
    
  2. 修改配置

    修改之前停止transmission-daemon服务,不然会回滚:

    1
    
     sudo service transmission-daemon stop
    
    1
    
     sudo nano /var/lib/transmission-daemon/info/settings.json
    

    修改:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
     {
     		......
     		"blocklist-enabled": true,#黑名单列表
         "blocklist-url":"https://cors.isteed.cc/github.com/ttgapers/transmission-blocklist/releases/download/untagged-529f8302ad5115daf99a/blocklist.gz"
         ......
         "rpc-authentication-required": true
         "rpc-bind-address": "0.0.0.0", 
         "rpc-enabled": true, 
         "rpc-password": "123456", 
         "rpc-port": 9091, 
         "rpc-url": "/transmission/", 
         "rpc-username": "transmission", 
         "rpc-whitelist": "*", 
         "rpc-whitelist-enabled": true, 
         ......
     		"script-torrent-done-enabled": true,
         "script-torrent-done-filename": "/btmail.sh",#邮件通知脚本
         "script-torrent-added-enabled":true,
         "script-torrent-added-filename":"/btadd.sh",#添加任务后运行脚本
         "script-torrent-done-seeding-enabled":true,
         "script-torrent-done-seeding-filename":"/btseed.sh",#任务完成后通知脚本
     		......
     }
    
  3. 更改WEB-UI

    以下方法弃用:

    1
    2
    
     wget https://gitee.com/culturist/transmission-web-control/raw/master/release/install-tr-control-gitee.sh
     sudo bash install-tr-control-gitee.sh
    

    如果过程中有如下错误:cp: cannot stat '/tmp/tr-web-control/transmission-web-control/src/.': No such file or directory 则需要自行创建文件。

    首先将第一步下载的文件解压复制到/tmp/tr-web-control 路径下,然后运行chmod -R 777 /tmp/tr-web-control/transmission-web-control/src/ ,最后再运行上述脚本。

    最后,开启服务:

    1
    
     sudo service transmission-daemon start
    

    新方法:

    直接下载主题文件:

    1
    2
    3
    4
    5
    6
    
     wget https://proxy.zyun.vip/https://github.com/ronggang/transmission-web-control/archive/refs/tags/v1.6.1-update1.zip
     unzip transmission-web-control-1.6.1-update1.zip #解压出来,用啥工具都行
     cd transmission-web-control-1.6.1-update1 #进入目录
        
     sudo rm /usr/share/transmission/public_html #删除本来的public文件夹
     sudo cp -r src /usr/share/transmission/public_html #复制 
    

18.2.5 安装qBittorrent

  1. 安装add-apt-repository命令(非必需)

    1
    
     sudo apt-get update && sudo apt-get install software-properties-common -y
    
  2. 添加qbittorrent-nox的PPA软件源

    1
    2
    3
    4
    5
    
     # qBittorrent 稳定版
     sudo add-apt-repository ppa:qbittorrent-team/qbittorrent-stable
        
     # qBittorrent 测试版
     sudo add-apt-repository ppa:qbittorrent-team/qbittorrent-unstable
    
  3. 安装qbittorrent-nox

    1
    
     sudo apt-get update && sudo apt-get install qbittorrent-nox -y
    
  4. 设置开机启动

    1
    
     sudo apt-get install vim -y && vim /etc/systemd/system/qbittorrent-nox.service
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
     [Unit]
        
     Description=qBittorrent-nox
        
     After=network.target
        
     [Service]
        
     User=root
        
     Type=forking
        
     RemainAfterExit=yes
        
     ExecStart=/usr/bin/qbittorrent-nox -d
        
     [Install]
        
     WantedBy=multi-user.target
    

    修改qbittorrent-nox.service文件后重新载入

    1
    
     sudo systemctl daemon-reload
    

    启动和停止

    1
    2
    
     sudo systemctl start qbittorrent-nox
     sudo systemctl stop qbittorrent-nox
    

    开机自启

    1
    
     sudo systemctl enable qbittorrent-nox
    
  5. 验证

    1
    2
    3
    
     默认账号:admin 密码:adminadmin
        
     默认登陆网址:http://ip:8080
    
  6. ip国家不显示问题的解决

    下载文件:

    dbip-country-lite.mmdb

    先进入root用户:

    1
    
     su
    

    将文件复制到qbittorrent目录(下面的目标路径是用sudo apt安装qb时所用路径,其他的自行寻找):

    1
    
     cp 你的dbip-county-lite.mmdb路径 /root/.local/share/qBittorrent/dbip-county-lite.mmdb
    

    重启服务即可。

    Snipaste_2023-03-14_14-27-48.png

最后反向代理,完成。

19 设置clash代理

Clash 下载

在 Clash release 页面下载相应的版本,对于 Ubuntu 一般使用 clash-linux-amd64-vX.X.X.gz 版本:

1
wget https://github.com/Dreamacro/clash/releases/download/v1.10.0/clash-linux-arm64-v1.10.0.gz

如果直接 wget 速度较慢的话,可以本地下载完成后,使用 SFTP 上传到 Linux 服务器。

然后使用 gunzip 命令解压,并重命名为 clash

1
2
gunzip clash-linux-amd64-v1.10.0.gz
mv clash-linux-amd64-v1.10.0 clash

为 clash 添加可执行权限:

1
chmod u+x clash

Clash 运行时需要 Country.mmdb 文件,当第一次启动 Clash 时(使用 ./clash 命令) 会自动下载(会下载至 /home/XXX/.config/clash 文件夹下)。自动下载可能会因网络原因较慢,可以访问该链接手动下载。

Country.mmdb 文件利用 GeoIP2 服务能识别互联网用户的地点位置,以供规则分流时使用。

配置文件

一般的网络服务提供了 Clash 订阅链接,可以直接下载链接指向的文件内容,保存到 config.yaml 中。或者使用订阅转换服务(如该链接。也可以自行搭建,可参考该文章),将其它订阅转换为 Clash 订阅。

这里推荐使用订阅转换服务,转换后的配置文件已添加更为强大的分流规则。就可以将 Clash 一直保持后台运行,自动分流,且会自动选择最优节点。

Clash 配置文件的完整参数介绍见官方文档。

如果使用订阅转换服务,对于转换后的订阅链接,可以使用以下命令来下载配置文件:

1
curl -o config.yaml 'longURL'

对于 suo.yt 短链接,需要重定向,因此使用以下命令来下载配置文件:

1
curl -L -o config.yaml 'shortURL'

Clash as a daemon

将 Clash 转变为系统服务,从而使得 Clash 实现常驻后台运行、开机自启动等。

普通用户需要 sudo 权限。

配置 systemd 服务

Linux 系统使用 systemd 作为启动服务器管理机制,首先把 Clash 可执行文件拷贝到 /usr/local/bin 目录,相关配置拷贝到 /etc/clash 目录。

1
2
3
4
sudo mkdir /etc/clash
sudo cp clash /usr/local/bin
sudo cp config.yaml /etc/clash/
sudo cp Country.mmdb /etc/clash/

创建 systemd 服务配置文件 sudo vim /etc/systemd/system/clash.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Clash daemon, A rule-based proxy in Go.
After=network.target

[Service]
Type=simple
Restart=always
ExecStart=/usr/local/bin/clash -d /etc/clash

[Install]
WantedBy=multi-user.target

使用 systemctl

1
sudo systemctl daemon-reload

使用以下命令,让 Clash 开机自启动:

1
sudo systemctl enable clash

然后开启 Clash:

1
sudo systemctl start clash

查看 Clash 日志:

1
2
sudo systemctl status clash
sudo journalctl -xe

使用代理

利用 Export 命令使用代理

Clash 运行后,其在后台监听某一端口。Ubuntu 下使用代理,需要 export 命令。根据 config 配置文可以查看到件Clash 代理端口(订阅转换后,端口为7890),设置系统代理命令为:

可以将该命令添加到 .bashrc 中,登陆后该用户自动开启代理。

取消系统代理:

1
unset  http_proxy  https_proxy  all_proxy

一般下载数据集时,记得取消代理。

DashBoard 外部控制

外部控制端口为 9090,因此也可以访问该链接,输入 IP 地址(需本机可以访问的 IP)以及端口号 9090,来进入 Clash Dashboard 进行节点的选择。也可以在服务器自行搭建 Clash Dashboard,请参见该项目。不过 Clash Dashboard 用处不大,使用订阅转换后的配置文件包含了自动选择的功能,Clash 会自动选择延迟最低的节点。

设置密码

export 命令其他用户执行后也可以使用该代理,此时通过可以更换代理端口、添加密码等措施加以限制。修改 /etc/clash/config.yaml 文件部分配置:

1
2
3
4
5
6
7
8
mixed-port: 12345
authentication:
  - "用户名1:密码1"
  - "用户名2:密码2"
allow-lan: true
mode: Rule
log-level: info
external-controller: :9090

mixed-port: 12345 就是混合代理端口,即使用代理时所指定的端口。然后需要重启 Clash,命令为:

1
sudo systemctl restart clash

根据上述配置文件,export 命令变为

1
export https_proxy=http://用户名1:密码1@127.0.0.1:12345 http_proxy=http://用户名1:密码1@127.0.0.1:12345 all_proxy=socks5://用户名1:密码1@127.0.0.1:12345

TUN 模式

新版的 Clash Premium 内核支持 TUN 模式,且目前已支持 Linux 系统下的 auto-routeauto-detect-interface,无需手动设置转发表,可以方便快捷的实现 透明网关(旁路由) 的功能。

首先需要下载 Clash Premium 版本,替换上面的 clash 文件。接着需要设置 Linux 系统,开启转发功能。编辑文件 /etc/sysctl.conf,添加以下内容:

1
net.ipv4.ip_forward=1

保存退出后,执行以下命令使修改生效:

1
sudo sysctl -p

然后接着需要关闭系统的 DNS 服务,使用以下命令:

1
2
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

关于代理环境下 DNS 解析行为的深入探讨,可以参见浅谈在代理环境中的 DNS 解析行为以及我有特别的 DNS 配置和使用技巧。

接着需要设置 Clash 的配置文件,添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dns:
  enable: true
  listen: 0.0.0.0:53
  enhanced-mode: fake-ip
  nameserver:
    - 114.114.114.114
  fallback:
    - 8.8.8.8
tun:
  enable: true
  stack: system # or gvisor
  dns-hijack:
    - 8.8.8.8:53
    - tcp://8.8.8.8:53
    - any:53
    - tcp://any:53
  auto-route: true # auto set global route
  auto-detect-interface: true # conflict with interface-nam

最后重启 Clash 服务即可,这样流量就会通过 TUN 接口转发,同时利用强大的分流规则,实现按需代理。也可以设置局域网内的网关地址和 DNS 服务器地址,实现透明网关。

20 服务器状态监控

1
docker run --restart unless-stopped -it -d --name ward -p 4000:4000 -e WARD_PORT=4000 -e WARD_THEME=dark --privileged antonyleons/ward

21 Gitea安装

文件:docker-compose.yml

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
version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.19.0
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=mysql
      - GITEA__database__HOST=db:3306
      - GITEA__database__NAME=gitea
      - GITEA__database__USER=gitea
      - GITEA__database__PASSWD=gitea
    restart: always
    networks:
      - gitea
    volumes:
      - {you_path}/gitea:/data
      - {you_path}/gitea/timezone:/etc/timezone:ro
      - {you_path}/gitea/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"
    depends_on:
      - db

  db:
    image: mysql:8
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=gitea
      - MYSQL_USER=gitea
      - MYSQL_PASSWORD=gitea
      - MYSQL_DATABASE=gitea
    networks:
      - gitea
    volumes:
      - /home/ubuntu/pdata/gitea/mysql:/var/lib/mysql
本文由作者按照 CC BY 4.0 进行授权