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 편집.
  • 편집 전
  • <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

    좋은 웹페이지 즐겨찾기