AWS 공식 문서 "Amazon ECS에서 Docker의 기본"을 참조하여 Docker로 웹 서버를 구축해 보았습니다.
처음에
ECS는 쓰지 않습니다. 초보자 엔지니어의 비망록입니다.
준비
공식 문서에 있는 Dockerfile(ubuntu 이미지)를 사용한다.
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마조네 CS / ㄱ st / ゔ ぇぺぺ ぐいで / ど c け ー ばし cs. HTML
이 Dockerfile에 python3 설치를 추가합니다.
RUN apt-get update && \
apt-get -y install apache2 && \
apt-get -y install python3
HTML 파일 준비
/var/www/html/index.html
index.html<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
</head>
<body>
<input id="plane" type="text" value="">
<input id="button" type="button" value="button">
<p id="string"></p>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script>
$(function(){
$("#button").click(
function() {
var plane = document.getElementById("plane").value;
$.ajax({
url: "./test.py",
type: "post",
data: {data: plane},
success: function(data) {
document.getElementById("string").innerText = data;
},
error: function(data) {
alert("failed");
}
});
}
);
});
</script>
</body>
</html>
파이썬 파일 준비
/var/www/html/test.py
test.py#!/usr/bin/python3
# -*- coding: utf-8 -*-
import cgi
storage = cgi.FieldStorage()
data = storage.getvalue('data')
print('Content-Type: text/html\n')
print(data)
Apache2 설정
공식 거리 빌드 런
docker build -t hello-world .
docker run --name hello -it -p 80:80 hello-world
브라우저 액세스
Ctrl
+ P
+ Q
에서 빠진 뒤, 다시 넣는다.
docker exec -it hello /bin/bash
/etc/apache2/apache2.conf 편집.
공식 문서에 있는 Dockerfile(ubuntu 이미지)를 사용한다.
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마조네 CS / ㄱ st / ゔ ぇぺぺ ぐいで / ど c け ー ばし cs. HTML
이 Dockerfile에 python3 설치를 추가합니다.
RUN apt-get update && \
apt-get -y install apache2 && \
apt-get -y install python3
HTML 파일 준비
/var/www/html/index.html
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>index</title>
</head>
<body>
<input id="plane" type="text" value="">
<input id="button" type="button" value="button">
<p id="string"></p>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script>
$(function(){
$("#button").click(
function() {
var plane = document.getElementById("plane").value;
$.ajax({
url: "./test.py",
type: "post",
data: {data: plane},
success: function(data) {
document.getElementById("string").innerText = data;
},
error: function(data) {
alert("failed");
}
});
}
);
});
</script>
</body>
</html>
파이썬 파일 준비
/var/www/html/test.py
test.py
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import cgi
storage = cgi.FieldStorage()
data = storage.getvalue('data')
print('Content-Type: text/html\n')
print(data)
Apache2 설정
공식 거리 빌드 런
docker build -t hello-world .
docker run --name hello -it -p 80:80 hello-world
브라우저 액세스
Ctrl
+ P
+ Q
에서 빠진 뒤, 다시 넣는다.
docker exec -it hello /bin/bash
/etc/apache2/apache2.conf 편집.
docker build -t hello-world .
docker run --name hello -it -p 80:80 hello-world
docker exec -it hello /bin/bash
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks ExecCGI
AllowOverride None
Require all granted
AddHandler cgi-script .cgi .py
</Directory>
test.py의 권한을 푼다.
chmod 777 /var/www/html/test.py
cgi 활성화, 재부팅.
a2enmod cgid
service apache2 restart
일단 컨테이너는 정지하기 때문에 재기동.
docker restart hello
다시 브라우저 액세스
감상
처음에는/etc/apache2/conf-available/serve-cgi-bin.conf를 편집했습니다. 아래 코드의 코멘트 아웃 부분이지만, 코멘트 아웃해도 움직이고 있다. cgi 활성화와/etc/apache2/apache2.conf가 cgi를 움직이는 포인트라고 생각하지만 그 구조는 이해하지 못한다. 이런 곳도 재미있을 것 같아서 알아보고 싶다.
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
# AddHandler cgi-script .cgi .py
# AddType text/html .shtml .html .htm
</Directory>
</IfDefine>
</IfModule>
test.py의 권한이지만, 이것을 풀 필요가 있다고 깨달은 것은 로그를 봤기 때문이었다. 그때까지 Chrome의 DevTools 콘솔 로그 오류를 볼 수 있었기 때문에 잠시 빠졌습니다. 로그는 ls/var/log/apache2/에 있다.
참고 기사
AWS 공식 문서
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마조네 CS / ㅁ st / ゔ ぇぺぺ ぐいで / ど c け r ばし cs. HTML
Apache2 : CGI 스크립트 사용
htps //w w. 세 rゔぇr-rld.んふぉ/쿠에 ry? s = 우분 _20.04 & p = ht tpd & f = 5
Ajax에서 Python에서 데이터를받을 때까지
htps : //에서. 코m/칸켄/응/응91fc3b1d9d98
Reference
이 문제에 관하여(AWS 공식 문서 "Amazon ECS에서 Docker의 기본"을 참조하여 Docker로 웹 서버를 구축해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/quryu/items/4b2e4a988ceccb73034f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
# AddHandler cgi-script .cgi .py
# AddType text/html .shtml .html .htm
</Directory>
</IfDefine>
</IfModule>
AWS 공식 문서
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아마조네 CS / ㅁ st / ゔ ぇぺぺ ぐいで / ど c け r ばし cs. HTML
Apache2 : CGI 스크립트 사용
htps //w w. 세 rゔぇr-rld.んふぉ/쿠에 ry? s = 우분 _20.04 & p = ht tpd & f = 5
Ajax에서 Python에서 데이터를받을 때까지
htps : //에서. 코m/칸켄/응/응91fc3b1d9d98
Reference
이 문제에 관하여(AWS 공식 문서 "Amazon ECS에서 Docker의 기본"을 참조하여 Docker로 웹 서버를 구축해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/quryu/items/4b2e4a988ceccb73034f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)