树莓派服务器配置

rainsin

2000python

Posted on April 1, 2023

树莓派服务器配置

服务器相关配置

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

设置su密码:

sudo passwd
Enter fullscreen mode Exit fullscreen mode

0. 终端设置与美化

0.1 命令行使用代理

安装:

sudo apt install proxychains4
Enter fullscreen mode Exit fullscreen mode

打开配置文件

sudo nano /etc/proxychains4.conf
Enter fullscreen mode Exit fullscreen mode

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

# socks4 127.0.0.1 9050 # 把原来的注释掉
socks5 127.0.0.1 1080
Enter fullscreen mode Exit fullscreen mode

使用:

proxychains4 <命令>
Enter fullscreen mode Exit fullscreen mode

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

0.2.1 安装 Rust

sudo apt install gcc #rust必需要的

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

0.2.2 安装依赖

sudo apt install pkg-config libssl-dev
sudo apt install libxcb-composite0-dev libx11-dev
Enter fullscreen mode Exit fullscreen mode

0.2.3 使用 crates.io 进行构建

cargo install nu
Enter fullscreen mode Exit fullscreen mode

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

0.2.4 nu安装扩展

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

git clone <repositories.git>

cd <repositories>
cargo build --release
register ./target/release/<repositories>
Enter fullscreen mode Exit fullscreen mode

0.2.5 Oh-my-posh

参考 官方文档 ,很详尽。

效果:

Image description

1. fstab文件的配置

1.1 查看磁盘空间

sudo fdisk -l
Enter fullscreen mode Exit fullscreen mode

1.2 查看磁盘信息

blkid
Enter fullscreen mode Exit fullscreen mode

1.3 找到fstab文件

cd /etc
Enter fullscreen mode Exit fullscreen mode

1.4 打开fstab,我习惯用nano

sudo nano fstab
Enter fullscreen mode Exit fullscreen mode

1.5 编辑

在尾部加入以下

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
Enter fullscreen mode Exit fullscreen mode

ctrl + x保存,重启生效。

2. samba配置

2.1 安装samba

要安装 Samba,我们运行:

sudo apt update
sudo apt install samba
Enter fullscreen mode Exit fullscreen mode

2.2 设置Samba

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

mkdir <pathname>
Enter fullscreen mode Exit fullscreen mode

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

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

sudo nano /etc/samba/smb.conf
Enter fullscreen mode Exit fullscreen mode

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

[sambashare] 
        comment = <title>
    path = <pathname>
    read only = no
    browsable = yes
Enter fullscreen mode Exit fullscreen mode

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

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

sudo service smbd restart
Enter fullscreen mode Exit fullscreen mode

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

sudo ufw allow samba
Enter fullscreen mode Exit fullscreen mode

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

sudo smbpasswd -a username //username为用户名
Enter fullscreen mode Exit fullscreen mode

windows用IPv6访问:

\\240e-335-2805-2be0-dea6-32ff-fefe-1496.ipv6-literal.net
Enter fullscreen mode Exit fullscreen mode

:- 分隔。

3. 安装Emby

3.1 下载Emby

链接:Arm64架构X64架构

3.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架构
Enter fullscreen mode Exit fullscreen mode

Image description

4. 安装Docker

安装docker的命令很简单

sudo apt update
sudo apt install -y docker.io
Enter fullscreen mode Exit fullscreen mode

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

systemctl start docker
Enter fullscreen mode Exit fullscreen mode

设置开机就启动docker

systemctl enable docker
Enter fullscreen mode Exit fullscreen mode

查看docker是否安装成功

docker version
Enter fullscreen mode Exit fullscreen mode

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

首先新建一个docker组

sudo groupadd docker
Enter fullscreen mode Exit fullscreen mode

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

然后把当前用户加入docker组

sudo gpasswd -a ${USER} docker
Enter fullscreen mode Exit fullscreen mode

重启docker

sudo service docker restart
Enter fullscreen mode Exit fullscreen mode

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

newgrp - docker
Enter fullscreen mode Exit fullscreen mode

最后测试下效果

docker version
Enter fullscreen mode Exit fullscreen mode
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:
Enter fullscreen mode Exit fullscreen mode

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

sudo nano /etc/docker/daemon.json
Enter fullscreen mode Exit fullscreen mode

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

{  
        "registry-mirrors": ["https://registry.docker-cn.com"]
}
Enter fullscreen mode Exit fullscreen mode

完成。

5. 安装Bitwarden

一款密码管理器

开启HTTPS:

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
Enter fullscreen mode Exit fullscreen mode

6. 安装Alist*

注意:这个项目对文件权限有改动,导致系统不稳定,暂时pass。

一款小云盘

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
Enter fullscreen mode Exit fullscreen mode

查看管理员信息:

docker exec -it alist ./alist admin
Enter fullscreen mode Exit fullscreen mode

可以使用另外一个项目:

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
Enter fullscreen mode Exit fullscreen mode

7. 安装DDNS

docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
Enter fullscreen mode Exit fullscreen mode

8. 安装Excalidraw

一款画板工具

docker run --rm -dit --name excalidraw -p 5000:80 jauderho/excalidraw
Enter fullscreen mode Exit fullscreen mode

效果:

Image description

9. Apache配置

9.1 安装Apache

sudo apt-get  install  -y apache2
Enter fullscreen mode Exit fullscreen mode

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

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

cd ~
sudo a2enmod dav
sudo a2enmod dav_fs
Enter fullscreen mode Exit fullscreen mode

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

sudo mkdir -p /var/www/webdav
sudo chown -R www-data:www-data  /var/www/webdav
Enter fullscreen mode Exit fullscreen mode

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

sudo htpasswd -c /etc/apache2/webdav.password pi
#sudo htpasswd /etc/apache2/webdav.password guest
Enter fullscreen mode Exit fullscreen mode

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

sudo chown root:www-data /etc/apache2/webdav.password
sudo chmod 640 /etc/apache2/webdav.password
Enter fullscreen mode Exit fullscreen mode

9.2.5 打开默认配置文件

sudo nano /etc/apache2/sites-available/000-default.conf
Enter fullscreen mode Exit fullscreen mode

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

Alias /webdav  /var/www/webdav

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

原文件:

<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>
Enter fullscreen mode Exit fullscreen mode
sudo /etc/init.d/apache2 force-reload
sudo /etc/init.d/apache2 restart
Enter fullscreen mode Exit fullscreen mode

9.3 设置https

前提条件

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

环境准备

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

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

mkdir /etc/apache2/cert
Enter fullscreen mode Exit fullscreen mode

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

cp -r YourDomainName_public.pem /etc/apache2/cert
cp -r YourDomainName_chain.pem /etc/apache2/cert
cp -r YourDomainName.key /etc/apache2/cert
Enter fullscreen mode Exit fullscreen mode

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

sudo a2enmod ssl
Enter fullscreen mode Exit fullscreen mode

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

nano /etc/apache2/sites-available/default-ssl.conf
Enter fullscreen mode Exit fullscreen mode

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

<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
Enter fullscreen mode Exit fullscreen mode

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

sudo ln -s /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/001-ssl.conf
Enter fullscreen mode Exit fullscreen mode

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

sudo /etc/init.d/apache2 force-reloadsudo /etc/init.d/apache2 restart
Enter fullscreen mode Exit fullscreen mode

完成。

9.4 设置反向代理

sudo a2enmod rewrite    //启用.htaccess规则,打开重写

sudo a2enmod proxy

sudo a2enmod proxy_http  //启用反向代理
Enter fullscreen mode Exit fullscreen mode

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

sudo nano /etc/apache2/sites-enabled/000-default.conf
Enter fullscreen mode Exit fullscreen mode

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

<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>
Enter fullscreen mode Exit fullscreen mode

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

Listen 2000 //你在apache中用的的端口都要在这里配置
Enter fullscreen mode Exit fullscreen mode

10. 安装rss服务器

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
Enter fullscreen mode Exit fullscreen mode

11. 安装komga

一款漫画管理阅读软件

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
Enter fullscreen mode Exit fullscreen mode

12. 安装webdav

主要用来zotero的备份

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
Enter fullscreen mode Exit fullscreen mode

13. 图床安装

13.1 蓝空图床:

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;
Enter fullscreen mode Exit fullscreen mode

13.2 Chevereto-free安装:

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
Enter fullscreen mode Exit fullscreen mode

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 提升下载速度的软件,安装软件时,通过增加线程使下载软件速度加快。

sudo add-apt-repository ppa:apt-fast/stable
sudo apt-get install apt-fast
Enter fullscreen mode Exit fullscreen mode

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

sudo apt-get autoremove php*
Enter fullscreen mode Exit fullscreen mode

3. 添加php7.4的源

sudo add-apt-repository ppa:ondrej/php && sudo apt-get update
Enter fullscreen mode Exit fullscreen mode

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

sudo apt-fast -y install php7.4
Enter fullscreen mode Exit fullscreen mode

5. 可能需要安装的扩展

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*
Enter fullscreen mode Exit fullscreen mode

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等等。

具体过程:

屏幕录制 2023-03-08 231017~1.mp4

也可以使用命令行:

sudo mysql -u root -p
Enter fullscreen mode Exit fullscreen mode

输入密码,进入mysql:

CREATE DATABASE <name>;

use <name>;

source /path/to/lp.sql;
Enter fullscreen mode Exit fullscreen mode
systemctl restart php-fpm.service
Enter fullscreen mode Exit fullscreen mode

13.3.3 Apache2配置

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

<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>
Enter fullscreen mode Exit fullscreen mode

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

<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>
Enter fullscreen mode Exit fullscreen mode

开启rewrite模块:

sudo **a2enmod rewrite**
Enter fullscreen mode Exit fullscreen mode

重启apache2:

sudo /etc/init.d/apache2 force-reload
sudo /etc/init.d/apache2 restart
Enter fullscreen mode Exit fullscreen mode

13.3.4 安装完成

设置config/database.php 文件:

<?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,
        ],

        // 更多的数据库配置信息
    ],
];
Enter fullscreen mode Exit fullscreen mode

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

Image description

14. 博客安装*

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
Enter fullscreen mode Exit fullscreen mode

备份数据(重要)

cp -r <path> <备份path>
Enter fullscreen mode Exit fullscreen mode

15. minio安装*

这是一个对象存储服务。

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

然后运行:

 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"
Enter fullscreen mode Exit fullscreen mode

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

MINIO_SERVER_URL为分享链接域名。

以下弃用:

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

16. ddns域名列表

ddns.rainsin.cn
hm.rainsin.cn
emby.rainsin.cn
rss.rainsin.cn
mima.rainsin.cn
pan.rainsin.cn
photo.rainsin.cn
draw.rainsin.cn
webdav.rainsin.cn
book.rainsin.cn
bt.rainsin.cn
sys.rainsin.cn
Enter fullscreen mode Exit fullscreen mode

17. MySQL安装

sudo apt-get install mysql-server
Enter fullscreen mode Exit fullscreen mode

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

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

FLUSH PRIVILEGES;
Enter fullscreen mode Exit fullscreen mode

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

然后输入:

sudo mysql_secure_installation
Enter fullscreen mode Exit fullscreen mode

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

设置外网访问:

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';
Enter fullscreen mode Exit fullscreen mode

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

mysql -u root -p dbname<filename.sql
Enter fullscreen mode Exit fullscreen mode

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

18. 图书管理系统*

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
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode

19. Bt下载管理器

19.1 transmission和qBittorrent的安装及配置

下载种子和做种工具。

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

舍弃:

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
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode

19.1.1 下载 transmission-web-control

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

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

国内推荐在 Gitee 下载。

解压文件到本地目录。

19.1.2 配置邮箱通知

  1. 安装bsd-mailx

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

    sudo nano /etc/s-nail.rc
    

    配置邮箱SMTP服务:

    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. 测试

    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

      {
          "ok": true,
          "result": []
      }
      

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

      {"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/选择对应的格式化功能格式化文本。

      {
        "ok": true,
        "result": [
          {
            "update_id": 248345768,
            "my_chat_member": {
              "chat": {
                **"id": -1001779449685,**
                "title": "BT状态机",
                "type": "supergroup"
              },
              ......
            }
          },
          .....
        ]
      }
      

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

      curl 测试

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

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

    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可以添加以下内容,可以自由更改:
Enter fullscreen mode Exit fullscreen mode
```bash
#!/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"
```
Enter fullscreen mode Exit fullscreen mode
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的不一样
Enter fullscreen mode Exit fullscreen mode

Image description

```bash
bash /var/qb/btadd.sh "%N" "%F" "%R" "%D" "%C" "%Z" "%I" "%J"
```
Enter fullscreen mode Exit fullscreen mode
参数的传入次序很重要,在脚本中我们要用这个次序接收参数:
Enter fullscreen mode Exit fullscreen mode
```bash
#!/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
......
```
Enter fullscreen mode Exit fullscreen mode
我的qbittorrent脚本:
Enter fullscreen mode Exit fullscreen mode
```bash
#!/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"
```
Enter fullscreen mode Exit fullscreen mode

19.1.3 安装transmission

  1. 安装

    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服务,不然会回滚:

    sudo service transmission-daemon stop
    
```bash
sudo nano /var/lib/transmission-daemon/info/settings.json
```
Enter fullscreen mode Exit fullscreen mode
修改:
Enter fullscreen mode Exit fullscreen mode
```json
{
        ......
        "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",#任务完成后通知脚本
        ......
}
```
Enter fullscreen mode Exit fullscreen mode
  1. 更改WEB-UI

    以下方法弃用:

    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/ ,最后再运行上述脚本。

    最后,开启服务:

    sudo service transmission-daemon start
    

    新方法:

    💡 上述脚本对于最新客户端不生效,一直提示连接失败,因为最新的客户端的网页文件夹名字改为了`public_html` 而不是`web` 。

    直接下载主题文件:

    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 #复制 
    

19.2.4 效果

Image description

19.2.5 安装qBittorrent

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

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

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

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

    sudo apt-get install vim -y && vim /etc/systemd/system/qbittorrent-nox.service
    
```yaml
[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
```
Enter fullscreen mode Exit fullscreen mode
修改qbittorrent-nox.service文件后重新载入
Enter fullscreen mode Exit fullscreen mode
```yaml
sudo systemctl daemon-reload
```
Enter fullscreen mode Exit fullscreen mode
启动和停止
Enter fullscreen mode Exit fullscreen mode
```yaml
sudo systemctl start qbittorrent-nox
sudo systemctl stop qbittorrent-nox
```
Enter fullscreen mode Exit fullscreen mode
开机自启
Enter fullscreen mode Exit fullscreen mode
```yaml
sudo systemctl enable qbittorrent-nox
```
Enter fullscreen mode Exit fullscreen mode
  1. 验证

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

    下载文件:

    dbip-country-lite.mmdb

    先进入root用户:

    su
    

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

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

    重启服务即可。

Image description

最后反向代理,完成。

19.2.6 效果

Image description

20. 设置clash代理

Clash 下载

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

wget https://github.com/Dreamacro/clash/releases/download/v1.10.0/clash-linux-arm64-v1.10.0.gz
Enter fullscreen mode Exit fullscreen mode

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

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

gunzip clash-linux-amd64-v1.10.0.gz
mv clash-linux-amd64-v1.10.0 clash
Enter fullscreen mode Exit fullscreen mode

为 clash 添加可执行权限:

chmod u+x clash
Enter fullscreen mode Exit fullscreen mode

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

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

配置文件

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

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

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

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

curl -o config.yaml 'longURL'
Enter fullscreen mode Exit fullscreen mode

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

curl -L -o config.yaml 'shortURL'
Enter fullscreen mode Exit fullscreen mode

Clash as a daemon

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

普通用户需要 sudo 权限。

配置 systemd 服务

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

sudo mkdir /etc/clash
sudo cp clash /usr/local/bin
sudo cp config.yaml /etc/clash/
sudo cp Country.mmdb /etc/clash/
Enter fullscreen mode Exit fullscreen mode

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

[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
Enter fullscreen mode Exit fullscreen mode

使用 systemctl

sudo systemctl daemon-reload
Enter fullscreen mode Exit fullscreen mode

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

sudo systemctl enable clash
Enter fullscreen mode Exit fullscreen mode

然后开启 Clash:

sudo systemctl start clash
Enter fullscreen mode Exit fullscreen mode

查看 Clash 日志:

sudo systemctl status clash
sudo journalctl -xe
Enter fullscreen mode Exit fullscreen mode

使用代理

利用 Export 命令使用代理

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

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

取消系统代理:

unset  http_proxy  https_proxy  all_proxy
Enter fullscreen mode Exit fullscreen mode

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

DashBoard 外部控制

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

设置密码

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

mixed-port: 12345
authentication:
  - "用户名1:密码1"
  - "用户名2:密码2"
allow-lan: true
mode: Rule
log-level: info
external-controller: :9090
Enter fullscreen mode Exit fullscreen mode

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

sudo systemctl restart clash
Enter fullscreen mode Exit fullscreen mode

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

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
Enter fullscreen mode Exit fullscreen mode

TUN 模式

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

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

net.ipv4.ip_forward=1
Enter fullscreen mode Exit fullscreen mode

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

sudo sysctl -p
Enter fullscreen mode Exit fullscreen mode

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

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
Enter fullscreen mode Exit fullscreen mode

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

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

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
Enter fullscreen mode Exit fullscreen mode

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

21. 服务器状态监控

docker run --restart unless-stopped -it -d --name ward -p 4000:4000 -e WARD_PORT=4000 -e WARD_THEME=dark --privileged antonyleons/ward
Enter fullscreen mode Exit fullscreen mode
💖 💪 🙅 🚩
rainsin
2000python

Posted on April 1, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related