'Web Programming'에 해당되는 글 1건

준비물 : 버추얼박스(오라클) / Vagrant


우선 홈 디렉토리로 이동합니다.

cd ~


작업 디렉토리를 생성합니다.

mkdir workspace


작업 디렉토로 이동

cd workspace


박스 디렉토리 이동

mkdir ubuntu17


Vagrantfile 생성

vi Vagrantfile


vi를 통해 아래의 문장을 작성합니다.

# -*- mode: ruby -*-

# vi: set ft=ruby :


# 가상환경 메모리와 cpu 코어

MEMORY = 4096

CPU_COUNT = 2

 

# Vagrant.configure(vagrantfile_api_version) do |config| <— config 정의

Vagrant.configure("2") do |config|

# 다운받을 os환경 박스위치

  config.vm.box = "bento/ubuntu-17.10” <— 정의한 config 사용

# 네트워크 포트포워딩 아웃

  config.vm.network "forwarded_port", guest: 80, host: 80

  config.vm.network "forwarded_port", guest: 8000, host: 8000

# 네트워크 IP 설정

  config.vm.network "private_network", ip: "192.168.123.45”

# 버추얼 박스 연동

  config.vm.provider "virtualbox" do |vb|

      vb.customize ["modifyvm", :id, "--memory", MEMORY.to_s]

      vb.customize ["modifyvm", :id, "--cpus", CPU_COUNT.to_s]

  end

end


다음문장을 insert 모드에서 Esc를 눌러 변경 후
:w 로 저장 후 :q를 하여 나가자
귀찮으면 :wq 동시에 써도 상관없다.

자 이제 Vagrant 를 작동시켜 보자
vagrant up 을 타이핑 하자

그럼 아래와 같은 로그가 뜨면서 실행이 될 것이다.

Bringing machine 'default' up with 'virtualbox' provider...

==> default: Importing base box 'bento/ubuntu-17.10'...

==> default: Matching MAC address for NAT networking...

==> default: Checking if box 'bento/ubuntu-17.10' is up to date...

==> default: Setting the name of the VM: ubuntu17_default_1516348815097_87757

==> default: Clearing any previously set network interfaces...

==> default: Preparing network interfaces based on configuration...

    default: Adapter 1: nat

    default: Adapter 2: hostonly

==> default: You are trying to forward to privileged ports (ports <= 1024). Most

==> default: operating systems restrict this to only privileged process (typically

==> default: processes running as an administrative user). This is a warning in case

==> default: the port forwarding doesn't work. If any problems occur, please try a

==> default: port higher than 1024.

==> default: Forwarding ports...

    default: 80 (guest) => 80 (host) (adapter 1)

    default: 8000 (guest) => 8000 (host) (adapter 1)

    default: 8001 (guest) => 8001 (host) (adapter 1)

    default: 22 (guest) => 2222 (host) (adapter 1)

==> default: Running 'pre-boot' VM customizations...

==> default: Booting VM...

==> default: Waiting for machine to boot. This may take a few minutes...

    default: SSH address: 127.0.0.1:2222

    default: SSH username: vagrant

    default: SSH auth method: private key

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: Warning: Connection reset. Retrying...

    default: Warning: Remote connection disconnect. Retrying...

    default: 

    default: Vagrant insecure key detected. Vagrant will automatically replace

    default: this with a newly generated keypair for better security.

    default: 

    default: Inserting generated public key within guest...

    default: Removing insecure key from the guest if it's present...

    default: Key inserted! Disconnecting and reconnecting using new SSH key...

==> default: Machine booted and ready!

==> default: Checking for guest additions in VM...

==> default: Configuring and enabling network interfaces...



The following SSH command responded with a non-zero exit status.

Vagrant assumes that this means the command failed!


/sbin/ifdown 'eth1' || true

/sbin/ip addr flush dev 'eth1'

# Remove any previous network modifications from the interfaces file

sed -e '/^#VAGRANT-BEGIN/,$ d' /etc/network/interfaces > /tmp/vagrant-network-interfaces.pre

sed -ne '/^#VAGRANT-END/,$ p' /etc/network/interfaces | tac | sed -e '/^#VAGRANT-END/,$ d' | tac > /tmp/vagrant-network-interfaces.post


cat \

  /tmp/vagrant-network-interfaces.pre \

  /tmp/vagrant-network-entry \

  /tmp/vagrant-network-interfaces.post \

  > /etc/network/interfaces


rm -f /tmp/vagrant-network-interfaces.pre

rm -f /tmp/vagrant-network-entry

rm -f /tmp/vagrant-network-interfaces.post


/sbin/ifup 'eth1'


Stdout from the command:




Stderr from the command:


bash: line 4: /sbin/ifdown: No such file or directory

bash: line 20: /sbin/ifup: No such file or directory



에러가 없다면 다행이지만 이렇게 에러가 날 수도 있다.

자 그럼 에러를 처리해 보자


해결방법:

친절하게 한 외국인 양반이 여기에 대해 해결을 한 상태이다.

좌표 : https://github.com/cilium/cilium/issues/1918


우선 에러를 해결하기위해 버추얼박스에 실행되어 있는

ubuntu17 을 실행시킨다.


그럼 검은 콘솔화면에서 이놈이 가르쳐주지도 않은 ID와 PW를 요구한다.




당황하지 말자

ID : vagrant

PW : vagrant

이다.



올바르게 입력하면  Welcome to Ubuntu 라고 반겨준다.


자 이제 문제를 해결 하여야한다 아주 간단하다.

저 콘솔창에 sudo apt-get install ifupdown 을 입력한다.

이제 ifupdown 패키지가 설치된다.



이런식으로 에러없이 설치되면 잘 설치 된 것이다.


자 이제 이놈을 버추얼박스에서 종료하고 다시 터미널 창으로 이동하자.



자 이제 터미널 창에서 다시 vagrant up을 입력해보자



다음과 같이 정상동작 하는것을 볼 수 있을 것이다.


자 이제 본격적으로 접속 해 보자


vagrant ssh 를 입력해보자



잘 작동한다. 이제야 기본적인 vagrant 과정이 끝났다.

지금까지 만들어둔 환경을 보존하기위해 스냅샷을 찍어둔다.


참고 : vagrant 의 명령어가 몇개 더 존재한다.

일단 Dic으로 나열하여 설명하겠습니다.


Vagrantfile : vagrant 의 기본 세팅파일

vagrant up : vagrant 의 기본 세팅파일에 명시된 기준으로 vagrant를 실행 (가상머신을 실행한다)

vagrant halt : vagrant 종료 (가상머신을 완전히 종료한다.)

vagrant reload : vagrant 재부팅 이라고 보면된다.

vagrant ssh : vagrant 내의 가상머신을 연결한다.


자 이제 본격적으로 Django + uwsgi + nginx 를 연동하여 웹 서버에 기본적으로 빌드 해 보자

vagrant ssh (vagrant box) 에서 진행합니다.


홈 디렉토리로 이동

cd ~


프로젝트 디렉토리 생성

mkdir project


프로젝트 디렉토리 이동

cd project


virtualenv 설치

sudo apt-get install virtualenv


설치가 완료되면

virtualenv를 통해 python3 구축

virtualenv -p python3 venv

: 다음 명령어를 실행하면 venv 라는 폴더가 만들어 진다.


virtualenv 활성화

source venv/bin/activate

. venv/bin/activate

위 / 아래 둘 중 하나를 사용하면 된다.

사용시 터미널 커서경로 쪽에

(venv) 경로$ 로 커서가 보일 것이다.


pip3를 설치합니다 (없다는 가정하에 - 있으면 상관없다)

sudo apt-get install python3-pip


Django 를 설치한다 (현재 필자가 사용하는 버전은 : version 2.0.1 이다.)

pip3 install Django


django 프로젝트를 생성해보자

jango-admin.py startproject main

: 다음 명령어를 실행하면 main라는 디렉터리가 만들어 질 것입니다.


Django 프로젝트로 이동

cd main


ls -al 명령어를 실행해보면

메인 디렉토리에는 main과 manage.py 가 있을 것입니다.


uwsgi 설치

pip3 install uwsgi


python <-> uwsgi 연동 테스트를 위한 파일 생성

touch test.py

vi test.py


아래에 내용을 적어준다.

def application(env, start_response):

    start_response('200 OK', [('Content-Type','text/html')])

    return [b"Hello World"] # python3


대략적인 내용은 이렇다

리퀘스트를 날려서 돌아오는 리스폰을 받으면 Hello Wrold를 반환하라는 의미이다.


여튼 입력 후 저장한다


주의 : 포트가 겹칠경우 문제가 발생할 수 있습니다.

python <-> uwsgi 연동테스트

uwsgi --http :8000 --wsgi-file test.py




이제 django를 테스트해볼까요

우선 djnago를 테스트하기 전 django 세팅을 조금 맞춰줘야 합니다.


vi main/settings.py

위 명령어를 실행하면 세팅목록이 쭉 보입니다.

그 중 ALLOWED_HOSTS = [ ] 가 보입니다.


이 ALLOWED_HOSTS 는 IP나 포트의 접근제한을 할 수 있는 영역입니다.

우선 테스트니 모든제한을 풀어줍니다.

ALLOWED_HOSTS = ['*']


저장하고 나왔다면 테스트를 해 보자

python3 manage.py runserver 0.0.0.0:8000

제대로 진행되었다면 아래와 같이 잘 실행되고 있음을 확인할 수 있습니다.


django <-> uwsgi 연동 테스트

uwsgi --http :8000 --module main.wsgi


위와 같이 뜬다면 정상적으로 작동하고 있는것이다.


nginx 를 설치해보자

sudo apt-get install nginx


nginx 실행

sudo service nginx restart


nginx 실행상태 확인

sudo service nginx status


nginx 설정파일 생성하기

touch main_nginx.conf

vi main_nginx.conf


# mysite_nginx.conf


# 미들웨어에 연결하는 통신방법 포트통신 소켓통신 있는데

# 소켓통신으로 하겠다고 선언

# the upstream component nginx need to connect to

upstream django {

        server unix:///tmp/main.sock; # for a file socket

        #server 127.0.0.1:8001; # for a web port socket (we'll use this first)

        }


# configuration of the server

server {

# 포트 8000번대 리슨으로

# main_nginx.conf 이동

# 이것을 uwsgi 보내고

# 소켓통신을

        #the port your site will be served on

        listen  8000;

        # the domain name it will serve for

        server_name mroom.kr; # substitute your machine's IP address or FQDN

        charset utf-8;


        # max upload size

        client_max_body_size 75M;       #adjust to taste

        #client_max_body_size 4G;

        #keepalive_timeout 5;


        # Django media

        location /media {

                # your Django project's media files - amend as required

                alias /home/vagrant/project/main/media;

        }


        location /static {

                # your Django project's static file - amend as required

                alias /home/vagrant/project/main/static;

        }


        # Finally, send all non-media requests to the Django server.

        location / {

                uwsgi_pass django;

                # the uwsgi_params file you installed

                include /home/vagrant/project/main/uwsgi_params;

        }

}


심볼릭 링크를 만들어 이어준다. available <--- 저장고 같은 존재이다.

sudo ln -s /home/vagrant/project/main/main_nginx.conf /etc/nginx/sites-available/


vi 를 이용하여 settings.py 에 다음을 추가한다.

vi main/settings.py


STATIC_ROOT = os.path.join(BASE_DIR, "static/")


static 콜렉터를 사용

python3 manage.py collectstatic


static collect를 하는 이유 : 

원래 프로젝트 하단에 static 을 두는게 아니라 기본적으로

어플리케이션 하단에 static 디렉토리를 두어야 한다.

manage.py runserver를 실행하면 하단에 위치한 static 디렉토리를 읽어서

css, js 같은 애들을 불러오는데 wsgi는 어플리케이션마다 static폴더를 인식하지 못하기 때문에

존재하는 모든 static들을 한곳으로 모아주고 거기를 포인트하는 역할을 한다.


Reference : http://blog.hannal.com/2015/04/start_with_django_webframework_06/


아래와 같은 로그가 뜬다.


Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Regular-webfont.woff'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Light-webfont.woff'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/fonts/README.txt'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/fonts/Roboto-Bold-webfont.woff'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/fonts/LICENSE.txt'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/icon-unknown.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/icon-changelink.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/icon-alert.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/icon-deletelink.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/sorting-icons.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/LICENSE'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/icon-clock.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/inline-delete.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/icon-no.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/icon-calendar.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/icon-addlink.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/README.txt'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/selector-icons.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/search.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/icon-unknown-alt.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/tooltag-add.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/calendar-icons.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/icon-yes.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/tooltag-arrowright.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_off.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/img/gis/move_vertex_on.svg'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/SelectFilter2.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/actions.min.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/cancel.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/timeparse.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/core.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/collapse.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/actions.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/prepopulate.min.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/popup_response.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/jquery.init.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/inlines.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/inlines.min.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/autocomplete.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/prepopulate_init.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/change_form.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/calendar.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/SelectBox.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/collapse.min.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/prepopulate.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/urlify.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/LICENSE-XREGEXP.txt'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/xregexp/xregexp.min.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/select2.full.min.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/LICENSE-SELECT2.md'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/mk.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/en.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ru.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/vi.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hr.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fa.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-CN.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/zh-TW.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/el.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/he.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sk.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ca.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/da.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/gl.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/de.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt-BR.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/es.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hi.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/it.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sr-Cyrl.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fi.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/az.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ja.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/is.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/km.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/tr.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/cs.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ro.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/sv.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/bg.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ko.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/fr.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nl.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/hu.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/eu.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ms.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lt.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/th.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/lv.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pl.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/nb.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/et.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/pt.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/id.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/ar.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/select2/i18n/uk.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/LICENSE-JQUERY.txt'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.min.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/vendor/jquery/jquery.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/admin/RelatedObjectLookups.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/js/admin/DateTimeShortcuts.js'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/fonts.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/responsive.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/dashboard.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/widgets.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/forms.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/autocomplete.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/login.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/base.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/responsive_rtl.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/rtl.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/changelists.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.min.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/vendor/select2/select2.css'

Copying '/home/vagrant/project/venv/lib/python3.6/site-packages/django/contrib/admin/static/admin/css/vendor/select2/LICENSE-SELECT2.md'


그리고 static 디렉토리가 만들어지고, 디렉토리 안에는 admin 파일이 생성되어 있을 것이다.


media 폴더를 만들어 준다.

mkdir media


uwsgi_params 를 만들어 준다.

touch uwsgi_params

vi uwsgi_params


아래 내용을 입력하고 저장한다.

uwsgi_param  QUERY_STRING       $query_string;

uwsgi_param  REQUEST_METHOD     $request_method;

uwsgi_param  CONTENT_TYPE       $content_type;

uwsgi_param  CONTENT_LENGTH     $content_length;


uwsgi_param  REQUEST_URI        $request_uri;

uwsgi_param  PATH_INFO          $document_uri;

uwsgi_param  DOCUMENT_ROOT      $document_root;

uwsgi_param  SERVER_PROTOCOL    $server_protocol;

uwsgi_param  REQUEST_SCHEME     $scheme;

uwsgi_param  HTTPS              $https if_not_empty;


uwsgi_param  REMOTE_ADDR        $remote_addr;

uwsgi_param  REMOTE_PORT        $remote_port;

uwsgi_param  SERVER_PORT        $server_port;

uwsgi_param  SERVER_NAME        $server_name;


nginx 재시작
sudo service nginx restart

저장 창고에만 부여해주지 말고 실제로 동작하는 enabled에 링크를 넣어주자

sudo ln -s /home/vagrant/project/main/main_nginx.conf /etc/nginx/sites-enabled/


소켓을 이용한 uwsgi <-> test.py 연동테스트

uwsgi --socket /tmp/main.sock --wsgi-file test.py --chmod-socket=666




소켓을 이용한 uwsgi <-> django 연동테스트

uwsgi —socket /tmp/main.sock —module main.wsgi —chmod-socket=666



main_uwsgi.ini 만들어준다.

vi main_uwsgi.ini


[uwsgi]

chdir           = /home/vagrant/project/main

module          = main.wsgi

home            = /home/vagrant/project/venv

master          = true

processes       = 1

socket          = /tmp/main.sock

chmod-socket    = 666

vacuum          = true


입력 후 저장합니다.


ini 파일을 이용한 uwsgi <-> django 연동테스트

uwsgi --ini main uwsgi.ini



가상환경 비활성화

deactivate


uwsgi 시스템 전역에 설치하기

sudo pip3 install uwsgi


가상환경이 비활성화된 상태에서 ini파일을 이용한 uwsgi <-> django 연동테스트

uwsgi --ini main_uwsgi.ini



여기까지 되면 venv 가상환경 없이 실행이 가능해 진다.


엠페러 모드 설정을 위한 디렉토리 생성

sudo mkdir /etc/uwsgi

sudo mkdir /etc/uwsgi/vassals


엠페러 모드 설정을 위한 심볼릭 링크 생성

sudo ln -s /home/vagrant/project/main/main_uwsgi.ini /etc/uwsgi/vassals/

엠페러 모드로 uwsgi 실행 (권한상관없이 둘다 가능할 것이다.)

sudo uwsgi --emperor /etc/uwsgi/vassals/ --uid www-data --gid www-data

uwsgi --emperor /etc/uwsgi/vassals/ --uid www-data --gid www-data


로그 저장소 만들어 주기

touch /var/log/uwsgi-emperor.log


백그라운드에서 실행하기

sudo /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid www-data --daemonize /var/log/uwsgi-emperor.log


시스템 실행 확인하기

ps -ef | grep uwsgi


시스템 부팅 시 자동실행 설정

sudo vi /etc/rc.local

#!/bin/sh

sudo /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid www-data --daemonize /var/log/uwsgi-emperor.log

exit 0


우분투는 rc.local 서비스를 기본적으로 지원하지 않으니 트러블 슈팅을 참고

sudo vi /lib/systemd/system/rc-local.service

[Install]

WantedBy=multi-user.target

추가한다.


rc.local 권한 변경

sudo chmod +x /etc/rc.local

rc.local 활성화

sudo systemctl enable rc-local

rc.local 시작

sudo systemctl start rc-local.service

rc.local 상태확인

sudo systemctl status rc-local.service


서버 자동켜기 스크립트

#!/bin/sh

sudo /usr/local/bin/uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid www-data --daemonize /var/log/uwsgi-emperor.log


오늘은 여기까지

블로그 이미지

ZeroFlag

,