본문 바로가기
개발일지/임시카테고리

django 배포 실패기

by 다니엘의 개발 이야기 2025. 1. 3.
320x100

와... 진짜로 미쳐버리겠다.

지금 1달째 배포를 시도하고 있다.

근데 아직도 성공을 못함.

그 빡침의 서막을 공유해보고자 한다.


#1 docker

우선, docker의 끝에는 보통 aws를 사용하는 추세인 것 같다.

이전에 aws의 요금 폭탄에 당해본 전적이 있으므로, aws를 피하더라도, docker라는 컨테이너 컨셉이 좋을 것 같아서 이미지화 해보려고 했다.


1) docker와 연동

나는 로컬로 개발을 해보라면 할 수 있을 것 같다.

최소한에 회원가입, 게시판, 블로그 페이지 등 내가 해본 것들은 당연한 것이고 말이다.

로컬은 더 이상 문제가 되지 않지만, 배포 해본지가 2년이 넘었다보니, 배포를 해야겠다 싶어서 docker와 연동하려고 했다.

 

그런데 왠걸.. 로컬 - docker를 연결하는 과정에도 몇일간의 사투가 있었다.

Dockerfile개념도 모르니 헤메고, 내부적으로 사용되는 gunicorn 같은 것도 임의적으로 바꿀 수 있는 줄 알고 corn으로 하는 둥 좌충우돌이 많았다.

결국은 docker 이미지 파일 만드는 것도, 활성화 되는 것도 성공했다.


2)docker와 postgresql 연동

여기서부터가 총체적 난국의 시작이였다. 거의 1주일 쓴것 같다.

방법으로는 챗gpt, stackoverflow, 구글링 3가지 방법을 가장 많이 써봤다.

단순히 데이터베이스 연동만 하는 것이 아니였다.

데이터베이스가 바뀌니, 당연하게도 기존의 계정정보, static이나 media 정보가 다 날아갔다.

이런 부분도 2년전의 기억을 떠올리면서 하니 더듬더듬 거리느라 감을 찾느라 꽤 걸렸다.

결국은 이것도 성공

 

3)postgresql과 nginx의 연동

여기는 2주를 헤멨다.

docker 이미지화의 마지막 관문이였지만, 그냥 접었다.

a를 세팅하고 나면 b에서 문제 생기고, b를 세팅하면 c에서 문제 생기고, 이게 한두개만 알고 잡는다고 해결되는 게 아니였다.

사실상 docker 이전의 로컬 단에서는 디버그가 뜨면 1차원적으로 "니 어디에 뭐가 문제되고 있어"

라고 말해줘서, 그것만 고치면 대부분은 해결 되었고, 연결이라고 해봐야 외부적으로 API연동하는 정도였다.

하지만 docker 부터는 그 결이 한단계 업그레이드 되었고, nginx는 두단계 앞서있는 듯했다.

나에게 주어진 시간 자체가 많지 않아서 더 이상은 안되겠다 싶고, 챗지피티 답변 레파토리는 외우다 시피했고, 해결은 못했고, stackoverflow 같은 것도 결국 해결 가능한 사람은 없었다.

nginx 정도 되니깐 코드를 전체적으로 다 까봐야하는 것 같았다.

뭐, 그런다 한들 파일 6개 정도만 보면 다 연결 되어있는 것이겠지만, 참.. 어려웠다.


#2 github io 배포

이전에 github io 배포방식이 비용 청구 없이 배포가 간편하게 되었던 것으로 기억해서, 이것도 배포하고 또 배포해봤다.

유튜브든 블로그든 찾아봐도 이사람들이 표현해준게, 본인 입장에서 구현이 되고 미세하게 하나씩 구멍이 있어서, 표현이 안되더라.

결국 오랫만에 github docs를 보면서 배포를 했다.

역시 복잡해 보여도 docs는 참.. 의미가 있기도 한 것 같다.

하지만 여기서의 문제는 원페이지로 표현되는 정도만 구현이 된다는데에 문제가 있었다.

물론, 내가 잘 몰라서 그런 것일 수도 있는데, 내가 수집한 정보로는

index.html을 업로드 하거나, 혹은 readme 내용으로만 배포 표현이 가능했다.


#3 pythonanywhere 배포

이거는 결론부터 말하자면 실패했다.

여기서부턴 어이가 없었는데, 이것도 거의 4일간 배포 시도했던 것 같다.

처음엔 유튜브, 구글로 접근해서, 인강 등도 참고하여 배포해보려고 했다.

근데 결국은 선생님이나 표현해주는 사람들은 되는데 나는 안됬다.

 

진짜 제일 어이없는게 여기는 docs개념인 help에 나와있는대로 해도 안됬다.

# wsgi.py

import os
import sys

path = os.path.expanduser('/home/daniel4191/daniel_blog')
if path not in sys.path:
    sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'daniel_blog.settings'
from django.core.wsgi import get_wsgi_application
from django.contrib.staticfiles.handlers import StaticFilesHandler
application = StaticFilesHandler(get_wsgi_application())

이게 내 파일이였다.

그리고 Reload 하고 배포해보면

 

Something went wrong :-(
Something went wrong while trying to load this website; please try again later.

If it is your site, you should check your logs to determine what the problem is.

There was an error loading your PythonAnywhere-hosted site. There may be a bug in your code.

Error code: Unhandled Exception

Debugging tips
The first place to look is at your web app page to ensure that there are no errors indicated there.
Next, check your site's server and error logs for any messages — you can view them here:
daniel4191.pythonanywhere.com.error.log
daniel4191.pythonanywhere.com.server.log
You can find helpful tips on the PythonAnywhere help site:
There's an ImportError in the logs
"403 Forbidden" error or "Connection Refused" error in logs
Database connection errors
There are many more helpful guides on our Help pages
If you get completely stuck, then drop us a line at PythonAnywhere Support <liveusercare@pythonanywhere.com>, in the forums, or using the "Send feedback" link on the site, with the relevant lines from your logs.

이런식으로 나오더라.

여기서의 반복되는 에러 코드를 보면

 

Error running WSGI application
2025-01-02 07:29:02,692: TypeError: append() takes exactly one argument (2 given)
2025-01-02 07:29:02,692:   File "/var/www/daniel4191_pythonanywhere_com_wsgi.py", line 6, in <module>
2025-01-02 07:29:02,693:     sys.path.append(0, path)

이 "append에 2개의 인자를 받으면 안된다."와

Error running WSGI application
2025-01-02 07:38:29,610: ModuleNotFoundError: No module named 'django'
2025-01-02 07:38:29,610:   File "/var/www/daniel4191_pythonanywhere_com_wsgi.py", line 10, in <module>
2025-01-02 07:38:29,610:     from django.core.wsgi import get_wsgi_application

"django를 찾을 수 없다."

였다.

 

근데 여기서 또 어이가 없는 건

이와 같이, bash 터미널에서 pip list를 해보면,  django 설치가 되어있다.

 

더 어이가 없는 것은 앞서 말했다 시피, pythonanywhere 의 docs 개념인

help에 나와있는 내용을 따라했는데도 이렇다는 것이다.

 

pythonanywhere docs

 

Following the official Django Tutorial on PythonAnywhere

We <3 Django at PythonAnywhere, we use it ourselves. Their tutorial is excellent, but there's a couple of small things that are different about the PythonAnywhere environment, compared to a regular PC

help.pythonanywhere.com

 

암튼 여기서도 실패했다.


#4 heroku 배포

이건 아예 시도도 못해봤다.

로그인하려고 2년 넘게 된 계정으로 로그인하려고 보면

2단 인증번호를 입력하라고 한다.

이건 왜 그런지는 안다.

"Salesforce Authenticator"

이라는 어플리케이션에 등록했던 기억이 있다.

문제는, 이 어플은 로그인의 개념이 약간 다른 것 같다.

신규가입의 경우는 어렵지가 않은데, 문제는 기존 계정의 분실 경우다.

 

그래서 이런 부분을 heroku 고객센터에 말했더니

이렇게 왔다.

 

사실상 얘네가 말하는 "티켓"(질의사항)을 올리려면 로그인을 해야하는데,

로그인을 하려면 2차인증번호가 있어야한다.

거지같이 만들어놨다.

때문에 이것도 보류.


#5 linode 배포

이거도 배포를 해봤던 전적이 있어서, 해보려고 했다.

하지만 이전에는 소라모양의 무슨 가상환경이였는데, 리눅스 기반의 우분투로 변경되면서

미세하게 무언가가 바뀌었고, 배포해보려고 해도 약간 꺼려졌지만, 이래저래 배포 했다.

근데, 배포하자마자 0.33 달러 결제를 요청하길래 aws의 악몽이 떠올라서 바로 서버 삭제하고

가급적 요금 청구 안되는 방식으로 가려고 한다. (2년전에 이렇게 깔짝거리다가 aws에서 요금 폭탄맞음. aws의 어떤 보안은 확실하다고 하지만, 이런 것 까지 감안된 보안? 허술하기가 짝이없다고 생각한다. 그 증거로 무수히 많은 사람들이 요금폭탄 맞고 있다.)

 

성공했으나, 서버 삭제


#6 cloudtype 배포

결론부터 말하자면, 이것도 보류다.

튜토리얼 제대로 나와있는 느낌은 node.js가 베이스인데

아.. 그 차이를 알듯 말듯 하다.

배포는 다 성공적으로 되었다는데 막상 들어가보면

 

이런 50x에러가 뜬다.

이건 포트상의 문제 같아서, 해결해보려고 한다.

보류


#7 vercel 배포

이것도 이래저래 해봤는데 결국은 안되었다.

하지만 이것도 보류


#8 azure 배포

이거는 마찬가지로 docs보면서 수월할줄 알았는데

azure docs

 

6.

애플리케이션의 고유한 이름을 지정하세요.

여기서부터, 뭐 한다고 해보는데 작동 자체가 안되더라; 

"런타임 스택"이 어쩌고 하는데 이것도 선행조건으로 애플리케이션의 고유한 이름 지정해야 하는 것 같고

이것도 일단은 보류다.


#결론

내가 배포해볼 수 있는 방법을 다 동원해보고 있다.

2년전에는

aws, linode, github.io, heroku

이렇게 4군데에서 배포해봤다.

사실상 당시에 메이저한 곳 중에서는 azure빼고 다 배포해봤다.

그럼에도 지금은 배포에만 docker까지 포함하여 1달을 넘게 쓰고 있어서 진짜로 미칠것 같다.

뭘해도 안되고 다 안된다 그냥.

그렇다고 aws는 할수는 있겠는데 또 건드렸다가는 요금폭탄이 두렵고, 심지어 잘나가는 몇몇인데도 수억이 청구된다든지, 전액 감면 받는 경우도 있지만, 니잘못이니깐 일부는 니가 부담해라. 라는 식으로 수백에서 수천만원 내야하는 사례도 있다보니깐 선뜻 접근 자체를 못하겠다.

 

그럼에도!!!

진짜 다 안되는데 그럼에도!! 나는 분명히 알고 있다.

"내가 할 줄 모르는 허접이다"

그렇다. 나처럼 그냥 다 작동이 안되면 다들 개발자 때려치웠지, 그런 회사들도 다 망했을거고

그냥 내가 이 게임의 룰을 모르는것이고 이해도가 낮은것이다.

내일이될지, 모레가 될지, 1주뒤가 될지는 모르겠지만, 배포하고 다시 이력서 돌리는 그날까지!!

반드시 포기하지 말자!!

300x250