1. 程式人生 > 實用技巧 >基於Baget結合nginx反向代理搭建私有nuget伺服器

基於Baget結合nginx反向代理搭建私有nuget伺服器

nuget是dotnet開發中繞不開的包管理工具, 那麼如何搭建一個私有nuget伺服器來管理自己的包呢? 本文記錄基於Baget搭建私有nuget的方法, 部署方式使用的是Docker, 官方教程有詳細的部署說明, 我也是按照官方教程來的, 但是官方教程沒有說明如果通過nginx來進行反向代理並配置https, 本文進行補充;

前提條件

  1. 一臺安裝了docker的伺服器
  2. 良好的網路環境

基於docker部署baget

首先cd到一個目錄, 用來存放baget產生中間檔案和資料等;

新建baget.env檔案, 內容如下:

# The following config is the API Key used to publish packages.
# You should change this to a secret value to secure your server.
ApiKey=NUGET-SERVER-API-KEY

Storage__Type=FileSystem
Storage__Path=/var/baget/packages
Database__Type=Sqlite
Database__ConnectionString=Data Source=/var/baget/baget.db
Search__Type=Database

在和baget.env同目錄下新建baget-data目錄;

拉去映象: docker pull loicsharma/baget

後臺執行映象: docker run -itd --rm --name nuget-server -p 5555:80 --env-file baget.env -v "$(pwd)/baget-data:/var/baget" loicsharma/baget:latest

現在, baget會監聽本機5555埠的請求, 可以通過 dotnet nuget push -s http://localhost:5555/v3/index.json -k NUGET-SERVER-API-KEY package.1.0.0.nupkg

在本地向baget推送nuget包;

遠端可以使用 http://<你的伺服器ip>:5555/v3/index.json這個地址來推送包, 但是如何配合nginx並配置https呢?

nginx反向代理baget

nginx配置檔案

server {

    listen 443 ssl;
    server_name <your server domain>;
    ssl_certificate <ssl證書>;
    ssl_certificate_key /web/certs/baget/baget.laggage.top_key.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
    client_max_body_size     18m;
    location / {
        proxy_pass         http://localhost:5555;
        proxy_http_version 1.1;
        # proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

重點, 還需要配置下80埠的轉發, 好像因為v2版本的api使用http, 所以這個需要轉發下, 不然的話, 雖然可以訪問到baget網頁, 但是是無法遠端推送nuget包到伺服器

server {
  listen 80;
  server_name <你的伺服器域名>;

  proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header   X-Forwarded-Proto $scheme;
  proxy_set_header   Host $host;

  location / {
     proxy_pass http://localhost:5555;
  }
}

End

如果你在使用過程中遇到什麼問題, 也歡迎留言交流