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

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

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

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

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