手把手教你用阿里云轻量服务器搭建属于自己的私有NuGet仓库

嘿,兄弟!是不是经常在开发.NET项目的时候,被各种包管理搞得头大?公共的NuGet源虽然方便,但一旦涉及到公司内部组件、敏感代码或者想做点“私货”,用公共源就显得不太靠谱了。这时候,一个私有的NuGet仓库简直就是你的救星。

阿里云轻量服务器搭建私有NuGet仓库

今天我就来带你实操一把——用阿里云的轻量应用服务器(也就是大家常说的“轻量服务器”),从零开始搭建一个稳定、安全、还能自己掌控的私有NuGet仓库。整个过程不吹牛,只要你懂点基础命令和.NET环境,1小时之内绝对能搞定!而且成本还低,特别适合个人开发者、小团队甚至创业公司。

为什么选阿里云轻量服务器?

首先咱们得说说为啥要选阿里云的轻量服务器。你可能也听说过ECS,但那玩意儿对新手来说配置复杂、价格偏高。而轻量服务器就不一样了,它主打的就是“简单+便宜+够用”。

比如我现在用的是2核2G内存、5M带宽、60GB SSD的套餐,月租才几十块,跑个NuGet服务绰绰有余。关键是控制台特别友好,IP、防火墙、SSH登录一键搞定,连域名绑定都给你集成了,简直是懒人福音。

最重要的是,阿里云在国内访问速度快,延迟低,不像某些国外VPS,传个包都要等半天。你团队成员在北上广深,还是新疆西藏,都能快速拉取私有包,效率直接拉满。

准备工作:买服务器 + 装环境

第一步,当然是先搞一台服务器。你可以直接去阿里云官网搜“轻量应用服务器”,选择适合你的配置。我建议最低选2核2G,系统选Ubuntu 20.04或22.04 LTS版本,稳定又省心。

顺带提一嘴,现在新用户注册还能领一大波优惠券,老用户偶尔也有返场福利。如果你还没领过,强烈建议点这里先去领取阿里云优惠券,买服务器能省下不少钱,尤其是你要长期用的话,首年折扣简直香到不行。

服务器买好之后,通过SSH登录进去,准备装环境。我们这次要用的是一个叫BaGet的开源项目,它是专为NuGet设计的轻量级私有包服务器,支持NuGet、Symbol Server,还能对接数据库和云存储,最关键的是——它用ASP.NET Core写的,部署起来特别顺手。

安装 .NET SDK 和 BaGet

登录服务器后,先更新系统:

sudo apt update && sudo apt upgrade -y

然后安装.NET SDK,我推荐装.NET 6或者.NET 8,长期支持版更稳:

wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb  
sudo dpkg -i packages-microsoft-prod.deb  
rm packages-microsoft-prod.deb  
sudo apt update  
sudo apt install -y apt-transport-https  
sudo apt install -y dotnet-sdk-6.0

装完之后输入dotnet --version看看有没有输出版本号,有就说明OK了。

接下来下载BaGet。可以直接用官方发布的二进制文件,省事:

mkdir ~/baget && cd ~/baget  
wget https://github.com/loic-sharma/BaGet/releases/latest/download/baget-linux-x64.zip  
unzip baget-linux-x64.zip

解压完你会看到一堆文件,其中最重要的就是Baget这个可执行文件。

配置 BaGet:让它听你的话

BaGet 启动前需要一个配置文件,我们来创建一个appsettings.json

nano appsettings.json

把下面内容贴进去:

{
  "Storage": {
    "Type": "FileSystem",
    "Path": "/home/ubuntu/baget/packages"
  },
  "Database": {
    "Type": "SQLite",
    "ConnectionString": "Data Source=/home/ubuntu/baget/baget.db"
  },
  "Search": {
    "Type": "Sqlite"
  },
  "Gallery": {
    "Enabled": true
  },
  "Endpoints": {
    "PackagePublish": {
      "Enabled": true
    },
    "PackageMetadata": {
      "Enabled": true
    }
  }
}

解释一下关键点:

  • Storage.Type: FileSystem 表示包文件存在本地磁盘,路径是/home/ubuntu/baget/packages
  • Database 用SQLite,简单够用,不用额外起MySQL
  • Gallery.Enabled: true 打开网页界面,你可以通过浏览器查看已上传的包
  • PackagePublish.Enabled: true 允许你推送新包上去

保存退出后,手动创建一下包存储目录:

mkdir /home/ubuntu/baget/packages

启动服务 & 设置开机自启

现在可以先手动测试启动一下:

./Baget

如果看到日志里出现“Now listening on: http://localhost:5000”之类的提示,说明启动成功了!默认是监听5000端口。

但总不能每次都手动启动吧?我们用systemd做个守护进程:

sudo nano /etc/systemd/system/baget.service

写入以下内容:

[Unit]
Description=BaGet NuGet Server
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/baget
ExecStart=/home/ubuntu/baget/Baget
Restart=always
[Install]
WantedBy=multi-user.target

保存后启用服务:

sudo systemctl enable baget  
sudo systemctl start baget

然后检查状态:

sudo systemctl status baget

看到绿色的active (running) 就稳了!

配置 Nginx 反向代理 + 域名访问

现在服务在5000端口跑着,但我们不可能让团队成员记个IP加端口号吧?所以最好配个域名,走80或443端口。

先装Nginx:

sudo apt install nginx -y

然后配置反向代理:

sudo nano /etc/nginx/sites-available/baget

写入:

server {
    listen 80;
    server_name nuget.yourdomain.com;  # 换成你自己的域名
    location / {
        proxy_pass http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
    }
}

然后软链接到sites-enabled,并重启Nginx:

sudo ln -s /etc/nginx/sites-available/baget /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

别忘了去阿里云控制台的安全组规则里,开放80端口!不然外网访问不了。

最后一步,去你的域名服务商那里,把nuget.yourdomain.com解析到服务器公网IP。等几分钟生效后,打开浏览器访问,应该就能看到BaGet的首页了,恭喜你,私有NuGet仓库正式上线!

怎么上传和使用私有包?

接下来就是实际用了。假设你有一个类库项目叫MyCompany.Utils,打包发布前,在项目文件里加上版本号:

<PropertyGroup>
  <TargetFramework>net6.0</TargetFramework>
  <PackageId>MyCompany.Utils</PackageId>
  <Version>1.0.0</Version>
  <Authors>YourName</Authors>
</PropertyGroup>

然后发布包:

dotnet pack -c Release

会生成一个nupkg文件,比如MyCompany.Utils.1.0.0.nupkg

推送到你的私有源:

dotnet nuget push ./bin/Release/MyCompany.Utils.1.0.0.nupkg 
-k your-api-key 
-s http://nuget.yourdomain.com

等等,API Key呢?BaGet默认没有密码保护,为了安全,建议你在appsettings.json里加个密钥:

"ApiKey": "your-super-secret-key-here"

重启服务后,推送时用这个key就行。

团队成员怎么用?只需要在他们的NuGet.Config里加个源:

<add key="private" value="http://nuget.yourdomain.com/v3/index.json" />

然后在Visual Studio或者命令行里就能搜索、安装你发布的私有包了,就跟用nuget.org一样丝滑。

小投入,大回报

看到这儿,你应该已经意识到:搭建私有NuGet仓库根本没那么难。借助阿里云轻量服务器 + BaGet,整个过程不到一小时,成本每个月一杯奶茶钱都不到。

它带来的好处却是实实在在的:代码复用更高效、内部组件统一管理、发布流程标准化,还能避免把敏感代码扔到公共平台。对于正在成长的团队来说,这步迟早要走,不如趁早动手。

如果你还在犹豫要不要试,我只能说——真香!我自己从今年初就开始用这套方案,现在十几个项目共用五六套核心包,改个bug全项目同步更新,再也不用手动复制粘贴了。

最后再提醒一次,去领个阿里云优惠券,买服务器能省则省,省下来的钱请同事喝杯咖啡不香吗?

好了,文章就到这儿。赶紧动手试试吧,遇到问题欢迎留言,我看到都会回。

内容均以整理官方公开资料,价格可能随活动调整,请以购买页面显示为准,如涉侵权,请联系客服处理。

本文由星速云发布。发布者:星速云。禁止采集与转载行为,违者必究。出处:https://www.67wa.com/149827.html

(0)
上一篇 1天前
下一篇 1天前
联系我们
关注微信
关注微信
分享本页
返回顶部