###############################################################################################################2022.03.21 AWS.EC2 Web Server, 웹 서버, 웹서버 세팅: github.깃허브를 통한 세팅
https://nerogarret.tistory.com/45?category=800142
2022.12.27 Added. 개념 재정리 및 업그레이드
****: AWS.EC2.UBUNTU_18.04 : MySql 5.7 사용 가능 : ubuntu 20.04 이상은 MySql 8.0 이상 가능 MySql 5.7 사용 불가...
https://www.youtube.com/watch?v=OiXABDL-uWw
###############################################################################################################1. 먼저 윈도우 10, 내 노트북에서 django 프로젝트 및 앱 생성, github.repository 생성/연결
# 2022.12.29 Added. 다음 명령으로 requirements.txt 파일을 생성하면, 아래와 같은 내용으로 자동 생성된다.
다음: $ pip freeze > requirements.txt
아래:
asgiref==3.6.0 or 3.5.1
Django==3.2.16
djangorestframework==3.14.0
pytz==2022.7
sqlparse==0.4.3
typing-extensions==4.4.0 or 4.2.0
****:
requirements.txt 파일을 열고, "asgiref, typing_extensions" 이상 2개 패키지는,
"AWS.UBUNTU 18.04" 버전에 깔린 파이썬 버전이, "Python 3.6" 버전인데,
"Python 3.6" 버전에서는 상기 2개 파일의 버전이 맞지 않아 "에러"가 발생한다.
그러므로 상기 2개 파일의 버전 부분을 지워주면, "AWS.UBUNTU"가 알아서 적절한 버전을 설치한다.
asgiref
Django==3.2.16
djangorestframework==3.14.0
pytz==2022.7
sqlparse==0.4.3
typing_extensions
2. github push 최초 깃허브 올리기
****: github token 발행하기: 로그인 후 유저 아이콘 클릭/Settings/left Menu: Developer settings/
Left Menu: Personal access tokens/Generate new token 클릭/Note: powerp, repo 체크/Generate token 클릭/복사 보관
token.토큰은 todolist.txt 파일에 보관되어 있다.
1) public으로 repository.리파지토리 생성
2) 로컬 컴퓨터 프로젝트 폴더 안에, manage.py 파일이 있는 곳으로 터미널 오픈
powerp
ppp
manage.py
requirements.txt
db.sqlite3
3) ****: github.com/방금 만든 Repository 안내문 복사: 우 상단 아이콘 클릭
echo "# portfolio2023" >> README.md
git init
git add README.md
gitmoji -c // 2022.12.28 Updated. git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/rwkang/powerpbhj.git
git push -u origin main
3-1) 여기서 git 초기화: 이 프로젝트 폴더 전체를 관리하겠다고 선언하는 의미.
$ git init
3-2) git에 현재 폴더 전체를 담는다.
$ git add .
3-3)
$ gitmoji -c // git commit -m "first commit"
3-4)
$ git branch -M main
3-5) 담은 파일들을 업로드할 [레포지토리 주소]를 origin 이라는 이름으로 추가. 이미 있으면 아래와 같은 명령으로 삭제.
$ git remote add origin https://github.com/rwkang/powerpbhj.git
삭제 명령: $ git remote remove origin
3-6) github 올리기.
$ git push -u origin main
3-7) git status
: README.md 파일을 제외한 어떤 파일도 "github"에 올라가지 않았다.
3-8) ****: 여기서 ".gitignore" 파일을 반드시 만들고, 거기에 아래 "내용"을 추가하고, "git add ." 한다.
venv/*
db.sqlite3
--pycache__/*
.idea/*
3-9) $ git add .
3-10)$ gitmoji -c
3-11)$ git push
4) ****: ...or push an existing repository from the command line
$ git remote add origin https://github.com/rwkang2023/portfolio2023.git
$ git branch -M main
$ git push -u origin main
3. github push 수정했을 때...
$ git add .
$ gitmoji -c // git commit -m "comment"
$ git push origin main
****: 만약 git push 명령에서, 다음와 같은 에러가 나오면, 아래와 같이 해결한다.
다음: Fatal: unable to access 'https://github.com/rwkang/powerp.git': OpenSSL SSL_read: SSL_ERROR_SYSCALL, error 10054
아래:
$ git config http.sslVerify false
$ git config --global http.sslVerify false
*. aws.ec2 서버 기본 세팅
"AWS.UBUNTU 18.04"에서는, 기본적으로 "pip3"가 없으므로,
=========================================================================================================
2023.01.03 ***** 특별 주의 사항*****
$ sudo nano -c uwsgi.ini, Docker, nginx.conf, nginx-app.conf 등 파일 생성 시 특히 주의할 사항.
****: "sudo" 명령을 통한 파일 생성이 되면,
-rw-r--r-- 1 root root 330 Dec 29 21:38 uwsgi.ini : 파일 Permision.권한에 치명적 문제가 발생한다.
$ nano -c uwsgi.ini, Docker, nginx.conf, nginx-app.conf : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
-rw-rw-r-- 1 ubuntu ubuntu 4096 Jan 03 13:07 uwsgi.ini : 파일이 반드시 "ubuntu"로 생성되어야 한다.
=========================================================================================================
1.
****: 먼저,
ubuntu@ip-172-31-47-xxx:~$ sudo apt-get update 하고,
// 2022.12.27 요새는 요기는 실행하지 x => ubuntu@ip-172-31-47-xxx:~$ sudo apt-get dist-upgrade
2.
****:
*** 주의 *** : "portfolio2023" 폴더를 생성하지 않고, "clone" : "clone" 후 폴더 자동 생성.
ubuntu@ip-172-31-47-xxx:~$ git clone https://github.com/rwkang2023/portfolio2023.git
여기서 Username 과 Password 를 묻는다.
Username: rwkang@naver.com, Password: todolist.txt 파일에 있는 token.토큰을,
RB로 copy.복사 하여, $ Password ~~:■ 여기에 RB.right button 을 1번만 클릭하고, 엔터하면 된다.
먼저 상단 타이틀을 클릭하고, RB 한다.
===> 아래와 같이 나오면 정상.
Cloning into 'powerpbhj'...
remote: Enumerating objects: 832, done.
remote: Counting objects: 100% (832/832), done.
remote: Compressing objects: 100% (694/694), done.
remote: Total 832 (delta 123), reused 832 (delta 123), pack-reused 0
Receiving objects: 100% (832/832), 350.45 MiB | 31.36 MiB/s, done.
Resolving deltas: 100% (123/123), done.
Updagting files: 100% (794/794), done.
2022.12.29 Added.
한번 "git clone https://github.com/rwkang2023/portfolio2023.git"에서 복붙한 후에,
"소스"가 수정되어, "git add" => "gitmoji -c" => "git push"로,
"github repository"가 변경된 경우에는, 반드시 "해당 프로젝트 폴더"로 이동한 후,
ubuntu@ip-172-31-47-xxx:~$ git pull 명령어로 가져오기만 하면 된다.
ubuntu@ip-172-31-47-xxx:~$ git pull origin main
***** "해당 프로젝트 폴더에서 git pull" *****
3. "AWS.UBUNTU 18.04"에서는 반드시 "python3"와 "pip3" 명령어를 사용해야 한다.
ubuntu@ip-172-31-47-xxx:~$ sudo apt install python3-pip
===> 여기서 주의할 것: "python-pip" 아니고, "python-pip3"도 아니고, "python3-pip3"도 아님.
ubuntu@ip-172-31-47-xxx:~$ ls -rlt: 폴더 내용 확인
ubuntu@ip-172-31-47-xxx:~$ python3: python3 설치 및 실행 확인
ubuntu@ip-172-31-47-xxx:~$ pip3: pip3 설치 및 실행 확인.
4. requirements.txt 파일로 패키지 일괄 설치...
*****:
이상 3개 명령 모두 정상 실행되면 아래 명령으로 "requirements.txt" 파일의 "패키지" 파일을 한방에 설치한다.
ubuntu@ip-172-31-47-xxx:~$ cd portfolio2023
ubuntu@ip-172-31-47-xxx:~/portfolio2023$ pip3 install -r requirements.txt
===> 모든 "패키지" 설치가 완료되면, 비로소 아래와 같이 서버를 실행해 본다.
ubuntu@ip-172-31-47-xxx:~/portfolio2023$ python3 manage.py runserver 0.0.0.0:8000
===> 위 명령 실행으로 "AWS.UBUNTU" 서버를 실행하고,
브라우저에서 "18.xxx.xxx.xxx:8000"으로 확인하면, 아래와 같은 에러가 발생한다.
****:
DisallowedHost at /
Invalid HTTP_HOST header: '18.xxx.xxx.xxx:8000'. You may need to add '18.xxx.xxx.xxx' to ALLOWED_HOSTS.
===> 이것은 project.app.settings.py 파일의 "ALLOWED_HOSTS=[]" 여기를 "ALLOWED_HOSTS=["*"]로 변경하면 해결된다.
다시 브라우저에서 "18.xxx.xxx.xxx:8000"으로 확인하면, 정상적으로 실행되는 것을 확인할 수 있다.
5. 이번엔 "domain.도메인" 이름으로 띄우기 위해,
# 2022.12.30 Added. Domain.도메인 등록 5개까지 공짜. duckdns.com : Google.구글로 로그인하면 5개까지 공짜 등록.
beijingdrivekang@gmail.com 으로 등록 완료.
****: ===> 좌측 아래 "reCAPTCHA" 버튼 클릭... "rwkang"명으로 "add domain" 클릭
domain: rwkang, current ip: 18.xxx.xxx.xxx "update ip" 클릭
===> 다시 브라우저에서 "rwkang.duckdns.org:8000"으로 확인하면, 정상적으로 실행되는 것을 확인할 수 있다.
6. 이번엔 "8000"번 포트 번호까지 빼고 브라우저에서 띄우기 위해,
"AWS.UBUNTU" 서버에서 아래와 같이 "80" 포트로 실행하면,
"Error: You don't have permission to access that port" 권한 에러가 발생한다.
ubuntu@ip-172-31-47-xxx:~/portfolio2023$ python3 manage.py runserver 0.0.0.0:80
이것은 "80"포트가 중요한 포트이므로, 아무나 사용할 수 없도록 하기 위함이다. 이번엔 "sudo" 명령으로 다시 구동한다.
ubuntu@ip-172-31-47-xxx:~/portfolio2023$ sudo python3 manage.py runserver 0.0.0.0:80
# 2022.12.30 Added. Nginx 올리기.
****: 상기 "python3 manage.py runserver"는 "개발용 웹서버"인 관계로, 상용 서비스에서 사용할때는,
반드시 "Nginx" or "Appatch Tomcat" 등의 "웹서버"를 올려서 사용해야 한다.
1. uwsgi 패키지 설치: requirements.txt 파일에 "uwsgi" 패키지 추가.
ubuntu@ip-172-31-47-xxx:~/portfolio2023$ nano -c requirements.txt
기존 내용
uwsgi : ****: 마지막 줄에 추가한다.
2. ****: uwsgi 패키지 설치를 위해서는 반드시 "프로젝트 폴더"에 "uwsgi.ini" 파일이 있어야 한다.
https://cholol.tistory.com/566
XXX ubuntu@ip-172-31-47-xxx:~/portfolio2023$ sudo nano -c uwsgi.ini : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
ubuntu@ip-172-31-47-xxx:~/portfolio2023$ nano -c uwsgi.ini : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
[uwsgi]
1. socket은 프로세스와 프로세스의 통신할 때 사용.
uwsgi에서는 2-3개 소켓을 사용할 수 있다.
"Network 단"의 socket을 사용할 수도 있고, Unix/Linux의 "File 단"의 socket을 사용할 수도 있는데,
****: "File 단"의 socket이 속도가 빠르므로 "File"이 보관되어 있는 "path.경로"를 아래에 표기해 준다.
socket = /srv/portfolio2023/apps.sock
2. master는 uwsgi가 "master"와 "slave"가 있는데, "master"를 사용할 것인가를 확인.
master = true
3. processes는 "process"를 몇 개를 사용할 것인가를 확인. 일반적으로 "CPU x 2" 정도로 한다.
processes = 1
4. threads는 "1 process" 당 "thread"를 몇 개 띄울 것인지를 확인.
threads = 2
5. chdir은 child directory, 즉 "프로젝트 경로"
chdir = /srv/portfolio2023
module = profolio2023.wsig
6. logto는 "접속 로그 정보"의 "경로 및 파일명"
logto = /var/log/uwsgi/uwsgi.log
7. log-reopen은 기존 로그 파일을 새로 기록할 것인지, 아니면 계속 추가로 기록할 것인지를 확인.
log-reopen = true
8. logfile-chmod는 로그 파일의 권한을 설정: "664"는 같은 컴 안에서는 "읽기/쓰기 모두 가능", 외부 컴에서는 "읽기만 가능".
logfile-chmod = 664
9. vacuum은 "서버가 새로 뜰 때", "기존 모든 로그 정보"를 "삭제"할 것인지를 확인: true가 "삭제"한다는 것임.
vacuum = true
10. 기타
listen = 4000
ignore-sigpipe=true
ignore-write-errors=true
disable-write-exception
reload-on-rss = 128
[uwsgi]
socket = /srv/portfolio2023/apps.sock
master = true
processes = 1
threads = 2
chdir = /srv/portfolio2023
module = profolio2023.wsig
logto = /var/log/uwsgi/uwsgi.log
log-reopen = true
logfile-chmod = 664
vacuum = true
listen = 4000
ignore-sigpipe=true
ignore-write-errors=true
disable-write-exception
reload-on-rss = 128
3. 다음은 "프로젝트 폴더"에 "Django"."Dockerfile"을 생성하고 설정 한다.
XXX ubuntu@ip-172-31-47-xxx:~/portfolio2023$ sudo nano -c Dockerfile : 확장자가 없음 : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성.
ubuntu@ip-172-31-47-xxx:~/portfolio2023$ nano -c Dockerfile : 확장자가 없음 : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
1. Python 버전 확인.
FROM python:3.7.9
2. ENV.환경 변수
ENV PYTHONUNBUFFERED 1
RUN mkdir /srv/portfolio2023
ADD . /srv/docker-server
WORKDIR /srv/docker-server
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 80
내용
FROM python:3.7.9
ENV PYTHONUNBUFFERED 1
RUN mkdir /srv/portfolio2023
ADD . /srv/docker-server
WORKDIR /srv/docker-server
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 80
4. 다음은
****: 프로젝트 상위 폴더"에 "nginx" 폴더를 생성하고,
nginx" 폴더에 3개의 파일을 생성하고, 설정해야 한다. Nginx"."Dockerfile"을 생성하고 설정한다.
ubuntu@ip-172-31-47-xxx:~/portfolio2023$ cd ..
ubuntu@ip-172-31-47-xxx:~$ mkdir nginx
ubuntu@ip-172-31-47-xxx:~$ cd nginx
XXX ubuntu@ip-172-31-47-xxx:~nginx$ sudo nano -c nginx.conf : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
ubuntu@ip-172-31-47-xxx:~nginx$ nano -c nginx.conf : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
user root;
worker_processes 1;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
##
# Virtual Host Configs
##
include /etc/nginx/sites-enabled/*;
}
5. 다음은 "nginx-app.conf"
XXX ubuntu@ip-172-31-47-xxx:~nginx$ sudo nano -c nginx-app.conf : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
ubuntu@ip-172-31-47-xxx:~nginx$ nano -c nginx-app.conf : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
upstream uwsgi {
server unix:/srv/portfolio2023/apps.sock;
}
server {
listen 80;
server_name localhost *.amazonaws.com;
charset utf-8;
client_max_body_size 128M;
location / {
uwsgi_pass uwsgi;
include uwsgi_params;
}
location /media/ {
alias /media/;
}
location /static/ {
alias /static/;
}
}
6. 위와 같이 기본 세팅 파일 2개를 만들고, "Dockerfile"을 만듭니다.
****: 아래 파일 내용은 반드시 여기 싸이트에서 해당 내용을 복붙해야 한다.
https://cholol.tistory.com/566
그 이유는 2줄 짜리 코딩 부분을 반드시 복붙해야 "docker-compose build"할 때, "에러"가 발생하지 않는다.
XXX ubuntu@ip-172-31-47-xxx:~nginx$ sudo nano -c Dockerfile : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
ubuntu@ip-172-31-47-xxx:~nginx$ nano -c Dockerfile : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
FROM nginx:latest
COPY nginx.conf /etc/nginx/nginx.conf
COPY nginx-app.conf /etc/nginx/sites-available/
RUN mkdir -p /etc/nginx/sites-enabled/\
&& ln -s /etc/nginx/sites-available/nginx-app.conf /etc/nginx/sites-enabled/
****: 아래와 같이 한 줄로 쓰면, "docker-compose build"에서 에러 발생한다.
이렇게는 안 됨: RUN mkdir -p /etc/nginx/sites-enabled/ ln -s /etc/nginx/sites-available/nginx-app.conf /etc/nginx/sites-enabled/
CMD ["nginx", "-g", "daemon off;"]
=======================================================================================
****: ===> 만약 위 파일 "Dockerfile"에서 문제가 발생하여, 디버깅을 하기 위해서는,
마지막 라인 "CMD ["nginx", "-g", "daemon off;"]" 바로 위에,
"EXPOSE 80" 이것을 추가하고,
1. 먼저 이미지 파일 생성...
$ docker build -t docker-server/nginx . : 마지막에 "."이 있음에 주의.
2. 도커를 데몬 형태로 실행...
$ docker run -p -d 80:80 docker-server/nginx
3. "에러 부분"을 보기 위해서는, "데몬" 옵션을 빼고 실행...
$ docker run -p 80:80 docker-server/nginx
4. 도커 이미지 생성 확인 : "docker-server/nginx" 이미지 생성 확인한다...
$ docker image ls : 아래와 같이 "이미지 파일"을 확인할 수 있다...
REPOSITORY TAG IMAGE CREATED SIZE
docker-server/nginx latest 9379b94fa39c 4 seconds ago 132MB
5. 도커 실행 확인...
$ docker ps : 아래와 같이 뿌려지면 "도커 정상 실행"...
CONTAINER ID IMAGE COMMAND CREATED PORTS NAMES
a833e12d80f2 docker-server/nginx "/docker-entrypoint. " 1 second ago 0.0.0.0:80->80/tcp brave_banzai
6. AWS.EC2 80 포트 방화벽 확인하고, 브라우저에서, "ip"로 "nginx" 확인...
=======================================================================================
7. "docker-compose.yml" 파일 생성 :
****: "portfolio2023" 폴더와 "nginx" 폴더 상위에 만든다.
nginx:와 django: 두 개가 있는데 depends_on을 통해 django가 먼저 뜨고 nginx가 뜨게 되어있다는 점.
그리고 각각 volumes:에서 도커 안에 폴더와 서버의 폴더를 연동시켜주었다는 점
XXX ubuntu@ip-172-31-47-xxx:~nginx$ sudo nano -c docker-compose.yml : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
ubuntu@ip-172-31-47-xxx:~nginx$ nano -c docker-compose.yml : 반드시 "suto"를 뺀 "nano" 명령으로 파일 생성할 것.
version: '3'
services:
nginx:
container_name: nginx
build: ./nginx
image: portfolio2023/nginx:v1
restart: always
network_mode: "host"
ports:
- "80:80"
volumes:
- ./portfolio2023:/srv/portfolio2023
- ./log:/var/log/nginx
- ./portfolio2023/static/:/static
depends_on:
- django
django:
container_name: django
build: ./portfolio2023
image: portfolio2023/django:v1
restart: always
command: uwsgi --ini uwsgi.ini
volumes:
- ./portfolio2023:/srv/portfolio2023
- ./log:/var/log/uwsgi
8. "docker"와 "docker-compose" 설치 : "ubuntu 18.04"에는 "docker"와 "docker-compose"가 설치되어 있지 않다.
****: "docker" 설치
ubuntu@ip-172-31-47-xxx:~$ curl -fsSL https://get.docker.com/ | sudo sh
ubuntu@ip-172-31-47-xxx:~$ sudo usermod -aG docker $USER # 현재 접속중인 사용자에게 권한주기
ubuntu@ip-172-31-47-xxx:~$ docker : 한번 실행해 본다...
ubuntu@ip-172-31-47-xxx:~$ docker --version : 버전도 한번 확인해 본다...
****: 2번째 라인 실행 후 반드시, "putty" 재 접속해야 한다. 아래 "docker-compose"까지 설치하고, 재접속한다.
****: "docker-compose" 설치 : 한 줄씩 복붙한다.
ubuntu@ip-172-31-47-xxx:~$ sudo curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
ubuntu@ip-172-31-47-xxx:~$ sudo chmod +x /usr/local/bin/docker-compose
ubuntu@ip-172-31-47-xxx:~$ docker-compose : 한번 실행해 본다...
ubuntu@ip-172-31-47-xxx:~$ ls -rlt
total 12
drwxrwxr-x 7 ubuntu ubuntu 4096 Dec 29 21:41 portfolio2023
-rw-r--r-- 1 root root 667 Dec 29 21:58 docker-compose.yml
drwxrwxr-x 2 ubuntu ubuntu 4096 Jan 3 06:11 nginx
위와 같이 뿌려지면, 정상이다.
****: ubuntu@ip-172-31-47-xxx:~$ 요기, 즉 "docker-compose.yml" 파일이 있는 곳에서,
ubuntu@ip-172-31-47-xxx:~$ docker-compose build : 이렇게 실행하면, "에러"가 발생한다.
ERROR: Couldn't connect to Docker daemon at http+docker://localhost - is it running?
If it's at a non-standard location, specify the URL with the DOCKER_HOST environment variable.
여기서, "putty" 재 접속해야 한다.
9. docker-compose build
****:
ubuntu@ip-172-31-47-xxx:~$ ls -rlt : 반드시 아래와 같이 뿌려져야 한다.
total 12
drwxrwxr-x 7 ubuntu ubuntu 4096 Dec 29 21:41 portfolio2023
-rw-r--r-- 1 root root 667 Dec 29 21:58 docker-compose.yml
drwxrwxr-x 2 ubuntu ubuntu 4096 Jan 3 06:11 nginx
ubuntu@ip-172-31-47-xxx:~$ docker-compose build : 여기서 비로소 "nginx"랑 "django"랑 "docker.도커 이미지"를 빌드한다.
===> Conclusion:
1. "depends_on: django"로 인해, 반드시 "django"를 먼저 띄우고, "nginx"를 띄운다.
2. 처음 "docker-compose build"에서는 시간이 많이 소요되지만,
다음부터는 "docker"."cache" 기능으로, "수정된 부분"만 "필요한 부분"만 "build"하므로, 비교적 빠르게 빌드한다.
3. 빌드 에러
Step 4/5 : RUN mkdir -p /etc/nginx/sites-enabled/ln -s /etc/nginx/sites-available/nginx-app.conf /etc/nginx/sites-enabled/ e/nginx-app.conf /etc/nginx/sites-enabled/
---> Running in f048c827a08d
mkdir: invalid option -- 's'
Try 'mkdir --help' for more information.
ERROR: Service 'nginx' failed to build:
The command '/bin/sh -c mkdir -p /etc/nginx/sites-enabled/ln -s /etc/nginx/sites-available/nginx-app.conf /etc/nginx/sites-enabled/' returned a non-zero code: 1
===> 해결 방법:
RUN mkdir -p /etc/nginx/sites-enabled/\
&& ln -s /etc/nginx/sites-available/nginx-app.conf /etc/nginx/sites-enabled/
****: 아래와 같이 한 줄로 쓰면, "docker-compose build"에서 에러 발생한다.
이렇게는 안 됨: RUN mkdir -p /etc/nginx/sites-enabled/ ln -s /etc/nginx/sites-available/nginx-app.conf /etc/nginx/sites-enabled/
10. 빌드 후...
ubuntu@ip-172-31-47-xxx:~$ docker images : 아래와 같이 뿌려진다.
REPOSITORY TAG IMAGE ID CREATED SIZE
portfolio2023/nginx v1 c211f6a18a6a 45 seconds ago 142MB
portfolio2023/django v1 53cdc4ec04fd 22 minutes ago 952MB
nginx latest 1403e55ab369 12 days ago 142MB
python 3.7.9 65d5b6c539fd 23 months ago 877MB
===>
****: 여기서 위의 2개, "portfolio2023/nginx"와 "portfolio2023/django" 이미지를 띄우면 된다.
ubuntu@ip-172-31-47-xxx:~$ docker-compose up -d
11. docker.도커 정상 작동 상태 확인
ubuntu@ip-172-31-47-xxx:~$ docker-compose ps : 아래와 같이 뿌려진다.
Name Command State Ports
--------------------------------------------------------------
django uwsgi --ini uwsgi.ini Up 80/tcp
nginx /docker-entrypoint.sh ngin ... Restarting ****: ***** 엄청 주의 **** : 여기서 아래와 같은 에러가 계속
****: nginx /docker-entrypoint.sh ngin ... Up : 반드시 "Up"이 출력되어야 정상. 발생하면, ""$ sudo reboot"로
서버 재부팅 후 진행...
12. docker.도커 내리는 방법
ubuntu@ip-172-31-47-xxx:~$ docker-compose down
13. "nginx"가 남긴 로그 확인 : "nginx" => "uwsgi" => "django"
ubuntu@ip-172-31-47-xxx:~/log$ sudo nano -c access.log
ubuntu@ip-172-31-47-xxx:~/log$ sudo nano -c error.log
14. "uwsgi"가 남긴 로그 확인
****:
ubuntu@ip-172-31-47-xxx:~$ cd log
ubuntu@ip-172-31-47-xxx:~/log$ nano -c uwsgi.log
ubuntu@ip-172-31-47-xxx:~/log$ view + uwsgi.log
ubuntu@ip-172-31-47-xxx:~/log$ tail -f uwsgi.log
ubuntu@ip-172-31-47-xxx:~/log$ nano -c error.log
ubuntu@ip-172-31-47-xxx:~/log$ nano -c access.log
=========================================================================================================
=========================================================================================================
****: Conclusion.
1. django만 사용할 때...
domain => django runserver
2. nginx + uwsgi + django 사용할 때...
정적:
domain => nginx(web server) => static
동적:
domain => nginx(web server) => uwsgi => django app
=========================================================================================================
=========================================================================================================
'aws' 카테고리의 다른 글
[AWS] 💰 프리티어 요금 폭탄 방지 💸 - 무료 사용량 정리 (0) | 2023.08.17 |
---|---|
python django for aws ec2 (0) | 2023.01.02 |