基於Baget結合nginx反向代理搭建私有nuget伺服器
阿新 • • 發佈:2020-09-22
nuget是dotnet開發中繞不開的包管理工具, 那麼如何搭建一個私有nuget伺服器來管理自己的包呢? 本文記錄基於Baget搭建私有nuget的方法, 部署方式使用的是Docker, 官方教程有詳細的部署說明, 我也是按照官方教程來的, 但是官方教程沒有說明如果通過nginx來進行反向代理並配置https, 本文進行補充;
前提條件
- 一臺安裝了docker的伺服器
- 良好的網路環境
基於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
遠端可以使用 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
如果你在使用過程中遇到什麼問題, 也歡迎留言交流