AWS 라이트세일로 서버를 생성하였으니 이제 서버에 파이보를 설치하고 모든 사람이 사용할 수 있도록 만들어 보자.
서버에 접속하여 필요한 도구 설치
(1단계) 서버에 접속하기
먼저 AWS에 접속하여 로그인을 한다.
https://signin.aws.amazon.com/
클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services
개발자, 데이터 사이언티스트, 솔루션스 아키텍트 또는 AWS에서 구축하는 방법을 배우는 데 관심이 있는 모든 사용자용 무료 온라인 교육 AWS 전문가가 구축한 500개 이상의 무료 디지털 교육 과정
aws.amazon.com
다음 화면이 나타나면 여러분의 인스턴스에 있는 명령 프롬프트 아이콘을 클릭한다.
그러면 익숙한 명령 프롬프트 창이 나타난다.
앞으로 서버에 필요한 모든 작업은 여기서 진행된다고 생각하면 된다. 그런데 위의 AWS의 명령 프롬프트 창은 사실 매우 불편하다. 나중에 mobaXerm을 사용하는 편리한 방법을 소개할 예정이다.
(2단계) 현재시간 확인해 보고 우리나라 시간으로 서버 설정
터미널에서 date 명령을 사용해 보자. 그러면 우리나라 시간이 아닌 UTC 시간이 출력된다. UTC 시간은 국제 표준 시간이므로, 우리나라 시간으로 맞추려면 설정을 변경해야 한다.
ubuntu@ip-172-26-8-122:~$ date Mon Oct 17 00:40:52 UTC 2022 ubuntu@ip-172-26-8-122:~$ |
한국 시간으로 설정하기 위해 다음 명령을 수행하고, 다시 date 명령을 수행하면 우리나라 시간으로 출력된다.
ubuntu@ip-172-26-8-122:~$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime ubuntu@ip-172-26-8-122:~$ date Mon Oct 17 09:42:59 KST 2022 |
(3단계) 서버에 파이썬이 설치되어 있는지 확인
장고를 사용하려면 파이썬이 반드시 설치되어 있어야 한다. 서버에 파이썬이 설치되어 있는지 python 명령을 입력해 보자.
ubuntu@ip-172-26-8-122:~$ python Command 'python' not found, did you mean: command 'python3' from deb python3 command 'python' from deb python-is-python3 ubuntu@ip-172-26-8-122:~$ |
'python3을 입력하라'는 메시지가 나타나면 python3 명령을 입력해 보자. 그러면 파이썬 셸이 실행된다. 파이썬이 정상적으로 설치되어 있다는 것을 확인했으니 exit()를 실행하여 파이썬 셸을 종료한다.
ubuntu@ip-172-26-8-122:~$ python3 Python 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> exit() |
(4단계) 가상 환경 설정
가상 환경 설정 패키지를 설치하기 전에 다음과 같이 sudo apt update 명령을 수행하여 우분투 패키지를 최신으로 업그레이드 하자.
ubuntu@ip-172-26-8-122:~$ sudo apt update Hit:1 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu focal InRelease Get:2 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB] Get:3 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu focal-backports InRelease [108 k B] Get:4 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu focal-updates/main amd64 Package s [2158 kB] Get:5 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB] Fetched 2494 kB in 1s (1974 kB/s) Reading package lists... Done Building dependency tree Reading state information... Done 105 packages can be upgraded. Run 'apt list --upgradable' to see them. ubuntu@ip-172-26-8-122:~$ |
이어서 우분투에서 가상 환경을 사용할 수 있드록 'python3-venv' 패키지를 설치한다. 이때 질문 창이 나타나면 모두 [Enter]를 클릭하여 진행한다. 그리고 홈 디렉터리(/home/ubuntu) 하위에 필요한 projects, venvs 디렉터리를 생성하자.
※ ubuntu@ip-172-26-8-122:~$ 프롬프트에서 '~'는 홈 디렉터리인 /home/ubuntu를 의미한다.
ubuntu@ip-172-26-8-122:~$ sudo apt install python3-venv Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: python-pip-whl python3.8-venv The following NEW packages will be installed: python-pip-whl python3-venv python3.8-venv 0 upgraded, 3 newly installed, 0 to remove and 105 not upgraded. Need to get 1812 kB of archives. After this operation, 2350 kB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu focal-updates/universe amd64 pyt hon-pip-whl all 20.0.2-5ubuntu1.6 [1805 kB] Get:2 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu focal-updates/universe amd64 pyt hon3.8-venv amd64 3.8.10-0ubuntu1~20.04.5 [5444 B] Get:3 http://ap-northeast-2.ec2.archive.ubuntu.com/ubuntu focal/universe amd64 python3-ven v amd64 3.8.2-0ubuntu2 [1228 B] Fetched 1812 kB in 0s (17.6 MB/s) Selecting previously unselected package python-pip-whl. (Reading database ... 59977 files and directories currently installed.) Preparing to unpack .../python-pip-whl_20.0.2-5ubuntu1.6_all.deb ... Unpacking python-pip-whl (20.0.2-5ubuntu1.6) ... Selecting previously unselected package python3.8-venv. Preparing to unpack .../python3.8-venv_3.8.10-0ubuntu1~20.04.5_amd64.deb ... Unpacking python3.8-venv (3.8.10-0ubuntu1~20.04.5) ... Selecting previously unselected package python3-venv. Preparing to unpack .../python3-venv_3.8.2-0ubuntu2_amd64.deb ... Unpacking python3-venv (3.8.2-0ubuntu2) ... Setting up python-pip-whl (20.0.2-5ubuntu1.6) ... Setting up python3.8-venv (3.8.10-0ubuntu1~20.04.5) ... Setting up python3-venv (3.8.2-0ubuntu2) ... Processing triggers for man-db (2.9.1-1) ... Processing triggers for man-db (2.9.1-1) ... ubuntu@ip-172-26-8-122:~$ cd venvs -bash: cd: venvs: No such file or directory ubuntu@ip-172-26-8-122:~$ mkdir projects ubuntu@ip-172-26-8-122:~$ mkdir venvs ubuntu@ip-172-26-8-122:~$ ls projects venvs ubuntu@ip-172-26-8-122:~$ |
이어서 venv 디렉토리로 이동해 장고 가상 환경을 생성한다.
ubuntu@ip-172-26-8-122:~$ cd venvs ubuntu@ip-172-26-8-122:~/venvs$ python3 -m venv mysite ubuntu@ip-172-26-8-122:~/venvs$ |
이어서 가상 환경으로 진입한다.
ubuntu@ip-172-26-8-122:~/venvs$ cd mysite ubuntu@ip-172-26-8-122:~/venvs/mysite$ cd bin ubuntu@ip-172-26-8-122:~/venvs/mysite/bin$ . activate (mysite) ubuntu@ip-172-26-8-122:~/venvs/mysite/bin$ |
/home/ubuntu/venvs/mysite/bin 디렉터리로 이동해 [. activate] 명령을 수행하면 가상환경으로 진입할 수 있다. 만약 가상 환경에서 벗어나려면 아무 곳에서나 deactivate 명령을 수행하면 된다.
(5단계) wheel 패키지 설치하기
서버 환경에서는 pip으로 파이보 관련 패키지를 설치하면 'wheel 패키지 관련 오류'가 발생할 수 있다. 그러므로 pip install wheel 명령으로 wheel 패키지를 먼저 설치하자.
mysite) ubuntu@ip-172-26-8-122:~/venvs/mysite/bin$ pip install wheel Collecting wheel Downloading wheel-0.37.1-py2.py3-none-any.whl (35 kB) Installing collected packages: wheel Successfully installed wheel-0.37.1 (mysite) ubuntu@ip-172-26-8-122:~/venvs/mysite/bin$ |
그리고 나서 django를 비롯해 필요한 패키지를 설치하자.
pip install django==3.1.3
pip install markdown
(mysite) ubuntu@ip-172-26-8-122:~/venvs/mysite/bin$ pip install django==3.1.3 Collecting django==3.1.3 Downloading Django-3.1.3-py3-none-any.whl (7.8 MB) |████████████████████████████████| 7.8 MB 15.9 MB/s Collecting sqlparse>=0.2.2 Downloading sqlparse-0.4.3-py3-none-any.whl (42 kB) |████████████████████████████████| 42 kB 454 kB/s Collecting pytz Downloading pytz-2022.4-py2.py3-none-any.whl (500 kB) |████████████████████████████████| 500 kB 44.7 MB/s Collecting asgiref<4,>=3.2.10 Downloading asgiref-3.5.2-py3-none-any.whl (22 kB) Installing collected packages: sqlparse, pytz, asgiref, django Successfully installed asgiref-3.5.2 django-3.1.3 pytz-2022.4 sqlparse-0.4.3 (mysite) ubuntu@ip-172-26-8-122:~/venvs/mysite/bin$ pip install markdown Collecting markdown Downloading Markdown-3.4.1-py3-none-any.whl (93 kB) |████████████████████████████████| 93 kB 2.3 MB/s Collecting importlib-metadata>=4.4; python_version < "3.10" Downloading importlib_metadata-5.0.0-py3-none-any.whl (21 kB) Collecting zipp>=0.5 Downloading zipp-3.9.0-py3-none-any.whl (5.8 kB) Installing collected packages: zipp, importlib-metadata, markdown Successfully installed importlib-metadata-5.0.0 markdown-3.4.1 zipp-3.9.0 (mysite) ubuntu@ip-172-26-8-122:~/venvs/mysite/bin$ |
파이보 설치
파이보 관련 파일은 깃허브 원격 저장소에 저장되어 있으니 서버에서 깃을 이용하면 파이보 관련 파일을 쉽게 내려받을 수 있다.
(1단계) projects 디렉터리에서 원격 저장소의 파일 내려받기
projects 디렉터리로 이동하자.
(mysite) ubuntu@ip-172-26-8-122:~/venvs/mysite/bin$ cd ~/projects (mysite) ubuntu@ip-172-26-8-122:~/projects$ |
깃으로 파이보 관련 파일을 내려받으려면 깃허브의 원격 저장소 URL을 복사해 오자.
▶ 원격저장소 URL: https://github.com/Yoni33333/pybo
GitHub - Yoni33333/pybo
Contribute to Yoni33333/pybo development by creating an account on GitHub.
github.com
URL을 확인한 뒤 서버에서 git 명령어로 파이보 관련 파일을 내려받자.
이때 git clone https://github.com/Yoni33333/pybo.git mysite와 같이 맨 뒤에 mysite를 반드시 입력한다. 그리고 ls 명령을 수행해 보면 mysite 디렉터리가 생성되었음을 확인할 수 있다.
mysite) ubuntu@ip-172-26-8-122:~/projects$ git clone https://github.com/Yoni33333/pybo.gi t mysite Cloning into 'mysite'... remote: Enumerating objects: 118, done. remote: Counting objects: 100% (118/118), done. remote: Compressing objects: 100% (92/92), done. remote: Total 118 (delta 22), reused 118 (delta 22), pack-reused 0 Receiving objects: 100% (118/118), 1.88 MiB | 3.08 MiB/s, done. Resolving deltas: 100% (22/22), done. (mysite) ubuntu@ip-172-26-8-122:~/projects$ ls mysite (mysite) ubuntu@ip-172-26-8-122:~/projects$ |
파이보 실행하기
(1단계) 데이터베이스 초기화하기
이제 mysite 디렉터리에 진입한 후 장고 서버를 실행해 보자.
(mysite) ubuntu@ip-172-26-8-122:~/projects$ cd mysite (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). You have 24 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, pybo, sessions. Run 'python manage.py migrate' to apply them. October 17, 2022 - 10:11:29 Django version 3.1.3, using settings 'config.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. |
장고 서버는 실행되지만, python manage.py migrate 명령을 수행하라는 메시지를 볼 수 있다. Ctrl+C 키를 입력하여 장고 서버를 종료하고 다음과 같이 migrate 명령을 수행한다.
(mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, pybo, 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 admin.0003_logentry_add_action_flag_choices... 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 auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying auth.0012_alter_user_first_name_max_length... OK Applying pybo.0001_initial... OK Applying pybo.0002_question_author... OK Applying pybo.0003_answer_author... OK Applying pybo.0004_auto_20220919_0923... OK Applying pybo.0005_comment... OK Applying pybo.0006_auto_20220927_0959... OK Applying sessions.0001_initial... OK (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ |
(2단계) 장고 서버 실행하기
이제 다시 장고 서버를 실행한다. 아무 이상 없이 잘 구동될 것이다.
(mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ python manage.py runserver Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). October 17, 2022 - 10:14:05 Django version 3.1.3, using settings 'config.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. |
고정IP 생성하기
이렇게 서버에 구동된 서비스(장고 서버)에 접속하려면 고정IP가 필요하다. AWS 라이트세일에서 고정IP를 생성해 보자.
(1단계) 고정IP 생성 메뉴로 이동하기
AWS 라이트세일의 메인 화면에서 [네트워킹] 탭으로 이동해 [고정IP 생성]을 클릭한다.
https://lightsail.aws.amazon.com/
https://lightsail.aws.amazon.com/ls/webapp
lightsail.aws.amazon.com
(2단계) 고정IP 인스턴스에 연결하기
인스턴스 선택에서 [Ubuntu-1]을 선택하고 고정IP명을 입력한 뒤 [Create]을 눌러 고정 IP를 생성한다.
- 인스턴스 선택: Ubuntu-1
- 고정IP명: StaticIp-1
3.35.154.XX 라는 고정 IP 가 생성되었다.
72
방화벽 설정하고 파이보 서버에 접속해 보기
(1단계) 인스턴스 접속 포트 번호 설정
파이보 서버(인스턴스)는 포트 번호가 8000번이다. 그래서 외부에서 8000번 포트로 접속하려면 '방화벽 해제 작업'을 해야 한다. AWS 라이트세일의 메인 화면에서 [Instances] 탭을 선택한 뒤 다음처럼 [Ubuntu-1]를 클릭한다.
이어서 [Networking] 탭을 선택하고, [+ Add rule]를 클릭한다.
다음처럼 포트 번호 '8000'을 입력하고 생성한다.
(2단계) 장고 서버 다시 구동하기
그리고 인스턴스 터미널로 돌아와 python manage.py runserver 0:8000 명령을 실행하여 장고 서버를 다시 구동한다.
이때 runserver 명령 뒤에 0:8000이라는 파라미터를 붙였다. 0:8000에서 [0]의 의미는 '외부에서 이 서버에 접속할 수 있도록 IP를 개방한다'는 의미이며 [:8000]의 의미는 8000번 포트로 접속을 허용한다는 의미이다.
(mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ python manage.py runserver 0:8000 Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). October 17, 2022 - 10:36:40 Django version 3.1.3, using settings 'config.settings' Starting development server at http://0:8000/ Quit the server with CONTROL-C. |
※ 장고 서버가 종료되지 않은 상태에서 터미널이 종료되었다면?
장고 서버가 종료되지 않은 상태에서 다음처럼 터미널이 종료되었다면 이미 실행 중인 장고 서버 프로세스를 종료해야 한다.
ubuntu@ip-172-26-8-122:~$ cd ~/venvs/mysite/bin ubuntu@ip-172-26-8-122:~/venvs/mysite/bin$ . activate (mysite) ubuntu@ip-172-26-8-122:~/venvs/mysite/bin$ cd ~/projects/mysite (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ |
그리고 기존에 실행한 장고 서버를 종료하기 위해 다음과 같이 killall python 명령을 수행한 후 서버를 다시 실행하자.
(mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ killall python (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ python manage.py runserver 0:8000 Watching for file changes with StatReloader Performing system checks... System check identified no issues (0 silenced). October 17, 2022 - 10:40:47 Django version 3.1.3, using settings 'config.settings' Starting development server at http://0:8000/ Quit the server with CONTROL-C. |
(3단계) 서버에서 장고 서비스 가능하도록 설정
장고 서버를 실행하고 이제 웹 브라우저에서 3.35.154.XX:8000 URL로 접속해 보자.
그러면 화면에 다음과 같은 오류가 표시될 것이다.
장고 서버를 외부에 서비스하려면 setting.py 파일의 ALLOWED_HOSTS 항목을 반드시 설정해야 하는데 설정이 되어 있지 않아서 발생하는 오류이다. 장고의 ALLOWED_HOSTS는 보안과 관련된 항목으로 장고 서버가 실행 가능한 호스트를 등록하는 설정 항목이다. 호스트 등록을 위해 다음처럼 settings.py 파일을 수정하도록 하자.
# D:\projects\mysite\config\settings.py (...생략...) ALLOWED_HOSTS = ['3.35.154.XX'] (...생략...) |
ALLOWED_HOSTS 영역에 고정IP를 추가해 주었다. 로컬에서 수정한 파일을 서버에 적용하려면 다음과 같은 과정이 필요하다. 깃허브에 변경된 내용을 저장한다.
(mysite) D:\projects\mysite>git add * (mysite) D:\projects\mysite>git commit -m "ALLOWD_HOSTS 변경" [master cc9459b] ALLOWD_HOSTS 변경 1 file changed, 1 insertion(+), 1 deletion(-) (mysite) D:\projects\mysite>git push Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 6 threads Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 383 bytes | 383.00 KiB/s, done. Total 4 (delta 3), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (3/3), completed with 3 local objects. To https://github.com/Yoni33333/pybo.git a319467..cc9459b master -> master (mysite) D:\projects\mysite> |
그리고 AWS 터미널로 다시 돌아와 git pull 명령으로 깃허브에서 변경된 내용을 가져온다.
(mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ git pull remote: Enumerating objects: 7, done. remote: Counting objects: 100% (7/7), done. remote: Compressing objects: 100% (1/1), done. remote: Total 4 (delta 3), reused 4 (delta 3), pack-reused 0 Unpacking objects: 100% (4/4), 363 bytes | 181.00 KiB/s, done. From https://github.com/Yoni33333/pybo a319467..cc9459b master -> origin/master Updating a319467..cc9459b Fast-forward config/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (mysite) ubuntu@ip-172-26-8-122:~/projects/mysite$ |
※깃허브 인증이 필요하다면?
git config credential.helper store 명령을 수행하면 인증 절차를 생략할 수 있다.
(4단계) 고정IP로 파이보에 접속해 보기
서버에서 다시 장고 서버를 실행한다.
(mysite) ubuntu@ip-172-26-8-122:~/venvs/mysite$ python manage.py runserver 0:8000
그리고 웹 브라우저를 실행하고 고정IP에 포트번호를 붙여서 접속해 보면 다음과 같은 화면을 볼 수 있다. 이렇게 하면 해당 서비스가 세상에 공개된다!!
AWS 인스턴스와 고정IP 삭제하여 의도하지 않은 요금 발생 막기
AWS 라이트세일 인스턴스는 현재 기준 3달간 무료로 사용할 수 있고 이후에 비용이 발생한다. 이를 원치 않는다면 인스턴스와 고정IP를 삭제해야 한다.
★ 인스턴스 삭제
인스턴스는 다음처럼 AWS 라이트세일 홈페이지 화면의 [인스턴스] 탭에서 삭제할 수 있다.
★ 고정IP 삭제
고정IP는 다음처럼 [네트웨킹] 탭에서 삭제할 수 있다.
여기까지.
'개발자모드 > 혼자공부하는파이썬' 카테고리의 다른 글
[파이썬/장고#33] MobaXterm 사용방법 - AWS라이트세일 비밀키생성, MobaXterm 사용하여 서버 접속하기 (0) | 2022.10.19 |
---|---|
[파이썬/장고#32] 개발/운영 환경 분리 방법(--settings 옵션 추가, alias 적용) (0) | 2022.10.18 |
[파이썬/장고#30] 클라우드 시스템 - AWS 라이트세일 사용 / AWS 계정 생성, 서버 인스턴스 생성하는 방법 (0) | 2022.10.14 |
[파이썬/장고#29] 깃허브(GitHub) 사용 - 원격 저장소 생성, 연결, 저장하는 방법 (0) | 2022.10.12 |
[파이썬/장고#28] 깃으로 버전 관리하기 (Git 설치, Git 환경설정, Git명령어) (0) | 2022.10.11 |
댓글