bucket 폴더 안에 static, templates, app.py 만들기!
index.html, app.py 준비하기
POST, GET을 이용하기 전 DB 준비
요청 정보 : URL= /bucket
, 요청 방식 = POST
클라(ajax) → 서버(flask) : bucket
서버(flask) → 클라(ajax) : 메시지를 보냄 (기록 완료!)
단! 서버에서 한 가지 일을 더 한다.
→ 번호를 만들어 함께 넣어주는 것. 그래야 업데이트가 가능!
@app.route("/bucket", methods=["POST"])
def bucket_post():
sample_receive = request.form['sample_give']
print(sample_receive)
return jsonify({'msg': 'POST(기록) 연결 완료!'})
function save_bucket(){
$.ajax({
type: "POST",
url: "/bucket",
data: {sample_give:'데이터전송'},
success: function (response) {
alert(response["msg"])
}
});
}
<button onclick="save_bucket()" type="button" class="btn btn-outline-primary">기록하기</button>
count = list(db.bucket.find({},{'_id':False}))
num = len(count) + 1
vs
count = db.bucket.find({},{'_id':False}).count()
num = count + 1
@app.route("/bucket", methods=["POST"])
def bucket_post():
bucket_receive = request.form["bucket_give"]
count = db.bucket.find({},{'_id':False}).count()
num = count + 1
doc = {
'num':num,
'bucket': bucket_receive,
'done':0
}
db.bucket.insert_one(doc)
return jsonify({'msg':'등록 완료!'})
function save_bucket(){
let bucket = $('#bucket').val()
$.ajax({
type: "POST",
url: "/bucket",
data: {bucket_give:bucket},
success: function (response) {
alert(response["msg"])
window.location.reload()
}
});
}
요청 정보 : URL= /bucket
, 요청 방식 = GET
클라(ajax) → 서버(flask) : (없음)
서버(flask) → 클라(ajax) : 전체 버킷리스트를 보여주기
@app.route("/bucket", methods=["GET"])
def bucket_get():
return jsonify({'msg': 'GET 연결 완료!'})
$(document).ready(function () {
show_bucket();
});
function show_bucket(){
$.ajax({
type: "GET",
url: "/bucket",
data: {},
success: function (response) {
alert(response["msg"])
}
});
}
@app.route("/bucket", methods=["GET"])
def bucket_get():
buckets_list = list(db.bucket.find({},{'_id':False}))
return jsonify({'buckets':buckets_list})
function show_bucket(){
$('#bucket-list').empty()
$.ajax({
type: "GET",
url: "/bucket",
data: {},
success: function (response) {
let rows = response['buckets']
for (let i = 0; i < rows.length; i++) {
let bucket = rows[i]['bucket']
let num = rows[i]['num']
let done = rows[i]['done']
let temp_html = ``
if (done == 0) {
temp_html = `<li>
<h2>✅ ${bucket}</h2>
<buttontoken interpolation">${num})" type="button" class="btn btn-outline-primary">완료!</button>
</li>`
} else {
temp_html = `<li>
<h2 class="done">✅ ${bucket}</h2>
</li>`
}
$('#bucket-list').append(temp_html)
}
}
});
}
요청 정보 : URL= /bucket/done
, 요청 방식 = POST
클라(ajax) → 서버(flask) : num
(버킷 넘버)
서버(flask) → 클라(ajax) : 메시지를 보냄 (버킷 완료!)
@app.route("/bucket/done", methods=["POST"])
def bucket_done():
sample_receive = request.form['sample_give']
print(sample_receive)
return jsonify({'msg': 'POST(완료) 연결 완료!'})
function done_bucket(num){
$.ajax({
type: "POST",
url: "/bucket/done",
data: {sameple_give:'데이터전송'},
success: function (response) {
alert(response["msg"])
}
});
}
<button onclick="done_bucket(5)" type="button" class="btn btn-outline-primary">완료!</button>
@app.route("/bucket/done", methods=["POST"])
def bucket_done():
num_receive = request.form["num_give"]
db.bucket.update_one({'num': int(num_receive)}, {'$set': {'done': 1}})
return jsonify({'msg': '버킷 완료!'})
function done_bucket(num){
$.ajax({
type: "POST",
url: "/bucket/done",
data: {'num_give':num},
success: function (response) {
alert(response["msg"])
window.location.reload()
}
});
}
대상 인스턴스에 마우스 우클릭 후 인스턴스 상태를 '중지' 또는 '종료' 할 것
git bash를 실행하고, 아래를 입력한다!
ssh -i 받은키페어를끌어다놓기 ubuntu@AWS에적힌내아이피
ssh -i /path/my-key-pair.pem ubuntu@13.125.250.20
리눅스는 윈도우 같지 않아서,
'쉘 명령어'를 통해 OS를 조작한다 ( 마우스 역할 )
가장 많이 쓰는 몇 가지 명령어
ls: 내 위치의 모든 파일을 보여준다.
pwd: 내 위치(폴더의 경로)를 알려준다.
mkdir: 내 위치 아래에 폴더를 하나 만든다.
cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다.
cd .. : 나를 상위 폴더로 이동시킨다.
cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기
rm -rf [지울 것]: 지우기
sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다.
sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴)
서버 환경 통일하기 ( 구매한 컴퓨터 세팅 )
# python3 -> python
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
# pip3 -> pip
sudo apt-get update
sudo apt-get install -y python3-pip
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
# port forwarding
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
서버에 업로드 할 간단한 파일을 작성
파일질라 실행, 다음과 같이 설정
1) 파이썬(python3 -> python)
2) pip(pip3 -> pip)
pip3 설치
sudo apt-get update
sudo apt-get install -y python3-pip
pip3 명령어를 pip으로 사용할 수 있게 하는 명령어
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
한 줄 씩 복사 붙여넣기!
3) 포트포워딩(80포트 -> 5000포트)
1) 팬명록 완성본을 filezilla로 EC2에 업로드 하기
파일질라에서 homework 폴더 째로 드래그 드롭으로 EC2 인스턴스의 home/ubuntu 폴더에 업로드
실행 - python app.py
2) pip로 패키지 설치
3) 그 외 패키지들 설치
4) 다시 flask 서버 실행
서버 실행이 되면, 크롬에서 접속해보기
5) AWS에서 5000포트를 열어주기
EC2서버( 가상의 내 컴퓨터 )에서 포트를 따로 설정하는 것 외에도,
AWS EC2에서도 자체적으로 포트를 열고/닫을 수 있게 관리를 하고 있다.
--> 그래서 AWS EC2 Security Group에서 인바운드 요청 포트를 열어줘야 한다.
EC2 관리 콘솔로 들어간다. 그리고 보안그룹( 영문:Security Group )을 눌러 들어간다.
SSH 접속을 끊어도 서버가 계속 돌게 하기!
현재 상황
Git bash 또는 맥의 터미널을 종료하면 (=즉, SSH 접속을 끊으면) 프로세스가 종료되면서,
서버가 돌아가지 않고 있다.
원격 접속을 종료하더라도 서버가 계속 돌아가게 하기
nohup python app.py &
서버 종료하기 ( 강제종료하는 방법 )
ps -ef | grep 'python app.py' | awk '{print $2}' | xargs kill
도메인을 구매한다는 것은, 네임서버를 운영해주는 업체에, IP와 도메인 매칭유지비를 내는 것
한국 또는 글로벌 업체 어디든 상관 없지만, 우리는 한국의 '가비아'라는 회사에서 구입해본다.
http://내AWS아이피/ ---> http://내도메인/
og:image, og:title, og:description
meta property="og:title" content="내 사이트의 제목" />
meta property="og:description" content="보고 있는 페이지의 내용 요약" />
meta property="og:image" content="이미지URL" />