@마크다운
GCP에서 동작하고 있는 서버의 코드를 AWS로 옮겨달라는 부탁을 받았다.
한번도 해보지 않았지만 코드자체는 동작하는 코드이고 이것을 AWS에 올릴 수 있게 약간의 수정만 거친다면 금방 할 수 있을거라 생각했다.
그리고 기왕 옮겨보는거 docker를 쓰지않고 elastic beanstalk만 사용하고 올려보기로 했다.
하지만 기존의 코드는 너무나도 답답하게 생겼다.
#
개발환경의 분기가 되어있지 않았고 코드의 모양새가 순수함수는 커녕 def안에서 모든걸 해결하고 있었다.
def안에 if문이 열개가랑 있는 함수도 있었다.
답답함을 뒤로하고 일단 서버를 옮긴다는 목표하에 간단하게 수정 작업을 거쳤다.
로컬환경과 서비스환경의 db를 나누고 requirements파일들을 다듬기 시작했다.
S3와 RDS, EB를 사용하여 수없이 연습하고 삽질했던 과정들을 다시한번 시작하였다.
#
온갖 작업이 끝나고 eb create를 하고 기다리던 도중 날 당황시켰던 에러들이 있었다.
처음 만났던 에러는
```
pip install -r requirements.txt
```
에서 나타났는데
```
requirements.txt is invalid
```
라고 나타나는 것이었다.
맨 처음에는 gitignore에 실수로 requirements 를 넣었나 생각하여 살펴보는데 아무런 문제가 없었다.
대체 이게 뭔 소린가.. 있는데 없다니?
에러 로그를 까보기로 했다.
#
에러로그 보는법
```
eb ssh -> cd /var/log -> cat eb-activity.log
또는
eb logs
```
#
열심히 보니 pillow에서 생기는 에러라는것을 알 수 있었다.
pillow의 디펜던시가 문제가 되어 requirements가 제대로 설치되지 못하고 실패했던것이었다.
그리고 이 문제를 해결하던 도중 elastic beanstalk으로 생성된 서버의 OS는 amazon linux라고 하여 우분투와 다르다.
우분투에서는 apt-get이라는 명령어를 사용하여 라이브러리를 설치 했는데
아마존 리눅스에서는 yum을 사용하여 라이브러리를 설치했다.(레드햇 계열인듯)
#
어쨌든 원인을 알았으니 해결했던 코드를 적어두자
.ebextensions/options.config
```
packages:
yum:
libjpeg-turbo: []
libjpeg-turbo-devel: []
freetype: []
freetype-devel: []
zlib-devel: []
libtiff-devel: []
```
yaml형식 이므로 들여쓰기 를 잘해야한다.
[도움받은글](https://stackoverflow.com/questions/41126510/django-on-elastic-beanstalk-requirements-txt-is-invalid)
[도움받은글2](https://l.facebook.com/l.php?u=https%3A%2F%2Fgithub.com%2Floris-imageserver%2Floris%2Fissues%2F228&h=ATNduLe4LRPEdbOWFj1Qs8dTpJbEhdtbT7IgnJsscEuXM8wWCqHvu10Z7au0AnvoF1LHZpN3cBNCOjPRHHUnAbQYCaLXEAvJCdmfNUapWX9NOCoYXCAJTOZRKpPBAV0hoSQjvs7EkXtbwdRgYA)
[도움받은글3](https://www.facebook.com/photo.php?fbid=1337293593027126&set=gm.1700972913251578&type=3&theater)
#
두번째 삽질했던 부분은 나 자신이 한심했지만 정리를 하기위해 적어둔다.
#
docker를 사용하여 서버를 띄울줄만 알았던 나는 eb에서 멍청한 실수를 저질렀는데
docker에서는 virtualenv를 이용하여 가상환경을 설치하여 서버를 run시켰었다.
이 과정을 elastic beanstalk에서도 똑같이 하려고 pyenv를 깔려고 했던 문제였다.
하지만 이 과정을 애초에 할 필요도 없었고 조금만 생각을 했더라면 시간을 잡아먹히지도 않았을것이다.
#
개발환경에서 사용했던 virtualenv를 실제 배포환경에서도 똑같이 써야한다는 착각때문에 일어났던것이다.
eb init -> eb create 과정에서 이미 개발환경에서 사용하던 파이썬 버전과 똑같은 상태로 서버를 만들고 있었다는것을 깨달았다면 좋았을텐데
#
여러모로 삽질도 많이했고
아직도 배울게 많구나 다시금 깨달았다.
어설프게 알고있을때가 가장위험하다.
'etc' 카테고리의 다른 글
elastic beanstalk (geo django 사용시 에러) (0) | 2017.11.01 |
---|---|
임시저장저장 (0) | 2017.10.10 |
17-09-14 장고에서 다중유저모델 쓰는법 (django multi user model) (0) | 2017.09.14 |
django 예약기능 (2) | 2017.09.12 |
AWS Route53 설정하기 (0) | 2017.09.08 |