αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαž›αžΎ GitHub αžŠαŸ‚αž›αž“αžΆαŸ†αž‘αŸ…αžŠαž›αŸ‹αž€αžΆαžšαž›αŸαž…αž’αŸ’αž›αžΆαž™αž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αž―αž€αž‡αž“ αž“αž·αž„αž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ NPM

GitHub αž”αžΆαž“αž–αŸ’αžšαž˜αžΆαž“αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αŸ†αž–αžΈαž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž‚αŸ„αž›αž”αŸ†αžŽαž„αž‘αžΆαž‰αž™αž€αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„αž―αž€αž‡αž“αžŠαŸ„αž™αž”αŸ’αžšαžΎαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆ OAuth αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαž”αžŸαž˜αŸ’αžšαž½αž›αžŠαŸ‚αž›αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŸαŸαžœαžΆ Heroku αž“αž·αž„ Travis-CI αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžšαžΆαž™αž€αžΆαžšαžŽαŸαžαžΆαž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αŸƒαž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αŸαž…αž’αŸ’αž›αžΆαž™αž…αŸαž‰αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„αž―αž€αž‡αž“αž“αŸƒαž’αž„αŸ’αž‚αž€αžΆαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž”αžΆαž“αž”αžΎαž€αž€αžΆαžšαž…αžΌαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ…αž€αžΆαž“αŸ‹αžƒαŸ’αž›αžΆαŸ†αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαŸαž‘αž·αž€αžΆ Heroku PaaS αž“αž·αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹ Travis-CI αŸ” αž€αŸ’αž“αž»αž„αž…αŸ†αžŽαŸ„αž˜αž‡αž“αžšαž„αž‚αŸ’αžšαŸ„αŸ‡αž˜αžΆαž“ GitHub αž“αž·αž„αž‚αž˜αŸ’αžšαŸ„αž„ NPM αŸ”

αž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαž’αžΆαž…αž‘αžΆαž‰αž™αž€αž–αžΈαžƒαŸ’αž›αžΆαŸ†αž„ GitHub αž―αž€αž‡αž“ αžŠαŸ‚αž›αž‡αžΆαž‚αž“αŸ’αž›αžΉαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž…αžΌαž›αž”αŸ’αžšαžΎ Amazon Web Services API αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‚αž˜αŸ’αžšαŸ„αž„ NPM αŸ” αž‚αž“αŸ’αž›αžΉαŸ‡αž›αž‘αŸ’αž’αž•αž›αž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž…αžΌαž›αž”αŸ’αžšαžΎαž€αž‰αŸ’αž…αž”αŸ‹ NPM αžŠαŸ‚αž›αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž€αŸ’αž“αž»αž„αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ AWS S3 αŸ” GitHub αž‡αžΏαž‡αžΆαž€αŸ‹αžαžΆ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž˜αžΆαž“αž€αžΆαžšαž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αžƒαŸ’αž›αžΆαŸ†αž„ NPM αž€αŸαžŠαŸ„αž™ αžœαžΆαž˜αž·αž“αž”αžΆαž“αž€αŸ‚αž”αŸ’αžšαŸ‚αž€αž‰αŸ’αž…αž”αŸ‹ αž¬αž‘αž‘αž½αž›αž”αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž–αžΆαž€αŸ‹αž–αŸαž“αŸ’αž’αž‡αžΆαž˜αž½αž™αž‚αžŽαž“αžΈαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ„αŸ‡αž‘αŸαŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž•αž„αžŠαŸ‚αžšαžαžΆ αžŠαŸ„αž™αžŸαžΆαžšαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ GitHub.com αž“αž·αž„ NPM αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€ αž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαž˜αž·αž“αž˜αžΆαž“αž–αŸαž›αžœαŸαž›αžΆαžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αž˜αžΆαžαž·αž€αžΆαž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„ GitHub αžαžΆαž„αž€αŸ’αž“αž»αž„αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž‡αžΆαž˜αž½αž™ NPM αž˜αž»αž“αž–αŸαž›αž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŠαŸ‚αž›αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαžΆαžšαžΆαŸ†αž„αŸ”

αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αžƒαžΎαž‰αž“αŸ…αžαŸ’αž„αŸƒαž‘αžΈ 12 αžαŸ‚αž˜αŸαžŸαžΆ αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αž”αŸ’αžšαžΎαž‚αž“αŸ’αž›αžΉαŸ‡αž‘αŸ…αž€αžΆαž“αŸ‹ AWS APIαŸ” αž€αŸ’αžšαŸ„αž™αž˜αž€ αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž€αžαŸ‹αžαŸ’αžšαžΆαž“αŸ…αž›αžΎαž’αž„αŸ’αž‚αž€αžΆαžšαž˜αž½αž™αž…αŸ†αž“αž½αž“αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Heroku αž“αž·αž„ Travis-CI αž•αž„αžŠαŸ‚αžšαŸ” αž’αž„αŸ’αž‚αž€αžΆαžšαžŠαŸ‚αž›αžšαž„αž•αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αŸαž‰αžˆαŸ’αž˜αŸ„αŸ‡αž‘αŸ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΆαžšαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž”αž»αž‚αŸ’αž‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎαž‘αŸ…αž€αžΆαž“αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αžšαž„αž•αž›αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αžŠαŸ„αž™αž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαŸ” αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Heroku αž“αž·αž„ Travis-CI αžαŸ’αžšαžΌαžœαž”αžΆαž“αž›αžΎαž€αž‘αžΉαž€αž…αž·αžαŸ’αžαž±αŸ’αž™αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž– αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αžŸαžœαž“αž€αž˜αŸ’αž˜αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαž—αžΆαž–αž˜αž·αž“αž”αŸ’αžšαž€αŸ’αžšαžαžΈ αž“αž·αž„αžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αž˜αž·αž“αž’αž˜αŸ’αž˜αžαžΆαŸ”

αžœαžΆαž˜αž·αž“αž‘αžΆαž“αŸ‹αž…αŸ’αž”αžΆαžŸαŸ‹αž“αŸ…αž‘αžΎαž™αž‘αŸαžαžΆαžαžΎαžαžΌαžαžΉαž“αž’αŸ’αž›αžΆαž€αŸ‹αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžŠαŸƒαž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ αž”αŸ‰αž»αž“αŸ’αžαŸ‚ GitHub αž‡αžΏαž‡αžΆαž€αŸ‹αžαžΆαž–αž½αž€αž‚αŸαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαžŸαž˜αŸ’αžšαž”αžŸαž˜αŸ’αžšαž½αž›αž“αŸƒαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αž“αŸ„αŸ‡αž‘αŸ αžŠαŸ„αž™αžŸαžΆαžšαž“αž·αž˜αž·αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž…αžΌαž›αž”αŸ’αžšαžΎαž–αžΈαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαžΆαž„αž€αŸ’αžšαŸ…αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž›αžΎαž•αŸ’αž“αŸ‚αž€ GitHub αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαžΎαž˜αžŠαŸ‚αž›αžŸαž˜αžšαž˜αŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ” αž€αžΆαžšαžœαž·αž—αžΆαž‚αž’αŸ†αž–αžΈαž’αžΆαž€αž”αŸ’αž”αž€αž·αžšαž·αž™αžΆαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαžΆ αž‚αŸ„αž›αž”αŸ†αžŽαž„αž…αž˜αŸ’αž”αž„αž“αŸƒαž€αžΆαžšαž‘αžΆαž‰αž™αž€αž˜αžΆαžαž·αž€αžΆαž“αŸƒαžƒαŸ’αž›αžΆαŸ†αž„αž―αž€αž‡αž“αž‘αŸ†αž“αž„αž‡αžΆαž€αžΆαžšαžœαž·αž—αžΆαž‚αžœαžαŸ’αžαž˜αžΆαž“αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αžœαžΆ αžŠαžΌαž…αž‡αžΆαžŸαŸ„αž…αžΌαž›αž”αŸ’αžšαžΎ αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαž€αžΆαžšαžœαžΆαž™αž”αŸ’αžšαž αžΆαžšαž›αžΎαž’αžΆαžαž»αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸƒαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” .

αž”αŸ’αžšαž—αž–: opennet.ru

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹