728x90 반응형 docker11 [Tip] DB server: Postgres:13 자동설정 클라우드에서 인스턴스로 서버르 리눅스 서버를 하나 열고 그 위에 Docker 를 이용하여 PostgreSQL 컨테이너를 하나 돌리면서 요금이 많이 나오는 스토리지 서버를 임시로 대신하게 한다. 인스턴스 생성 이후 deploy 스크립트 실행 # deploydb.sh #!/bin/bash sudo apt-get update && upgrade # lion 유저를 sudo 그룹에 추가 sudo usermod -aG sudo lion echo "lion 사용자가 sudo 그룹에 추가되었습니다." sudo apt-get install -y ca-certificates curl gnupg lsb-release curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/dock.. Dev./Basic knowledge 2023. 9. 1. [Tip] 인스턴스 권한 자동설정 (feat. docker) 클라우드 플랫폼을 통해서 인스턴스를 생성하면 인스턴스에 root 계정과, init script 로 만든 유저가 하나 생성된다. # init script sample #!/bin/bash # set variables NEW_USER_ID="lion" PASSWORD="abcd" # user creations echo "Creating new user" useradd -s /bin/bash -d /home/$NEW_USER_ID -m $NEW_USER_ID # password change echo "Set password" echo "$NEW_USER_ID:$PASSWORD" | chpasswd # user auth echo "Update authorization" echo "$NEW_USER_ID ALL=.. Dev./Basic knowledge 2023. 8. 31. [Cloud] 배포 - NCP : 클라우드 서버에서 DB 띄우기 그러나.. 상당히 비싼 DB 인스턴스 요금 그래서 간단한 프로젝트의 경우 일반 클라우드 서버를 열어서 db 컨테이너 띄워 기능을 대체한다. 새로운 서버를 열고 로컬에서 가상환경 접속 설정 변경 후 vi ~/.ssh/config # ssh/config 파일 수정 Host lion-db HostName ... User lion ... docker 를 가상환경에서 설치를 시작 # 최초 업데이트 sudo apt-get update && upgrade # apt 가 HTTPS 를 통해 repository 를 이용하는 것을 허용하는 패키지들 sudo apt-get install -y ca-certificates curl gnupg lsb-release # Docker 공식 GPG 키 추가 curl -fsSL | s.. Dev./Cloud 2023. 8. 14. [Cloud] 배포 - NCP : 클라우드 서버에 올리기 클라우드 서버로 띄우려면 기존 코드에서 환경설정을 바꿔주어야 한다. 환경변수를 위한 패키지로 os 를 사용한다. import os ... LOCAL_IP = os.getenv('LOCAL_IP', '') ALLOWED_HOSTS = [ "localhost", "127.0.0.1", LOCAL_IP, ] CSRF_TRUSTED_ORIGINS = [ "", f"http://{LOCAL_IP:8888}", ] prod.env (docker-compose.yml 파일과 같은 경로) LOCAL_IP={IP주소} django.nginx # 사실상 도메인 정보를 넣어두기 때문에 환경변수로 다루는게 좀 억지이긴 하지만 그래도 개발단계에서~ # 실제로는 파일을 수정하지 않고 Docker.nginx_ubt 로 수정한다. .. Dev./Cloud 2023. 8. 13. [Cloud] 배포 - NCP : docker 로 배포 도커파일에서 실행하던 런 코드를 스크립트 파일로 바꾼다. 스크립트 파일의 경로를 한번에 scripts 로 정리하고 새롭게 start 파일로 작성한다. 경로에 민갑하기 때문에 최상위 경로에 하나 만들어주고 lion_app (manage.py 가 있는) 에 하나 더 만들어서 구분지어 준다. FROM python:3.11-alpine LABEL likelion.web.backendauthor="Ivan kim " ... COPY ./scripts/start /start RUN sed -i 's/\\r$//g' /start # \\r : 캐리지 리턴 RUN chmod +x /start # RUN python3 manage.py migrate -> start 스크립트로 대체 RUN if [ -e /var/www/.. Dev./Cloud 2023. 8. 13. [Cloud] 배포 - Docker : 장고 기본 css 파일 매핑 현재 nginx 로 들어오는 요청을 장고 서버포트로 보내주는데 스태틱 파일은 다른데로 보내주게 설정한다. server { listen 80; # server_name http 223.130.133.96; server_name localhost; location / { # 아래의 코드로는 nginx가 실행된 컨테이너의 주소로 보내기 때문에 Bad request 가 뜬다. # proxy_pass ; # 그래서 lion-app 즉 장고가 떠있는 컨테이너의 8000포트로 프록시 패스로 넣어주어야 한다. proxy_pass ; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static/ { alias /var/ww.. Dev./Docker 2023. 8. 12. [Cloud] 배포 - Docker : docker-compose.yml docker-compose.yml 파일은 여러 컨테이너를 함께 정의하고 관리하기 위한 도구 해당 파일을 사용하면 여러 컨테이너, 네트워크, 볼륨 등을 한번에 정의하고 실행할 수 있다. version : 사용하는 docker compose 파일의 버전 services : 실행할 컨테이너의 목록과 설정 networks : 사용할 네트워크의 정의 volumes : 사용할 볼륨의 정의 # docker-compose 파일의 버전을 명시 version: "3" services: # 서비스들의 시작 # 앱 설정 lion-app: container_name: lion-app-dc build: context: lion_app dockerfile: Dockerfile # 사용할 도커 파일의 이름 image: lion-ap.. Dev./Docker 2023. 8. 12. [Cloud] 배포 - Docker : Dockerfile - Django Dockerfile 로 장고 서버를 띄워보자 FROM python:3.11-alpine ARG APP_HOME=/app # 파이썬이 표준출력과 표준에러출력을 버퍼링 하지 않도록 설정 ENV PYTHONUNBUFFERED 1 # 파이썬이 .pyc 바이트코드파일을 작성하지 않도록 설정 ENV PYTHONDONTWRITEBYTECODE 1 WORKDIR ${APP_HOME} # 패키지들은 자주 바뀌지 않기 때문에 인스톨을 따로 가져가는게 좋다. # 만약 전체 카피로만 requirements 를 가져오게 되면 코드가 수정되었을 때 # 다시 인스톨을 해줘야하는 일이 발생하기 때문에 따로 이미지 레이어를 쌓아준다. COPY ./requirements.txt ./ RUN pip install --no-cache-di.. Dev./Docker 2023. 8. 11. [Cloud] 배포 - Docker : Volume Docker volume 컨테이너 위에 있는 데이터는 일시적 데이터이기 때문에 볼륨 맵핑을 통해 영구적으로 데이터를 보존할 수 있게 한다. 뿐만아니라 컨테이너간 데이터의 공유가 필요할 때에도 볼륨을 사용하여 데이터를 주고 받을 수 있다. 로컬 파일 시스템과 도커 파일 시스템을 연결하기 docker run -v /home/lion/mydata:/data -it --name lion-v lion:0.3 /bin/bash 💡 로컬 파일 시스템 경로 /home/lion/mydata 와 도커에서 /data 를 맵핑하면서 lion-v 라는 이름으로 lion 이미지 에 0.3 태그 로 이미지를 만들어 접속하겠다 텍스트 파일을 각각의 경로에서 생성한뒤에 체크해보면 ? # local - /home/lion/mydata .. Dev./Docker 2023. 8. 10. [Cloud] 배포 - Docker : Dockerhub 도커 허브라고 들어봤는가? 도커 이미지를 띄워두고 마치 깃허브처럼 받아서 쓸 수 있게 해놓은 공간이다. public 으로 레파지토리를 생성해둔다. 이후 콘솔에서 docker images lion@likelion:~/dev_django_app$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE lion 0.3 3c97009ef945 2 hours ago 236MB lion 0.2 addb2ef0fbf6 3 hours ago 176MB lion 0.1 da34d62d6cc1 3 hours ago 176MB ... Tag 를 확인하고 새롭게 도커 허브를 위한 태그를 생성해준다. docker image tage lion:0.2 lion:0.2 ivaninitworld/l.. Dev./Docker 2023. 8. 7. [Cloud] 배포 - Docker : Dockerfile Dockerfile 은 Docker 를 사용하여 컨테이너 이미지를 빌드하는데 사용되는 파일이다. FROM ubuntu:22.04 LABEL likelion.web.backendauthor="Ivan Kim " RUN apt-get update RUN apt-get install -y nginx RUN echo "\\ndaemon off;" >> /etc/nginx/nginx.conf RUN chown -R www-data:www-data /var/lib/nginx VOLUME [ "/data", "/etc/nginx/sites-enabled", "/var/log/nginx" ] WORKDIR /etc/nginx CMD [ "nginx" ] EXPOSE 80 EXPOSE 443 FROM ubuntu:22... Dev./Docker 2023. 8. 6. 이전 1 다음 728x90 반응형