VPS折腾手记

 最后更新:2024-02-08

 自己的VPS :Ubuntu 2022 x64 ,写篇手记,方便经常折腾。

1、更新内核并开启 TCP BBR ,参考此博文

查看是否开启 tcp_ bbr
lsmod | grep bbr
返回值有 tcp_bbr 模块即说明 bbr 已启动,则跳过以下。

使用root用户登录,运行以下命令:
wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh
安装完成后,脚本会提示需要重启 VPS,输入 y 并回车后重启。
重启完成后,进入 VPS,验证一下是否成功安装新内核
uname -r
2、创建swap分区

运行free -h 命令查看是否启用了swap,若启用,跳过以下。

创建swap分区
dd  if=/dev/zero  of=/var/swapfile  bs=1024  count=2048k
执行完毕,对交换文件格式化并转换为swap分区:
mkswap  /var/swapfile
挂载并激活分区:
swapon   /var/swapfile
执行以上命令可能会出现:“不安全的权限 0644,建议使用 0600”类似提示,不要紧张,实际上已经激活了,可以忽略提示,也可以听从系统的建议修改下权限:
chmod -R 0600 /var/swapfile 
修改 fstab 配置,设置开机自动挂载该分区:
echo  "/var/swapfile   swap  swap  defaults  0  0" >>  /etc/fstab
这时候可以用 free –h 或 swapon –s命令查看新swap分区是否正常添加并激活使用。

3、docker环境安装,参考这里

4、docker安装ipsec vpn,以备应急使用镜像在此

 首先编辑 配置文件
mkdir -p  ~/vpn
vi ~/vpn/vpn.env
加入以下内容:替换自己的密钥、用户名、密码
VPN_IPSEC_PSK=your_ipsec_pre_shared_key
VPN_USER=your_vpn_username
VPN_PASSWORD=your_vpn_password
然后运行
docker run \
    --name ipsec-vpn-server \
    --env-file ~/vpn/vpn.env \
    --restart=always \
    -v ikev2-vpn-data:/etc/ipsec.d \
    -v /lib/modules:/lib/modules:ro \
    -p 500:500/udp \
    -p 4500:4500/udp \
    -d --privileged \
    hwdsl2/ipsec-vpn-server
以下命令可查看日志及相关帐号密码等信息,输出中也会包含 IKEv2 配置信息。
docker logs ipsec-vpn-server
将一个客户端配置文件从容器复制到 Docker 主机 ~/vpn 目录(不使用 IKEv2 模式连接的话此步可选)
docker cp ipsec-vpn-server:/etc/ipsec.d/vpnclient.p12 ~/vpn
最后设置客户端进行连接,参考这里 及故障排除

以下命令查看当前已建立的 VPN 连接情况
docker exec -it ipsec-vpn-server ipsec whack --trafficstatus
5、申请证书

通过acme.ch方式申请证书。首先安装acme.ch( 安装目录:~/.acme.sh/)。参考此处。
curl  https://get.acme.sh | sh
创建 一个 bash 的 alias, 方便使用:
alias acme.sh=~/.acme.sh/acme.sh
以下使用DNS API方式申请泛域名证书(这种方式的好处是, 不需要任何服务器, 不需要任何公网 ip, 只需要 dns 的解析记录即可完成验证,并可自动更新证书)。现在主流的域名提供商都支持DNS API,如cloudflare等。若自己的域名提供商不支持的话,可以把域名提供商提供的 Namesever 修改为 Cloudflare 所提供的Namesevers地址,就可以使用clouddflare提供的API了

获取Cloudflare API 令牌,在cloudflare域名管理首页(右下角)获取 API 密钥-"Get your API token"-"API Tokens"-"API Keys"-"Global API Key"-"view"

设置 Cloudflare API 令牌,将下面的key换成你的,email换成cloudflare的登录email
export CF_Key="xyffe1f9edb9d7e41cc8b336a8373e25a810z"
export CF_Email="xyz@gmail.com"
选择安装证书的类型:由于acme.sh将默认安装的证书类型从letsencrypt换成了zerossl,想要继续使用 letsencryp 证书,有两种解决方案。
第一种是签发证书时指定 CA
acme.sh  --issue --dns dns_cf -d mydomain.com  --server  letsencrypt
另一种是直接更改默认 CA,如下,本博文使用这种方式。
acme.sh --set-default-ca  --server  letsencrypt
如果设置了默认的 CA,以后就算版本升级也将一直默认使用指定的 CA。

验证 DNS 并申请证书(以下参数带有 ec 或ecc表示生成的是 ECC 证书,没有则是 RSA 证书。在安全性上 256 位的 ECC 证书等同于 3072 位的RSA 证书。)
acme.sh --issue --dns dns_cf -d mydomain.com -d *.mydomain.com -k ec-256
证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方
mkdir -p /root/cert
acme.sh --installcert -d mydomain.com --key-file /root/cert/private.key --fullchain-file /root/cert/cert.crt --ecc
查看已经安装的证书、申请日期、更新日期等
acme.sh --list
撤销证书
acme.sh --revoke -d mydomain.com --ecc
删除证书
acme.sh --remove -d mydomain.com --ecc
强制更新所有证书
acme.sh --renew-all --force
自动更新acme程序
acme.sh --upgrade --auto-upgrade
6、FreshRSS、RSS-Bridge、Readability API安装参考这里RSSHub安装参考这里

7、V2ray,Xray安装及配置,分别参考这里 第一、二点,Naiveproxy安装及配置、共用443端口,参考这里 第六点

8、编译安装nginx,参考这里 第四点。

    编辑nginx配置文件 vi  /usr/local/nginx/conf/nginx.conf

    以下配置中 mydomain.com用于v2ray,同时指向FreshRSS网站,www.mydomain.com指向RSSHub网站,api.mydomain.com指向Readability API, hub.mydomain.com指向RSS-Bridge网站free.mydomain.com用于xray,nas.mydomain.com用于 naiveproxy 。
#user www-data;
worker_processes 1;
error_log  logs/error.log;
pid  logs/nginx.pid;
events {
    worker_connections  2048;
}

 stream {
    # 这里就是 SNI 识别,将域名映射成一个配置名
    map $ssl_preread_server_name $backend_name {
        www.mydomain.com web;
        mydomain.com vmess;
        free.mydomain.com vless;
        api.mydomain.com api;
        hub.mydomain.com hub;
        nas.mydomain.com naive;
    # 域名都不匹配情况下的默认值
        default web;
    }

    upstream web {
        server 127.0.0.1:10240;
    }

    # naive,配置转发详情,端口与naiveproxy中Caddyfile配置文件中的端口一致
    upstream naive {
        server 127.0.0.1:10248;
    }
  # vmess,配置转发详情,端口与下面server字段中mydomain.com监听端口一致
    upstream vmess {
        server 127.0.0.1:10249;
    }
    # vless,配置转发详情,与xray配置文件中的端口一致
   upstream vless {
        server 127.0.0.1:10247;
    }
  # api,配置转发详情
  upstream api {
        server 127.0.0.1:10246;
    }
  # hub,配置转发详情
  upstream  hub {
        server 127.0.0.1:10245;
    }
    # 监听 443 并开启 ssl_preread
    server {
        listen 443 reuseport;
        # listen [::]:443 reuseport;
        proxy_pass  $backend_name;
        ssl_preread on;
    }
}

 http {
    server_tokens off;
    include       mime.types;
    default_type  application/octet-stream;
    access_log off;
    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay on;
    keepalive_timeout  65;
    gzip  on;
    client_max_body_size 10m;
    client_body_buffer_size 128k;

 server {
        listen       80 default_server;
        server_name  www.mydomain.com;
        root         /usr/share/nginx/html;

        return 301 https://$server_name$request_uri;
      
        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
}

 server {
  listen  10240 ssl;
  server_name           www.mydomain.com;

  ssl_certificate      /root/cert/cert.crt;
  ssl_certificate_key  /root/cert/private.key; 

  ssl_protocols         TLSv1.2 TLSv1.3;
  ssl_ciphers           HIGH:!aNULL:!MD5;

location / {
       proxy_pass http://127.0.0.1:1200;
    }
} 

 server {
  listen  10249 ssl;
  server_name           mydomain.com;

  ssl_certificate      /root/cert/cert.crt;
  ssl_certificate_key  /root/cert/private.key; 

  ssl_protocols         TLSv1.2 TLSv1.3;
  ssl_ciphers           HIGH:!aNULL:!MD5;

 location /rawxyz { 
        proxy_redirect off;
        proxy_pass http://127.0.0.1:10000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        }
        
 location / {
       proxy_pass http://127.0.0.1:8080;
    }
} 

 server {
        listen   10246 ssl;
        server_name  api.mydomain.com;

        ssl_certificate      /root/cert/cert.crt;
        ssl_certificate_key  /root/cert/private.key;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
        
        location / {
          proxy_pass http://127.0.0.1:3000;
           }
 }

 server {
        listen   10245 ssl;
        server_name  hub.mydomain.com;
     
        ssl_certificate      /root/cert/cert.crt;
        ssl_certificate_key  /root/cert/private.key;
     
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;
        
        location / {   
          proxy_pass http://127.0.0.1:4000;
           }
 }
}
测试配置文件是否正确
/usr/local/nginx/sbin/nginx -t -c  /usr/local/nginx/conf/nginx.conf
重新加载nginx配置文件使之生效(无需重启服务器)
/usr/local/nginx/sbin/nginx -s reload
9、用sing-box安装Hyeteria V2及TUIC V5,参考这里
  
  域名sing.mydomain.com专门用于Hysteria和TUIC,申请的证书地址在 /root/sing
bash <(curl -fsSL https://sing-box.app/deb-install.sh)
systemctl enable --now sing-box
编辑服务器端配置文件
vi /etc/sing-box/config.json
{
"log": {
    "disabled": false,
    "level": "info",
    "timestamp": true
  },
  "inbounds": [

    {
        "type": "hysteria2",
        "sniff": true,
        "sniff_override_destination": true,
        "tag": "hy2",
        "listen": "::",
        "listen_port": 16789,
        "users": [
            {
                "password": "yourpassword"
            }
        ],
         
          "up_mbps": 100,
          "down_mbps": 20,
          "tls": {
            "enabled": true,
            "alpn": [
                "h3"
            ],
            "min_version":"1.2",
            "max_version":"1.3",
            "certificate_path": "/root/sing/cert.crt",
            "key_path": "/root/sing/private.key"
        }
    },
        {
            "type":"tuic",
            "sniff": true,
            "sniff_override_destination": true,
            "tag": "tuic5",
            "listen": "::",
            "listen_port": 16799,
            "users": [
                {
                    "uuid": "f8b8c801-3894-45a2-b1f6-d26a04189a70",
                    "password": "yourpassword"
                }
            ],
            "congestion_control": "bbr",
            "tls":{
                "enabled": true,
                "alpn": [
                    "h3"
                ],
                "certificate_path": "/root/sing/cert.crt",
                "key_path": "/root/sing/private.key"
            }
        }
],
"outbounds": [
{
     "type":"direct"
}
]

}
  客户端配置文件参考这里 第3点

10、通过docker安装calibre,实现电子杂志的自动抓取和投递,镜像在此

     calibre是一个自由开源的电子书软件套装,可以用来组织、存放、以及管理电子书,支持大多数的电子书格式。
docker run -d \
  --name=calibre \
  -e TZ=Etc/UTC \
  -p 9080:8080 \
  -p 9181:8181 \
  -p 9081:8081 \
  -v ~/calibre/config:/config \
  --restart unless-stopped \
  lscr.io/linuxserver/calibre:latest
 ~/calibre/config是VPS服务器上新建的文件夹以保存相关配置。
部署成功后,通过ip:9080即可以访问。

说明:此服务占用资源,请确保你的VPS足够强大。

11、通过docker安装photopea,一款功能与photoshop接近的在线软件,其界面几乎与ps相同,只不过它是在线的网页,是ps的最佳替代品之一,镜像在此 或这里
docker run -d --restart unless-stopped  --name photopea -p 8887:8887 eorendel/photopea:latest

12、通过docker安装Watchtower自动更新 Docker 镜像与容器,镜像在此

手动更新所有的 Docker 镜像与容器
docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    --run-once
设定于每月1日凌晨2点更新自动更新所有的 Docker 镜像与容器
docker run -d \
    --name watchtower \
    --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    -s "0 0 2 1 * ? "
Cloudflare 设置参考这里第一点

说明:防火墙放行相关的端口,如443,16789等。
sudo ufw allow 443
检查防火墙状态
sudo ufw status 





评论

热门博文

Xray安装配置VLESS-XTLS-Vision及VLESS-XTLS-uTLS-REALITY

V2Ray安装配置VMESS-TLS及VMESS-TLS-WS

在VPS上轻松搭建L2TP/IPSec图文教程(通吃各种架构的VPS,包括KVM,OpenVZ等)