묻고 답해요
150만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
순위 정보를
불러오고 있어요
-
미해결파이썬/장고 웹서비스 개발 완벽 가이드 with 리액트 (장고 4.2 기준)
nginx, gunicorn, daphne 기반 배포 관련하여 질문 좀 드릴게요
안녕하세요~현재까지 공개된 강의 내용과 무관한 질문이지만, 도통 문제 해결 방향을 잡지 못하고 있어 글 남겨 봅니다. ><DRF, Channels, React로 만든 앱을 nginx, gunicorn, daphne 기반으로 배포하려는데, 막힌 지점에서 벗어나질 못하고 있습니다 ㅜnginx, gunicorn, daphne 모두 정상적으로 동작하고 있는 것 같은데, nginx 설정 파일에 등록한 127.0.0.1로 접속하면 "사이트에 연결할 수 없음, 127.0.0.1에서 연결을 거부했습니다"라는 화면이 나옵니다.문제 해결을 위해 추가적으로 살펴봐야 부분에 관해 조언을 해주신다면 너무 감사드리겠습니다!한 가지 찝찝한 부분은, react오 django 프로젝트 폴더를 담고 있는 폴더의 경로는 home/kiwitter인데 home/ubuntu/kiwitter/처럼 현재 제 우분투 환경의 사용자를 중간에 추가해야 진행 시 오류가 발생하지 않더라고요. 가상환경 사용과 관련있는 것 같은데, 어쨌든 그래서 경로 입력 시 home/ubuntu/kiwitter/처럼 중간에 사용자명을 추가하는 방식을 사용하고 있는데, 혹시 지금 문제가 이것과 관련이 있을까 싶어 말씀드립니다.배포 시 React와 Django 프로젝트가 정상적으로 동작하는지 각각 따로 확인하는 방법이 있을까요? Django도 지금처럼 http와 웹소켓으로 클라이언트 요청이 들어오는 경우에 각각의 동작 여부를 개별적으로 살펴볼 수 있는 방법이 있나요? 배포 관련 지식이 없는 데다 하나씩 단계적으로 정상 동작 여부를 점검하지도 못하니 배포의 늪에서 벗어나는 게 더 힘드네요,,파이썬 사랑방에는 모든 게시물이 관리자의 승인을 받아야 되나요? 아니면 가령 일정 등급 이상이 되면 승인 없이 게시물을 자유롭게 올릴 수 있나요? 여기서 질문 드린 부분을 처음에는 페북 파이썬 사랑방 그룹에 질문했었는데 관리자의 검토가 필요하다는 안내를 보고 궁금해서 여쭤봅니다. ✔ 프로젝트 폴더 구조(venv) ubuntu@Ubuntu:~/kiwitter$ ├── kiwitter_backend │ ├── chats │ ├── db.sqlite3 │ ├── kiwitter_backend │ ├── kiwitter.sock │ ├── log │ ├── manage.py │ ├── secrets.json │ ├── staticfiles │ ├── tweets │ └── users ├── kiwitter_frontend │ ├── build │ ├── node_modules │ ├── package.json │ ├── package-lock.json │ ├── public │ ├── README.md │ └── src ├── requirements.txt └── venv ├── bin ├── include ├── lib ├── lib64 -> lib └── pyvenv.cfg ✔ nginx, gunicorn, daphne 동작 상태<sudo systemctl status nginx 명령어 출력 결과><ps aux | grep gunicorn의 출력 결과><ps aux | grep daphne의 출력 결과>✔ nginx, gunicorn, daphne 관련 설정 파일</etc/nginx/sites-available/kiwitter>upstream django_server { server unix:/home/ubuntu/kiwitter/kiwitter_backend/kiwitter.sock; # Gunicorn 소켓 파일 위치 } upstream channels_layer { server localhost:6379; # Daphne 서버 주소 및 포트 } server { listen 80; server_name 127.0.0.1; # 실제 도메인 또는 공용 IP 주소로 변경 # React 앱이 위치한 경로 location / { root /home/ubuntu/kiwitter/kiwitter_frontend/build/; try_files $uri $uri/ /index.html; } location = /favicon.ico { access_log off; log_not_found off; } location /static/ { alias /home/ubuntu/kiwitter/kiwitter_backend/staticfiles/; # STATIC_ROOT 경로 } location /media/ { alias /home/ubuntu/kiwitter/kiwitter_backend/media/; # MEDIA_ROOT 경로 } # API 요청을 Django로 프록시 location /api/ { proxy_pass http://django_server; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Django admin 페이지 및 기타 Django 경로 location /admin/ { proxy_pass http://django_server; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # WebSocket 요청 처리를 위한 설정 location /ws/ { proxy_pass http://channels_layer; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }</etc/systemd/system/gunicorn.service>[Unit] Description=gunicorn daemon After=network.target [Service] User=ubuntu Group=www-data WorkingDirectory=/home/ubuntu/kiwitter/kiwitter_backend ExecStart=/home/ubuntu/kiwitter/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/kiwitter/kiwitter_backend/kiwitter.sock kiwitter_backend.wsgi:application [Install] WantedBy=multi-user.target</etc/supervisor/conf.d/channels.conf>[fcgi-program:asgi] socket=tcp://localhost:8000 directory=/home/ubuntu/kiwitter/kiwitter_backend command=/home/ubuntu/kiwitter/venv/bin/daphne -u /run/daphne/daphne%(process_num)d.sock --fd 0 --access-log - --proxy-headers kiwitter_backend.asgi:application numprocs=2 process_name=asgi%(process_num)d autostart=true autorestart=true stdout_logfile=/home/ubuntu/kiwitter/kiwitter_backend/log/asgi.log redirect_stderr=true✔ Django settings.py... 생략 ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', '').split(',') # .env 관련 부분 -> ALLOWED_HOSTS=127.0.0.1,localhost ... 생략 CSRF_TRUSTED_ORIGINS = [ 'http://127.0.0.1:8000', 'http://127.0.0.1', 'http://localhost:8000', 'http://localhost', ] ... 생략 CHANNEL_LAYERS = { 'default': { 'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': { "hosts": [('127.0.0.1', 6379)], # Redis 서버 주소 }, }, }
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
복습
이제 section 3 까지 학습완료했습니다.이제까지 만들어본걸 강의나 제공된 소스코드 없이 다시 만드는 방식으로 복습하려고 하는데 혹시 추천하는 복습 방법이 있으신가요?
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
온라인 ide
The terminal process failed to launch: Access was denied to the path containing your executable "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe". Manage and change your permissions to get this to work.방금 vs code를 이용하여 터미널을 이용하려고 했는데 다음과 같은 오류가 나와 터미널 실행이 안되는 것 같습니다 오류를 보니 군대 보안특성상 powershell에서 사용을 막은 것 같습니다.그래서 이런 온라인 ide를 이용하려고 하는데 괜찮을까요?? 가상환경은 설치 만들 수 있는걸로 알고 있습니다.레플릿: https://replit.com/구름: https://ide.goorm.io/?_gl=1*1oawf9g*_ga*ODI1MzYwNDc5LjE3MDc4Mjg2MTg.*_ga_7BMX792Y7W*MTcwNzgyODYxOC4xLjEuMTcwNzgyOTc4Mi42MC4wLjA.&_ga=2.209210519.446475569.1707828619-825360479.1707828618
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
vs code
안녕하세요 강사님 제가 지금 군복무중이고 부대 내 컴퓨터 이용중이라 제어판이나 명령 프롬프트 이용이 불가능 합니다. 그래서 일단은 vs code로 수업을 들으려고 하는데 괜찮을까요??
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
CBV, FormView(폼 뷰)에 대해 알아보기 질문
안녕하세요 강사님 ㅎㅎ현재 챕터도 이전과 같은 증상인데 어떻게 확인하면 좋을까요?Github snapshot: https://github.com/dimz119/learn-python-django/tree/form_view에서 다운받아서 실행시켜도 제가 작성한 코드랑 똑같은 문제가 발생하는데 확인할수있는 방법이있을까요??
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
Model Form(모델 폼)에 대해 알아보기 질문
안녕하세요 강사님 Model Form(모델 폼)에 대해 알아보기하고 있는데 버젼문제때문인지 강사님 코드를 다운받아서 실행시켜도 같은 에러 메시지가 나와서 이렇게 질문올립니다. 감사합니다!
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
Http method(메서드)와 Django Form에 대한 소개에서 질문
안녕하세요 강사님 추가 질문드립니다. 뒤에 왜 이렇게 나올까요 코드를 튜토리얼과 깃허브에 있는거 전부다 복붙했는데도 이러고 강사님 코드 가져다가 실행했을때는 정상적으로 나와서 질문 올립니다. 감사합니다.
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
" 와 ' 의 차이
안녕하세요 좋은 강의 감사합니다. 강의 수강하는중에 궁금점이 생겨서요 강사님 깃허브 코드와 장고 튜토리얼 코드가 번갈아가면서 보게 될때가 있는데 보다보면 아래 그림과 같은 차이가 있습니다. 왼쪽은 튜토리얼 코드에 "로 되어있고 오른쪽 강사님 코드에서는 ' 로 되어있어서 수강하는데 무리없는거 같지만 궁금해서 이렇게 질문 올립니다. 감사합니다.
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
docker와 Django의 설치 환경에 대해
파이썬 과목을 수강하고 Django를 window 환경에서 배우려고 신청했습니다. window에서 설치 환경에 대한 설명이 따로 없어서 그런데 Django나 docker를 설치할때 따로 해줘야 할 작업이 있나요?
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
가상환경을 만들어둬야하나요?
강사님의 터미널을 보면 (venv)~/git/learn-python-django로 되어있는데 가상환경을 만들고 해야하는건가요? github에서 파일들을 다운받긴했는데 환경설정을 어떤식으로 해야하는지 잘모르겠습니다
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
vscode에서 command not found:docker라고 나옵니다
깃허브에서 다운받고 vscode에서 터미널을 열고 docker ps를 쳤는데 저런식으로 나옵니다 혹시 깃허브에서 다운받는거 외에 별도로 건들여줘야할 설정같은게 있을까요?docker,파이썬 같은 확장프로그램은 설치했습니다
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
0.0.0.0:8000에서 안되고 localhost:8000 에서 동작하는 이유는 뭘까요?
git에서 app 프로젝트 받아서docker 깔고 docker compose build / docker compose up 하면0.0.0.0:8000에서 안되고127.0.0.1:8000 에서 동작하는 것 같은데 제가 뭘 빼먹은걸까요?
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
현업에서 환경변수 같은 건 어떻게 관리하시나요?
민감한 URL 이라든지 환경변수를 통해 사용하고 싶은게 있을 때강사님께서는 어떻게 관리하시는지 궁금합니다.그냥 UNIX 환경에서 export url = http://example.com 이런식으로 하고os 모듈을 통해 쓰고있는데, 더 보안상 좋은 방법이 있을까요?
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
VSCode Django-html 상태에서 inline-css 자동완성이 혹시 되시나요?
inline으로 css를 적용하려고 하니까, 자동완성이 안돼서 불편한데, 방법을 찾아봐도 모르겠어서 여쭈어봅니다.
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
import 오류
path('signup/', views.SignUpView.as_view(), name='signup'),이 부분에서 from . import views가 되지 않아 오류가 생기는 것 같습니다 왜 오류인지 잘 모르겠습니다 ImportError: cannot import name 'views' from 'dealershop' (/Users/minjiwon/Desktop/py/dealershop/dealershop/__init__.py)inventory 에서는 from . import views를 해도 잘 되는데 저쪽 부분에서만 되질 않습니다
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
form.save() 부분이 안돼요
Internal Server Error: /polls/survey/Traceback (most recent call last): File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute return super().execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^sqlite3.OperationalError: no such table: polls_surveyThe above exception was the direct cause of the following exception:Traceback (most recent call last): File "/opt/homebrew/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/core/handlers/base.py", line 197, in getresponse response = wrapped_callback(request, callback_args, *callback_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/minjiwon/Desktop/py/mysite/polls/views.py", line 98, in survey form.save() File "/opt/homebrew/lib/python3.11/site-packages/django/forms/models.py", line 542, in save self.instance.save() File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/base.py", line 814, in save self.save_base( File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/base.py", line 877, in save_base updated = self._save_table( ^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/base.py", line 1020, in savetable results = self._do_insert( ^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/base.py", line 1061, in doinsert return manager._insert( ^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/query.py", line 1805, in _insert return query.get_compiler(using=using).execute_sql(returning_fields) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1822, in execute_sql cursor.execute(sql, params) File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 102, in execute return super().execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute return self._execute_with_wrappers( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in executewith_wrappers return executor(sql, params, many, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute with self.db.wrap_database_errors: File "/opt/homebrew/lib/python3.11/site-packages/django/db/utils.py", line 91, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/homebrew/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute return super().execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^django.db.utils.OperationalError: no such table: polls_survey[05/Jul/2023 05:30:34] "POST /polls/survey/ HTTP/1.1" 500 141650 이렇게 뜨면서 안되고 어드민에서 survey 들어가는 것도 안되는데 makemigrations 다시 해봐도 똑같아요
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
fly.io
fly.io로 배포중에 지역선택한 이후에Error: We need your payment information to continue! Add a credit card or buy credit: https://fly.io/dashboard/camel-769/billing이러한 에러가 떴는데 현재는 유료 서비스인건가요?
-
미해결실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
CharField 테이블 안넘어오는 문제
class Car(models.Model): brand = models.CharField('brand', max_length=200), model = models.CharField('model', max_length=200, default=''), color = models.CharField('color', max_length=200), year = models.IntegerField('year', default=1900) 이렇게 모델을 적었는데 integerField의 테이블만 db에 생성되고 CharField table은 넘어오지 않습니다 뭐가 문제인걸까요?
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
detail.html에서 choice를 뿌려주는 데, 어느 부분에서 Choice객체가 Question객체에 의존하는지 모르겠어요.
{% for choice in question.choice_set.all %} <input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}"> <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br> {% endfor %}detail.html에서 question.choice_set.all 로 각 choice를 li로 뿌려주는데어는 부분에서 Question 객체가 Choice객체를 의존하게 되는지 모르겠어요.model안에 있는class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) 이 부분인가요? 언뜻 Question 객체에서 question이란 객체변수로 Choice 객체를 받아줘야 할 것 같은데 말이죠. 그래야, question.choice라는 식으로 접근할 수 있을테니까요? 여기는 Choice객체 안이라서 좀 햇갈립니다. ㅎ아니면 저렇게 ForeignKey를 설정하면, 내부적으로 Question객체에 Choice객체가 의존하게 되나요?잘 몰라서 이상한 질문 드리는 것 같네요 ㅎ
-
해결됨실리콘밸리 엔지니어가 가르치는 파이썬 장고 웹프로그래밍
강의자료는 어디서 볼 수 있을까요?
canva.com에 강의자료를 올려두시고 설명해주시는데,해당 자료는 어디서 볼 수 있을까요?강의자료에 필기를 하면서 공부하고 싶은데, 어떻게 내려받거나 볼 수 있는지 몰라 여쭙습니다.고맙습니다.
주간 인기글
순위 정보를
불러오고 있어요