기술 검토(?) 겸, 이틀간 node.js 를 이용해서 이런 저런 스터디 & api 개발을 했다.


이제, 서버에 올려야 하는데......


일단 첫번째 장벽 발생.


기존 APM 이 동작중인 상태에서, node.js 로 작성된 서버가 '같이 잘 살아야'만 하는 상황이 됨.


조금 찾아보니...


1. 내부적으로 다른 포트에 node.js 기반의 (다른것도 물론 가능) 서버를 열고,

2. apache 의 VirtualHosts 설정에서 ProxyPass 를 설정해서,

3. 특정 url 로 접근시, 1번으로 '돌려주는' 것.

4. 외부에서 보면, 특별히 변화 없음. 내부적으로만 돌려막기(?) 하는 동작으로 보임. :)


자, 이제 설정을 해보자.


먼저 준비물 - module - 2개.


 mod_proxy, mod_proxy_http

 

1. ubuntu apache 서버는 기본적으로 두 모듈이 '설치'가 되어있음.


/etc/apache2/mods-available


 - 이 안에, proxy, proxy_http 설치된 상태.


 - 실제 설치는, 내부적으로는 ./mods-enabled 에 sort link 해주면 됨.

 - 이경우, 직접 하기 보다, '명령어'를 이용하는게 그냥, 맘이 놓이니...


 sudo a2enmod proxy 

 sudo a2enmod proxy_http


./mods-enabled 안에서 소프트 링크 확인.



2. 가상 호스트 설정.


 ./sites-available 내부의 기존파일 혹은 신규 파일 추가.

 

 다음 내용 추가, 수정 등등 적당히.

 

<VirtualHost *:80>

DocumentRoot /var/www/example.com/public_html

ServerName  www.example.com

# Index file and Document Root (where the public files are located)

DirectoryIndex index.html index.php


# Log file locations - 아래는 필요하다면.. :)

LogLevel warn

ErrorLog  /var/www/amazeapp.com/log/error.log

CustomLog /var/www/amazeapp.com/log/access.log combined



# 여기서 부터 본격적 추가.


ProxyRequests off

<Proxy *>

   Order deny,allow # 이부분의 경우, 콤마(,) 사이에 공백 없어야 함!

   Allow from all

</Proxy>

<Location /> # 내부적으로 접속 노드를 늘리고 싶다면 여기에 추가. :)

   ProxyPass http://localhost:3000/

   ProxyPassReverse http://localhost:3000/

</Location>

</VirtualHost>



 - 최종적으로 추가해야 하니, 다음과 같이 사이트를 가능하게 합시다!


 sudo a2ensite 파일명 (신규 추가의 경우만.)

 

3. 아파치, 재시작.


결론.


 잘 됨. 나머지 한가지는 '직접' 연결시 https redirect 설정 부분(얼핏 봤을때 VirtualHost)에 추가로 기억. :)


 덧붙여서 https 를 cloud flare 의 flexable ssl 접근시, node.js 쪽 pass direct 설정이 필요하다고 함.

 X-Forwarded-For 를 header 에 포함해주면 서버가 클라이언트의 '진짜' ip 확인 가능 하다고 기억함.

 


레퍼런스.

 http://garrows.com/blog/running-node-js-and-apache-together-using-mod_proxy/

 https://github.com/sindresorhus/guides/blob/master/run-node-server-alongside-apache.md

 http://stackoverflow.com/questions/28062159/node-js-https-on-cloudflare

 


뱀발.

 node.js 흐으음............ 나중에 좀 정리해서 따로 적어야 할 듯!

Posted by 코나

시작은 그랬다.

VMWare 안에 NAT 로 개발 서버를 놓고, 같은 네트워크 안에서 다른 '장비'가 '고정'된 주소 - ip 말고 ㅠ.ㅜ - 로 접근하고 싶은 것.


1차적인 목표는 VMWare 안의 서버에 DNS - bind9 - 를 올리고, 밖에서 접근하려 하였으나, - UDP, TCP 53 을 열었음 - 실패. (아마도, 안에서 밖으로 나오지 못해서 그런 듯..)


결국, 같은 네트워크에 묶기로 결정, 별도의 DNS 운영으로 결정.


이래저래 잠시 찾다가 재미있는 두가지를 찾아냈다. (일찍 알게 되었다면 전체 서버 설정을 다 이걸로 했을지도)


1. Ubuntu 기반의 '가벼운' 리눅스 서버, JeOS - Juice 라고 읽는다 함. - 를 이용해서 서버 설치

 - 재미있게도 Virtual Machine 용 패키지가 존재. :) 용량도 가벼운 90메가.

 - 가장 매력적인 점은, apt-get 지원! (두둥!)

 - http://www.pqr.com/ubuntu-jeos


2. Bind9 말고, 좀 더 가벼운 DNS 서버 물색, 그리고 찾은 DNSMasq.

 - apt-get 으로 설치 가능

 - 다 필요없고, 설치 후, 그냥 /etc/hosts 에서 원하는거 간단히 설정하면 끝.

 - 나중에 다른 네트워크에서 하드웨어 테스트가 필요한 경우, /etc/hosts 정도 설정만 마져주면 됨. (물론, 디바이스쪽 dns 도 수정해줘야..)


결론


잠시 테스트 해보니 잘된다! 이상하게 요즘 'OSX Server'를 깔기 싫었는데, 결론적으로 '두개'의 VM 을 돌리는 걸로 마무리! :)


1번의 서버는 기본 설정이 256 메가 메모리로 잡혀서 돌아가는 중. 하드 용량은 1기가 max 로 잡힌 상태, 대략 절반 남은 듯. :) - 용량이 커진 이유는 사실, apt-get update, apt-get upgrade.. 때문일지도.. ㅎㅎ :)


Posted by 코나

얼마만의 포스트, 그것도 좌충우돌 서버관리 인지 모르겠습니다. :)


Knowledge base 인 관계로, '반말'로 기록합니다. :)


업데이트의 편의성-.-을 위해서 ftp 서버를 설치 완료. - 물론, apt-get 으로.


vsftpd 의 경우, /etc/vsftpd.conf 에서 관리되는데, 목표는 재부팅등의 경우 자동 실행에서 ftp 데몬을 제거하기.


이래저래 고민중, 선택한 방법은 config 파일 내부에서 listen=ON 항목을 OFF 함으로써 원천적으로 막기.


반대로 필요한 경우, config 수정 후 다시 서비스 스타트 하기.


필요할때만 쓸 수 있으니 만족스럽다. :)

Posted by 코나
우연히 클리앙에서 알게된 NoSQL 로 시작된 일이, 실제 프로젝트에 적용하기 위한 설치 단계까지 와버렸다. 후덜덜;;

결론은 대세(?)를 따라서 몽고디비로 결정.

우분투에 깔기 전, 버철에 이런 저런 설치 = root 계정 살리고, apm 설치, public_html이 ~(틸드)와 놀 수 있도록 설정해주고, php 무시하지 않도록 설정해주었음. (링크 없음 ㅠ.ㅜ 다음번에 다시 구글링 하거나 해야 함..)
 마지막으로 samba 로 마무리. 

몽고 디비를 깔기 위해 다음과 같은 단순 작업을 진행함.

 **. 우분투에 몽고 디비 깔기.
 - 이번에는 걍 바이너리 상태로 하기로 함. -> 아직 10gen apt 패키지에 최신 버전 2.0 이 적용 안되었음.
 1. 바이너리 다운로드 (http://www.mongodb.org/downloads) - 리눅스 64비트로 하자.
 2. 서버로 복사 & 적당한 위치에 놓는다.
 3. 루트에 /data/db 디렉토리 생성 (안하면 안됨)
 4. 2번의 적당한 위치의 디렉토리 안 bin/mongod 실행. -> 백그라운드로 돌리면 금상첨화겠지?
 
***. php 와 몽고디비 연결하기
 1. pecl 이 필요함
  - apt-get install php-pear
 2. sudo pecl install mongo
 3. php.ini 파일 수정이 필요함.
  extension=mongo.so 를 추가
 4. 테스트로 찍어보면 됨. 끝. 
 
 관련글 :: http://www.mongodb.org/display/DOCS/PHP+Language+Center

쭉 하다보니, 프로세스 관리가 잘 안되어서 기초중의 기초를 찾아서 헤멤. 오래간만에 하려니.. ^^;;;;

*1. 프로세스 관리.

 앱을 백그라운드로 띄우는 방법.
  1. 명령어 뒤에 한칸 띄고 &
  혹은
  1. 포그라운드로 띄운 뒤, 서스펜드(ctrl+z),
  2. bg %프로세스아이디
  
  백그라운드 상태에서 포그라운드로 가져오기
  1. jobs -> 프로세스 번호 확인 -> fg %프로세스아이디
  
  로그아웃 후 다시 로그인 후 (터미널에 묶이지 않은) 프로세스 죽이는 방법
  kill 프로세스아이디 -> (top, 혹은 ps -rf | grep mongo 등으로 확인) -> 이게 정상 종료의 교과서임. 아니면 강제로 죽여야 함.
  
  관련 글 :: http://uzoogom.tistory.com/tag/top
 
이제 남은 건, 운영 서버에도 몽고 디비 설치하는 일. 그리고, 브릿지 완성하기.

그나저나, 간만의 포스팅이 너무 딱딱하죠? ^^;;

조만간 앱이 나온답니다, 그때! 컴백할께요~~ =3=3=3 

-코나- 

덧: 그나저나 왜자꾸 몽고디비가 아니라, 몬도디비;;라고 치는걸까. 난..ㅠ.ㅜ 
Posted by 코나
워드 프레스로 사이트를 운영하는 경우, 간혹 서버 아이피가 변경될 수 있습니다.

이경우, 사이트에 접속해도 잘 안보이고, 관리자 페이지로 접근이 안되는 경우가 발생할수도 있는데요, 이에 대한 해결책을 찾았습니다.

워드 프레스가 사용하는 데이터베이스 (제 경우에는 mysql) 에서, 옵션 테이블 값을 수정해야 합니다.

테이블 중, wp_options 를 보면, options_name 이 siteurl 인 것과 home 인 것, 두가지가 존재하는데요,

이 옵션의 값을 보면 아이피로 설정된 경우가 있습니다.

이전 값으로 되어있는 아이피를 변경된 아이피로 설정하면 됩니다.

업데이트 쿼리야 뭐..

update wp_options set option_value = '변경된 값' where option_id = 레코드아이디;

-코나-

덧. 원래는 ebadaq.com 카테고리에 가깝지만, 서버 운영과도 밀접하기에, 서버 관리쪽으로 카테고리 설정.
Posted by 코나
최근 몇몇 프로젝트를 진행하면서, (실질적으로는) 혼자하는 프로젝트이기에, 소스 버전 관리에 대해서 별다른 생각을 하지 않고 지냈었다.

하지만, 프로젝트를 진행하면서 항상 느끼지만, '마음이 급해질 수록' 그 기능이 빛을 발하는 버전 관리툴.

늦었지만, 사후 약방문이지만, 오래간만에 subversion을 서버에 설치하였다. (아, 리눅스에서 설치하는 건 처음이다. 항상 윈도에서만 설치해서...)
사실, 정말 좋은 포스팅을 구글링중에 발견, 간지러운 부분들을 긁어가면서 빠르게 작업할 수 있었다.

간단히 소개를 하면, (다들 알다시피) 안녕 리눅스는 패키지 시스템이라 별다른 무리없이

pkgadd subversion <- 서브 버전 클라이언트 설치
pkgadd subversion-server <- 서브 버전 서버 설치 ( 안녕리눅스 공홈 qna를 보면, 서버과 클라이언트를 분리했다고 한다.)

두 명령어를 root 권한에서 입력해주면 된다.

그 다음, 레포지토리로 사용할 기본 폴더를 만들어주고,

mkdir /home/svn

그 안에 필요한 레포지토리를 생성하고,

cd /home/svn
svnadmin create --fs-type fsfs sample
(sample이라는 레포지 토리를 svn 안에서 생성함.)

레포지토리 내의 config 파일을 수정한다.

vi /home/svn/conf/svnserve.conf

수정 후, passwd 에 계정과 비번을 추가한다.

vi /home/svn/conf/passwd

그리고, 서버 구동.


#svnserve -d -r /home/svn

svn은 3690 포트를 사용하므로, 외부에서 접근이 안되면 oops-firewall 의 TCP_ALLOWPORT에 3690을 추가한다.

이정도면 된다. :)

자세한 포스팅은 원글 링크 참조.

워낙 원글이 잘 되어 있어서... (이 글의 요약본은 혹시나 몰라서!)

소스 관리부터 시작!

-코나-
Posted by 코나
정말 오래간만의 좌충우돌 서버관리.

s-ftp를 이용한 업로드, 테스팅 작업에 지친(?) 나는 결국 맥과 리눅스 서버를 samba로 연결하기로 결정한다. :)

먼저, samba(이하 삼바) 패키지를 확인해 보았다.

pkginfo -v -l samba

패키지 존재를 확인, 즉시 패키지 추가 작업을 하였다.

pkgadd samba

의존성 패키지 설치 후, 설정으로~

삼바 설정은 /etc/samba/smb.conf 파일에서 한다.

편의를 위해, 필요한 디렉토리만 연결할 생각이었기에...

[porfin]
comment = PorFin Public html
path = /경로
valid users = 사용자아이디
read only = No


간단히 설명을 하면,
첫줄 대 괄호는 윈도에서 볼 수 있는 공유 폴더명,
코멘트는 말그대로 코멘트,
패스는 공유할 경로,
벨리드 유저는 접근할 사용자 아이디
읽기 전용 여부. :)

이 작업이후 바로 되는게 아니라... 계정을 추가해야 한다.
(삼바 3 버전을 기준으로 설명.)

문서에 보면 smbuseradd 명령어와 smbpasswd를 이용하라고 하였는데,
문제는 smbuseradd 가 없다는 것.

바뀌었단다.

smbuseradd -> smbpasswd -a 사용자아이디

자연스럽게 사용자 아이디 및 비번 정의 이후, 서비스 재시작.

service smb restart


맥에서의 접근은, Finder 선택 후, command + K

smb://아이피

그 이후 로그인 작업을 진행하면 된다! :)

고고씽!

-코나-
Posted by 코나
네트워크 사용량을 알기 위해서 개발 서버에 nTOP  서비스를 설치하였다.

안녕 리눅스이기에, 당연히 기본 명령은

>> pkgadd -v ntop

재미있는 점은 ntop 이 기존에 init.d 에 포함되도록 패키지 설치가 이루어졌지만,

httpd Service 가 동작하지 않는 경우가 발생하여 수동으로 돌려줘야 한다. :)

암튼, 일단 패키지는 설치가 되었고...

nTop의 디렉토리 구조를 잠시 이야기하면,

첫 설치 이후, 앞으로 수집될 사용량 저장 공간 및 admin 비밀번호 생성 위치는

/usr/share/ntop

이 된다.
- etc/ntop/ntop.conf 참고

자, 이제 admin 비밀번호를 생성해야 한다.

>>ntop -P /usr/share/ntop -A

 비밀번호 입력해 준뒤,

/etc/ntop/ntop.conf  파일을 수정해준다. 입맛에 맛도록 - 사실 거의 수정할거 없어보임

수정이후, 첫기동.

>>ntop @/etc/ntop/ntop.conf &

&붙여야 백그라운드로 돌아가므로. :)

그럼 확인은?

http://주소:3000 <- 기본설정에서 웹포트는 3000 이므로.

-코나-

ps1. 한가지 마음에 걸리는 -m 옵션, 즉 내부 네트워크 선언을 좀 깔끔하게 못하고 아예 설정을 안했다는 거..
ps2. 아직 사이트를 사용하지 않는 관계로, 사실 수집에 대한 별의미가 없다.
ps3. 근데, oops firewall 에서 3000 포트 열어야 하지 않을까? :( - 당근 열어야 한다.


Posted by 코나
주소를 샀고, 이제는 가물가물한 네트워크 구성도에 대해서 끙끙하기를 이틀,

결국 대략 방향을 잡긴 잡았다.

현재, 안녕 리눅스에 bind 를 이용한 dns 세팅중...

레퍼런스를 남겨놓고, 내일 마무리를.. 쩝쩝..

1. 제 1 차 레퍼-.-런스,.
http://kin.naver.com/db/detail.php?d1id=1&dir_id=10202&eid=ae+naDAxcNGjSytmLVtjjpwXL5CFCHZD


2. 제 2 차 레퍼런스.. 뷁;

http://kin.naver.com/db/detail.php?d1id=1&dir_id=10202&eid=23K3a+X7PA3Deov2ySC/hZt7Mh5x5Tbr

3. 원인 파악 레퍼런스... 흑흑흑..

http://kin.naver.com/db/detail.php?d1id=1&dir_id=10202&eid=tS1E1hR8cV4ZijA38nML2rKiyLAQHPHR&qb=vsiz57iutKq9uiBiaW5kILyzwaQ=

결론은, 호스트설정을 통해서 미리 세팅해둔 dns 서버에 연동을 해야 한다는 거..

일단은 여기까지.

자세한 세팅 내용은 서버 세팅이 완료된 이후에 컨티뉴...

-코나-

덧. 덤으로 업데이트 사건;;도 컨티뉴... =.=;;

Posted by 코나
최근들어서 CentOS 기반의 서버 하나를 작업하게 되었다.

임대형 서버인데, 그럭저럭...

일단, 서비스 업체에서 세팅해준 상태로, ssh 를 이용 로그인 성공.

공부한대로 내 계정을 추가 했다. ^^v

자, 이젠 내 계정으로 접속해서 작업을....

어 근데, 안되네.. -.-;;

>> 요녀석을 반대로 이용해 본다. <<

원본 링크 : http://cafe.naver.com/ssyangcal.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2262

openssh가 설치되어 있는 환경에서 일반 사용자의 SSH접속 막기

일반적으로 사용자들은 CUI기반의 인터페이스 사용을 기피한다.
따라서 이러한 불필요로 인해서 사용하지 않는 SSH접속을 막기위해서
openssh는 우수한 키워드를 제공하고 있다.

# man sshd

  참고키워드 : AllowGroups, AllowUsers, DenyGroups, DenyUsers

  ! 기본적으로 openssh는 모든 사용자의 ssh접속을 허용한다.

  키워드
      AllowGroups : 해당 그룹에 속한 사용자만 접속할 수 있다.
      AllowUsers   : 열거한 사용자만 접속할 수 있다.
      DenyGroups : 전체 사용자의 접속을 허용하고 명시된 그룹은 접속에서 제외된다.
      DenyUsers   : 전체 사용자의 접속을 허용하고 명시된 유저의 접속은 제외된다.
      해당 그룹, 유저는 space로 구분한다.

  적용
      /etc/ssh/sshd_config 파일에 키워드를 명시하고 그룹 또는 유저명을 기입한다.

     예) 시스템관리용으로 생성한 maintain, master 이라는 유저만 접속을 허용
             --->  /etc/ssh/sshd_config 파일에
                     AllowUsers      maintain master    (space bar로 구분)

     예) 모든 유저의 접속을 허락하고 windog 라는 유저의 접속을 막는다.
             --->  /etc/ssh/sshd_config 파일에
                     DenyUsers      windog

    이상을 적용하기 위해서는 sshd를 재실행해야 한다.

# /etc/init.d/sshd restart

>> <<

역시, 설정을 확인해보니, root 권한에 가까운 사람 하나에게만 허용이 되어있었다.

즉시 내 계정-.-을 추가. ssh 재시작. 오오 된다!

근데 이번엔 su - 가 안먹히네.. 루트가 필요하건만.. ToT


역시 인터넷의 힘을 빌려!...


>>  [Gentoo] SU 명령이 안될 때(permission denied)  리눅스 관련(일반) <<


원본링크 : http://blog.naver.com/keep2smile/80042291026

★ 원인

    1. /etc/group에 wheel 부분에 현재 su 명령어를 수행하려고 하는 계정이 등록되어있지 않아서 이런 현상이 나타난다.

★ 해결

    1. vi 편집기로 /etc/group을 연다.

            root::0:root
            bin::1:root,bin,daemon
            daemon::2:root,bin,daemon           
            sys::3:root,bin,adm 
                     ....

            wheel::10:root,gentoo

                     ....
            keep2smile:x:1000:

    2. 위 wheel 부분에 wheel::10:root,gentoo,”추가 할 사용자계정” 작성 하면 된다.

            root::0:root
            bin::1:root,bin,daemon
            daemon::2:root,bin,daemon
            sys::3:root,bin,adm
                     ....

            wheel::10:root,gentoo,keep2smile  

                     ....
            keep2smile:x:1000:

    3. 다 수정 하였으면 저장하고 닫자.(:wq)

※ group 수정은 root 계정으로 수정하여야 한다. 혹시나 하는 노파심에서.;;;

 >> 라고 한다.. <<

아, 수정 이후 추가된 계정은 재로그인 해야 한다. 그러면 된다. ^^

이젠 계정별로 아파치를 사용할 수 있게 해줘야 한다.. =3=3=3

To be continued..

-코나-


    



Posted by 코나