-
attempt to write a readonly database 와 unable to open database file💻 프로그래밍/Django 2017. 12. 30. 19:07
안녕하세요! 코딩하는 JAY입니다. 벌써 2017년이 끝나가네요...이틀뒤면 흑흑..
어서와라! 18년아~~!!(아, 물론 2018년입니다)
오늘은 제가 로컬에서 만들었던 Django서버를 AWS에 릴리즈하면서 겪은 문제에 대해 포스팅하려고 합니다.
AWS 릴리즈를 위해 똑같이하면 될 줄알고 기본적인 Django, AWS, apache2 세팅을 마치고, db.sqlite3 까지 생성을 완료 했습니다. 다음에 views.py 에서 똑같이 입력받는 POST 데이터를 save()하려고 하는데..... 서버(IP)에 접속하니.....
"attempt to write a readonly database"
라는 메시지가 나타나면서 템플릿 페이지가 실행되지 않는 것 입니다.. 사실 여기 까지는 별로 문제가 없었습니다.
"readonly ?? 아하 퍼미션!! ㅋㅋㅋㅋㅋ " 이런 생각을 가지고 바로 sudo chmod 664 db.sqlite3 명령어로 퍼미션을 바꿔주었습니다.
되겠지 했는데..........
[참고] 로컬에서 sqlite3 사용 : http://jay-ji.tistory.com/19?category=732902
(로컬에서 서버를 만들어서 POST입력 받은 데이터를 db에 저장하는 방법에 대해 설명을 하고 있습니다.)
[참고] 파일, 디렉토리 퍼미션 변경하기(chmod) : http://jay-ji.tistory.com/20?category=732899
뭐시여!! 뭐시 중헌디!!!!!!!!!!!
역시 한번에 되는 법이 없네요..ㅠㅠ 데이터베이스 파일을 열수 없다는 말인 것 같기는 한데...도대체 뭐가 문제인지 몰랐습니다. 하루종일 해메다가 찾은 결과... 소유그룹, 소유주에 관련된 문제였다는 것을 알았습니다.
- chown www-data:www-data db.sqlite3(파일)
- chown www-data:www-data /home/ubuntu/Django(파일이 속한 폴더)
이렇게 파일이 속한 폴더와 파일의 소유권한을 www-data로 바꿔줘야 웹에서 접근할 수 있습니다. www-data는 default user같은 의미인데, 웹서버 프로세스는 www-data가 엑세스할 수 있는 모든 파일에 엑세스 할 수 있다고 합니다.
[참고] What is www-data user : https://askubuntu.com/questions/873839/what-is-the-www-data-user
[참고] 웹서비스를 위한 퍼미션 문제 : http://webdir.tistory.com/231
말그대로 파일과 디렉토리에 대한소유권을 의미하는 것입니다.
(소유권을 변경하기 전)
(소유권 변경 후)
자 이제, 웹페이지에 접속해서 제대로 동작이 되는지 확인해보겠습니다.
정상적으로 출력이 됩니다!!! 와우!!!
결론: 웹서비스를 위해서는 파일의 퍼미션, 소유권에 대한 설정을 잘 해야한다. 웹서비스에서 퍼미션은 파일의 보안과 편의성을 고려하여 설정해줘야 합니다. 가령 모든권한을 모든사용자에게 준다면....(상상만 해도 끔찍하죠? 해킹과 파일의 관리에서 아주 많은 문제가 생길것 입니다.)
오늘 포스팅 내용은 여기까지 입니다. 모두들 즐거운 코딩, 재밌는 코드 생산하세요~!!
'💻 프로그래밍 > Django' 카테고리의 다른 글
Django REST Framework API 문서 자동화 하기(feat.drf-yasg) (0) 2018.12.31 코린이의 DRF(Django REST Framework) 사용해버리기~ (1) 2018.12.31 requests 모듈의 사용과 DB에 데이터 저장하기 (2) 2017.12.25 [Django]파일관리 및 파싱(static file과 media file에 대한 고찰)[2/3] (0) 2017.09.28 [Django]파일관리 및 파싱(static file과 media file에 대한 고찰)[1/3] (0) 2017.09.06