웹사이트 검색

Ubuntu 14.04에서 프레임워크 없이 Apache, MySQL 및 Python(LAMP) 서버를 설정하는 방법


소개

이 기사는 프레임워크의 도움 없이 Python 3, MySQL 및 Apache2로 서버를 설정하는 과정을 안내합니다. 이 튜토리얼을 마치면 베어본 시스템을 프로덕션 환경으로 완전히 시작할 수 있습니다.

Django는 종종 Python의 모든 것을 한 곳에서 찾을 수 있는 곳입니다. 거의 모든 버전의 Python과 호환되며 사용자 지정 서버와 함께 사전 패키지로 제공되며 원 클릭 설치 데이터베이스 기능도 있습니다. 이 강력한 도구 없이 바닐라 시스템을 설정하는 것은 까다로울 수 있지만 처음부터 서버 구조에 대한 귀중한 통찰력을 얻을 수 있습니다.

이 자습서에서는 패키지 설치 프로그램, 즉 apt-get 및 Pip만 사용합니다. 패키지 설치 프로그램은 코드 설치를 훨씬 더 편리하고 관리하기 쉽게 만드는 작은 프로그램입니다. 그것들이 없으면 라이브러리, 모듈 및 기타 코드 비트를 유지하는 것은 매우 지저분한 비즈니스가 될 수 있습니다.

전제 조건

이 자습서를 따르려면 다음이 필요합니다.

  • Ubuntu 14.04 드롭릿 1개
  • 루트가 아닌 sudo 사용자. 이 자습서를 따라 설정할 수 있습니다.

1단계 — Python 3를 기본값으로 만들기

이 단계에서는 Python 3을 python 명령의 기본값으로 설정합니다.

먼저 현재 Python 버전을 확인하십시오.

  1. python --version

새로운 Ubuntu 14.04 서버에서 다음이 출력됩니다.

Python 2.7.6

python에서 Python 3을 실행하고 싶습니다. 먼저 이전 2.7 바이너리를 제거하겠습니다.

  1. sudo rm /usr/bin/python

다음으로, 그 자리에 Python 3 바이너리에 대한 심볼릭 링크를 만듭니다.

  1. sudo ln -s /usr/bin/python3 /usr/bin/python

python --version을 다시 실행하면 Python 3.4.0이 표시됩니다.

2단계 - Pip 설치

이 섹션에서는 Python용 권장 패키지 설치 프로그램인 Pip를 설치합니다.

먼저 시스템의 패키지 색인을 업데이트합니다. 이렇게 하면 오래되었거나 오래된 패키지가 설치를 방해하지 않습니다.

  1. sudo apt-get update

Pip을 사용하면 원하는 모든 Python 3 패키지를 쉽게 관리할 수 있습니다. 설치하려면 다음을 실행하십시오.

  1. sudo apt-get install python3-pip

Pip에 대한 개요는 이 튜토리얼을 참조하세요.

3단계 - MySQL 설치

이 섹션에서는 MySQL을 설치하고 구성합니다.

SQL 설치는 간단합니다.

  1. sudo apt-get install mysql-server

프롬프트가 표시되면 MySQL 루트 사용자의 강력한 암호를 입력하고 나중에 필요하므로 기억해 두십시오.

설치가 완료되면 MySQL 서버가 시작됩니다. 설치 후 다음을 실행합니다.

  1. mysql_secure_installation

이 설정은 일련의 자명한 단계를 안내합니다. 먼저, 조금 전에 선택한 루트 암호를 입력해야 합니다. 첫 번째 질문은 루트 암호를 변경할 것인지 묻지만 방금 설정했기 때문에 n을 입력하십시오. 다른 모든 질문에 대해서는 ENTER를 눌러 기본 응답을 수락하십시오.

그러나 Python 3에는 MySQL과 연결하는 방법이 필요합니다. MySQLclient와 같은 다양한 옵션이 있지만 모듈의 단순성을 위해 이 자습서에서는 pymysql을 사용합니다. Pip을 사용하여 설치하십시오.

  1. sudo pip3 install pymysql

4단계 - Apache 2 설치

이 섹션에서는 Apache 2를 설치하고 Python 파일을 실행 파일로 인식하는지 확인합니다.

apt-get을 사용하여 Apache를 설치합니다.

  1. sudo apt-get install apache2

MySQL과 마찬가지로 Apache 서버는 설치가 완료되면 시작됩니다.

참고: 설치 후 여러 포트가 인터넷에 열립니다. 보안에 대한 리소스는 이 자습서의 결론을 참조하십시오.

웹 사이트의 루트 디렉토리를 안전한 위치에 배치하려고 합니다. 서버는 기본적으로 /var/www/html에 있습니다. 규칙을 유지하기 위해 동일한 위치에 test라는 테스트 목적의 새 디렉토리를 생성합니다.

  1. sudo mkdir /var/www/test

마지막으로 Apache에 Python을 등록해야 합니다. 시작하려면 멀티스레딩 프로세스를 비활성화합니다.

  1. sudo a2dismod mpm_event

그런 다음 Apache에 스크립트를 실행할 명시적 권한을 부여합니다.

  1. sudo a2enmod mpm_prefork cgi

다음으로 실제 Apache 구성을 수정하여 Python 파일을 실행 가능한 파일로 명시적으로 선언하고 그러한 실행 파일을 허용합니다. nano 또는 선호하는 텍스트 편집기를 사용하여 구성 파일을 엽니다.

  1. sudo nano /etc/apache2/sites-enabled/000-default.conf

라고 표시된 첫 번째 줄 바로 뒤에 다음을 추가합니다.

<Directory /var/www/test>
	Options +ExecCGI
	DirectoryIndex index.py
</Directory>
AddHandler cgi-script .py

블록이 다음과 같이 블록 안에 중첩되어 있는지 확인하십시오. 탭에서도 올바르게 들여쓰기를 해야 합니다.


<VirtualHost *:80>
	<Directory /var/www/test>
		Options +ExecCGI
		DirectoryIndex index.py
	</Directory>
	AddHandler cgi-script .py
	
	...

이 디렉터리 블록을 사용하면 Apache가 해당 디렉터리를 처리하는 방법을 지정할 수 있습니다. Apache에 /var/www/test 디렉토리에 실행 파일이 포함되어 있음을 알리고 index.py를 기본 파일로 간주한 다음 실행 파일을 정의합니다.

또한 웹 사이트 디렉토리에서 실행 파일을 허용하기를 원하므로 DocumentRoot의 경로도 변경해야 합니다. 파일 상단의 긴 주석 아래 몇 줄에서 DocumentRoot /var/www/html라는 줄을 찾아 /var/www/test<로 수정합니다. /코드> 대신.

DocumentRoot /var/www/test

이제 파일은 다음과 유사해야 합니다.


<VirtualHost *:80>
        <Directory /var/www/test>
                Options +ExecCGI
                DirectoryIndex index.py
        </Directory>
        AddHandler cgi-script .py
        
        ...
        
        DocumentRoot /var/www/test
        
		...

파일을 저장하고 종료합니다. 이러한 변경 사항을 적용하려면 Apache를 다시 시작하십시오.

  1. sudo service apache2 restart

참고: Apache 2는 서버의 정규화된 도메인 이름에 대한 경고를 표시할 수 있습니다. 현재로서는 ServerName 지시문이 거의 적용되지 않으므로 이것은 무시할 수 있습니다. 필요한 레코드가 생성된 후 궁극적으로 하위 도메인 호스팅을 결정하는 데 사용됩니다.

출력의 마지막 줄에 [ OK ]가 표시되면 Apache가 성공적으로 다시 시작된 것입니다.

5단계 - 최종 제품 테스트

이 섹션에서는 개별 구성 요소(Python, MySQL 및 Apache)가 예제 웹 페이지 및 데이터베이스를 생성하여 서로 상호 작용할 수 있는지 확인합니다.

먼저 데이터베이스를 생성합시다. MySQL에 로그인합니다. 이전에 설정한 MySQL 루트 암호를 입력해야 합니다.

  1. mysql -u root -p

example이라는 예제 데이터베이스를 추가합니다.

  1. CREATE DATABASE example;

새 데이터베이스로 전환합니다.

  1. USE example;

Python 앱에서 추가할 몇 가지 예제 데이터에 대한 테이블을 추가합니다.

  1. CREATE TABLE numbers (num INT, word VARCHAR(20));

CTRL+D를 눌러 종료합니다. SQL에 대한 자세한 배경 정보는 이 MySQL 자습서를 참조하세요.

이제 간단한 Python 앱을 위한 새 파일을 만듭니다.

  1. sudo nano /var/www/test/index.py

다음 코드를 복사하여 붙여넣으십시오. 인라인 주석은 코드의 각 부분이 수행하는 작업을 설명합니다. passwd 값을 이전에 선택한 루트 MySQL 비밀번호로 바꾸십시오.

#!/usr/bin/python

# Turn on debug mode.
import cgitb
cgitb.enable()

# Print necessary headers.
print("Content-Type: text/html")
print()

# Connect to the database.
import pymysql
conn = pymysql.connect(
    db='example',
    user='root',
    passwd='your_root_mysql_password',
    host='localhost')
c = conn.cursor()

# Insert some example data.
c.execute("INSERT INTO numbers VALUES (1, 'One!')")
c.execute("INSERT INTO numbers VALUES (2, 'Two!')")
c.execute("INSERT INTO numbers VALUES (3, 'Three!')")
conn.commit()

# Print the contents of the database.
c.execute("SELECT * FROM numbers")
print([(r[0], r[1]) for r in c.fetchall()])

저장 및 종료.

다음으로 새로 생성된 파일에 대한 권한을 수정합니다. 3자리 권한 코드에 대한 자세한 내용은 Linux 권한에 대한 자습서를 참조하세요.

  1. sudo chmod 755 /var/www/test/index.py

이제 즐겨 사용하는 브라우저를 사용하여 http://your_server_ip로 이동하여 서버에 액세스하십시오. 다음이 표시되어야 합니다.

[(1, 'One!'), (2, 'Two!'), (3, 'Three!')]

축하해요! 이제 서버가 온라인 상태입니다.

결론

이제 강력한 SQL 데이터베이스로 Python 3를 실행할 수 있는 작업 서버가 생겼습니다. 서버는 이제 잘 문서화되고 확립된 패키지 설치 프로그램을 통해 쉽게 유지 관리할 수 있도록 구성되었습니다.

그러나 현재 상태에서 서버는 외부인에게 취약합니다. SSL 암호화와 같은 요소는 서버 기능에 필수적인 요소는 아니지만 안정적이고 안전한 서버를 위한 필수 리소스입니다. Linux 서버를 보호하는 방법에 대해 자세히 알아보십시오.