[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]



사용한 품목


1) 라즈베리파이B+ 베이직 키트: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005607887&LType=R


서론


 이제 텔레그램 봇을 설치하기 위해서 라즈비안위에 서버를 구성해야한다. 처음에는 일반적으로 쉽게 접근 가능한 APM(Apache, PHP, Mysql)로 접근하려 했다. 일단 라즈베리파이에서 일반 PC보다는 성능이 낮기때문에 최대한 가벼운 프로그램을 설치하려고 찾아봤다. 그리하여 lighttpd, php, SQLite로 선택했다. SQLite는 본연의 가벼운 특성 덕분에 모바일을 넘어 PC의 응용프로그램에도 널리 사용되고 있다. 그래서 이번 기회에 SQLite로 한번 개발을 해보려고 선택했다. 또 lighttpd는 웹서버 사용순위 중에서 5위를 차지하지만 youtube나 wikipedia등에서 사용되고 있어서 선택했다. 이에 대한 정보를 아래 URL에서 참조했다.

http://www.hanbit.co.kr/network/view.html?bi_id=1385

http://gywn.net/2013/08/let-me-intorduce-sqlite/

 이제 lighttpd, php, SQLite를 이용하여 서버를 구축하여 텔레그램 봇을 만들기 위한 기반을 갖추도록 하자!

설치



먼저 아래 블로그를 참고했으며, 그 과정에서 설치하는 부분들에 대해 정리하도록 하겠다. 아래 블로그는 영어로 만들어져 있으므로 내가 한글로 포스팅하는 것이 약간의 의미가 있지 않을까?라는 생각을 하지만 사실 영어를 안보고 그림이랑 코드(명령어)만 봐도 충분하다 ㅎㅎ. 그래도 영어에 거리낌이 있으신 분들에게 약간의 도움이 되리라 믿는다. 


먼저 아래 블로그를 참고했으며, 그 과정에서 설치하는 부분들에 대해 정리하도록 하겠다. 아래 블로그는 영어로 만들어져 있으므로 내가 한글로 포스팅하는 것이 한국사람이 보는 것에 편리하리라 믿으며 포스팅한다. 사실 영어를 안보고 그림과 코드(명령어)만 보고 따라해도 되긴 한다 ㅎㅎ

https://www.scandio.de/2012/11/setting-up-a-lightweight-webserver-with-lighttpd-php5-and-sqlite3/

아래 명령어를 입력해서 업데이트를 해주자.

1
2
sudo apt-get update
sudo apt-get upgrade
cs


그리고 apt-get으로 필요한 것들을 아래와 같이 다운받도록 하자.

1
sudo apt-get install lighttpd php5 php5-cgi php5-common php-pear php5-sqlite php5-dev vim
cs

위 명령어를 입력하면 아래와 같이 다운로드를 해도 되겠냐는 질문을 하고 Y를 입력하면 설치를 시작한다. 이 포스팅에서는 sudo를 사용하지 않기 위해 root로 설치했다.



 그리고 아래 명령어를 입력해서 lighttpd 설정파일에 들어가 server.modules "mod_fastcgi"를 추가한다. vi나 vim을 이용할 때 conf파일을 처음부터 뒤적거리면 시간이 걸리니 / 을 이용하여 검색하도록 하자. 자세한 사항을 구글신에게 묻도록 하자!

1
vim /etc/lighttpd/lighttpd.conf
cs



그리고 lighttpd.conf파일의 마지막에 아래 그림과 같은 설정을 추가하도록 하자. 내 라즈비안의 lighttpd.conf파일의 경우 제일 마지막에 아래 그림과 같이 include에 있었다. 복사할 수 있도록 명령어도 첨부했다.

1
2
3
4
5
6
fastcgi.server = (
     ".php" => ((
            "bin-path" => "/usr/bin/php5-cgi",
            "socket" => "/tmp/php.socket"    
            ))
)
cs




아래 명령어를 입력해서 php.ini파일도 변경하도록 하자.

1
sudo vim /etc/php5/cgi/php.ini
cs

저번 포스팅에서 timezone을 Asia/Seoul로 셋팅했던 것처럼 이 ini파일에도 똑같이 설정해주면 된다. 주석처리가 되어 있으니 ;를 지워 주석을 없애주도록 하자.

1
2
3
cgi.fix_pathinfo = 1
date.timezone = Asia/Seoul
# http://de2.php.net/manual/de/timezones.php
cs



이제 모든 설정이 끝났으니 아래 명령어를 통해 서버를 재실행하도록 하자. 일부러 이렇게 코드와 그림을 모두 넣는 이유가 설치할 때 복붙하니까 바로바로 할 수 있어서 좋았기 때문이다.
1
/etc/init.d/lighttpd restart
cs


자 이제 완성이다. 모두 설치가 끝났으니까 이제 설치가 완료됬는 지 테스트 해보기로 하자. 테스트는 php와 sql로 나눠서 테스트 한다. 먼저 php부터 보면 아래 파일을 /var/www/에 info.php로 만들어 확인하도록 하자. 리눅스 웹서버의 기본경로가 /var/www이나 /var/www/html인 것을 참고로 알고 있자.


1
vim /var/www/info.php
cs
1
2
3
<?php
    phpinfo();
?>
cs


이렇게 만들어준 info.php에 접근하기 위해서 127.0.0.1/info.php나 본인 IP/info.php를 누르면 아래와 같은 정보가 나온다. 시스템란에 라즈베리파이라는 정보도 나온다 ㅎㅎ 


이제는 SQLite를 테스트하도록 하자. SQLlite는 파일기반 데이터베이스이므로 SQLite 테스트 코드가 있는 폴더에 권한을 변경해줘야 한다. 이 사실을 참고한 상태에서 일단 아래와 같이 폴더를 하나 만들고 소스를 복사 붙여넣기하여 파일을 만들도록 하자. 실제 sqltest폴더가 만들어지는 경로는 /var/www/sqltest이고 현재 경로는 /var/www라는 것을 알고 있짜.

1
2
mkdir sqltest
vim sqltest/info.php
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
try {    
    // Create file "scandio_test.db" as database    
    $db = new PDO('sqlite:scandio_test.db');   
     // Throw exceptions on error   
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);   
    $sql = <<<SQL
 CREATE TABLE IF NOT EXISTS posts (   
 id INTEGER PRIMARY KEY,   
 message TEXT,    
 created_at INTEGER
)
SQL;   
    $db->exec($sql);     
    $data = array(        
        'Test '.rand(010),        
        'Data: '.uniqid(),        
        'Date: '.date('d.m.Y H:i:s')    
    );     
    $sql = <<<SQL
INSERT INTO posts (message, created_at)
VALUES (:message, :created_at)
SQL;
   
    $stmt = $db->prepare($sql);    
    foreach ($data as $message) {        
        $stmt->bindParam(':message'$message, SQLITE3_TEXT);        
        $stmt->bindParam(':created_at'time());         
        $stmt->execute();
    }     
    $result = $db->query('SELECT * FROM posts'); 
    
    foreach($result as $row) {        
        list($id$message$createdAt= $row;        
        $output  = "Id: $id\n";        
        $output .= "Message: $message\n";        
        $output .= "Created at: ".date('d.m.Y H:i:s'$createdAt)."\n";         
        echo $output;
    }     
    $db->exec("DROP TABLE posts");
} catch(PDOException $e) {
    echo $e->getMessage();
    echo $e->getTraceAsString();
}
?>
cs

아래 코드를 복붙하여 만들고 난뒤에 아래 명령어로 sqltest폴더의 권한을 변경해주자. 권한을 변경해주지 않으면 에러가 발생하는 것을 아래 그림에서 볼 수 있다.

1
sudo chown -R www-data:www-data sqltest/
cs


그리고 위 폴더에 권한을 줬을 때 SQLlite가 php와 연동해서 lighttp에서 잘 동작하여 아래와 같이 데이터가 나오는 것을 확인 할 수 있다.

참고사항으로 위 설치에는 sqlite의 쉘 프롬프트를 설치 하지 않았기 때문에 sqlite를 쉘로 관리하기를 원한다면 아래와 같은 명령어를 입력해주도록 하자. 그러면 아래 그림과 같이 sqlite를 쉘로 관리 할 수 있다.

1
apt-get install sqllite3
cs



 php와 mysql의 연동을 웹페이지에서 쉽게 관리할 수 있도록 하는 것처럼 php와 SQLite의 연동을 웹페이지에서 쉽게 관리할 수 있도록 phpliteadmin을 설치하는 것도 괜찮다고 생각한다.



마치면서


생각보다 설치하는데 많은 시간은 안들었지만 새로운 환경에서 코딩을 통해 뭔가를 만들 때 가장 처음 만나는 과제가 환경설정이다. 이 환경설정이 생각보다 쉽지 않은 경우에는 코딩을 한 줄도 적어보지도 못하고 포기하거나 삽질하다가 다음 기회로 미루게 된다. 이번 포스팅까지 기본적인 환경설정을 모두 마쳤으므로 다음 포스팅부터 텔레그램 봇을 만드는데 더욱 박차를 가할 수 있을거라 기대한다.

관련 상품


라즈베리파이2 보드: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005652343

라즈베리파이2 베이직 키트: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005655515

손톱두이노: 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P005668577

라즈베리파이 전용 방열판 (소): 

http://www.icbanq.com/shop/product_detail.asp?prod_code=P002110427





[본 컨텐츠는 ICbanQ (아이씨뱅큐)에서 진행하는 파워블로거 활동의 일환으로, 아이씨뱅큐의 지원을 받아 작성되었습니다]


+ Recent posts