SlideShare a Scribd company logo
1 of 21
Download to read offline
Django
Od developerki po produkcję
Marcin Lipiec, Marcin Grzybowski (2016)
devops@gildia.info
infrastruktura
DevOps
optymalizacja
bezpieczeństwo
software
Biznes
Automatyzacja
Dlaczego Python ?
Bo Django
http://tutorial.djangogirls.org/pl/
Programista chce programować
Spotyka się dwóch programistów:
● Słyszałem, że straciłeś pracę. Jak to jest być
bezrobotnym?
● To było najgorsze pół godziny mojego życia.
Admin chce adminować
Bo tak
Biznes chce…
Czy tylko w startupie?
A może przetestować kod ?
Separacja na poziomie systemu
1) Chroot
2) Vserver
3) LXC ( cgroups )
4) ** docker
5) Vagrant
6) KVM
DLACZEGO ?
Gdy mamy już nasze czyste środowisko
Coś musimy mieć na starcie:
$ pip install virtualenv
$ virtualenv moj_projekt
$ source moj_projekt/bin/activate ;#(.fish | .csh)
(django-debug-toolbar - dev)
Sposoby na multi-settingsy (envdir)
https://pypi.python.org/pypi/envdir
$ ls -ls ENV/
drwxr-xr-x 2 user1 group1 4096 May 28 2014 DEV
drwxr-xr-x 2 user1 group1 4096 May 28 2014 PROD
$ ls -al ENV/PROD/
-rw-r--r-- 1 user1 group1 24 May 10 2014 DJANGO_SETTINGS_MODULE
$ envdir ENV/PROD python manage.py collectstatic
Sposoby na multi-settingsy (Django-environ)
Połączenie modułów: Dj-database-url, dj-search-url, dj-config-url, django-cache-url, honcho, envparse
Cała konfiguracja zarządzana zmiennymi z otoczenia.
DEBUG=on
# DJANGO_SETTINGS_MODULE=myapp.settings.dev
SECRET_KEY=your-secret-key
DATABASE_URL=psql://login:[ass@127.0.0.1:8458/database
CACHE_URL=memcache://127.0.0.1:11211,127.0.0.1:11212,127.0.0.1:11213
REDIS_URL=rediscache://127.0.0.1:6379:1?client_class=django_redis.client.
DefaultClient&password=redis-un-githubbed-password
Gdy twoja aplikacja staje się popularna
Serwery WWW + HaProxy
Nginx - http://nginx.com/
Apache - http://www.apache.org/
Cherokee - http://cherokee-project.com/
HaProxy - http://haproxy.com/
----------
django-admin.py runserver - lub Gunicorn, uwsgi, mod_wsgi, Flup, FastCGI
Działający przykład appki na Django + scgi : http://tentacle.pl | Działający przykład appki na Django + wsgi : https://do-domu.co/
SuperVisor - zarządzanie procesami
$ supervisorctl help
=====================================
add clear fg open quit remove restart start stop update avail exit
maintail pid reload reread shutdown status tail version
=====================================
$ supervisorctl status
appka RUNNING pid 21670, uptime 18 days, 2:56:50
(http://supervisord.org/)
Haproxy - zarządzanie końcówkami
● Czy aplikacja żyje “/test_app”
● Zarządzamy SplitTestami (1%, ciacha, adresy IP)
● Szybkie i proste ACLki
backend eme
balance roundrobin
http-check expect string pong
http-check disable-on-404
mode http
option httpclose
option abortonclose
option httpchk GET /test_app
server eme1 192.168.45.57:80 check maxconn 50 weight 50
server eme2 192.168.45.58:80 check maxconn 50 weight 50
Deployment - sposoby (Fabric / Capistrano)
from fabric.api import local
def prepare_deploy():
local("./manage.py test my_app")
local("git add -p && git commit")
local("git push")
$ fab prepare_deploy
[localhost] run: ./manage.py test my_app
Creating test database...
Creating tables
Creating indexes
Puppet / Chef / Ansible / SaltStack
Automatyzujemy system
Zabbix / NewRelic / Errbit / Kibana LogStash
Monitoring jest ważny
Był deploy ? Oglądaj statystyki
Piątek - świątek
Czy są Pythonia?
?
devops@gildia.info

More Related Content

Similar to Django od developerki po produkcję (linux)

Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL versionMaciej Lasyk
 
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoDominik Szopa
 
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) Laravel Poland MeetUp
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP3camp
 
PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]Droptica
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Tomasz Dziuda
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaGameDesire Academy
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerLukas Lesniewski
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPLaravel Poland MeetUp
 
Ciągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieCiągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieArtur Radosz
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
Programowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do SpringaProgramowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do SpringaMikołaj Olszewski
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPPiotr Horzycki
 
tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?Brainhub
 
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScriptTworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScriptKrzysztof Kotowicz
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PROIDEA
 
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof ŚlusarskiWJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof ŚlusarskiKrzysztof Ślusarski
 

Similar to Django od developerki po produkcję (linux) (20)

Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
 
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework DjangoZastosowanie buildout przy wdrażaniu projektów opartych o framework Django
Zastosowanie buildout przy wdrażaniu projektów opartych o framework Django
 
Devops/Sysops security
Devops/Sysops securityDevops/Sysops security
Devops/Sysops security
 
university day 1
university day 1university day 1
university day 1
 
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug) xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
 
Xdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHPXdebug – debugowanie i profilowanie aplikacji PHP
Xdebug – debugowanie i profilowanie aplikacji PHP
 
PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]PHPUnit - jak zacząć pisać testy automatyczne [PL]
PHPUnit - jak zacząć pisać testy automatyczne [PL]
 
Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014Daj się wyręczyć - Joomla Day Polska 2014
Daj się wyręczyć - Joomla Day Polska 2014
 
Zbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zapleczaZbyszek Rzepka: GameDev od zaplecza
Zbyszek Rzepka: GameDev od zaplecza
 
Joomla Day Poland 15 - Docker
Joomla Day Poland 15 - DockerJoomla Day Poland 15 - Docker
Joomla Day Poland 15 - Docker
 
Automatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHPAutomatyzacja utrzymania jakości w środowisku PHP
Automatyzacja utrzymania jakości w środowisku PHP
 
Ciągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieCiągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - Wprowadzenie
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
Programowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do SpringaProgramowanie Komponentowe: #A Wprowadzenie do Springa
Programowanie Komponentowe: #A Wprowadzenie do Springa
 
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHPJak zacząć, aby nie żałować - czyli 50 twarzy PHP
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
 
tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?tRPC - czy to koniec GraphQL?
tRPC - czy to koniec GraphQL?
 
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScriptTworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
 
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof ŚlusarskiWJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
 

Django od developerki po produkcję (linux)

  • 1. Django Od developerki po produkcję Marcin Lipiec, Marcin Grzybowski (2016) devops@gildia.info
  • 3. Dlaczego Python ? Bo Django http://tutorial.djangogirls.org/pl/
  • 4. Programista chce programować Spotyka się dwóch programistów: ● Słyszałem, że straciłeś pracę. Jak to jest być bezrobotnym? ● To było najgorsze pół godziny mojego życia.
  • 7. Czy tylko w startupie?
  • 9. Separacja na poziomie systemu 1) Chroot 2) Vserver 3) LXC ( cgroups ) 4) ** docker 5) Vagrant 6) KVM DLACZEGO ?
  • 10. Gdy mamy już nasze czyste środowisko Coś musimy mieć na starcie: $ pip install virtualenv $ virtualenv moj_projekt $ source moj_projekt/bin/activate ;#(.fish | .csh) (django-debug-toolbar - dev)
  • 11. Sposoby na multi-settingsy (envdir) https://pypi.python.org/pypi/envdir $ ls -ls ENV/ drwxr-xr-x 2 user1 group1 4096 May 28 2014 DEV drwxr-xr-x 2 user1 group1 4096 May 28 2014 PROD $ ls -al ENV/PROD/ -rw-r--r-- 1 user1 group1 24 May 10 2014 DJANGO_SETTINGS_MODULE $ envdir ENV/PROD python manage.py collectstatic
  • 12. Sposoby na multi-settingsy (Django-environ) Połączenie modułów: Dj-database-url, dj-search-url, dj-config-url, django-cache-url, honcho, envparse Cała konfiguracja zarządzana zmiennymi z otoczenia. DEBUG=on # DJANGO_SETTINGS_MODULE=myapp.settings.dev SECRET_KEY=your-secret-key DATABASE_URL=psql://login:[ass@127.0.0.1:8458/database CACHE_URL=memcache://127.0.0.1:11211,127.0.0.1:11212,127.0.0.1:11213 REDIS_URL=rediscache://127.0.0.1:6379:1?client_class=django_redis.client. DefaultClient&password=redis-un-githubbed-password
  • 13. Gdy twoja aplikacja staje się popularna
  • 14. Serwery WWW + HaProxy Nginx - http://nginx.com/ Apache - http://www.apache.org/ Cherokee - http://cherokee-project.com/ HaProxy - http://haproxy.com/ ---------- django-admin.py runserver - lub Gunicorn, uwsgi, mod_wsgi, Flup, FastCGI Działający przykład appki na Django + scgi : http://tentacle.pl | Działający przykład appki na Django + wsgi : https://do-domu.co/
  • 15. SuperVisor - zarządzanie procesami $ supervisorctl help ===================================== add clear fg open quit remove restart start stop update avail exit maintail pid reload reread shutdown status tail version ===================================== $ supervisorctl status appka RUNNING pid 21670, uptime 18 days, 2:56:50 (http://supervisord.org/)
  • 16. Haproxy - zarządzanie końcówkami ● Czy aplikacja żyje “/test_app” ● Zarządzamy SplitTestami (1%, ciacha, adresy IP) ● Szybkie i proste ACLki backend eme balance roundrobin http-check expect string pong http-check disable-on-404 mode http option httpclose option abortonclose option httpchk GET /test_app server eme1 192.168.45.57:80 check maxconn 50 weight 50 server eme2 192.168.45.58:80 check maxconn 50 weight 50
  • 17. Deployment - sposoby (Fabric / Capistrano) from fabric.api import local def prepare_deploy(): local("./manage.py test my_app") local("git add -p && git commit") local("git push") $ fab prepare_deploy [localhost] run: ./manage.py test my_app Creating test database... Creating tables Creating indexes
  • 18. Puppet / Chef / Ansible / SaltStack Automatyzujemy system
  • 19. Zabbix / NewRelic / Errbit / Kibana LogStash Monitoring jest ważny
  • 20. Był deploy ? Oglądaj statystyki Piątek - świątek