рд╕реЗрд╡рд╛ Sentry рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЕрдЧрд╛рдбрд┐-рдЕрдиреНрддрдорд╛ рд▓реЗрдЦрд┐рдПрдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдмрдЧрд╣рд░реВ рдЯрд╛рдврд╛рдмрд╛рдЯ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ.
рдЕрдЧрд╛рдбрд┐-рдЕрдиреНрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджреИ рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдард┐рди рд╣реБрди рд╕рдХреНрдЫ рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫрдиреН, рдЬрд╕рдорд╛ рддрдкрд╛рдЗрдБ рдкреНрд░рд╛рдпрдГ рдкрд╣реБрдБрдЪ рдЧрд░реНрдиреБрд╣реБрдиреНрдиред рддрд░, Sentry рдпрд╕рд▓рд╛рдИ рдЯрд╛рдврд╛рдмрд╛рдЯ рдмрдЧрд╣рд░реВ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрди рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫред
рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдЫ
рдпрджрд┐ рддрдкрд╛рдЗрдБ рдпреА рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫ:
Node.js : рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╕рдореНрдкрдиреНрди рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдЬреБрди рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рднрд╛рдЧ рд╣реЛрдЗрдиред рд╣рд╛рдореАрд▓реЗ рдирд╡реАрдирддрдо LTS рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдпреМрдВ (8.12.0)- Sentry: рдпрд╛ рдд рд╕реЗрдиреНрдЯреНрд░реА рд╕реЗрд╡рд╛рдорд╛ рдЦрд╛рддрд╛ (рддрдкрд╛рдИрд▓реЗ рдкреНрд░рддрд┐ рдорд╣рд┐рдирд╛ 10 рд╣рдЬрд╛рд░ рдмрдЧрд╣рд░реВ рдирд┐рдГрд╢реБрд▓реНрдХ рд░реЗрдХрд░реНрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ) рд╡рд╛ рд╕реНрдерд╛рдкрд┐рдд рд╕реНрдерд╛рдиреАрдп рд╕реЗрдиреНрдЯреНрд░реА -
https://github.com/getsentry/onpremise
рддрдкрд╛рдИрдВрдХреЛ рд╕рд░реНрднрд░рдорд╛ рд╕реНрдерд╛рдкрдирд╛
рддрдкрд╛рдИрдВрдХреЛ рд╕рд░реНрднрд░рдорд╛ рд╕реЗрдиреНрдЯреНрд░реА рдЕрди-рдкреНрд░рд┐рдорд╛рдЗрд╕ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рддрдкрд╛рдИрдВ реи рддрд░рд┐рдХрд╛рдорд╛ рдЬрд╛рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
-
rpm рдмрдирд╛рдЙрдиреБрд╣реЛрд╕реН рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН -
https://habr.com/ru/post/500632/ -
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрдерд╛рдкрдирд╛рдХрд░реНрддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
╨г╤Б╤В╨░╨╜╨╛╨▓╨╕╤В╤М ╨╜╨░ ╤Б╨╡╤А╨▓╨╡╤А docker ╨╕ docker-compose git clone https://github.com/getsentry/onpremise.git ./install.sh
рдорд╛рдирдХ рдкреНрд░рдпреЛрдЧ
рд╕реБрд░реБ рдЧрд░реНрди, рд╕реЗрд╡рд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯрдмрд╛рдЯ рдПрдЙрдЯрд╛ рдирдпрд╛рдБ рдердкреНрдиреБрд╣реЛрд╕реН Sentry- рдЖрд╡реЗрджрди рдХреЛ рд▓рд╛рдЧреА рдкрд░рд┐рдпреЛрдЬрдирд╛ред рдЗрдЪреНрдЫрд┐рдд рднрд╛рд╖рд╛ рдЪрдпрди рдЧрд░реЗрдкрдЫрд┐, рддрдкрд╛рдИрдВрд▓реЗ рд╕рдореНрдмрдиреНрдзрд┐рдд рдХрд╛рдЧрдЬрд╛рддрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫред рд╣рд╛рдореНрд░реЛ рд╕рдиреНрджрд░реНрднрдорд╛ рд╣рд╛рдореАрд▓реЗ рд░реЛрдЬреНрдпреМрдВ рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ.
рдкрд╣рд┐рд▓реЛ рдЙрджрд╛рд╣рд░рдг рдорд╛рдирдХ рд╣реЛ рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдпрд╣рд╛рдБ рджреБрдИрд╡рдЯрд╛ рдмрдЯрдирд╣рд░реВ рдЫрдиреН: "рдирдорд╕реНрдХрд╛рд░" (рдирдорд╕реНрддреЗ) рд░ "рддреНрд░реБрдЯрд┐" (рддреНрд░реБрдЯрд┐)ред
рддрдкрд╛рдИрдВрд▓реЗ рдмрдЯрди рдХреНрд▓рд┐рдХ рдЧрд░реЗрдкрдЫрд┐ "рдирдорд╕реНрдХрд╛рд░", рд╕реНрдХреНрд░рд┐рди рд░рд┐рдмреБрдЯ рд╣реБрдиреЗрдЫ рд░ рдмреНрд▓рдХ рд╣реБрдиреЗрдЫ рдкреНрд░рдпрд╛рд╕ рдмрдЧ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреЗ рд░ рд╕рдорд╛рддреНрдиреЗ рдЫред рдмрдЧ "рдкрдХреНрд░рд┐рдПрдХреЛ" рдкрдЫрд┐, рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рд╕реЗрд╡рд╛рдорд╛ рдкрдард╛рдЗрдиреНрдЫ Sentry.
"рддреНрд░реБрдЯрд┐" рдмрдЯрдирд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рдЬрд┐рд▓реИ рдмрдЧ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
vanilla/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Vanilla</title>
</head>
<body>
<button id="hello">Hello</button>
<button id="error">Error</button>
<div id="output"></div>
<script src="https://browser.sentry-cdn.com/4.0.5/bundle.min.js" crossorigin="anonymous"></script>
<script>
(function () {
'use strict';
Sentry.init({ dsn: 'https://[email protected]/1289664' });
var helloEl = document.getElementById('hello');
var errorEl = document.getElementById('error');
var outputEl = document.getElementById('output');
helloEl.addEventListener('click', handleHelloClick);
errorEl.addEventListener('click', handleErrorClick);
function handleHelloClick() {
outputEl.innerHTML = 'Hello World';
try {
throw new Error('Caught');
} catch (err) {
Sentry.captureException(err);
}
}
function handleErrorClick() {
throw new Error('Uncaught');
}
})();
</script>
</body>
</html>
рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ:
- рд╕реЗрдиреНрдЯреНрд░реА CDN рдмрд╛рдЯ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рдЪрд░рдХреЛ рд░реВрдкрдорд╛ рдЙрдЬрд╛рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ
- рдЕрд▓рд┐ рдкрд╣рд┐рд▓реЗ рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рд╕реЗрдиреНрдЯреНрд░реА рд╕реБрд░реБ рдЧрд░реНрдпреМрдВ
рдпреЛ рдЙрджрд╛рд╣рд░рдг рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди, рд╣рд╛рдореА рдПрдХ рд╕реНрдерд┐рд░ рд╡реЗрдм рд╕рд░реНрднрд░ рдкреНрд▓реЗрдЯрдлрд░реНрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ Node.js: http рд╕рд░реНрднрд░ред рдлреЛрд▓реНрдбрд░рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рдЬрд╣рд╛рдБ рдлрд╛рдЗрд▓ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫ index.html, рд░ рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдареЗрдЧрд╛рдирд╛ рдЦреЛрд▓реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рдореНрди рд▓рд╛рдЗрди рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдХреНрдпрд╛рд╕рд┐рдЩ рдЕрд╕рдХреНрд╖рдо рдЧрд░реНрдиреЗ рд╡рд┐рдХрд▓реНрдк)
рдХрд╕рд░реА рд╕рдорд╛рддрд┐рдПрдХрд╛ рдмрдЧрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреНрдЫрдиреН
рдкрд╣рд┐рд▓реЗ рдмрдЯрди рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН "рдирдорд╕реНрдХрд╛рд░".
рд╣рд╛рдореАрд▓реЗ рдПрдЙрдЯрд╛ рдмрдЧ рд╕рдорд╛рддреНрдпреМрдВ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓реЗ рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХ рдкрдк рдЕрдк рдЧрд░реНрджреИрди, рд░ рддреНрдпрд╕реИрд▓реЗ рдХрдиреНрд╕реЛрд▓рдорд╛ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░рд┐рдБрджреИрдиред рддрд░, рд╣рд╛рдореАрд▓реЗ рдкрдард╛рдПрдХреЛрд▓реЗ Sentry рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╣рд╛рдореА рддрдкрд╛рдИрдВрдХреЛ рдЦрд╛рддрд╛рдорд╛ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕рдиреНрджреЗрд╢ рджреЗрдЦреНрдиреЗрдЫреМрдВред
рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ:
- рд╣рд╛рдореА рдХреБрди рд▓рд╛рдЗрди (24) рдорд╛ рдмрдЧ рд╕рдорд╛рд╡реЗрд╢ рдЯреНрд░реЗрд╕ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ
- рдердк рд░реВрдкрдорд╛, рдмреНрд░реЗрдбрдХреНрд░рдореНрдм рдЯреНрд░реЗрд▓рд▓реЗ рддреНрд░реБрдЯрд┐ рдирд┐рдореНрддреНрдпрд╛рдЙрдиреЗ рдмреНрд░рд╛рдЙрдЬрд░ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджрдЫред
рдХрд╕рд░реА рдирдкрдврд┐рдПрдХрд╛ рдмрдЧрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреНрдЫрдиреН
рдмрдЯрди рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН "рддреНрд░реБрдЯрд┐"ред
рдмрдЧрд▓реЗ рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрд▓рд╛рдИ рдмрдмрд▓ рдЧрд░реНрдЫ рд░ рдпрд╕рд░реА рдХрдиреНрд╕реЛрд▓рдорд╛ рддреНрд░реБрдЯрд┐ рд╕рдиреНрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреНрдЫред рдпрд╕ рдкрдЫрд┐, рд╕реЗрдиреНрдЯреНрд░реАрд▓реЗ рдХреБрдиреИ рдкрдирд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп рдмрд┐рдирд╛ рдмрдЧрд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджрдЫред
рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ:
- рд╣рд╛рдореА рдХреБрди рд▓рд╛рдЗрдирдорд╛ рджреЗрдЦреНрди рд╕рдХреНрдЫреМрдВ (30) рдмрдЧ рд╣рд░рд╛рдПрдХреЛ рдЫ
- рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдмреНрд░реЗрдбрдХреНрд░рдореНрдм рдЯреНрд░реЗрд▓ рдЫреИрди (рдХрд┐рди рдореИрд▓реЗ рдзреЗрд░реИ рдмреБрдЭрд┐рди)
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХрд╕рд░реА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреЗ
рд╣рд╛рдореАрд▓реЗ рдХреБрди рдкреГрд╖реНрдард╣рд░реВрд▓реЗ рд╣рд╛рдореНрд░реЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрддреНрд░реБрдЯрд┐рд╣рд░реВ рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрди рд╕рдХреНрдЫрдиреН рднрдиреЗрд░ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╛рдж рдЧрд░реНрдиреБрднрдПрдХреЛ рд╣реЛрд▓рд╛ Sentry; рдорджреНрджрдд рд╕рдВрдЧ dsn рд░реЗрдХрд░реНрдбрд╣рд░реВред рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рдЗрдирдкреБрдЯ рддрдкрд╛рдИрдВрдХреЛ рдкреГрд╖реНрдардХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рд╣реЗрд░реНрдиреЗ рдЬреЛ рдХреЛрд╣реАрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдЫред
рдпрд╕рдмрд╛рдЯ рдмрдЪреНрди, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯрд╣рд░реВ рдкреЗрд╢ рдЧрд░реНрди рд╕рдХреНрдиреЗ рдбреЛрдореЗрдирд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛ рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ (рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ)ред рдпреЛ рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯрд┐рдЩреНрд╕ рдЯреНрдпрд╛рдмрдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ Sentry- рдкрд░рд┐рдпреЛрдЬрдирд╛, рд╕реЗрдиреНрдЯреНрд░реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдЩ.
рд╡рд┐рдореЛрдЪрди рдЧрд░реНрджрдЫ
рдпрджрд┐ рддрдкрд╛рдЗрдБ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдмрд╛рд░реЗ рд╕реЛрдЪреНрдиреБрд╣реБрдиреНрдЫ Sentry рд╣рд╛рдореНрд░реЛ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирдХреЛ рд╡рд┐рднрд┐рдиреНрди рднрд┐рдиреНрдирддрд╛рд╣рд░реВрдорд╛, рддреНрдпрд╕реЛрднрдП рд╣рд╛рдореАрд▓рд╛рдИ рдХреБрдиреИ рдкреНрд░рдХрд╛рд░рдХреЛ рд╕рдВрдпрдиреНрддреНрд░ рдЪрд╛рд╣рд┐рдиреНрдЫ рдЬрд╕рд▓реЗ рддреНрд░реБрдЯрд┐рд╣рд░реВрд▓рд╛рдИ рд╕рдВрд╕реНрдХрд░рдг рдирдореНрдмрд░рд╕рдБрдЧ рдЪрд┐рдиреНрд╣ рд▓рдЧрд╛рдЙрдиреЗрдЫред
рдЖрдЦрд┐рд░, рд╣рд╛рдореАрд▓реЗ рдлрд┐рдХреНрд╕ рдЧрд░реЗрдХреЛ рдмрдЧ рдлреЗрд░рд┐ рдкрдк рдЕрдк рд╣реЛрд╕реН рднрдиреНрдиреЗ рд╣рд╛рдореА рдЪрд╛рд╣рдБрджреИрдиреМрдВ, рд░ рд╣рд╛рдореАрд▓реЗ рдлрд┐рдХреНрд╕ рдЧрд░реЗрдХреЛ рдХреБрд░рд╛рд▓реЗ рдХрд╛рдо рдЧрд░реЗрди рднрдиреНрдиреЗ рд╣рд╛рдореАрд▓рд╛рдИ рд▓рд╛рдЧреНрдЫред рдпреЛ рдкрдирд┐ рд╣реБрди рд╕рдХреНрдЫ рдХрд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рдкреБрд░рд╛рдиреЛ, рдХреНрдпрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕реБрд░реБ рдЧрд░реНрдпреЛред
рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рд░рд┐рд▓реАрдЬ (рд╕рдВрд╕реНрдХрд░рдг) рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдорд╛ Sentry.
vanilla/index.html
...
var RELEASE = '0.1.0';
Sentry.init({
dsn: 'https://[email protected]/1289664',
release: RELEASE,
});
...
рдпрд╕ рдкрдЫрд┐, рд╕рдмреИ рдирдпрд╛рдБ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд░реВрдкрдорд╛ рдЪрд┐рдиреНрд╣ рд▓рдЧрд╛рдЗрдиреЗрдЫ рд░рд┐рд▓реАрдЬ (реж.рез.реж), рддреНрдпреЛ рд╣реЛ, рддрд┐рдиреАрд╣рд░реВ рдХреЛрдбрдХреЛ рд╕рд╣реА рд╕рдВрд╕реНрдХрд░рдгрдорд╛ рдмрд╛рдБрдзрд┐рдиреЗрдЫрдиреНред
рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ:
- рд╣рд╛рдореАрд▓реЗ рд░рд┐рд▓рд┐рдЬрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╕рд░рд▓ рддрд░рд┐рдХрд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдПрдХрд╛ рдЫреМрдВ
- рд╕реЗрдиреНрдЯреНрд░реАрд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдердк рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ
рдЬрдЯрд┐рд▓ рдЖрдлреНрдиреЛ рдХреЛ рдкреНрд░рдпреЛрдЧ , рдЬрд╕рд╕рдБрдЧ рдирдЬрд┐рдХрдХреЛ рд╕рдореНрдмрдиреНрдз рдЫ GitHubред рдпреЛ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд░реНрдпрд╣рд░реВ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдмрдЧрд╣рд░реВ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрди рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫред
PS рджреЛрд╕реНрд░реЛ рднрд╛рдЧ рд▓рд╛рдореЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рдпреЛ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдорд╛ рд╣реБрдиреЗрдЫред
PS рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреНрдпрд╛рдЯ рд╕реЗрдиреНрдЯреНрд░реА
PS рдореИрд▓реЗ рдпреЛ рдкреЛрд╖реНрдЯрдХреЛ рдЕрдиреБрд╡рд╛рдж рд╣реЛ рднрдиреЗрд░ рд╕рдВрдХреЗрдд рдЧрд░реНрди рдмрд┐рд░реНрд╕реЗрдВ
рд╕реНрд░реЛрдд: www.habr.com