💭
RaspberryPiにローカルNugetサーバを建てた
概要
Dockerで軽量NugetサーバBaGetを起動する。
Dockerfile
Arm64向けのDockerfileはないのでイメージ作成から
FROM mcr.microsoft.com/dotnet/aspnet:3.1
# ワーキングディレクトリの設定
WORKDIR /app
# BaGetのビルド済みバイナリをダウンロード・配置・解凍
ADD https://github.com/loic-sharma/BaGet/releases/download/v0.4.0-preview2/BaGet.zip /app/
RUN apt-get update && apt-get install -y unzip && unzip BaGet.zip && rm BaGet.zip
# 環境変数の設定
ENV ASPNETCORE_URLS=http://+:80 \
DOTNET_RUNNING_IN_CONTAINER=true
# BaGet用のコンテナイメージの作成
ENTRYPOINT ["dotnet", "BaGet.dll"]
特にこだわりはないのでプロジェクトが動く最低限のバージョン(3.1)を利用。
公式Githubを見ても数年動いてないのでバージョン決め打ちでダウンロード
docker build -t baget .
イメージをビルド
Bagetの設定
docker run -d baget:latest
docker ps -a |grep baget:latest
53645734ca6b baget:latest "dotnet BaGet.dll" 3 minutes ago Exited (0) 2 minutes ago wizardly_diffie
mkdir data
docker cp wizardly_diffie:/app/appsettings.json .
docker cp wizardly_diffie:/app/baget.db data
一旦起動して必要そうな設定ファイルとDBファイルを外にだす。
appsettings.json
{
"ApiKey": "****************",
"PackageDeletionBehavior": "Unlist",
"AllowPackageOverwrites": false,
"Database": {
"Type": "Sqlite",
"ConnectionString": "Data Source=/data/baget.db"
},
"Storage": {
"Type": "FileSystem",
"Path": "/data/storage"
},
...
ApiKeyとDatabase.ConnectString(Data Sourceの位置)、Storageの場所だけ設定
composeに追加
docker-compose.yaml
baget:
image: baget
environment:
- TZ=Asia/Tokyo
volumes:
- ./baget/appsettings.json:/app/appsettings.json
- ./baget/data:/data
既存のWeb用のcomposeに追加
nginxの設定
server {
listen 80;
server_name baget.my-domain.lan;
location / {
proxy_pass http://baget:80;
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;
}
}
※予め*.my-domain.lanをこのサーバで処理するようにDNSを設定している。
BaGetは(たぶん)location単位でのサービス起動に対応していなかったため、このような設定になった。
nugetへのソース登録
dotnet nuget Add source http://baget.mydomain.lan/v3/index.json -n "baget.mydomain"
dotnet pack -c Release
dotnet nuget push -s "baget.mydomain" -k "****************" bin\Release\test.1.0.0.nupkg
Discussion