ubuntu server 18.04 LTS 에 apache2, django, mod_wsgi 설치
우분투서버는 최초 설치한 상태.
1. ubuntu 18.04에는 python3.6.5가 설치되어 있다. 이 버전을 그냥 사용하기위해 아래 명령어로 아파치웹서버와 mod_wsgi를 설치한다.
snowfox@fox:~$ sudo apt-get install python3-pip apache2 libapache2-mod-wsgi-py3
2. 파이썬 virtual environment를 설정한다.
파이썬 virtual environment를 사용하기 위해 virtualenv를 설치한다.
snowfox@fox:~$ sudo pip3 install virtualenv Collecting virtualenv Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB) 100% |████████████████████████████████| 1.9MB 711kB/s Installing collected packages: virtualenv Successfully installed virtualenv-16.0.0
파이썬 테스트 프로젝트를 만들기위해 testproject디렉토리를 만든다.
snowfox@fox:~$ mkdir testproject snowfox@fox:~$ cd testproject snowfox@fox:~/testproject$
테스트 프로젝트를 위한 파이썬 가상환경을 만든다.
snowfox@fox:~/testproject$ virtualenv testprojectenv Using base prefix '/usr' New python executable in /home/snowfox/testproject/testprojectenv/bin/python3 Also creating executable in /home/snowfox/testproject/testprojectenv/bin/python Installing setuptools, pip, wheel...done. snowfox@fox:~/testproject$
가상환경을 활성화하면 아래처럼 프롬프트가 바뀐다.
snowfox@fox:~/testproject$ source testprojectenv/bin/activate (testprojectenv) snowfox@fox:~/testproject$ (testprojectenv) snowfox@fox:~/testproject$
가상환경에서 사용할 Django를 설치한다. 이때, 파이썬3 버전을 사용함에도 불구하고, pip3이 아닌 pip로 설치한다.
(testprojectenv) snowfox@fox:~/testproject$ pip install django Collecting django Downloading https://files.pythonhosted.org/packages/ab/15/cfde97943f0db45e4f999c60b696fbb4df59e82bbccc686770f4e44c9094/Django-2.0.7-py3-none-any.whl (7.1MB) 100% |████████████████████████████████| 7.1MB 370kB/s Collecting pytz (from django) Downloading https://files.pythonhosted.org/packages/30/4e/27c34b62430286c6d59177a0842ed90dc789ce5d1ed740887653b898779a/pytz-2018.5-py2.py3-none-any.whl (510kB) 100% |████████████████████████████████| 512kB 180kB/s Installing collected packages: pytz, django Successfully installed django-2.0.7 pytz-2018.5
3. 새 장고 프로젝트를 만들고 설정한다.
장고 테스트 프로젝트 만들기
(testprojectenv) snowfox@fox:~/testproject$ django-admin.py startproject testproject . (testprojectenv) snowfox@fox:~/testproject$
테스트 프로젝트 설정
장고 테스트프로젝트 디렉토리아래의 settings.py 에서 아래 항목을 찾아 수정 또는 추가한다.
나는 모든곳에서 접속을 허용하기 위해 ALLOWED_HOSTS에 *을 설정했다. 특정 ip주소에서만 접속을 허용하려면 아이피 주소를 열거해주면 된다.
(예, ALLOWED_HOTS=[‘192.168.0.1’, ‘192.168.0.20’]
(testprojectenv) snowfox@fox:~/testproject$ vi testproject/settings.py ... ALLOWED_HOSTS = ['*'] ... STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static/') ...
이제, management 스크립트를 이용하여 SQLite 데이타베이스 스키마를 초기화하고 마이그레이션한다.
(testprojectenv) snowfox@fox:~/testproject$ ./manage.py makemigrations No changes detected (testprojectenv) snowfox@fox:~/testproject$ ./manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying sessions.0001_initial... OK (testprojectenv) snowfox@fox:~/testproject$
관리자를 만든다. 관리자 id, 이메일, 비밀번호를 설정한다.
(testprojectenv) snowfox@fox:~/testproject$ ./manage.py createsuperuser Username (leave blank to use 'snowfox'): Email address: Password: Password (again): Superuser created successfully.
아래 명령으로 디렉토리내에 static 콘텐츠를 수집한다. 프로젝트 디렉토리내의 static 디렉토리에 static화일이 복사된다.
(testprojectenv) snowfox@fox:~/testproject$ ./manage.py collectstatic Copying '/home/snowfox/testproject/testprojectenv/lib/python3.6/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff' Copying '/home/snowfox/testproject/testprojectenv/lib/python3.6/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt' ... Copying '/home/snowfox/testproject/testprojectenv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md' 118 static files copied to '/home/snowfox/testproject/static'.
방화벽을 사용하는 경우, 아래 명령으로 8000 포트 접근을 가능하도록 해 준다.
(testprojectenv) snowfox@fox:~/testproject$ sudo ufw allow 8000
이제 웹서버를 실행하여 Django 서버를 실행하고 웹브라우저로 접속해 본다.
(testprojectenv) snowfox@fox:~/testproject$ ./manage.py runserver 0.0.0.0:8000 Performing system checks... System check identified no issues (0 silenced). July 25, 2018 - 07:58:05 Django version 2.0.7, using settings 'testproject.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
testproject 가상환경을 끝내기 위해 deactivate 명령을 실행한다.
(testprojectenv) snowfox@fox:~/testproject$ deactivate snowfox@fox:~/testproject$
4. 아파치 설정(mod_wsgi)
WSGI 를 설정하기 위해 아파치의 default virtual host 화일을 편집해야한다.
000-default.conf 화일에 아래 내용을 추가한다. 여기서 snowfox/testproject는 사용자계정과 이전에 만든 프로젝트 디렉토리이며 사용자에따라 달라지겠지?
static 화일에 접근할수 있도록 앨리어스와 권한을 부여해 준다.
snowfox@fox:~/testproject$ sudo vi /etc/apache2/sites-available/000-default.conf ........ Alias /static /home/snowfox/testproject/static <Directory /home/snowfox/testproject/static> Require all granted </Directory> </VirtualHost> 다음으로 장고코드가 저장되어 있는 프로젝트디렉토리내의 wsgi.py화일에대한 접근 권한을 부여해 준다. Alias /static /home/snowfox/testproject/static <Directory /home/snowfox/testproject/static> Require all granted </Directory> <Directory /home/snowfox/testproject/testproject> <Files wsgi.py> Require all granted </Files> </Directory> </VirtualHost>
마지막으로, wsgi가 데몬으로 실행되도록 설정해준다.
Alias /static /home/snowfox/testproject/static <Directory /home/snowfox/testproject/static> Require all granted </Directory> <Directory /home/snowfox/testproject/testproject> <Files wsgi.py> Require all granted </Files> </Directory> WSGIDaemonProcess testproject python-home=/home/snowfox/testproject/testprojectenv python-path=/home/snowfox/testproject WSGIProcessGroup testproject WSGIScriptAlias / /home/snowfox/testproject/testproject/wsgi.py </VirtualHost>
5. 기타 설정
sqlite3을 사용하는 경우, 프로젝트 디렉토리내에 db.sqlite3 화일이 생성되어 있다. 이 화일의 퍼미션을 664로 변경해주고, 아파치 프로세스가 접근 가능하도록 www-data 그룹으로 변경한다.
snowfox@fox:~/testproject$ ls -l db.sqlite3 -rw-r--r-- 1 snowfox snowfox 131072 Jul 25 08:04 db.sqlite3 snowfox@fox:~/testproject$ chmod 664 ~/testproject/db.sqlite3 snowfox@fox:~/testproject$ sudo chown :www-data ~/testproject/db.sqlite3 [sudo] password for snowfox: snowfox@fox:~/testproject$ ls -l db.sqlite3 -rw-rw-r-- 1 snowfox www-data 131072 Jul 25 08:04 db.sqlite3
또한 아파치 프로세스가 프로젝트 디렉토리에 접근 가능하도록 소유 그룹도 변경한다.
snowfox@fox:~/testproject$ sudo chown :www-data ~/testproject/
방화벽을 사용하는 경우, 아래 명령어로 웹 접근이 가능하도록 해 준다.
snowfox@fox:~/testproject$ sudo ufw delete allow 8000 Rules updated Rules updated (v6) snowfox@fox:~/testproject$ sudo ufw allow 'Apache Full' Rules updated Rules updated (v6)
6. 아파치 서버 재 실행
설정 이상있는지 확인하고, systemctl 명령으로 아파치 서버를 재기동한다.
snowfox@fox:~/testproject$ cd snowfox@fox:~$ sudo apache2ctl configtest AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.0.11. Set the 'ServerName' directive globally to suppress this message Syntax OK snowfox@fox:~$ snowfox@fox:~$ sudo systemctl restart apache2
이제, 80포트로 이전과 동일한 화면이 보일 것이다.
원문:
https://www.digitalocean.com/community/tutorials/how-to-serve-django-applications-with-apache-and-mod_wsgi-on-ubuntu-16-04