Ubuntu 리눅스에 Django 어플리케이션 배포하기(Nginx+Django+uWSGI)

Ubuntu 리눅스에 Django 어플리케이션 배포하기(Nginx+Django+uWSGI)

* 작업환경
OS: ubuntu 20.04 LTS
Python: Python 3.8.2
uwsgi : 2.0.18
Django: 3.0.6
Nginx : 1.17.10

1. 준비작업(Django project 만들고 django app 만들기 – 배포 테스트용)

virtualenv 로 간단한 프로젝트를 만든다. virtualenv 가 없으면, 아래 명령어로 설치한다.

$ sudo apt install python3-virtualenv

python 가상환경을 만들고 django를 설치한다.

snowfox@ubuntu:~$ virtualenv DjangoTest
snowfox@ubuntu:~$ . DjangoTest/bin/activate
(DjangoTest) snowfox@ubuntu:~$
(DjangoTest) snowfox@ubuntu:~$ pip install django

이제, Test라는 이름의 django project를 만든다.

(DjangoTest) snowfox@ubuntu:~$ cd DjangoTest
(DjangoTest) snowfox@ubuntu:~/DjangoTest$ ls
bin  lib  pyvenv.cfg
(DjangoTest) snowfox@ubuntu:~/DjangoTest$ django-admin startproject Test
(DjangoTest) snowfox@ubuntu:~/DjangoTest$ ls
Test  bin  lib  pyvenv.cfg

Test 프로젝트에서 testapp을 만든다.

(DjangoTest) snowfox@ubuntu:~/DjangoTest$ cd Test
(DjangoTest) snowfox@ubuntu:~/DjangoTest/Test$ python manage.py startapp testapp
(DjangoTest) snowfox@ubuntu:~/DjangoTest/Test$ ls
Test  manage.py  testapp

Continue reading

Ubuntu 일반 사용자에게 sudo 권한주기.

일반 사용자에게 sudo 권한 주기

작업환경: ubuntu 20.04 LTS

* 일반 사용자 계정 등록

# useradd -d /home/testuser -m -s /bin/bash -c "test" testuser
root@ubuntu:/etc# passwd testuser
New password:
Retype new password:
passwd: password updated successfully

일반 사용자인 testuser로 로그인 후에 sudo 명령을 내리면 아래처럼 sudoers 파일에 등록되지 않았다는 메시지가 나온다.

testuser@ubuntu:~$ sudo -s
[sudo] password for testuser:
testuser is not in the sudoers file.  This incident will be reported.
testuser@ubuntu:~$

Continue reading

vmware tools 옛날버전 다운로드

vmware tools (vmware client) 옛날 버전은 아래 링크에서 다운로드 받을 수 있다.

https://packages.vmware.com/tools/esx/

리눅스 timedatectl

리눅스에서 날짜/시간을 조정하는 방법에는 여러 가지가 있다.

완전 수동 방식: date 명령어로 날짜 시간을 조정하였음.
옛날(?) 방식: ntpdate, rdate 로 time 서버와 시간 동기화.
최신(?) 방식: timedatectl

1. Ubuntu 18.04 에서 timedatectl 사용하기.

전통적인 명령어인 date 명령어로 현재 날짜/시간을 확인 할 수 있다.

$ date
Tue Apr 21 10:57:03 KST 2020

하지만, timedatectl 명령으로는 현재 날짜, 시간, 타임존, 타임서버와의 동기화 여부를 모두 확인 가능하다.

$ timedatectl
                      Local time: Tue 2020-04-21 10:57:07 KST
                  Universal time: Tue 2020-04-21 01:57:07 UTC
                        RTC time: n/a
                       Time zone: Asia/Seoul (KST, +0900)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

Continue reading

Ubuntu 18.04, nvidia cuda 설치하기.

Ubuntu 18.04, nvidia cuda 설치

1. GPU 설치 확인
Tesla V100이 설치되어 있으며, device driver가 설치되어 있지 않아서 UNCLAIMED로 표시된다.

$ sudo lshw -c display
  *-display:1 UNCLAIMED
       description: 3D controller
       product: GV100GL [Tesla V100 SXM2 32GB]
       vendor: NVIDIA Corporation
       physical id: 9
       bus info: pci@0000:00:09.0
       version: a1
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress cap_list
       configuration: latency=0
       resources: iomemory:80-7f iomemory:100-ff memory:fc000000-fcffffff memory:800000000-fffffffff memory:1000000000-1001ffffff

Continue reading

KVM guest에 nvidia GPU 할당할때 오류 처리

KVM guest에 nvidia GPU (path through)할당할때 오류 처리.

Host OS: CentOS 7, 4 nvidia GPU
Guest OS: Ubuntu 18.04

kvm guest에 Nvidia GPU를 할당하고 실행했을때, 아래 오류가 발생했다.
Nvidia GPU는 아래 그림처럼 PCI 디바이스에서 찾아 볼 수 있다.

오류 내용은 아래와 같다.

Error starting domain: unsupported configuration: host doesn't support passthrough of host PCI devices

Traceback (most recent call last):
  File "/usr/share/virt-manager/virtManager/asyncjob.py", line 89, in cb_wrapper
    callback(asyncjob, *args, **kwargs)
  File "/usr/share/virt-manager/virtManager/asyncjob.py", line 125, in tmpcb
    callback(*args, **kwargs)
  File "/usr/share/virt-manager/virtManager/libvirtobject.py", line 82, in newfn
    ret = fn(self, *args, **kwargs)
  File "/usr/share/virt-manager/virtManager/domain.py", line 1506, in startup
    self._backend.create()
  File "/usr/lib64/python2.7/site-packages/libvirt.py", line 1080, in create
    if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self)
libvirtError: unsupported configuration: host doesn't support passthrough of host PCI devices

Continue reading

[Django Recipe] django-import-export 관리자페이지 적용.

django-import-export 관리자 페이지 적용하기.

django-import-export는 csv, xlsx 등의 파일을 읽어 데이타베이스에 저장하거나, 데이타베이스의 내용을 csv, xlsx등의 파일로 저장하는 기능을 제공한다.
지원되는 파일 포맷은 tablib 가 지원하는 형식이며, tablib는 Excel, JSON, YAML, HTML, Jira, TSV, ODS, CSV, DBF를 지원한다.

1. 설치

pip install django-import-export

2. 설정

project/settings.py 에 아래 내용 추가

INSTALLED_APPS = [
    ...
    'import_export',
    ...
]
manage.py collectstatic

Continue reading

[Django Recipe] 디자인 부담을 덜어주는 django-adminlte3 – part 3

django-adminlte3 – part 3

django-adminlte3와 django-mptt로 사이드바 tree 메뉴 만들기

django-mptt 설치와 설정은 django-mptt로 tree구조 만들기(https://blog.boxcorea.com/wp/archives/2605)를 참고하면 된다.

관리자페이지에서 아래와같은 tree구조를 만들었고, 이것을 사이드바에 tree 구조로 보이도록 view를 만들어본다.

project/app/urls.py에 url을 등록한다.

urlpatterns = [
    path('category', CategoryView.as_view(), name='category'),
    path('test/', TestView.as_view(), name='test'),
]

project/app/views.py 에 아래와 같이 view를 만든다.

class CategoryView(View):
    template_name = 'chaser/category.html'

    def get(self, request):
        context = {
            'categories': Category.objects.all(),
        }
        return render(request, self.template_name, context)

Continue reading

[Django Recipe] 디자인 부담을 덜어주는 django-adminlte3 part-2

웹 디자인 부담을 덜어주는 django-adminlte3 part-2

base.html 살펴보기.

base.html 아래 링크를 참고하여 템플릿에서 사용할 수 있는 블럭의 이름을 알 수 있다.
https://github.com/d-demirci/django-adminlte3/blob/master/adminlte3/templates/adminlte/base.html

먼저, 간단히 사이트 이름과 페이지 제목을 변경하고 싶다면, block title_outer를 설정한다.

project/templates/index.html 에 title을 설정하면 index.html을 상속받는 모든 페이지에 적용되며, test.html에 설정하면 test.html을 사용하는 페이지에만 적용된다.

index.html에 적용하는 경우

{% extends 'adminlte/base.html' %}
{% block title_outer %}
<title>{% block title %}Chaser{%endblock %}</title>
{% endblock %}

test.html에도 적용된다.

{% extends '../index.html' %}
{% block content %}
test page...
{% endblock %}

이제 http://localhost:8000/test 에 접속하면 페이지 제목이 보인다.

Continue reading

[Django Recipe] 웹 디자인 부담을 덜어주는 django-adminlte3 – part 1

웹 디자인 부담을 덜어주는 django-adminlte3 – 1부

adminlte는 다양한 기능을 제공하는 웹템플릿으로 많은 개발자들이 사용한다. 다양한 기능을 편리하게 사용할 수있는 장점이 있으나, 많은 개발자들이 사용하므로 디자인이 비슷하다는 단점이 있다.
adminlte는 현재 버전3 까지 나와 있다.

* 작업환경
python: 3.6
django: 3.0
os: windows 10

1. 설치 및 설정

설치

pip install django-adminlte3

설정
django project 의 settings.py에 app을 등록한다.
이때, 순서가 중요하다. adminlte3 이 adminlte3_theme보다 먼저와야 하며, 이 두 app은 django.contrib.admin 이 전에 설정해야한다.

INSTALLED_APPS = [
    # installed 3rd party app
    'adminlte3',
    'adminlte3_theme',

    # 아래부터는 django 기본 설정 app
    'django.contrib.admin',
    'django.contrib.auth',
    ....
]

manage.py collectstatic 명령을 내리면, static 디렉토리에 필요한 파일들이 복사된다.

manage.py collectstatic

Continue reading