증상: 로컬에서 이미지필드에 있는 파일 로딩 잘되었는데 aws-nginx  배포환경에서 로딩이 안되었다


src

-a app

-b app

-c app

-src

-urls.py

-settings.py

-static

-images

-js

-www

static

-media

-images

-js

-www

manage.py

mysite.nginx.conf

uwsgi.ini


settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR),"static") #개발시 스태틱파일을 모아서 복사해줄 디렉토리

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR),"static", "media")

STATICFILES_DIRS = [
os.path.join(os.path.dirname(BASE_DIR),"static", "static_dirs"),
os.path.join(os.path.dirname(BASE_DIR),"static", "media"),
]

nginx 설정

아래는 잘되는 옵션

location /static {
root /home/ubuntu; # your Django project's static files - amend as required
}

아래는 안됨

location /static {
root /home/ubuntu/static; # your Django project's static files - amend as required
}

ubuntu/static 까지 포함하면 이미지 로딩이 안됨 즉 ubuntu 까지만 경로적어줘야함



스태틱파일 세팅은 

여기서 스태틱파일은 각종 이미지 파일 들인데 (템플릿에서 불러올) 

경로는  /home/ubuntu

/home/ubuntu/static 내에 

static_dirs, static_root, media, media/images, admin, js, www 이런 하위 디렉토리가 있는데 특히

www

-css

-fonts

-js

-images

등이 있는데 여기에 하위에 있는 각종 js를 로딩하거나 이미지를 로딩하려면 nginx 에서 location /static{ }

파트에서 경로를 설정해줘야 한다

앞에 옵션에 root , alias 가 있는데 alias 는 이미지가 안불려지고 root 를 붙여야 이미지 로딩이 된다. 왜 그런지는??

static 경로는 빼고 적어준다 root /home/ubuntu

static경로가 포함되면 로딩이 안된다


이미지가 업로드가 되는 경로는 /home/ubuntu/static/media/images 이다

class Category(models.Model):
title=models.CharField(max_length=120)
description=models.TextField(max_length=5000, null=True, blank=True)
tags=GenericRelation("TaggedItem", null=True, blank=True)
slug=models.SlugField(default='abc', unique=True)
image=models.ImageField(upload_to='images/', null=True, blank=True)

업로드되는 이미지를 로딩하려면  nginx 에서 경로를 잡아줘야 한다??? 이것은 location /media {}

파트에서 경로를 설정해줘야 한다? 그런줄 알았는데...

그런데 이 미디어 경로는 안 정해줘도 잘 로딩되는듯하다

미디어 경로를 주석처리해도 잘 작동하고, 앞에 옵션에 root , alias 둘다 작동됨을 확인

media 경로는 포함하든 안하든 잘 작동한다

아마도 미디어 경로를 설정안해줘도

스태틱경로에서 미디어까지 커버되어 사용자가 업로드한 이미지를 로딩해주는듯 하다


잘된다 아래, 미디어경로를 포함해도 잘되는듯
location /media  {
alias /home/ubuntu/static/media; # your Django project's media files - amend as required, alias
}


아래는 잘안됨. (root옵션 안되는듯)

location /media  {
root /home/ubuntu/static/media; # your Django project's media files - amend as required, alias
}


아래도 잘됨 미디어경로를 포함안해도 잘되는듯

location /media  {
alias /home/ubuntu/static; # your Django project's media files - amend as required, alias
}

그리고 이미지 불러올 템플릿파일에서 이미지로딩을 해준다


<img src="{%if q.image %}{{q.image.url}}{%endif%}" class="img-responsive"></a>

{{q.image.url}} 여기서 q는 오브젝트 . 즉 오브젝트의 이미지필드의 url 을 불러오라는 얘기다

그러면 media/images/이미지경로를 불러온다









python manage.py runserver 할때도 잘되었다

uwsgi 와 nginx 연동도 하고  aws에 배포도 잘되었다

이제 실제 db를 우분투에 설치 mysql을 설치했는데 설치까진 잘되었고 runserver 로 실행시는 사이트가 나오는데

uwsgi nginx 로 서버를 띄우려니 internal server error 500 이 출력되었다 이것으로 이틀을 헤맨결과

가상환경에도 mysqlclient 를 설치해줘야 한다


가상환경에 안하면

주의 가상환경에도 설치해줘야 임포트에러가 안난다 안하면

 import MySQLdb as Database

ImportError: No module named 'MySQLdb'

발생


가상환경을 실행해주고 pip3 install mysqlclient

internal server error 가 없어진다

이것때문에 이틀간 삽질함





django 장고 우분투 ubuntu 에 mysql 설치 install


1.

ssh 접속


2.

sudo get-install mysql-server

비번세팅을 물어보면 설정해주자


3.

설치가 다 되면 이제 접속할 수 있다

mysql -uroot -p1234


4. db를 생성하자

데이터베이스 생성

1

CREATE DATABASE xxxx CHARACTER SET utf8 COLLATE utf8_general_ci;


기본적으로

informations_schema

mysql

performance_schema

위 3개 원치 않으면 기본데이터베이스는 삭제해주자

drop database xxx;


5.

sudo pip3 install mysqlclient


6.

(5번 수행시 에러날 경우 수행 ... conf 어쩌구저쩌구...)

sudo apt-get install libmysqlclient-dev


7.

setting.py 파일을 수정


DATABASES = {

'default': {

    'ENGINE': 'django.db.backends.mysql',

    'NAME': '디비이름을적음',

    'USER': '유저이름을적음',

    'PASSWORD': '비번을적음',

    'HOST': 'localhost',   

    'PORT': '3306',

}

}


또는

DATABASES = {

   'default': {

       'ENGINE': 'django.db.backends.mysql',

       'OPTIONS': {

           'read_default_file': os.path.join(BASE_DIR, 'config/my.conf'),

       },

   }

}

my.conf 파일을 만들어

[client]

database = xxxx

user = root

password = 1234

default-character-set = utf8

저장


8.

python manage.py makemigrations

python manage.py migrate


9.

python manage.py runserver


10. 접속 후 확인

+ Recent posts