dockerfile을 github public일때만 정상적으로 빌드할 수 있다.
그래서 private일때도 빌드할 수 있게 설정하자.
ec2에서 깃 클론을 받으면, 이렇게 뜨는데 물론 rsa 키를 등록하지 않아도 아이디, 토큰 등록으로 private repo에서 클론이 가능하다.
근데, docker에서 rsa 를 통해 클론할 방법이 있으니 해보자.
ssh-keygen -t rsa -b 4096 -C "jihoon1234@gmail.com"
rsa 키를 제너레이트하는데, 비트 수가 4096이라는 뜻이다.(default=2048)
그리고 이메일 주소를 넣어준다.
EEnter file in which to save the key (/home/ubuntu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
어디에 저장할건지, 추가적인 암호화를 할건지, 하라는데 다 엔터 누르고 넘어갔다.
Your identification has been saved in /home/ubuntu/.ssh/id_rsa
Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub
The key fingerprint is:
성공하면 이렇게 뜬다.
cd .ssh/
쳐서 디렉토리로 들어가면
authorized_keys id_rsa id_rsa.pub
파일이 생성되어있다.
id_rsa.pub
: 공개키 -> 이걸 github에 넣어야함
id_rsa
: 개인키
cat id_rsa.pub
이 명령어로 텍스트를 출력하고 그 출력된 것을 깃헙에 등록한다.
그럼 이제 텍스트를 넣어준다.
그럼 ssh key 등록이 완료되었다.
git clone 복붙
하면 되는데, 이것도
are you sure you want to continue connecting?
이 뜬다.
이것도 안하려고 이걸 하는거니까. 추가할 것이 있다.
touch /home/ubuntu/.ssh/known_hosts
ssh-keyscan github.com >> /home/ubuntu/.ssh/known_hosts
우선 해당 디렉토리에 파일을 만들거라는 뜻이다.
keyscan으로 복사를 해와서 해당 디렉토리에 넣어준다는 뜻이다.
cat ~/.ssh/known_hosts
cat : 출력 명령어
~/. : home에서 하나 들어간 디렉토리 위치
git clone ssh 주소
이제 그럼 아무 묻는것 없이 바로 클론이 된다.
이걸 도커파일 안에 작성해줄 것이다.
파일질라로 도커파일을 넣어준다.
도커파일은 아래와 같이 수정했다.
# 파이썬 이미지 다운로드
FROM python:3.9.0
# github private ssh 접속 / docker는 root, aws ec2는 ubuntu 서로 다름
RUN mkdir /root/.ssh/
# 호스트의 파일을 안에 복사함
# 앞 : 호스트 서버의 경로 / 뒤: 컨테이너 안의 경로
# 이미지를 가지는 사람은 private key 또한 입수가 가능함
ADD ./.ssh/id_rsa /root/.ssh/id_rsa
# 권한설정 추가 : 소유자에만 읽기쓰기 권한을 주는것으로 변경한거
RUN chmod 600 /root/.ssh/id_rsa
# 디렉토리를 만들고
RUN touch /root/.ssh/known_hosts
# 복사하는 과정 추가
RUN ssh-keyscan gihub.com >> /root/.ssh/known_hosts
WORKDIR /home/
# 캐시된 데이터를 변경사항 추가해줌 - 의미없는 명령어임
RUN echo "testing1111"
# 깃 저장소와 파일 디렉토리 이름이 같아야 쉬움
RUN git clone ssh 클론주소
# root 위치 , pragmatic : 깃헙 repo 이름
WORKDIR /home/pragmatic/
# 라이브러리 다 설치 -> 컨테이너 안이니까 가상환경 불필요
RUN pip install -r requirements.txt
RUN pip install gunicorn
# 우분투는 mysql이 없으니까 추가로 설치해줘야함
RUN pip install mysqlclient
# 서버 포트 주소
EXPOSE 8000
# 런서버
# CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
# CMD ["gunicorn", "프로젝트명.wsgi", "--bind", "0.0.0.0:8000"]
# 마이그레이트와 런서버를 동시에 돌리게.
# manage.py가 local로 되어있는데, local -> deploy로 바꾸는 역할도 동시에 함 and gunicorn도 deploy 설정 추가해줘야함
# 세팅을 항상 deploy로 해줘야함
CMD ["bash", "-c", "python manage.py collectstatic --noinput --settings=프로젝트명.settings.deploy && python manage.py migrate --settings=프로젝트명.settings.deploy && gunicorn 프로젝트명.wsgi --env DJANGO_SETTINGS_MODULE=프로젝트명.settings.deploy --bind 0.0.0.0:8000"]
그럼 이제 ubuntu에서 실행한다
sudo docker image build -t django_test_image:6 .
관리자명령어로 이미지를 빌드한다.
6번 이미지를 새로 만들어주었다.
Sending build context to Docker daemon 26.34MB
Step 1/15 : FROM python:3.9.0
---> 0affb4652fc0
Step 2/15 : RUN mkdir /root/.ssh/
ssh를 통해 자동으로 빌드가 되는것을 알 수 있다.
admin createsuperuser 만들기
방법1. portainer로 접속
portainer 컨테이너에서 >_ 버튼을 누른다.
python manage.py createsuperuser --settings=프로젝트명.settings.deploy
방법2
.pem 파일 있는곳에서 ssh -i .pem ubuntu@ip주소
로그인해서 해당 디렉토리로 이동
거기서
python manage.py createsuperuser --settings=프로젝트명.settings.deploy
로 admin 계정 생성하면 됨
끝