RequestBin ãã¤ã³ã¹ãã¼ã«ãã¦ã¿ã
çºè¡ããã URL ã«å¯¾ãã¦éä¿¡ããã HTTP ãªã¯ã¨ã¹ãã®å
容ã確èªãããã¨ãåºæ¥ã Webãµã¼ãã¹ RequestBin ã§ãããソースコードも MIT ライセンスで公開されている ãããªã®ã§ãä»åã¯èªåã®ãµã¼ãã«ç«ã¦ã¦ã¿ã¾ããã
æ§ç¯ããç°å¢ã¯ CentOS 6.5 x86_64 ã«ãªãã¾ãã
Python 2.7 ã®ã¤ã³ã¹ãã¼ã«
æåã« CentOS 6 ã«ããã©ã«ãã§å
¥ã£ã¦ãã Python 2.6.6 ã§è©¦ãã¦ã¿ãã®ã§ãããã¤ã³ã¹ãã¼ã«ã¯åºæ¥ããã®ã®ä¸æãåä½ãã¦ããã¾ããã§ããã
ãã®ãããã¾ã㯠Python 2.7 ãå
¥ããã¨ããããå§ãã¾ããã
ã¾ãã¯ãã«ãã«å¿ è¦ãªã©ã¤ãã©ãªãã¤ã³ã¹ãã¼ã«ã
# yum groupinstall -y "Development tools" # yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel
å¿ é ã§ã¯ãªãã§ãããã½ã¼ã¹ã³ã¼ãããã¤ã³ã¹ãã¼ã«ããã®ã§ç¶ºéºã«æ¶ãããã EPEL ãã paco ãå ¥ãã¦ããã¾ãã
# rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6 # yum install -y http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install -y paco
2.7.6 ããã¦ã³ãã¼ãã㦠configure ãã¾ãã
# cd /usr/local/src # wget http://www.python.org/ftp/python/2.7.6/Python-2.7.6.tgz # tar xzf Python-2.7.6.tgz # cd Python-2.7.6 # ./configure --prefix=/usr/local
SSL ãµãã¼ããæå¹ã«ããããããã§ä¸æéããã¾ãã
ã¾ãã¯ã¤ã³ã¹ãã¼ã«ããã¦ãã OpenSSL ã®å ´æã確èªã
# find / -name openssl
/usr/lib64/openssl
/usr/bin/openssl
/usr/include/openssl
/etc/pki/ca-trust/extracted/openssl
Setup ãã¡ã¤ã«ãç·¨éãã¾ãã
# vi ./Modules/Setup
218 è¡ç®è¾ºãããã®ã³ã¡ã³ãã¢ã¦ããè§£é¤ãã¦ããSSL=/usr/local/sslãã®ã¨ãããå ã»ã©èª¿ã¹ã OpenSSL ã¤ã³ã¹ãã¼ã«ãã¹(/usr)ã«ä¿®æ£ãã¾ãã
218 SSL=/usr 219 _ssl _ssl.c \ 220 -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \ 221 -L$(SSL)/lib -lssl -lcrypto
ä¿®æ£ããã make ã㦠make altinstall ãã¾ãã
paco çµç±ã§å®è¡ããã®ãå¿ããã«ã
# make # paco -D make altinstall
ãã¼ã¸ã§ã³ã確èªãã¾ãã
# python2.7 -V
Python 2.7.6
以ä¸ãå®è¡ãã¦ã¨ã©ã¼ãåºãªããã° SSL ãµãã¼ããæå¹ã«ãªã£ã¦ãã¾ãã
# python2.7 -c "import ssl"
setuptools ãã¤ã³ã¹ãã¼ã«ãã¦ããã¾ãã
# cd /usr/local/src # wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py # python2.7 ez_setup.py # easy_install-2.7 --version setuptools 3.3
pip ãã¤ã³ã¹ãã¼ã«ãã¦ããã¾ãã
# easy_install-2.7 pip # pip2.7 --version pip 1.5.4 from /usr/local/lib/python2.7/site-packages/pip-1.5.4-py2.7.egg (python 2.7)
ããã§ Python 2.7 ç°å¢ã®æºåãã§ãã¾ããã
RequestBin ã®ã¤ã³ã¹ãã¼ã«
libevent-devel ãå¿ è¦ãªã®ã§ã¤ã³ã¹ãã¼ã«ãã¦ããã¾ãã
# yum install -y libevent-devel
/opt 以ä¸ã« requestbin ã clone ããpip ã§å¿ è¦ãªã©ã¤ãã©ãªãã¤ã³ã¹ãã¼ã«ãã¾ãã
# cd /opt/ # git clone git://github.com/Runscope/requestbin.git # cd requestbin/ # pip install -r requirements.txt
RequestBin ã¯ããã©ã«ãã§ã¯ã¡ã¢ãªä¸ã«ãã¼ã¿ãä¿æãã¾ãããä»å㯠Redis ã使ãããã«ãããã¨æãã¾ãã
ããã§ã¯ Redis ã¤ã³ã¹ãã¼ã«ç¨ã« Remi ãªãã¸ããªã追å ãã¾ããã
# rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi # yum install -y http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
ãªãã¸ããªã追å ããã Redis ãã¤ã³ã¹ãã¼ã«ãã¦èµ·åãã¦ããã¾ãã
# yum --enablerepo=remi install -y redis # echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf # sysctl -p # service redis start # chkconfig redis on # chkconfig --list redis redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off
RequestBin ã®è¨å®ãã¡ã¤ã«ãç·¨éã
# vi requestbin/config.py
ROOT_URL ã®å¤ãç°å¢ã«åããã¦ä¿®æ£ãã¾ãã
ROOT_URL = "http://192.0.2.1:4000"
STORAGE_BACKEND ã®å¤ã RedisStorage ã夿´ãã¾ãã
STORAGE_BACKEND = "requestbin.storage.redis.RedisStorage"
ããã§ã¤ã³ã¹ãã¼ã«èªä½ã¯å®äºã§ãããèµ·åã»çµäºãç°¡åã«ãããããSupervisor ã§ç®¡çããããã«ãã¦ã¿ã¾ãã
Supervisor ã®ã¤ã³ã¹ãã¼ã«
easy_install ã³ãã³ããã supervisor ãã¤ã³ã¹ãã¼ã«ãã¾ãã
# easy_install supervisor
è¨å®ãã¡ã¤ã«ã使ãã¦ç·¨éã
# echo_supervisord_conf > /etc/supervisord.conf # vi /etc/supervisord.conf
ãã¡ã¤ã«æ«å°¾ã«ä»¥ä¸ã®è¿½è¨ãã¾ãã
[include] files = /etc/supervisord.d/*.conf
æå®ãããã£ã¬ã¯ããªãå®éã«ä½æã
# mkdir /etc/supervisord.d
Supervisor ç¨ã®èµ·åã¹ã¯ãªãããé ç½®ãã¾ãã
# cd /usr/local/src/ # git clone git://github.com/Supervisor/initscripts.git # cp initscripts/redhat-init-jkoppe /etc/init.d/supervisord # cp initscripts/redhat-sysconfig-jkoppe /etc/sysconfig/supervisord # chkconfig --add supervisord
ãã®ã¾ã¾ã 㨠supervisord ã³ãã³ãã®ãã¹ãè¥å¹²ç°ãªããã䏿ãåããªãã®ã§ãèµ·åã¹ã¯ãªãããä¿®æ£ãã¾ãã
# vi /etc/init.d/supervisord
ã¹ã¯ãªããå ã®ã³ãã³ãã®ãã¹ã以ä¸ã®ããã«ä¿®æ£ãã¾ãã
- /usr/bin/supervisord ã /usr/local/bin/supervisord ã«å¤æ´ã
- /usr/bin/supervisorctl ã /usr/local/bin/supervisorctl ã«å¤æ´ã
次ã«ä»¥ä¸ã®ãã¡ã¤ã«ãç·¨éãã¾ãã
# vi /etc/sysconfig/supervisord
PIDFILE ã®ãã¹ã /etc/supervisord.conf ã®å 容ã«åããã¦ä»¥ä¸ã®ããã«ä¿®æ£ãã¾ãã
PIDFILE=/tmp/supervisord.pid
ããã§ Supervisor èªä½ã®æºåã¯ã§ããã®ã§ããããã RequestBin ç¨ã®è¨å®ãã¡ã¤ã«ã使ãã¾ãã
# vi /etc/supervisord.d/requestbin.conf
以ä¸ã®ãããªå 容ã«ãã¾ããã
[program:requestbin] directory=/opt/requestbin command=/usr/local/bin/python2.7 web.py user=requestbin autostart=true autorestart=true redirect_stderr=true stdout_logfile=/var/log/requestbin.log stopasgroup=true
RequestBin ã®å ´åããstopasgroup=trueããç¡ãã¨ä¸æãããã»ã¹ãçµäºã§ããªããããªã®ã§æ³¨æãã¦ãã ããã
æå®ããèµ·åç¨ã¦ã¼ã¶ã使ã
# useradd -s /sbin/nologin -M requestbin
supervisord ãµã¼ãã¹ãèµ·åãã¾ãã
èªåçã« requestbin ãèµ·åãããã¨ããããã¾ãã
# service supervisord start
Starting supervisord:
requestbin STARTING
ããã§ãã©ã¦ã¶ã§å¯¾è±¡ãµã¼ãã®ãã¼ã 4000 çªã«ã¢ã¯ã»ã¹ãã㨠RequestBin ã使ç¨ãããã¨ãã§ãã¾ãã
Nginx ã®è¨å®
ããã¾ã§ã§ãåé¡ãªã使ç¨ã§ããã®ã§ãããæ¯åãã¼ãçªå·ãæå®ãã¦ã¢ã¯ã»ã¹ããã®ãé¢åãªã®ã§ãNginx çµç±ã§ã¢ã¯ã»ã¹ããããã«ãã¦ã¿ã¾ãã
ã¾ã㯠Nginx ãã¤ã³ã¹ãã¼ã«ã
# yum install -y http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm # yum install -y nginx
è¨å®ãã¡ã¤ã«ãç·¨éãã¾ãã
# vi /etc/nginx/conf.d/default.conf
location / ã®è¨å®ã以ä¸ã®ããã«å¤æ´ãã¾ããã
location / { proxy_pass http://localhost:4000; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; }
Nginx ãèµ·åãã¾ãã
# service nginx start
ããã§ãã¼ãçªå·ãæå®ããªãã¦ã RequestBin ã¸ã¢ã¯ã»ã¹ã§ããããã«ãªãã¾ãã
Webãµã¼ãã¹ã¨ãã¦å ¬éããã¦ããããHeroku ã使ããªããã£ã¨ç°¡åã«åãããããã§ãããå¤é¨ã«å ¬éããã¦ããªãç°å¢ã«èªåã§ä¸ã¤ç«ã¦ã¦ããã¨æ°è»½ã«ä½¿ããã®ã§ããã¯ããã§ä¾¿å©ãªããããªãããªã¼ãã¨æãã¾ãã
åèãµã¤ã
How to install Python 2.7 and Python 3.3 on CentOS 6 | Too Much Data
http://toomuchdata.com/2014/02/16/how-to-install-python-on-centos/
Codrspace - Run RequestBin locally to debug restful APIs by glenbot
http://codrspace.com/glenbot/run-requestbin-locally-to-debug-restful-apis/
GracefulExit - Running Flask App and Celery with Supervisor on Vagrant
http://papaeye.tumblr.com/post/76624602909/running-flask-app-and-celery-with-supervisor-on-vagrant