Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ян Анисимов. Персональная экосистема для разраб...

Ян Анисимов. Персональная экосистема для разработчика или как нам сэкономить

Доклад о выборе решений для построения закрытых экосистем для индивидуальных разработчиков и групп. Обсуждается выбор компонент для связки VCS+CI. Какой PaaS можно взять за основу. И как его, если надо, кастомизировать

Avatar for Python Community Chelyabinsk

Python Community Chelyabinsk

December 08, 2018
Tweet

More Decks by Python Community Chelyabinsk

Other Decks in Programming

Transcript

  1. Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü Àíèñèìîâ ßí

    Îëåãîâè÷ Èíæåíåð-ïðîãðàììèñò ÎÎÎ "Èíñèò-òåëåêîì" - yanchick - yanchick_ - yanchick.org - [email protected] Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 1 /25
  2. ×òî íåîáõîäèìî ðàçðàáîò÷èêó IDE, ðåäàêòîð VCS àâòîìàòèçàòîð ïðîöåññà ñáîðêè, òåñòîâ,

    äåïëîÿ, íîòèôèêàöèè óäîáíûé ñåðâåð Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 2 /25
  3. Èñõîäíûå äàííûå Êëþ÷åâàÿ ïðîáëåìà: èëè open-source èëè GitHub -7$ â

    ìåñÿö. Travis-CI - 69$ â ìåñÿö. Heroku - 7$ â ìåñÿö. Èòîãî: îò 83$ â ìåñÿö ãäå-òî â èíòåðíåòå (ïðèâåò îò ÐÊÍ) Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 4 /25
  4. Èñõîäíûå äàííûå Ïðè ýòîì â íàëè÷èè ìîæåò áûòü: 1 ñòàðûé

    êîìïüþòåð; 2 Raspberry Pi; 3 VPS. Ïðè ýòîì õî÷åòñÿ: 1 ýêñïåðèìåíòèðîâàòü; 2 êàê ìîæíî ìåíüøå ïðîáëåì ñ ýêñïëóàòàöèåé; 3 êîãäà-òî ñìàñøòàáèðîâàòüñÿ. Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 5 /25
  5. Íàø ïðîòàãîíèñò Ëèñòèíã 1: demo.py import os from flask import

    Flask app = Flask(__name__) @app.route('/') def hello (): return 'Ïðèâåò ó÷àñòíèêàì PyChel ' if __name__ == '__main__ ': app.run() Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 6 /25
  6. Gogs Gogs - GIT ñåðâåð 1 ìàëåíüêèé áèíàðíèê ; 2

    ïîääåðæêà êîìàíä; 3 ïîääåðæêà àâòîðèçàöèè ÷åðåç LDAP; 4 ïîääåðæêà webhook êàê íà ðåïîçèòîðèé òàê è íà îðãàíèçàöèþ; 5 issue, pull-request, çàùèù¼ííûå âåòêè; 6 web- ðåäàêòîð, Jupyter; 7 åñòü wiki. Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 9 /25
  7. Dokku PaaS Dokku - ïðîñòåéøèé PaaS ïîñòðîåííûé íà bash è

    docker. Îñíîâíûå îñîáåííîñòè: 1 èñõîäíûé êîä ìåíüøå ÷åì 200 ñòðî÷åê íà Bash; 2 èñïîëüçóåò Heroku buildpacks ; 3 êàæäîå ïðèëîæåíèå è ñåðâèñ ðàáîòàåò â îòäåëüíîì êîíòåéíåðå; 4 ìíîæåñòâî ïëàãèíîâ è ñåðâèñîâ; 5 ïîääåðæêà Dockerle. Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 11 /25
  8. Dokku PaaS. Àðõèòåêòóðà ñèñòåìû 1 gitrecieve - îáðàáàòûâàåò git push;

    2 buildpack - îïðåäåëÿåò òèï ïðèëîæåíèÿ è âûáèðàåò êîíòåéíåð; 3 docker - çàïóñêàåò è óïðàâëÿåò êîíòåéíåðàìè; 4 nginx - âåá ïðîêñè äëÿ ïðèëîæåíèé. Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 12 /25
  9. Dokku PaaS. Ïëàãèíû 1 ÁÄ - MySQL, Postgres, Redis, Mongo

    è ò.ä. ; 2 Ñèñòåìû î÷åðåäåé - NATS, rabbitmq; 3 Âñïîìîãàòåëüíûå - óïðàâëåíèå êîíòåéíåðîì, let's encrypt è ò.ï; 4 Åñòü ñêåëåò äëÿ ñâîèõ ïëàãèíîâ. Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 13 /25
  10. Dokku PaaS. Íàø ïðîòàãîíèñò yan@anisimov :~$ ssh [email protected] root@rsl :~#

    dokku apps:create pychel -hello -----> Creating pychel -hello ... done root@rsl :~# Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 14 /25
  11. Íàø ïðîòàãîíèñò Ëèñòèíã 3: Procle web: gunicorn demo:app --workers =4

    Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 15 /25
  12. Drone CI Drone CI - ïðîñòàÿ ë¼ãêàÿ CI ñèñòåìà íàïèñàííàÿ

    íà Go ïîñòðîåííàÿ íà èñïîëüçîâàíèè Docker. Îñíîâíûå îñîáåííîñòè: 1 â êà÷åñòâå îñíîâû ìîæíî èñïîëüçîâàòü ëþáîé Docker îáðàç; 2 Travis - ïîäîáíûé ñèíòàêñèñ íà Yaml îïèñàíèå ïðîöåññà ñáîðêè â ôàéëå .drone.yml ; 3 ìíîæåñòâî ïëàãèíîâ äëÿ äåïëîÿ, íîòèôèêàöèè ïðèëîæåíèé; 4 ïîääåðæêà íåñêîëüêèõ ïëàòôîðì: Linux, Mac, Windows; 5 ðàñïðåäåëåííàÿ ñèñòåìà; 6 èíòåãðàöèÿ ñèñòåìû ñ GitHub, GitLab, Gitea, Gogs. Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 17 /25
  13. Drone CI. Àðõèòåêòóðà ñèñòåìû Êëþ÷åâûå êîíöåïöèè: 1 Plugins; 2 Services;

    3 Matrix; 4 Secrets; 5 Conditions. Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 19 /25
  14. Drone CI. Ïëàãèíû è ñåðâèñû Îñíîâíûå îñîáåííîñòè ïëàãèíîâ: 1 ïëàãèí

    - docker îáðàç; 2 êîíòåéíåð ñîçäàåòñÿ è èñïîëíÿåòñÿ êàê ÷àñòü âàøåãî pipeline. Îñíîâíûå îñîáåííîñòè ñåðâèñîâ: 1 ìîæíî ðàçâåðíóòü ñåðâèñ íåîáõîäèìûé äëÿ ïðîöåññà ñáîðêè, òåñòèðîâàíèÿ ïðèëîæåíèÿ; 2 ñåðâèñ íàõîäèòñÿ â îäíîé ïîäñåòè ñ êîíòåéíåðîì ñáîðêè. Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 20 /25
  15. Drone CI. Ìàòðèöû, ñåêðåòû è óñëîâèÿ Îñíîâíûå îñîáåííîñòè ìàòðèö: 1

    ìîæíî ïîñòðîèòü ðàçíûå êîìáèíàöèè ñáîðêè è òåñòèðîâàíèÿ ïðèëîæåíèé; 2 êàæäàÿ êîìáèíàöèÿ âûïîëíÿåòñÿ íåçàâèñèìî. Îñíîâíûå îñîáåííîñòè ñåêðåòîâ: 1 ìîæíî ïåðåäàâàòü ñêðûòûå ïåðåìåííûå â êîíòåéíåð ñáîðêè; 2 óïðàâëåíèå êàê íà âåñü ñåðâåð, òàê è íà îòäåëüíûé ïðîåêò; 3 íåñêîëüêî âàðèàíòîâ çàäàíèÿ: UI, cli, le. Îñíîâíûå îñîáåííîñòè óñëîâèé: 1 óïðàâëåíèå ëîãèêîé ñáîðêè â çàâèñèìîñòè îò ñóùíîñòåé GIT ñåðâåðà; 2 óïðàâëåíèå èíñòàíñàìè ïðè ñáîðêå; Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 21 /25
  16. Íàø ïðîòàãîíèñò. Äîáàâèì drone.yml p i p e l i

    n e : d e p l o y : image: a l p i n e / g i t s e c r e t s : [ s s h k e y ] commands: - m k d i r / r o o t / . s s h - t o u c h / r o o t / . s s h / i d _ r s a - t o u c h / r o o t / . s s h / known_hosts - p r i n t f "$SSHKEY" > / r o o t / . s s h / i d _ r s a - s s h −k e y s c a n −H app . y a n c h i c k . o r g > / r o o t / . s s h / known_hosts - g i t c o n f i g −−g l o b a l u s e r . e m a i l "[email protected]" - g i t c o n f i g −−g l o b a l u s e r . name "DRONE CI" - g i t commit −m "Add env to deploy" - g i t r e m o t e add dokku s s h :// dokku@app . y a n c h i c k . o r g / p y c h e l −h e l l o - g i t push −−f o r c e dokku m a s t e r Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 22 /25
  17. Íàø ïðîòàãîíèñò yan@desktop :~/ workspace/Pychel$ ls .drone.yml Procfile demo.py requiments.txt

    Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 23 /25
  18. Íåäîñòàòêè âñåé ñèñòåìû. Ëè÷íûé âçãëÿä 1 íåò GIST 2 íåò

    ïîääåðæêè compose, èëè âîîáùå óïðàâëåíèÿ PaaS ÷åðåç êîä 3 äàííîå ðåøåíèå íå ìàñøòàáèðóåòñÿ ãîðèçîíòàëüíî 4 æèðíîâàòûå êîíòåéíåðû Ïåðñîíàëüíàÿ ýêîñèñòåìà äëÿ ðàçðàáîò÷èêà èëè êàê íàì ñýêîíîìèòü 25 /25