sinopiaを使用したプライベートnpmサービスの構築

5480 ワード

テキストアドレスhttps://github.com/jindada/blog/issues/1
なぜプライベートnpmを構築する必要があるのか
  • 私有のバッグは内部でしか使いたくないしgit+sshの方式を使いたくないし、優雅さが足りないし、対応する権限
  • を配置したいと思っています.
  • npm上のパケットのダウンロードが遅いので、ダウンロードしたパケットをサーバ上に猶予したいのですが、次回のダウンロード時にまず更新をチェックし、更新しなければ直接キャッシュ
  • を歩きます.
  • ダウンロード希望の場合、パブリックパッケージはパブリックウェアハウス、プライベートパッケージは内部サーバのプライベートウェアハウス
  • どうしてこの文章を書いたのですか.
    こちらの文章を书く时、すでに大神达が书いたいくつかのいい文章を见て、ここで集中してまとめたいと思って、しかもすでに文章が言及していない穴の下で感じの良い文章を列挙します:
  • Sinopiaを使用してプライベートnpm倉庫
  • を構築
  • Sinopia|ゼロからnpm倉庫
  • の構築を開始
    紹介する
    sinopiaの紹介と長所と短所は詳しく紹介しません上の2つの文章はすべてとても詳しい説明があります
    インストールと使用の導入
    sinopiaのインストールと起動(node環境をインストールしたと仮定)
    $ npm install sinopia -g
    $ sinopia
    

    次に、ブラウザアクセスアドレスhttp://localhost:4873/が正常に表示されると成功し、4873がデフォルトポートになります.
    npmエージェントの構成
    sinopiaが起動したら、まずnpm set registry http://localhost:4873/でクライアントが使用するnpmエージェントを設定し、正常に使用できます.
    ユーザーとログインの追加
    $ npm adduser --registry http://localhost:4873 //       
    
    $ npm login //       
    

    ログインに成功すると、npm publishを実行してこのプライベートnpmに公開することができます.http://localhost:4873/をリフレッシュすると、アップロードしたばかりのパッケージが表示されます.
    注意する必要があります:あなたは1つのパケット名+バージョン番号がすでに公共倉庫の中に存在するパケットを発表することができなくて、発表する時、sinopiaはまずあなたの配置した公共倉庫( , http://registry.npmjs.org)に行ってcheckに行って、checkは通過してからやっとsinopiaにパケットをアップロードすることを許可します
    コンフィギュレーション
    Sinopiaの特徴は、どのディレクトリで実行するかで、対応するディレクトリの下に自分のファイルが作成されることです. , sinopia -c path/config.yaml
    ディレクトリの下にはデフォルトで2つのファイルがあります:config.yamlとstorage,htpasswdはユーザを追加した後に自動的に作成される.
    config.yaml---アクセス権、エージェント、ファイル格納パスなどのすべての構成情報を構成するstorage---npmパッケージディレクトリhtpasswdをキャッシュする---ユーザーのアカウントパスワードなどの情報を保存するconfig.yaml:アクセス権、エージェント、ファイルストレージパスなどのすべての構成情報を構成する
    # This is the default config file. It allows all users to do anything,
    # so don't use it on production systems.
    #
    # Look here for more config file examples:
    # https://github.com/rlidwka/sinopia/tree/master/conf
    #
    
    # path to a directory with all packages
    storage: ./storage  // npm      
    
    auth:
      htpasswd:
        file: ./htpasswd   //             
        # Maximum amount of users allowed to register, defaults to "+inf".
        # You can set this to -1 to disable registration.
        max_users: -1  //   1000,  -1,    
    
    # a list of other known repositories we can talk to
    uplinks:
      npmjs:
        url: http://registry.npmjs.org/  //    npm   
        
    packages:  //       
      '@*/*':
        # scoped packages
        access: $all
        publish: $authenticated
    
      '*':
        # allow all users (including non-authenticated users) to read and
        # publish all packages
        #
        # you can specify usernames/groupnames (depending on your auth plugin)
        # and three keywords: "$all", "$anonymous", "$authenticated"
        access: $all
    
        # allow all known users to publish packages
        # (anyone can register by default, remember?)
        publish: $authenticated
    
        # if package is not available locally, proxy requests to 'npmjs' registry
        proxy: npmjs
    
    # log settings
    logs:
      - {type: stdout, format: pretty, level: http}
      #- {type: file, path: sinopia.log, level: info}
    
    # you can specify listen address (or simply a port) 
    listen: localhost:4873  //     ,       , localhost  0.0.0.0         
    
    htpasswd config.yaml max_users: -1は、npm adduserコマンドを無効にしてユーザーを作成する最大ユーザー数を-1に設定したことを示しますが、ディレクトリの下のhtpasswdファイルでユーザーを初期化し、htpasswdファイルを開くことができます.
    zhangsan:{SHA}?????????????????=:autocreated 2016-02-05T15:33:46.238Z
    lisi:{SHA}????????????????=:autocreated 2016-02-05T15:39:19.960Z
    wangwu:{SHA}????????????????=:autocreated 2016-02-05T17:59:05.041Z
    

    パスワードが暗号化されているのは明らかですが、暗号化アルゴリズムは簡単で、簡単なSHA 1が薄くなってからBase 64に変換し、タイムスタンプを付けます.それでも、私たちはまだ愚かで、どのようにユーザーを追加するか分かりません.怖がらないで!ここでは皆さんに使いやすいプラグインhtpasswd-for-sinopiaをあげます.間違いなく、作者本人が書いたものです.いいと思います.starをください.htpasswd-for-sinopiaの使い方を簡単に紹介します.
    $ npm install htpasswd-for-sinopia -g //   
    
    $ sinopia-adduser //  sinopia     ,           
    
    $ vim htpasswd //      htpasswd                   ,       
    
    packages ( , copy )
    構成は大きく2つの部分に分けられ、1つは@weflex/*で始まり、もう1つはワイルドカード*です.
    これはもちろんpackageです.jsonのnameフィールドは、@weflex/appが最初の構成に一致し、expressが2番目に一致します.
    ここでこのような構成の意味は、一般的なチームや会社のプライベートプロジェクトでは、異なる権限制御が採用されるため、ここではNPMのscoped nameである@companyの形式を借りています.例えば、@weflex/appはWeFlex傘下のappプロジェクトを表しています.
    次に、各ネーミングフィルタ(filter)の下に3つの基本設定があります.
    アクセス:一致するアイテムをインストールできるユーザー(install)publishのクラスを表します.一致するアイテムをパブリッシュできるユーザー(publish)proxyのクラスを表します.名前の通り、ここの値はuplinksの1と2に対応する値です.通常、次のオプションの構成があります.
    $allはすべての人が対応する操作を実行できることを示します$authenticatedは検証された人だけが対応する操作を実行できることを示します$anonymousは匿名者だけが対応する操作を行うことができることを示します(通常は不要)または、以前に構成したユーザーテーブルhtpasswdに対応する1人以上のユーザーを指定して、一致する操作構成が完了したユーザーを明確に指定してから実行することもできます.
    $ sinopia -c config.yml
    

    sinopiaとの併用pm2:
    $ npm install -g pm2
    
    $ pm2 start `which sinopia`
    

    その他のアクションリファレンスhttps://wohugb.gitbooks.io/pm2/content/nrm:npm
    $ //   nrm
    $ npm install -g nrm
    $ //     
    $ nrm ls
    $ //       sinopia    
    $ nrm add sinopia http://localhost:4873
    $ //     
    $ nrm ls
    $ //    sinopia      
    $ nrm use sinopia
    

    セキュリティ
    プライベートnpm倉庫を保証するために、フロントエンドにNginxを追加し、SSHを2層検証として構成できます.