on
Linux 서버에서 Apache + flask(플라스크) 배포 방법
Linux 서버에서 Apache + flask(플라스크) 배포 방법
반응형
아파치와 함께 실행할 Flask 애플리케이션을 배포하는 방법에 대한 많은 튜토리얼을 온라인에서 찾았고, 그 중 많은 것에 잘못된 보안 관행이 포함되어 있다는 것을 알게 되어 이 기사를 쓰고 싶었습니다.
특히, 많은 튜토리얼은 사이트 디렉토리와 홈 디렉토리 사이에 심볼릭 링크를 만들었는데, 이것은 실제로 할 필요가 없습니다.
아파치와 함께 배치하는 것은 꽤 안절부절못할 수 있기 때문에 종종 지름길을 택하는 경향이 있다고 생각합니다. 하지만 말할 필요도 없이, 이것은 나쁜 생각이에요! Linux 서버에서 사용 권한을 지정하는 것은 실제로 매우 쉽습니다. 필요한 명령의 구문을 잘 모르더라도 마찬가지입니다.
이 기사에서 다루고자 하는 것이 바로 Plask 애플리케이션을 Apache에서 안전하게 실행시켜 계정 권한에 대한 사이버 보안의 기본을 확립하는 방법입니다.
개요
우리의 할 일 목록은 이렇습니다. 좀 길긴 하지만 아쉽게도 그게 이 쿠키가 부스러기가 되는 방식이야. 그러나 매우 강력한 설정이기 때문에 일단 모든 작업을 실행하고 나면 이 작업의 대부분을 다시 수행할 필요가 없으며 디버깅하기가 매우 간단합니다.
아파치를 설치합니다.
서버에 코드를 입력하세요.
프로그램에 대한 파이썬 가상 환경을 만들고 프로그램을 실행할 수 있는지 확인합니다.
웹 서버 게이트웨이 인터페이스(WSGI) 파일을 구성합니다. Flask 응용프로그램이 Apache와 대화하는 방법입니다.
사이트에 대한 Apache 구성을 설정합니다.
웹 응용 프로그램의 여러 부분에 대한 읽기/쓰기/실행 권한을 신중하게 정의하고 Apache 사용자 그룹을 사용하십시오.
SSL 구성을 설정한 후 HTTPS 연결을 적용합니다.
프로세스의 일부 단계에서 이것이 잘못되는 불가피한 경우, 미친 상태로 가지 말고 디버깅하십시오.
아파치 설치
sudo apt-get install apache2를 누른 다음 sudo apt-get install libapache2-mod-wsgi-py3를 누릅니다.
사이트의 URL로 이동합니다. Apache가 올바르게 설치된 경우 이 페이지를 볼 수 있습니다.
지금까지는, 아주 간단합니다.
코드 가져오기
다음 단계는 GitHub 저장소에서 서버로 코드를 가져오는 것입니다. 이렇게 하려면 Apache 구성에 일반적으로 사용되는 디렉토리로 이동하십시오.
cd /var/www/html를 누른 다음 sudo git clone <사용자 리포지토리 url>을 누릅니다.
모든 것이 잘 된다면, 당신의 코드는 지금 서버에 있을 것이다. 이 시점에서 분기가 올바른지 확인하려면 Git 분기를 누를 수 있습니다.
Python 가상 환경 만들기
애플리케이션에 대해 특정 가상 환경을 사용하는 것이 좋습니다. 프로젝트 종속성을 보다 명확하게 관리하고 설정을 더욱 확장하도록 지원합니다. 예를 들어 다른 웹 사이트를 추가하려면 해당 사이트에 포함된 다른 가상 환경을 만들면 됩니다.
이렇게 하는 데는 장점이 있는 여러 가지 방법이 있습니다. 여기서 자세히 설명하지는 않겠지만, 서버 환경에서 사용할 수 있는 파이썬 버전을 고려해야 할 것 같습니다. 예를 들어 파이썬 3.6이 사용 가능한 최신 버전이라면 로컬 개발 환경에서도 3.6을 사용하는지 확인하기 위해 pyenv 사용을 고려해야 합니다.
여기서 확인하고자 하는 주요 사항은 개발 환경에서 서버와 동일한 파이썬 버전을 사용해야 한다는 것입니다. 그렇지 않으면 배포 시 재미없는 오류가 발생할 수 있습니다.
이를 염두에 두고, 여기 서버에 있는 시스템 파이썬으로 환경을 만드는 아주 간단한 방법이 있습니다. 먼저 사이트 cd /var/www/html/your_site_name이 들어 있는 디렉토리로 전환합니다. 그런 다음 python3 -m ven your_site_environment를 누릅니다.
프로젝트 코드에는 요구 사항이 포함되어 있는 것이 이상적입니다.모든 프로젝트 종속성을 포함하는 txt 파일입니다. 그렇지 않으면 pip freeze > requireds를 작성하면 이것을 쉽게 만들 수 있다.로컬 개발 환경에서 txt를 사용하여 프로젝트 저장소에 추가할 수 있습니다.
그런 다음 source/your_site_environment/bin/activate를 눌러 파이썬 환경을 활성화할 수 있습니다. 어떤 파이썬을 실행했는지 확인합니다. 방금 만든 가상 환경에서 파이썬 실행 파일을 가리켜야 합니다. 실행 파일에 대한 절대 경로(예: /var/www/html/your_site_name/your_site_environment/bin/python3)로 파이썬을 실행할 수 있습니다.
어쨌든, 다음 단계는 ip install -r 요구 사항에 따라 종속성을 설치하는 것입니다.txt를 누른 다음 앱을 실행해 보십시오. 이를 수행하는 방법은 앱의 정확한 구성에 따라 다르지만, 아마도 Python app.py 또는 Python run.py for Flask 애플리케이션과 같은 것일 것이다. 여기서 여러분이 보고자 하는 것은 오류 메시지 없이 개발 서버를 회전시킨다는 것입니다. 이렇게 하면 파이썬 환경에 앱을 실행하는 데 필요한 모든 것이 포함되어 있고 키 파일을 GitHub 저장소에 커밋하는 것을 잊지 않았다는 것을 알 수 있습니다.
WSGI 파일 구성
이제 cd /var/www/html/your_site_name이 있는 서버의 웹 사이트 디렉토리로 이동하여 your_site.wsgi를 누릅니다. 여기에 몇 가지 해결 방법이 있습니다. 먼저 아래 예제 파일의 스크린샷을 보십시오.
먼저 파일에 기록하고 출력을 볼 수 있도록 로깅을 구성해야 합니다. 그런 다음 Flask 앱 인스턴스를 가져오기 전에 파이썬 실행 파일과 웹 앱 디렉터리의 경로를 지정해야 합니다.
아파치 구성
이제 Apache가 사이트를 로드할 수 있도록 구성 파일을 만들어야 합니다. 이 방법은 Apache와 함께 제공되는 기본 구성 파일을 복사한 다음 사이트에 맞게 조정하는 것입니다.
그래서, 그렇게 하기 위해서는… 먼저 cd /etc/apache2/sites-available을 누른 다음 기본 구성 파일 sudo cp 000-default.conf your site.conf를 복사합니다. 일단 그런 일이 끝나면 수정해야 할 때입니다.
이 파일에 추가할 항목이 꽤 많으며 아래 스크린샷을 확인하여 어떤 모습이어야 하는지 확인해 볼 필요가 있습니다. 스크린샷에는 포트 443이 포함되어 있으며 태그의 두 번째 세트에 리디렉션이 포함되어 있습니다. 나중에 설정해 두므로 지금은 무시할 수 있습니다.
어쨌든, 이 파일을 변경하는 데 필요한 내용은 다음과 같습니다.
완성된 파일은 다음과 같습니다. SSL 라인은 당분간 무시해도 됩니다. 작업 중인 특정 환경에 한정되므로 이 기록에서는 다루지 않겠습니다.
이 작업이 완료되면 Apache는 구성 파일의 구문에 오류가 있는지 테스트하는 데 사용할 수 있는 편리한 도구인 sudo apache2ctl config test를 갖게 됩니다.
우리는 지금 이 사이트에 꽤 근접해 있고, 만약 당신이 좀 더 간단한 웹 앱을 가지고 있다면 그것은 이미 작동할 것이다. 다음 단계는 sudo a2ensite your site.conf로 이 사이트를 사용 가능으로 설정한 후 a2disite 000-default.conf로 기본 사이트를 사용 불가능으로 설정합니다.
이제 로그 파일을 만들고 권한을 설정하면 됩니다. 그렇지 않으면 WSGI 파일에 이 파일을 지정했으므로 Apache가 시작할 때 오류가 발생합니다. 그렇게 하려면 cd /var/www/html/your site를 누른 다음 sudo touch your site.log를 누릅니다. 파일이 만들어지면 Apache가 sudo chgrp www-데이터 yoursite.log와 sudo chmod 464 yoursite.log를 사용하여 파일을 사용할 수 있도록 권한을 설정해야 합니다.
Aaaa 그리고 이제 당신은 sudo systemctl restart apache2 명령으로 아파치를 다시 시작할 수 있고 모든 것이 작동하기를 기도할 수 있다.
경고: 개발 마법사가 아니면 이 시점에서 사이트가 작동하지 않을 가능성이 높습니다. 그렇다면, 문서 끝에 있는 디버깅 팁을 확인하고 /var/log/apache2/error.log의 Apache 로그를 확인하십시오.
고지 사항은 제쳐두고 웹 사이트 URL(Apache가 올바르게 설치되었는지 확인하기 위해 이전에 사용한 것과 동일한 URL)로 이동하여 페이지를 로드합니다. 로딩이 되면 사이트가 가동되고 있는 것입니다.
권한 설정
지금쯤은 좀 쉬어야 할 것 같아요.
쉬는 시간 후에…
…웹 애플리케이션의 다른 부분에 대해 신중하게 생각해야 할 때입니다. 파일을 읽거나, 쓰거나, 실행해야 합니까? 위의 이전 단계에 있는 페이지를 확인했을 때 웹 응용 프로그램에서 500개의 오류가 표시되었을 수 있습니다. 로그에서 몇 가지 권한 오류가 발견되었습니다. 여기서 시작하는 것이 좋습니다.
이 파트의 요점은 웹 애플리케이션의 어떤 부분이 무엇을 해야 하는지에 대한 명확한 감독을 통해 그에 따라 권한을 할당하고 최대한 위험을 관리하는 것입니다.
웹 응용 프로그램이 프로덕션 환경에 있는 경우, 이러한 방식으로 권한을 제한하면 해커가 권한을 상승시키고 서버 환경의 다른 부분으로 이동하는 기능이 심각하게 제한되기 때문에 웹 응용 프로그램이 테스트 대상이 될 수 있습니다.
이제 어떤 비트가 무엇을 해야 하는지 알았으므로 웹 응용 프로그램에 대한 접근 설정 권한을 다음과 같이 권장합니다.
웹 응용 프로그램의 모든 항목을 Apache 사용자 그룹에 할당합니다. 이렇게 하면 웹 응용 프로그램과 관련된 특정 그룹에 권한을 포함할 수 있으므로 Apache 사용자 그룹이 없는 서버의 다른 영역(예: 홈 디렉토리 또는 시스템 파일)으로 권한을 상승시키는 것이 훨씬 더 어려워집니다. 이렇게 하려면 sudo chgrp www-데이터 -r /var/www/html/your_site_name 명령을 사용합니다. www-데이터 그룹은 Apache를 참조합니다.
이제 sudo chmod xxx -R 디렉토리를 사용합니다. 여기서 xxx는 464와 같은 세 개의 숫자 조합입니다. 이렇게 하면 각 디렉터리에 대한 권한이 반복적으로 설정됩니다. 전체 웹 사이트에 대해 그룹을 아파치로 설정했으므로 Apache는 항상 가운데 숫자입니다. 간단히 말해서 4는 Apache가 파일만 읽을 수 있다는 뜻이고, 6은 읽고 쓰기를 의미하며, 7은 실행을 의미합니다.
이 두 명령의 구문을 혼동하는 경우 사용 방법에 대한 몇 가지 좋은 문서가 있습니다.
강제 HTTPS
HTTPS 연결을 사이트에 강제로 연결하여 일반 텍스트를 통해 데이터가 전송되지 않도록 해야 합니다. 즉, 아무나 데이터를 읽을 수 없습니다.
이 비트가 작동하려면 사이트에 대한 SSL 인증서를 설정해야 합니다. 플랫폼마다 매우 다양하기 때문에 여기서는 다루지 않습니다! 그러나 이러한 작업을 수행한 경우 아파치 내에서 사이트로 전송되는 트래픽을 HTTP에서 HTTPS로 리디렉션하는 방법은 다음과 같습니다.
먼저 ssl을 실행하려면 sdo a2enmod ssl을 누르십시오. 그런 다음 웹 사이트 구성 파일(즉, 이전에 만든 파일인 your site.conf)을 편집하여 SSL 인증서와 관련된 줄을 포함해야 합니다. 또한 80이 아닌 포트 443에 응답하도록 상단을 편집한 다음 하단의 리디렉션 구문을 추가해야 합니다.<이러한 모습을 확인할 수 있는 가장 좋은 방법은 앞서 사이트 구성 파일의 스크린샷으로 다시 스크롤하여 아래쪽에 <가상 호스트 *:80>이라고 표시된 부분을 보는 것입니다.
이제 sudo systemctl restart apache2를 누른 다음 http://yoursite.com를 사용하여 사이트를 탐색해 보십시오. 올바르게 설정했으면 HTTPS 버전의 페이지에 표시됩니다.
일반 영어로 더 많은 내용을 제공합니다.이오
from http://devcloset.tistory.com/384 by ccl(A) rewrite - 2021-09-15 20:00:47