ãã®ããã»ã¹ã«ã¯ããŸããŸãªã¢ãããŒãããããŸããPythonåºæïŒ fabric ã buildout ïŒãŸãã¯éåºæïŒ puppet ã Chef ãã·ã§ã«ã¹ã¯ãªããã»ãããªã©ïŒã§ãã
ãã¡ããªãã¯ã¢ãããŒã-ããŒã«ã«ã§å®è¡ãããã¹ã¯ãªããã¯sshããµãŒããŒã«éä¿¡ããããã§ã³ãã³ããå®è¡ããŸãã ãã®ã¢ãããŒãã¯éåžžã«ç°¡åã§ããããã°ãç°¡åã§ããããã¯è¯ãããšã§ãïŒããã§ç¢ºèªããŠãã ããïŒã django-fab-deployãšåŒã°ããèªè»¢è»ããããŸããŸãªãã¡ããªãã¯ããŒã ããåŸã ã«çŸããŸããã ããã¯ãDebian LennyãŸãã¯Squeezeçšã«ãµãŒããŒãæ§æãããã®åŸãæå°éã®åŽåã§ããã«djangoãããžã§ã¯ããå±éããå°æ¥ãããã®ãããžã§ã¯ãã管çã§ãããã¡ããªãã¯ã¹ã¯ãªããã®ã»ããã§ãã
Debianã®ãªãªãŒã¹ã«äŒŽããSqueezeã¯django-fab-deployãããçå£ã«åãæ¢ããããã€ãã®ç²ããä¿®æ£ããŸãããä»ããã®ãããžã§ã¯ãã«ã€ããŠè©±ãæãæ¥ããšæããŸãã ãããžã§ã¯ãã«ã¯ããã¥ã¡ã³ãããããåæ çãªäœè«ã®ç°¡æœãªæ¹äœããããŸãã
äžè¬ååïŒ
- ãããžã§ã¯ãã¯virtualenvã䜿çšããŠåé¢ãããŸãã
- äŸåé¢ä¿ã¯ãpipèŠä»¶ãã¡ã€ã«ã䜿çšããŠç®¡çãããŸãã
- ãµãŒããŒãšã®ãã¹ãŠã®éä¿¡ã¯sshãä»ããŠãããèªååããå¿ èŠããããŸãïŒ=>ç¹°ãè¿ãå¯èœïŒã
ãµãŒããŒåŽïŒ
- Debian LennyãšDebian Squeezeã®ãµããŒã
- Pythonã³ãŒããå®è¡ããæ¹æ³ïŒãããã®åã«apache + mod_wsgi + nginx;
- 1ã€ã®VPS /ãµãŒããŒã§ãdjango-fab-deployã«ãã£ãŠç®¡çãããä»»æã®æ°ã®ãããžã§ã¯ããã¹ãã³ã§ããŸãã
- 1ã€ã®ãããžã§ã¯ããè€æ°ã®ãµãŒããŒïŒç°ãªãèšå®ã®ãµãŒããŒãå«ãïŒã«é 眮ã§ããŸãã
å±éæ¹æ³ãéžæããããã®äž»ãªåºæºã¯å®å®æ§/ä¿¡é Œæ§ã§ãããããã§ã¯apache + mod_wsgi + nginxã®æãçŸåšæ¯é¡ã®ãªããã®ã§ãã ubuntuã®ãµããŒããè¿œå ããã®ã¯é£ããããšã§ã¯ãªããšæããŸãããubuntã®ãµããŒãã¯ä»ã®ãšãããªãã®ã§ããªãããã«ã€ããŠè©±ãã®ã§ãããïŒç§èªèº«ã¯Ubuntuã䜿çšããŸããïŒã
ãããžã§ã¯ãã¯ããŒãžã§ã³ç®¡çã·ã¹ãã ã§é©åã«ä¿æãããŸãïŒmercurialã¯çŸåšãµããŒããããŠããŸã ïŒã ãããžã§ã¯ããVCSã«ãªãå Žåã«åããŠãtar.gzãããŒã/ã¢ã³ããã¯ããã»ããã©ã°ããããŸãã åäœããŸãããå®çšŒåã¢ãŒãã§ã¯ãã¹ãããŸããã§ããïŒå¿ èŠã¯ãããŸããã§ããïŒããŸããããã€ãã®æ©èœã衚瀺ãããå¯èœæ§ããããŸãã
å±éãèªååãã
ãµãŒããŒããããã€ããåºæ¬çãªæ¹æ³ã以äžã«èª¬æããŸããäœããã®çç±ã§æ©èœããªãå Žåã§ããããã¯æãããããšã§ã¯ãããŸãããdjango-fab-deployã¯åãªãã¹ã¯ãªããã®ã»ããã§ãã ãããã¯éšåçã«äœ¿çšããããèŠãèŠããããããããéä¿¡ããããèšäºãèªãã ãããã®ã«åœ¹ç«ã¡ãŸãã
ã¯ãªãŒã³ãªDebianãµãŒããŒãããããšãåæãšããŠããŸãïŒåŸã§ãã¯ãªãŒã³ãã«ããããšã¯ã§ããŸããã詳现ã¯åŸã»ã©èª¬æããŸãïŒãã«ãŒããžã®å ¬éããŒã䜿çšããŠsshã¢ã¯ã»ã¹ãæ§æããŸããã
OpenVZã§VPSã䜿çšããªãã§ãã ããã VIRTã¯RSSã®ä»£ããã«ãããã«å¶éãããŠãããããOpenVZã®ãœãããŠã§ã¢ïŒApacheãšmysql + innodbãå«ãïŒã¯xen / kvmã®å Žåãããã¯ããã«å€ãã®ã¡ã¢ãªãæ¶è²»ããŸãïŒ10å-ã¯ãç°¡åã§ãïŒã
ãããžã§ã¯ãã®æºå
Djangoãããžã§ã¯ãã¯ã 'local_settings.py'ã§ããçš®ã®ããªãã¯ãé »ç¹ã«äœ¿çšããŸãããããŒãžã§ã³ç®¡çã·ã¹ãã ã«ããããªããžããªã«ã¯ãpipäŸåé¢ä¿ãæã€ãã¡ã€ã«ãšãWebãµãŒããŒã®èšå®ãæã€ãã©ã«ããŒããããŸãã Django-fab-deployã¯ãå®éããã以å€ã®ãã®ãå¿ èŠãšããŸããã 詳现ã
1. django-fab-deployãšãã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãã
pip install django-fab-deploy pip install jinja2 pip install -e git + gitïŒ//github.com/bitprophet/fabric.git#egg=Fabric-dev
django-fab-deployã¯Fabric 0.9.xã§ã¯æ©èœããŸãããFabricã¯githubããã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
2.ãããžã§ã¯ãã®ã«ãŒãã«fabfile.pyãã¡ã€ã«ãäœæããŸãã ãã®ãã¡ã€ã«ã«ã¯ããµãŒããŒèšå®ãæ§æãã1ã€ä»¥äžã®é¢æ°ãå«ãŸããŠããå¿ èŠããããŸãã ãŸãããªããªã ããã¯éåžžã®ãã¡ããªãã¯ã¹ã¯ãªããã§ãããä»ã®ïŒãããžã§ã¯ãåºæã®ïŒã³ãã³ããããå ŽåããããŸãã äŸïŒ
# my_project/fabfile.py from fab_deploy import * def my_site(): env.hosts = ['my_site@example.com'] env.conf = dict( DB_PASSWORD = 'password', PROCESSES = 2, # , Debian Squeeze; 'lenny' # OS = 'squeeze', # , ( - 'hg') # VCS = 'none', ) update_env() my_site()
env.hostsã«æ³šæããŠãã ããã ããªãã¯ããããŸãïŒãããžã§ã¯ãåããŠãŒã¶ãŒïŒmy_siteïŒãšããŠæå®ããŸãïŒPythonã§æ£ããå€æ°åã«ããå¿ èŠããããŸã-ããã·ã¥ãã¹ããŒã¹ã¯äœ¿çšããŸããïŒã ãã®ãããªãŠãŒã¶ãŒãããªããŠãæ§ããŸãããdjango-fab-deployã¯ãããäœæããŠãåŸã§sshã¢ã¯ã»ã¹ãèšå®ã§ããŸãã ãããã«ããããããžã§ã¯ãããšã«å¥ã ã®ãŠãŒã¶ãŒãçšæããããšããå§ãããŸãã
Env.confã¯ãããã€ãã®èŠåãé©çšããŠç©äºãåçŽåããŸãã ããšãã°ãããã©ã«ãã§ã¯ãããŒã¿ããŒã¹ã®ååïŒDB_NAMEïŒã¯ãããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ã®ååïŒINSTANCE_NAMEïŒãšäžèŽããŸããããã¯ãenv.hostsã®ãŠãŒã¶ãŒãšäžèŽããŸãã
ããã§äœãã©ã®ããã«æ§æãããã«ã€ããŠè©³ããã¯ã fabfile api documentationãåç §ããŠãã ããã
3. WebãµãŒããŒãªã©ã®æ§æãã³ãã¬ãŒããäœæããŸãã
django-fab-deploy config_templates
config_templatesãã©ã«ããŒããããžã§ã¯ãã®ã«ãŒãã«è¡šç€ºãããŸããæ§æãã³ãã¬ãŒãããããŸãã ãããžã§ã¯ãã¯ç°ãªããå€ãã®å Žåãèšå®ãç·šéããå¿ èŠããããŸã-å°ãªããšãæµreadã«èªãã§ãã ããã
{{}}ã§å²ãŸããå€æ°ã¯ãèšå®ãã³ãã¬ãŒãã§äœ¿çšã§ããŸãïŒããã§ã®ãã³ãã¬ãŒããšã³ãžã³ã¯jinja2ã§ãïŒã ãããã®å€æ°ã¯ããµãŒããŒã«ãã³ãã¬ãŒããã¬ã€ã¢ãŠããããšãã«env.confèŸæžã®å€ã«çœ®ãæããããŸãã
4.ãããžã§ã¯ãã«ãŒãã«config.server.pyãäœæããŸãã ãã®ãã¡ã€ã«ã¯ããµãŒããŒäžã®config.pyãã¡ã€ã«ã«ãªããŸãã äŸïŒ
# my_project/config.server.py DEBUG = False DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '{{ DB_NAME }}', 'USER': '{{ DB_USER }}', 'PASSWORD': '{{ DB_PASSWORD }}', 'HOST': '', 'PORT': '', 'OPTIONS': { "init_command": "SET storage_engine=INNODB" }, } }
éçºçšã®ããŒã«ã«èšå®ã§config.pyãäœæããŸãã config.pyãsettings.pyã«ã€ã³ããŒãããŸãã
# Django settings for my_project project. # ... from config import * # ...
ããªãã¯ã¯ããç¥ãããŠãããå€ãã®å Žåconfig.pyã¯local_settings.pyãšãåŒã°ããŸãã ãã®ãã¡ã€ã«ã¯ãVCSã§ç¡èŠãããããã«è¿œå ããå¿ èŠããããŸãïŒVCSã䜿çšããå ŽåïŒã
ã芧ã®ãšãããconfig.server.pyã¯ïŒconfig_templatesãã©ã«ããŒã®ãã¡ã€ã«ã®ãããªïŒãã³ãã¬ãŒãã§ããããenv.confã®å€æ°ãããã«çœ®ãæããããŸãã
5.ãããžã§ã¯ãã®ã«ãŒãã«ãreqsããã©ã«ããŒãäœæããŸãã ãã®ãããªãã©ã«ããŒã®äŸã¯ããããžã§ã¯ãã«ãŒããã次ã®ã³ãã³ããå®è¡ããããšã§ååŸã§ããŸãã
django-fab-deploy example_reqs
ãã®ãã©ã«ããŒã«ã¯ãpipäŸåé¢ä¿ãæã€ããã¹ããã¡ã€ã«ããããŸãã 1ã€ã®ãã¡ã€ã«ã«ã¯ç¹å¥ãªæå³ããããŸãïŒreqs / all.txtã ããã¯äŸåé¢ä¿ãæã€ã¡ã€ã³ãã¡ã€ã«ã§ãããããããã®ãã¹ãŠã®ããã±ãŒãžã¯å±éäžã«ã€ã³ã¹ããŒã«ãããŸãã ããã§ããã¹ãŠã®äŸåé¢ä¿ãåçŽã«ãªã¹ãããããïŒããè¯ãïŒã-rããªãã·ã§ã³ã䜿çšããŠäŸåé¢ä¿ãæã€ä»ã®ãã¡ã€ã«ãæ¥ç¶ã§ããŸãã
django-fab-deploy generate_reqs
ã³ãã³ãããããŸãããã®ã³ãã³ãã¯ã1ã€ã®all.txtãã¡ã€ã«ã§reqsãã©ã«ããŒãäœæããããŒã«ã«ç°å¢ã«ã€ã³ã¹ããŒã«ãããŠãããã¹ãŠã®pythonããã±ãŒãžãäžèŠ§è¡šç€ºããŸãïŒpip freezeã瀺ãå 容ïŒã
ã¹ããã1ã5ãå®äºãããšããããžã§ã¯ãã¯æ¬¡ã®ããã«ãªããŸãã
my_project ... config_templates ... èŠæ± all.txt ... fabfile.py config.py config.server.py settings.py manage.py
ãã®å Žåããããžã§ã¯ãã®æºåã¯å®äºã§ãã
ãµãŒããŒã®æºå
1. env.hostsã§ååšããªããŠãŒã¶ãŒãæå®ãããå ŽåããããäœæããããŒã«ããæåãŸãã¯æ¬¡ã®ããã«sshã¢ã¯ã»ã¹ãèšå®ããŸãïŒå ¬éããŒã®ãããã¡ã€ã«ãå¿ èŠã§ãïŒã
fab create_linux_accountïŒ "/ home / kmike / .ssh / id_rsa.pub"
sshãæ©èœããŠããããšã確èªããŸãã
ssh my_site@example.com
2.ããŒã¿ããŒã¹ãã»ããã¢ããããŸãã ããŒã¿ããŒã¹ããã§ã«æåã§æ§æãããŠããå ŽåïŒããšãã°ããããžã§ã¯ããæ¢ã«æ©èœããŠããå ŽåïŒãäœãããå¿ èŠã¯ãããŸããã django-fab-deployã¯ãmysqlãã€ã³ã¹ããŒã«ãããããžã§ã¯ãçšã®ç©ºã®ããŒã¿ããŒã¹ãäœæããæ¹æ³ãèªèããŸãã
fab mysql_install fab mysql_create_db
mysqlãæ¢ã«ãµãŒããŒã«ã€ã³ã¹ããŒã«ãããŠããå Žåãmysql_installã¯äœãããŸããã mysqlãã€ã³ã¹ããŒã«ãããŠããªãå Žåã¯ã€ã³ã¹ããŒã«ãããmysql rootãŠãŒã¶ãŒã®ãã¹ã¯ãŒãã¯env.conf ['DB_PASSWORD']ã«èšå®ãããŸãã
mysql_create_dbã¯ãenv.conf ['DB_NAME']ãšãã空ã®ããŒã¿ããŒã¹ãäœæããŸãïŒãã®äŸã§ã¯ãããã¯env.hostsããã®ãŠãŒã¶ãŒåã«ãªããŸãïŒã
mysqlã䜿çšããŠããªãå ŽåããŸãã¯mysqlãŠãŒã¶ãŒãrootã§ãªãå Žåããã¹ãŠãæäœæ¥ã§è¡ãããšããå§ãããŸãã ããã«è¯ãããšã«ãèªååïŒãã®ããã®ãã¡ããªãã¯ã¹ã¯ãªãããèšè¿°ïŒããŠãããããdjango-fab-deployã«éä¿¡ããŸãã
3.ãã¹ãŠããµãŒããŒã®æºåãã§ããŸããã æã亀差ãããŠããããžã§ã¯ãã®ã«ãŒãããã³ãã³ããå®è¡ã§ããŸãã
fab full_deploy
ãã¹ãŠãæ£ããè¡ãããå Žåããµã€ãã¯ç²åŸããã¯ãã§ãã
ãã®ã³ãã³ãïŒ
- å¿ èŠãªã·ã¹ãã ããã±ãŒãžãã€ã³ã¹ããŒã«ãã
- virtualenvãäœæããããã«Pythonã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸã
- Apacheãšnginxãæ§æãã
- ãããžã§ã¯ãããµãŒããŒã«ã¢ããããŒããã
- syncdbãå®è¡ããŠç§»è¡ããŸã
ãœãŒã¹ã³ãŒãã¯ã/ src / <INSTANCE_NAME>ã«ãããvirtualenvã¯ã/ envs / <INSTANCE_NAME>ã«é 眮ãããŸãã
django-fab-deployã¯ãApacheãšnginxã®ããã©ã«ããµã€ããç¡å¹ã«ããApachevsky ports.confãã³ãã³ãããŸãïŒApacheã¯ããŒã80ããªãã¹ã³ããªããªããŸãïŒã Apacheã®ä»ã®ãµã€ãããµãŒããŒäžã§å®è¡ãããŠããå Žåããã®ããã¢ã¯ã»ã¹ã§ããªããªããŸãã nginxã ããçªãåºãŠããã°ããã¹ãŠãããŸãããã¯ãã§ã-django-fab-deployã¯ãµãŒããŒã«å¯ŸããŠããªãããŒãªããšã¯äœãããŸããã
ãµãŒããŒç®¡ç
ãµãŒããŒã«å€æŽãã¢ããããŒãããŠé©çšããïŒ
fab push
å¥ã®äŸïŒäŸåé¢ä¿ã®æŽæ°ãšç§»è¡äžã®prodãµãŒããŒãžã®å€æŽã®ã¢ããããŒãïŒïŒ
fab prod push:pip_update,migrate
WebãµãŒããŒèšå®ã®æŽæ°ïŒ
fab setup_web_server
fab update_django_config
èšå®ã®æŽæ°ïŒconfig.server.pyïŒïŒ
fab update_django_config
ã³ãã³ãã®å®å šãªãªã¹ãã¯ãããã¥ã¡ã³ãã«èšèŒãããŠããŸãã ããé«ãã¬ãã«ãå¿ èŠãªå ŽåïŒã¹ããªãã-fabã®åãããã€ãéå§ãããã¹ãŠãããã«æŽæ°ãããã³ãŒããèšå®ãäŸåé¢ä¿ãããã³ç§»è¡ãå®äºããŸããïŒ-fabã³ãã³ããåºæ¬ã³ãã³ãã®ã©ãããŒãšããŠç°¡åã«èšè¿°ã§ããŸãã ããã·ã¥ã³ãã³ãã®å®è¡ãå€ãããå ŽåïŒããšãã°ãããã©ã«ãã§ãã¹ããå®è¡ããå ŽåïŒãã³ãŒããèŠãŠãfabfile.pyã«ããé©åãªããŒãžã§ã³ãèšè¿°ããŠãã ããã ãã®ãããªå®éšãæçšã§æåããŠãããšæãããå Žåã¯ã ãã°ãã©ãã«ãŒã§ãã±ãããéããŠãã ããã
ã¢ããã°
django-fab-deployã«æãè¿ãã¢ããã°ã¯wovenã§ãã ã©ãããããŸãçŽ æŽãããããšã Wovenã¯Ubuntuã«çŠç¹ãåœãŠãŠãããDebianã¯django-fab-deployã®Ubuntuãšã»ãŒåãããã«ãµããŒããããŠããŸããããã€ããŒãªå€æŽã§ãåäœããããã§ããã確å®ã«èª°ãç¥ããŸãããã ç§ãã¡ã¯ã»ãŒåæã«ãã¹ãŠã®ããšãå§ããŸãããæåã¯ã¯ã©ã¹ã§äœããã®ã²ãŒã ãããããããããã¹ãŠãåçŽåãããŸããã 圌ãã¯ããã«é ããããŸããã äžæ¹ãdjango-fab-deployã¯ãœãŒã¹ã³ãŒãã®æ°åå°ãããå°ãããŠã·ã³ãã«ã§ããããã®ãŸãŸæ®ããŸãã
å€ãã®äººãåæ§ã®ãããžã§ã¯ããããŠããŸãã ç§ã¯æè¿github / bitbucketãæ€çŽ¢ããŸããããdjangopackagesã«11ã®ã¢ããã°ïŒæŽç·ŽåºŠã®ç°ãªãïŒãè¿œå ãããŸãããæ¯èŒçã¯ãã¡ãã§ã芧ããã ããŸãïŒ djangopackages.com/grids/g/deployment
åç §è³æ
ææ°ã®ããã¥ã¡ã³ãã¯åžžã«packages.python.org/django-fab-deployã«ãããŸãã
ãœãŒã¹ã³ãŒããšãã°ãã©ãã«ãŒãå«ããªããžããªïŒ bitbucket.org/kmike/django-fab-deploy
æ¥ç¶ïŒäœ¿çšãä¿®æ£ãã³ã¡ã³ããææ¡ããã¹ãŠãæ¹åããæ¹æ³ãªã©ãèšè¿°ããŸãã
ãã®èšäºã®èª¬æã¯ããŒãžã§ã³0.4ãåç §ããŠãããå€ããªã£ãŠããå¯èœæ§ããããŸãã å¯èœã§ããã°ããã¥ã¡ã³ããèªãã§ãã ããã
django-fab-deployã䜿çšããå¿ èŠã¯ãããŸããã0ããç¬èªã®ã¹ã¯ãªãããèšè¿°ãããŠãŒãã³ããã«ãã¢ãŠããªã©ã䜿çšã§ããŸãã ãããããã¹ãŠã0ã§æžãåã«ããã¡ãããã宿é¡ããããŠãæ¢åã®ãããžã§ã¯ããã©ã®ããã«å®è£ ãããŠããããèŠãæ¹ãè¯ãã§ãã
äž»ãªã¢ããã€ã¹ã¯ãæãç°¡åãªãããžã§ã¯ãã§ãã£ãŠãããµãŒããŒã®ã»ããã¢ãããšå€æŽã®ã¢ããããŒãã®ããã»ã¹ãäœããã®æ¹æ³ã§èªååããããšã§ããããã¯ãæåæ§æãããè€éã§ã¯ãªããå°æ¥äœåãå ±ãããŸãã