소프트웨어 변경 관리 시스템 중 가장 대표적인 시스템이다.
원하는 위치에서 git init 명령어를 실행해 저장소를 생성할 수 있다. 해당 디렉토리에 .git 디렉토리가 생성된다.
git status 명령은 브랜치, 변경 사항, 커밋 상황 등 현재 저장소의 여러 상태를 출력한다.
.git과 같은 디렉토리에 .gitignore 파일을 작성하여 관리하지 않을 대상을 명시할 수 있다.
git add <파일명> 명령어로 깃으로 관리할 파일을 추가할 수 있다. 완료 시 깃 스테이징 영역에 파일이 추가된다. 깃은 저장소에 변경 사항을 바로 저장하지 않고 스테이징 단계를 거친다. 스테이징은 변경 사항 중 저장하고 싶은 부분만 선택해서 저장소에 저장하기 직전 단계에 올려놓는 것이다.
git commit -m "커밋 내용" 명령어로 커밋할 수 있다. 커밋하기 위해선 이메일과 사용자명이 등록되어야하는데 아래 명령어로 설정할 수 있다.
git config --global user.email "이메일주소"
git config --global user.name "이름"
git diff 명령어로 코드의 변경 내역을 확인할 수 있다.
git restore <파일이름> 명령어로 코드의 변경 내역을 되돌릴 수 있다.
git log 명령어로 커밋한 이력을 확인할 수 있다.
git clone <원격저장소주소> <디렉토리이름> 명령어로 현재 위치의 디렉토리이름 안에 프로젝트를 가져온다.
git push 명령어로 원격 저장소에 변경을 업로드한다
git pull 명령어로 원격 저장소의 소스를 가져와 병합한다
여럿이 프로젝트를 진행하거나 코드 유실을 방지하려면 원격 저장소가 필요하다. 깃허브는 대표적인 깃을 지원하는 원격 저장소이다.
git remote add origin <원격 저장소 URL>
git push -u origin master
AWS 서비스 중 웹 서비스 운영에 꼭 필요한 기능만 갖춘 서비스
1) 라이트세일 홈페이지의 인스턴스 탭에서 인스턴스 생성을 클릭한다
2) 인스턴스 이미지 옵션 중 선택한다
3) 인스턴스 플랜을 선택한다
4) 인스턴스 이름을 정하고 생성 완료한다
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
원하는 프로젝트 디렉토리에서 아래를 실행한다
mkdir venvs
cd venvs
python3 -m venv myproject
cd myproject/bin
. activate
pip3 install wheel
AWS 라이트세일 홈페이지의 네트워킹 탭에서 고정 IP를 생성할 수 있다. 플라스크 서버로 외부에서 접속하려면 5000번 포트를 사용하기 때문에 네트워킹 탭에서 방화벽 규칙에 포트 5000을 추가해 방화벽을 개방해줘야한다.
AWS 웹터미널 대신 다른 터미널을 사용하려면 ssh 접속을 해야한다
1) 비밀키 내려받고 이름 변경하기
2) ssh -i <비밀키path> <user_name>@<고정IP>
Gunicorn은 웹서버와 WSGI 애플리케이션 사이에서 동적 페이지 요청을 처리하는 WSGI 서버이다
pip3 install gunicorn
# 프로젝트 디렉토리에서
gunicorn --bind 0:5000 "pybo:create_app()"
# 유닉스 소켓 사용하기
gunicorn --bind unix:/tmp/myproject.sock "pybo:create_app()"
유닉스 소켓을 사용하면 더 빠르고 효율적으로 서비스할 수 있다. 하지만 단독으로 Gunicorn 서버에 접속할 수 없기 때문에 웹 서버에서 유닉스 소켓으로 WSGI 서버에 접속하도록 설정해야한다
Gunicorn을 서비스로 등록해 AWS 서버 시작시 자동으로 실행할 수 있다.
1) 환경 변수 파일
# myproject.env
FLASK_APP=pybo
FLASK_ENV=development
APP_CONFIG_FILE=/home/ubuntu/projects/myproejct/config/production.py
2) 서비스 파일
# /etc/systemd/system/ 디렉터리에 myproject.service
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/projects/myproject
EnvironmentFile=/home/ubuntu/vevns/myproject.env
ExecStart=/home/ubuntu/venvs/myproject/bin/gunicorn \
--workers 2 \ # Gunicorn 프로세스 2개 사용
--bind unix:/tmp/myproject.sock \
"pybo:create_app()"
[Install]
WantedBy=multi-user.target
3) 서비스 실행 및 등록
sudo systemctl start myproject.service
4) AWS 서버 시작시 자동 실행
sudo systemctl enable myproject.service
sudo apt install nginx
# /etc/nginx/sites-available/myproject
server {
# http 기본 포트로 서비스 설정
listen 80;
server_name <서버 고정 IP>;
location = /favicon.ico { access_log off; log_not_found off; }
# /static 요청은 Nginx가 처리
location /static {
alias /home/ubuntu/projects/myproject/pybo/static;
}
# /static 이외 요청은 Gunicorn이 처리
location / {
include proxy_params;
proxy_pass http://unix:/tmp/myproject.sock;
}
}
# /etc/nginx/sites-enabled/ 에서
sudo rm default
sudo ln -s /etc/nginx/sites-available/myproject
sudo systemctl restart nginx
sudo nginx -t # 설정 파일 오류 확인