自宅のラズパイにパッケージレジストリを追加しました。特にやりたかったのはnpmです

Nodeは本当にやれることが多く、グローバルインストールしておけばCLIツールとして色々使えたりもします。 作成したツール類やライブラリは単にパックしたアーカイブでローカルでインストールしても良いのですが、いくつかのプラットフォームで再利用する時に、可能であればこの手順は短縮したいところがありました。

npm

npmのレジストリとしてはverdaccioを導入しました。 Giteaの機能でも存在しているのですが、やや面倒そうなので独立して導入。

Unity Packageのセルフレジストリとしても推奨されており、Docker Imageがあるので導入がラクです。

ハマりポイントとしてはリバースプロキシ対応と権限対応でした。

まず、config.yamlはURLをroot/verdaccioとしたかったのと、ファイルサイズを調整したかったので以下で調整できます。

url_prefix: "/verdaccio/"
max_body_size: 10000mb

次に権限対応。これはボリュームをホストに回しているものの、実行ユーザが非root(verdaccioってユーザになってる)ために書き込みができないなどのエラーが起こってしまうため。
まあ本来Docker Volumeに回すべきだろうけど、本当にローカルのライズパイなのでまあ問題ないだろう。

# dockerコンテナ内での対応
sudo docker exec --user root -it {container_id} sh
cd /
chown -R 10001:65533 verdaccio
exit

# ホストの対応
sudo chmod -R 777 data
sudo chmod -R 777 config

あとはクライアント側の対応。npmでレジストリに対してユーザ設定を追加する際、以下のようにしてアカウントを作成する

npm adduser --registry {url} --scope=@{scope_name}

これで@{scope_name}/fooのようなパッケージ名に設定しておけば、以下のようなコマンドの時に自動的にローカル側のレジストリを取ってくれるようになります。

npm install @{scope}/foo

nuget

Nugetの方はGiteaの設定で上手く行きそうだったので、Giteaの機能を利用します。が、HTTPでの対応は廃止予定の模様、、

基本的に公式ドキュメントの通りでした

まず、以下のコマンドによりAppData\Roaming\NuGet\Nuget.Configにリポジトリの設定を追加します

# フィード設定
dotnet nuget add source --name {source_name} --username {username} --password {password} https://gitea.example.com/api/packages/{owner}/nuget/index.json

で、以下のようにすればOK

dotnet nuget push --source {source_name} foo.1.0.0.nupkg

基本的にはVisual Studioでも自動で反映されてるので、これでローカルのフィードも取りに行けます。パッケージの削除とかはGitea経由からでもできます

いやー、これでちょっとしたツール類の落とし込みは楽になりますね。そこそこ上手く行ってよかった。