systemd 와 연동해서 서비스를 구현하는 버릇을 들이다 보니 없으면 피곤하게 됐습니다. 그래서 python 과 uwsgi 와 systemd 를 연결해보자고 해서 시작했습니다.
1 Anaconda 설치하기
이거저거 써봤지만 저는 이게 제일 편한 virtualenv 관리자더군요.
$ wget https://repo.continuum.io/archive/Anaconda3-4.4.0-Linux-x86_64.sh $ chmod +x Anaconda3-4.4.0-Linux-x86_64.sh $ Anaconda3-4.4.0-Linux-x86_64.sh
다 설치하고 난 뒤 env 를 만들어 줍니다. app 정도 이름으로 합니다.
$ conda create -n app python=3.6 $ source activate app
2 uwsgi 용 스크립트 만들기
설명이 필요합니까? python 배포의 친구죠.
PROJECT_HOME = /home/[user-id]/[project-name] 이라고 하면 $PROJECT_HOME 에 app.ini 라고 만듭니다.
[user-id] 는 본인 아이디, [project-name] 은 파이선 프로젝트명입니다. 장고(django)를 가정합니다.
[uwsgi] chdir=/home/[user-id]/[project-name] module=[project-name].wsgi:application socket=127.0.0.1:8900 buffer-size=65535 protocol=http master=true # daemonize=/home/[user-id]/uwsgi.log pidfile=/home/[user-id]/uwsgi.pid processes=1
이제 실행입니다.
$ cd $PROJECT_HOME $ uwsgi app.ini
3 systemd 용 스크립트 만들기
- systemd 용 스크립트 만들기
$ sudo emacs /lib/systemd/system/[project-name].service
간단하게 프로젝트 이름으로 스크립트를 만들어줍니다. 내용은
[Unit] Description=[project-name] appserver After=network.target [Service] User=[user-id] WorkingDirectory=/home/[user-id]/[project-name] Environment="MYSQL_HOST=127.0.0.1" Environment="MYSQL_NAME=[DB name]" Environment="MYSQL_USER=[DB user]" Environment="MYSQL_PWD=[DB password]" Environment="MYSQL_PORT=3306" Environment="REDIS_SERVER=127.0.0.1" Environment="LOG_LEVEL=DEBUG" Environment="IS_DEBUG=True" ExecStart=/bin/bash -c 'source /home/[user-id]/anaconda3/bin/activate \ /home/[user-id]/anaconda3/envs/app/ \ && /home/[user-id]/anaconda3/envs/app/bin/uwsgi \ --ini /home/[user-id]/[project-name]/app.ini --die-on-term ' KillSignal=SIGTERM Restart=on-failure Type=notify StandardError=syslog NotifyAccess=all [Install] WantedBy=multi-user.target
Independent WEB 방식이라 환경 변수에 config 내용이 있으니 Environment 로 선언해줍니다. 각각에 자신의 정보를 채워넣으면 되고
$ sudo systemctl daemon-reload $ sudo systemctl enable [project-name].service
시작할때 자동으로 실행되게 등록하고
$ sudo systemctl start aimserver.service $ sudo systemctl stop aimserver.service
이제 시작하고 끄는것이 쉽게 가능해진다.