1. pycharm으로 프로젝트를 생성하여 개발을 하였다.
개발을 완료한 후, nas에서 실행할 것이므로, 경로, 네트워크 등 설정을 변경했다. ex) localhost, 상대경로 ./
NAS에 Docker를 설치했다
한마디로 요약하자면, 아래의 과정은 내 프로젝트를 Docker 라는 프로그램을 통하여 build 해가지고, docker로 run 시키는 거다.
2. 프로젝트 폴더에 Dockerfile 생성: 프로젝트의 루트 디렉토리에 Dockerfile이라는 파일을 생성하고 아래 내용을 복사 붙여넣기하세요.
★
FROM python:3.9
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
★
여기서 프로젝트 폴더라 함은,
"프로젝트 폴더"란, 프로젝트의 모든 소스 코드 파일, 설정 파일 및 관련 리소스를 포함하고 있는 디렉토리를 의미합니다.
예를 들어, 여러분이 작성한 testapp 프로젝트의 경우, 아래와 같은 구조를 가지고 있을 것입니다:
testapp/
├── app.py
├── templates/
│ ├── index.html
│ └── ...
└── ...
위 예시에서, testapp 디렉토리가 프로젝트 폴더를 나타냅니다. 이 폴더 안에는 애플리케이션 코드(app.py), 템플릿 파일(templates 폴더) 등이 포함되어 있습니다.
프로젝트 폴더를 찾으려면, 코드 편집기(PyCharm)에서 파일 탐색기를 통해 프로젝트의 루트 디렉토리를 찾을 수 있습니다. 파일 탐색기에서 프로젝트의 루트 디렉토리를 찾아, 그곳에 Dockerfile과 requirements.txt 파일을 생성하고 작성하시면 됩니다.
requirements.txt 파일 생성: 프로젝트에 사용된 패키지와 버전 정보를 requirements.txt 파일에 기록합니다. 프로젝트 폴더에 requirements.txt 파일을 생성하고 다음 내용을 추가하세요.
Flask==2.1.1
requests==2.26.0
Docker 이미지 빌드: 터미널을 열고 프로젝트 폴더로 이동한 다음 아래 명령어를 실행하세요. 이 명령어는 Docker 이미지를 빌드하고 이름을 지정합니다(testapp_project는 원하는 이름으로 변경할 수 있습니다).
sudo docker build -t testapp .
sudo docker run -it -p 8023:8023 testapp ( -it 옵션을 통해서 로그를 꼭 확인하라 )
★★
제대로 실행됐다면, aaa.synology.me:8023 으로 접속하면 원하는 결과(index.html) 이 나와야 한다.
만약, 제대로된 결과가 나오지 않고 페이지 연결이 refused 된다거나 하면, 다음을 확인해보라.
지금의 경우 이렇게 해결했다.
자꾸 서버 기동시 뜨는 로그
Running on http://127.0.0.1:5000 이게 자꾸 눈에 밟히는거다.
검색을 해보니 이거는 Flask 내부 로그라서 상관없다고 한다. chatGPT 말을 맹신했다.
괜한 포트포워딩, NAS의 방화벽 해제, 별짓을 다해봤다. DDNS로 접속, IP로 접속 등등
결론★★★
app.py _main__ 에서
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7000)
Flask 어플리케이션을 수정하십시오.
Flask 어플리케이션에서, app.run()을 호출할 때 호스트를 명시적으로 설정해 주세요. 기본값은 127.0.0.1(localhost)이기 때문에, 외부에서 접속이 제한됩니다.
호스트를 0.0.0.0으로 설정하여 모든 IP 주소에서 접속이 가능하도록 변경하십시오.
즉, 저부분을 수정하지 않으면, 127.0.0.1:5000 으로밖에 접속이 제한되는거다. 즉, 로컬호스트에서밖에 안됨.
★★
마지막으로, 지금 실행한 Docker 이미지를, 터미널이 종료되어도 실행하고 싶다면 즉, 백그라운드에서 동작하게 하려면 실행시
아래와 같이 실행해야 한다.
sudo docker run -d -p 8023:8023 testapp
-it 옵션은 터미널 종료시 서버도 종료된다.
-d 옵션은 터미널을 종료해도 백그라운드에서 동작한다.
컨테이너를 중지하려면 먼저 컨테이너 ID를 확인한 다음 docker stop 명령을 사용합니다.
컨테이너 ID를 확인하려면 다음 명령을 사용하세요:
sudo docker ps
sudo docker stop [container_id]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79a157100aff testapp "python app.py" 11 minutes ago Up 11 minutes 0.0.0.0:8023->8023/tcp busy_germain
de8eadff11b0 ubuntu:latest "/bin/bash" 4 hours ago Up 4 hours ubuntu1
c93a4da14d86 wnameless/oracle-xe-11g-r2:latest "/bin/sh -c '/usr/sb…" 3 years ago Up 3 months 0.0.0.0:1521->1521/tcp, 0.0.0.0:49154->22/tcp, 0.0.0.0:49153->8080/tcp wnameless-oracle-xe-11g-r21
'IT' 카테고리의 다른 글
백엔드와 프론트엔드 분리 (0) | 2023.07.12 |
---|---|
소나큐브(SonarQube)에 대하여 (0) | 2023.06.15 |
샤오미 미밴드...업그레이드 미밴드 (0) | 2017.04.19 |
블루투스 이어폰 GBH-S3300 모비프렌 제품을 구매하다 (0) | 2016.05.10 |
아이폰 블루투스이어폰 연결문제(버퍼링 등) (0) | 2016.04.21 |