当前位置:首页 > CN2资讯 > 正文内容

下载中转加速器 VPSDownloader.NET(.NET Core 程序部署到 Linux 系统)

2天前CN2资讯

使用 .NET Core WebAPI 实现一个 VPS 下载中转(加速)器 ,暨 .NET Core 程序部署到 Linux 系统。


下载中转加速​器 ​(.NET Core​ 程序部署到 Linux 系统) 

独立观察员 2020 年 7 月 26 日

我们有的时候在下载​外网的一些文件时会发现下载速度很慢,这个一方面是因为毕竟距离比较远,或者需要跨越多种网络,另外还可能是被技术手段限制了。这时如果直接下载,那这个文件可真是跨越千山万水,历经百般阻挠才能到达我们的设备,不慢才怪呢。而如果我们有地理位置不在大陆(其实关键是接入的骨干网络不一样)—— 比如说香港 —— 的服务器​或者 VPS​(虚拟服务器​),则可以想办法中转一下,因为这些服务器提供商都有对网络进行优化,所以可能有几率能加速下载。

之前按照网上的文章《vps-download​er 文件下载器​》 ,本人在自己的 VPS 上搭建过了类似的加速下载器了(http://:9092/  ,此地址可能会失效,原作者的也失效了):

​​​


但由于原方案是使用 Python 构建的,而本人对 Python 不熟,说实话有点看不顺眼 Python,加上基于修炼自己主攻语言(C#)的考虑,所以决定用 .NET Core WebAPI 来实现一个同样的下载中转(加速)器。


一、创建项目

我们使用宇宙第一 IDE —— Visual Studio 2019 —— 创建一个 ASP.NET Core Web 应用程序:

​​​


选择 .NET Core 3.1 框架,API 模板:

​​​


模板默认会生成一个显示天气的控制器和相关的类,我们可以删除这两个文件并创建自己的控制器:

​​​


新建的控制器代码很简单,就是使用 HttpClient 获取目标 url 的文件流,并重新返回二进制文件流,达到中转下载的目的:

​​​


至此,无论使用 IIS Express 还是 程序自身的运行方式运行:

​​​


都是没什么问题的了:

​​​


Properties 中有个 launchSettings.json 配置文件,可以对启动方式进行一些配置:

​​​


二、使用 ​​Swagger​​ 添加 API 文档自动生成功能

Swagger 能针对我们开发好的 API 方法自动生成网页版 API 文档。通过 VS 中的 NuGet 进行安装,NuGet 库中有很多相似名称的包,经过测试,使用以下三个包可以达到要求:

<ItemGroup>
<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="5.5.1" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="5.5.1" />
<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUi" Version="5.5.1" />
</ItemGroup>




这些包的项目地址为 ​​https:///domaindrivendev/Swashbuckle.AspNetCore​​ ,里面有使用方法讲解。

​​​


简单地说,要在 Startup.cs 中添加如下代码:

//1、引入命名空间;
using Microsoft.OpenApi.Models;

//2、ConfigureServices 方法中添加;
services.AddMvc();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
});

//3、Configure 方法中添加;
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});




然后我们更改 launchSettings.json 配置文件中的初始启动路径为 swagger:

​​​


这时我们再启动项目,就能看到 Swagger 的页面了:

​​​


点击 Try it out 按钮可以进行调用测试,甚至在这种简单的需求中可以直接当作前台页面使用。


三、项目发布及 ​​Linux​​ 环境配置

(一)独立模式

“独立模式 “的意思就是将程序运行所需的依赖环境包和程序本身一起打包,这样程序开箱即用,无需再在系统中安装相关的运行环境(此处即为 .NET Core 运行时)。

我们在项目上右键–> 发布,选择发布到文件夹,设置发布选项(部署模式选 独立,目标运行时选 linux-x64,勾上 生成单个文件):

​​​


保存配置后点击发布,在目标文件夹生成了项目同名文件(无后缀),以及一些配置文件。由于选择了生成单个文件,所以文件比较大(50+MB):

​​​


如果不勾上 “生成单个文件 “,则各种依赖文件释放在外面,看着闹心:

​​​


再来说说目标运行时,实际上可供选择的有好几个:

​​​


我的 VPS 是 CentOS 7 系统的,自然是在两个 linux 前缀选项中选择,那么具体应该选择哪一个呢?需要在VPS 中使用以下命令(uname -a)判断:

[root@dlgcy VPSDownloaderNET]# uname -a
Linux 3.10.0-1062.4.1.el7.x86_64 #1 SMP Fri Oct 18 17:15:30 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux




发布到本地成功之后,大家就可以八仙过海各显神通地将这些文件放到 VPS 上的某个目录了(推荐安装宝塔面板),然后赋予可执行权限并运行:

chmod +x ./
./




运行成功:

​​​


(二)框架依赖模式

上面说的 “独立模式 “不用在 Linux 系统中安装运行环境,但发布出来的文件大小相对于项目功能来说十分巨大,给部署带来了不便。下面我们来介绍 “框架依赖模式 “,顾名思义,发布的程序不附带运行环境,依赖于系统中安装的运行环境,自然而然地,这样发布出来的程序大小将大大减少。

首先,我们需要安装运行环境,微软官方网址和介绍如下:

​​https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-​​​​centos​​ 

​​​


以 CentOS 7 为例:

# 1. 添加微软包储存库;
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
# 2. 安装运行时;
sudo yum install aspnetcore-runtime-3.1




安装好系统运行环境后,我们这次发布时选择 “框架依赖 “模式:

​​​


可以看到生成的主要运行文件只有 2+MB:

​​​


 四、修改监听端口

(使用网络文章《.net core 修改网站启动端口》的第 3 种方式:配置 json 文件)

即在项目中添加一个 host.json 配置文件:

{
//"urls": "http://*:5000;https://*:5001",
"urls": "http://*:5000"
}




注意生成的时候目录中要出现该文件:

​​​


然后在 Program.cs 中配置使用:

​​​


文字版:

public static IHostBuilder CreateHostBuilder(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("host.json", optional: true)
.Build();

return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.UseStartup<Startup>()
.UseConfiguration(config);
});
}




一开始我也是带上了 https 的配置:

​​​


但是在服务器上运行时出错了,好像是缺少证书:

​​​


所以干脆只使用 http:

​​​


使用端口配置文件还解决了一个问题,那就是可以允许全部 IP(包括外网)进行访问:

​​​


而如果是直接在之前提到的启动配置文件中配置 “http://*:5000” 则会报错。


另外,服务器或 VPS 需要开放相关端口,推荐使用宝塔面板进行设置。


五、支持下载 https 协议地址的文件

先给出两个供下载的文件,分别为 https 和 http 地址的:

​​https://nginx.org/​​​​download​​/nginx-1.16.0.tar.gz 

​​http:///dlgcy/weixin_dlgcy_blog.png​​ 


我们还是用 swagger 页面来测试:

​​​


在参数 url 处填上下载地址后,点击 Execute 按钮: 

​​​


先是 https 的,出错了:

​​​


再来 http 的,是能正常下载的:

​​​


然后我在本地测试,https 的也是可以下载的,说明是服务器环境的问题:

​​​


经过百度得知,在 CentOS 7.x  HttpClient 访问会出问题  The SSL connection could not be established, see inner exception


按照上面链接给出的方法,最终下载核心代码如下(添加了 HttpClientHandler):

/// <summary>
/// 通过 HttpClient 获取另外站点的文件流,再输出
/// </summary>
[HttpGet]
public async Task<IActionResult> Get(string url)
{
if (string.IsNullOrWhiteSpace(url))
{
_logger.LogTrace("下载地址为空!");
return Content("请在链接后跟上下载地址后再次访问");
}

try
{
// 解决 CentOS7 Https 下载地址出错的问题;
var httpClientHandler = new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true
};

using HttpClient client = new HttpClient(httpClientHandler);
var stream = await client.GetStreamAsync(url);
return File(
stream,
"application/octet-stream", // 二进制流
Path.GetFileName(url));
}
catch (Exception ex)
{
return Content($" 出错了:{ex}");
}
}




https 的可以下载了:

​​​


六、开机运行

方式一:开机后台运行

使用如下组合命令即可在 Linux 系统中后台运行:

nohup ./ &




输出内容会转到 nohup.out 文件中:

​​​


使用宝塔面板的 “开启启动管理 “插件可设置开机启动:

​​​


方式二:开机自启服务

创建启动文件 Start.sh,输入:

#! /bin/sh
cd /dlgcy/VPSDownloaderNET
nohup ./ &


创建 .service,输入

# .service

[Unit]
Description= Service
After=network.target

[Service]
User=root
Type=forking
ExecStartPre=/bin/sleep 10
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
ExecStart=/dlgcy/VPSDownloaderNET/Start.sh
Restart=always
RestartSec=30
StartLimitInterval=20
StandardOutput=/dlgcy/VPSDownloaderNET/log

[Install]
WantedBy=multi-user.target




创建安装服务脚本 ,输入:

chmod +x ./
chmod +x ./Start.sh
touch ./log
cp ./.service /usr/lib/systemd/system/.service

systemctl daemon-reload
systemctl enable
systemctl start
systemctl status




将这三个文件传到 VPS 上后(检查一下上传过程中文件有没有被更改),运行如下命令:

[root@dlgcy ~]# cd /dlgcy/VPSDownloaderNET/
[root@dlgcy VPSDownloaderNET]# chmod +x ./
[root@dlgcy VPSDownloaderNET]# ./




执行结果:

​​​


可使用以下命令管理服务:

systemctl stop
systemctl start
systemctl status




七、后记 & 地址

由于这个基本只是打算自用,所以也未搭建前端页面。建议大家要用的话可以自己搭建一个。下面给出的测试地址不保证以后稳定和能访问。

测试地址:​​http://:5000/swagger/index.html​​

发行版地址:​​https://gitee.com/dlgcy//releases/v20200726​​

项目开源地址:​​https://gitee.com/dlgcy/​​




    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/18795.html

    分享给朋友:

    “下载中转加速器 VPSDownloader.NET(.NET Core 程序部署到 Linux 系统)” 的相关文章

    尼日利亚VPS:低成本高性能的服务器托管解决方案

    尼日利亚VPS的定义与优势 尼日利亚VPS是一种基于虚拟化技术的服务器托管服务,专为尼日利亚及周边地区的用户设计。VPS(Virtual Private Server)允许用户在共享的物理服务器上拥有独立的虚拟环境,享有更高的资源分配和操作自由度。对于尼日利亚的用户来说,本地数据中心的存在意味着更低...

    探索日本V文化:从排球V联赛到Vtuber的多元化发展

    在谈到日本的多元化时,首先无法忽视的是“日本 v”这个词汇所涵盖的多个领域。它不仅代表了排球运动的一个新平台,也象征着现代金融科技,以及独特的二次元文化。这些领域虽然各自独立,但它们共同描绘出日本社会在多个层面上的文化与技术的融合。 1.1 日本排球V联赛 自2018年启幕以来,日本排球V联赛(V....

    WordPress登录验证设置:提升网站安全性与用户体验

    在使用WordPress构建网站时,登录验证设置是确保用户身份安全和信息保护的重要环节。它不仅涉及用户从何处进入网站,更关乎整个网站的安全性能。在这章中,我将为你详细解析什么是WordPress登录验证,它的重要性以及基本的流程。 什么是WordPress登录验证 WordPress登录验证主要是通...

    ZGOVPS优惠码使用指南:如何享受高性能VPS服务的优惠

    ZGOVPS是一家在VPS服务领域备受瞩目的品牌。作为一个提供高性能虚拟专用服务器的商家,它在业内以性价比高、网络稳定和良好口碑而受到广泛欢迎。我在使用ZGOVPS的过程中,深刻感受到了它对客户需求的敏锐把握和优质服务的承诺。 从公司的背景来看,ZGOVPS专注于为全球用户提供专业的VPS解决方案,...

    Digital-VM优惠码:解锁超值VPS主机服务的最佳选择

    Digital-VM成立于2019年初,专注于为用户提供基于KVM架构的VPS主机服务。在这短短的几年中,它已经迅速崛起,成为业界的一颗新星。作为一个技术驱动的品牌,Digital-VM不断创新,以满足各种客户需求,提供高性能、灵活性和可靠性的VPS解决方案。 我觉得Digital-VM的成长路程相...

    深入了解DMIT不同线路,优化您的网络体验

    在开始深入了解DMIT这一知名VPS提供商之前,我想先分享一下我对于它的初步印象。DMIT的使命是为用户提供高性能、稳定的VPS解决方案,特别是在跨境访问方面表现不俗。他们采用的CN2优化线路更是让其在众多竞争对手中脱颖而出。通过不断的发展与创新,DMIT为不同需求的用户提供了多种线路选择。 DMI...