OpenERP 6을 Ubuntu 10.04 LTS 서버에 설치하는 방법
이 가이드는 Ubuntu 10.04 LTS 서버에 OpenERP 6을 소스에서 설치하고 운영 준비 상태로 만드는 단계별 절차입니다. PostgreSQL 설정, 필요 Python 라이브러리 설치, OpenERP 코드 배치와 구성 파일 설정, 업그레이드와 롤백을 위한 간단한 절차와 운영자별 체크리스트를 포함합니다.
중요: 이 문서는 OpenERP 6.x 시리즈(예: 6.0.2)를 수동으로 설치하는 방법을 설명합니다. 배포판 패키지를 사용하는 것과 비교했을 때 더 많은 제어와 유연성을 제공합니다.
소개
이 튜토리얼은 OpenERP 서버를 인터넷에 노출된 Ubuntu 10.04 LTS 서버에 안전하고 유지보수 가능하게 설치하는 실무 절차를 설명합니다. 목표는 다음과 같습니다.
- 암호화(SSL)를 통해 GTK 클라이언트, 웹 브라우저, WebDAV, CalDAV에서만 접근 가능하게 만들기
- 향후 업그레이드와 커스터마이즈가 쉬운 구조로 설치하기
패키지 설치(예: apt-get install openerp-server)는 간단하지만, 구버전 패키지, 구성 제약, 업그레이드와 패치에 대한 통제력 부족 같은 단점이 있어 여기서는 수동 설치를 권장합니다.
중요한 전제
- 대상 OS: Ubuntu 10.04 LTS
- 목표 버전 예시: OpenERP 6.0.2 (필요 시 최신 소스 확인)
- 관리자 권한 sudo 사용 가능
용어 1줄 정의
- OpenERP: ERP(전사적 자원관리) 오픈소스 소프트웨어(이후 Odoo로 이름 변경됨).
- PostgreSQL: OpenERP가 사용하는 관계형 데이터베이스.
사전 준비 및 체크리스트
- Ubuntu 10.04 LTS가 설치된 서버
- SSH 접속 가능 (openssh-server)
- 시간 동기화(예: ntp) 권장
- 방화벽 설정을 사전에 계획
- 루트 권한 또는 sudo 권한
간단 체크리스트
- OS 업데이트 적용
- openssh-server 설치 및 키 기반 로그인 설정 검토
- 필수 패키지와 Python 라이브러리 설치
- PostgreSQL 사용자 생성
- /opt/openerp에 OpenERP 소스 배치
- /etc/openerp-server.conf 구성
- 서비스 스크립트로 자동 시작 설정
- SSL 또는 프록시로 암호화 적용
단계별 설치 요약
아래 단계는 원문 절차를 따르며, 각 단계 하단에 운영/보안 권장과 대체 방법을 덧붙였습니다.
1단계 서버 초기 구성
설치 시 가능한 최소 패키지만 설치합니다. 설치 후 openssh-server를 설치하고 원격 접속을 허용합니다. 브루트 포스 공격 보호를 위해 denyhosts 같은 도구를 설치할 수 있습니다. SSH 키 기반 인증 설정을 강력히 권장합니다.
원문 명령 예시:
sudo apt-get install openssh-server denyhosts
시스템 패치 적용:
sudo apt-get update
sudo apt-get dist-upgrade
권장: 재부팅 후 SSH 접속 테스트.
주의: denyhosts는 하나의 선택지입니다. fail2ban, UFW 등 대안도 고려하세요.
2단계 OpenERP 전용 시스템 사용자 생성
OpenERP 프로세스를 실행할 전용 시스템 사용자를 생성합니다. 홈 디렉터리를 /opt/openerp로 지정합니다.
sudo adduser --system --home=/opt/openerp --group openerp
설명: 시스템 사용자(system user)는 UID가 1000 미만이고 로그인 셸이 /bin/false로 설정됩니다. 이 사용자는 애플리케이션 소유와 실행에만 사용됩니다.
파일 경로을 다르게 선택하면 이후 설정 파일의 경로를 일부 수정해야 합니다.
3단계 PostgreSQL 설치 및 OpenERP용 DB 사용자 생성
PostgreSQL을 설치하고 OpenERP가 데이터베이스를 생성·관리할 수 있는 사용자를 만듭니다.
sudo apt-get install postgresql
postgres 사용자로 전환하여 데이터베이스 사용자를 생성합니다:
sudo su - postgres
createuser --createdb --username postgres --no-createrole --pwprompt openerp
프롬프트에서 비밀번호를 두 번 입력합니다. 필요하면 슈퍼유저 권한을 허용할 수 있습니다.
마지막으로 postgres 계정에서 로그아웃합니다:
exit
보안 권장: PostgreSQL은 로컬 호스트 접근만 허용하도록 pg_hba.conf를 검토하고, 필요한 경우 호스트 기반 인증을 세밀하게 설정하세요.
4단계 서버에 필요한 Python 라이브러리 설치
OpenERP 서버가 동작하는 데 필요한 Python 패키지를 설치합니다. 웹 클라이언트를 사용하려면 추가 패키지를 설치합니다.
서버용 패키지:
sudo apt-get install python python-psycopg2 python-reportlab \
python-egenix-mxdatetime python-tz python-pychart python-mako \
python-pydot python-lxml python-vobject python-yaml python-dateutil \
python-pychart python-pydot python-webdav
웹 클라이언트용 추가 패키지:
sudo apt-get install python-cherrypy3 python-formencode python-pybabel \
python-simplejson python-pyparsing
설치 팁: 일부 패키지는 중복 표기가 있으므로 apt가 경고를 표시할 수 있습니다. Python 패키지 버전 호환성에 유의하세요.
5단계 OpenERP 소스 설치
wget로 소스 tarball을 받아 /opt/openerp에 풀어 놓습니다. 원문에서는 6.0.2 버전을 예시로 사용합니다. 최신 버전은 OpenERP(Odoo) 공식 다운로드 페이지에서 확인하세요.
예시 다운로드:
wget http://www.openerp.com/download/stable/source/openerp-server-6.0.2.tar.gz
웹 클라이언트가 필요하면:
wget http://www.openerp.com/download/stable/source/openerp-web-6.0.2.tar.gz
파일을 /opt/openerp로 이동 및 추출:
cd /opt/openerp
sudo tar xvf ~/openerp-server-6.0.2.tar.gz
sudo tar xvf ~/openerp-web-6.0.2.tar.gz
권한 변경 및 디렉터리 이름 정리:
sudo chown -R openerp: *
sudo cp -a openerp-server-6.0.2 server
sudo cp -a openerp-web-6.0.2 web
운영 팁: 업그레이드 시 덮어쓰기를 쉽게 하려면 버전별 디렉터리를 보존하고 최종적으로 사용하는 디렉터리(server, web)에 복사하는 방식을 사용하세요. 심볼릭 링크 대신 복사를 선호하면 사용자 모듈이 유지되기 쉽습니다.
6단계 OpenERP 구성 파일 설정
기본 config 파일을 /etc/openerp-server.conf로 복사하거나 새로 생성합니다. 다음은 권장 구성 예시(원문에서 제공한 내용)를 한국어 주석 없이 그대로 포맷을 유지하여 번역 없이 옵션을 보여줍니다. 비밀번호 등 민감 값은 실제 값으로 바꿔야 합니다.
[options]
; This is the password that allows database operations
; Will be written to by the server when password is changed
; !! Keep this file secure !!
; admin_passwd = admin
root_path = /opt/openerp/server/bin
without_demo = False
verbose = False
; Database settings
db_user = openerp
db_password = ********
; Please uncomment the following line *after* you have created the
; database. It activates the auto module check on startup.
; db_name = False
db_port = False
db_host = False
db_maxconn = 64
; Networking Settings
xmlrpc = True
xmlrpc_interface =
xmlrpc_port = 8069
netrpc = True
netrpc_interface =
netrpc_port = 8070
; Uncomment these for xml-rpc over SSL
;xmlrpcs = True
;xmlrpcs_interface =
;xmlrpcs_port = 8071
;secure_pkey_file = /etc/ssl/openerp/server.pkey
;secure_cert_file = /etc/ssl/openerp/server.crt
; Log settings
logfile = /var/log/openerp/openerp-server.log
syslog = False
logrotate = True
log_level = info
; False prevents the client displaying the list of databases
list_db = True
addons_path = /opt/openerp/server/bin/addons
demo = {}
soap = False
reportgz = False
translate_modules = ['all']
; Static http parameters
static_http_enable = False
static_http_document_root = /var/www/html
static_http_url_prefix = /
; Outbound email configuration
;smtp_user = [email protected]
;email_from = "OpenERP Support" <[email protected]>
;smtp_port = 25
;smtp_password = ********
;smtp_ssl = True
;smtp_server = mail.example.com
구성 파일 권한 설정:
sudo chown openerp:root /etc/openerp-server.conf
sudo chmod 640 /etc/openerp-server.conf
db_password 값을 3단계에서 만든 PostgreSQL 사용자 비밀번호로 바꿉니다.
구성 테스트로 직접 서버를 실행해 볼 수 있습니다(현재 사용자 권한으로 실행되므로 정상 작동하지 않을 수 있음).
/opt/openerp/server/bin/openerp-server.py --config=/etc/openerp-server.conf
정상 작동 확인 후 Ctrl+C로 중지합니다.
서비스 자동 시작 및 운영 스크립트 제안
Ubuntu 10.04는 Upstart를 사용하지만 많은 기존 환경에서 init.d 스크립트가 그대로 동작합니다. 여기에서는 간단한 init.d 스크립트 예시와 운영 권고를 제공합니다.
init.d 스크립트(간단 예시):
#!/bin/sh
### BEGIN INIT INFO
# Provides: openerp
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: OpenERP server
### END INIT INFO
DAEMON=/opt/openerp/server/bin/openerp-server.py
NAME=openerp
USER=openerp
CONFIG=/etc/openerp-server.conf
PIDFILE=/var/run/$NAME.pid
start() {
echo "Starting $NAME"
start-stop-daemon --start --quiet --background --pidfile $PIDFILE --chuid $USER --exec $DAEMON -- --config=$CONFIG
}
stop() {
echo "Stopping $NAME"
start-stop-daemon --stop --pidfile $PIDFILE
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
스크립트 파일에 실행 권한을 주고 업데이트-rc.d로 등록합니다.
sudo chmod +x /etc/init.d/openerp
sudo update-rc.d openerp defaults
운영 팁: Upstart 또는 supervisor 같은 프로세스 관리자 사용을 고려하세요. 롱런 서비스 모니터링을 위해 monit, God, Supervisor를 연동할 수 있습니다.
SSL과 암호화 구성 옵션
OpenERP 자체는 xmlrpc에 SSL을 지원하나, 실제 운영에서는 프록시(예: nginx, Apache)나 SSL 터미네이션을 사용해 HTTPS를 구성하는 경우가 많습니다. 주요 옵션:
- OpenERP 내부 SSL: xmlrpcs 옵션을 활성화하고 인증서와 개인키를 설정합니다. 간단하지만 관리가 상대적으로 불편합니다.
- 리버스 프록시(권장): nginx 또는 Apache를 앞단에 두고 HTTPS를 처리한 뒤 내부적으로 HTTP로 프록시합니다. 이 방식은 인증서 관리와 로드 밸런싱이 용이합니다.
- 전용 SSL 터널(stunnel): OpenERP 서비스 앞에 stunnel을 두어 암호화를 처리할 수 있습니다.
권장: nginx를 사용한 SSL 종료와 HTTP 프록시를 권장합니다. nginx는 성능과 설정 편의성이 좋습니다.
간단한 nginx 설정 예시(요약):
- SSL 인증서와 키를 /etc/ssl/*에 저장
- nginx에서 443 포트로 수신하고 proxy_pass로 http://127.0.0.1:8069로 전달
보안 주의: 데이터베이스 접속, SMTP 자격증명은 모두 암호화된 채널로 관리하세요.
업그레이드, 백업 및 롤백 SOP
소스 기반 설치의 강점은 업그레이드를 통제할 수 있다는 점입니다. 간단한 업그레이드 절차:
- 현재 버전과 맞는 백업 생성
- 데이터베이스 pg_dumpall 또는 pg_dump 사용
- 사용자 콘텐츠(모듈, 보고서 템플릿) 백업
- 새 버전 소스 업로드 및 /opt/openerp에 압축 해제
- 새 디렉터리에서 테스트 실행(비-프로덕션 포트 또는 로컬에서)
- 문제가 없으면 server 디렉터리에 복사하여 덮어쓰기
- 서비스 재시작
- 사후 테스트 및 로그 확인
롤백 절차:
- 덮어쓰기 전의 버전 디렉터리를 보관했으면 해당 디렉터리를 다시 복사한 뒤 서비스 재시작.
- 데이터베이스 마이그레이션이 발생한 경우에는 별도의 데이터베이스 백업에서 복원해야 합니다. 마이그레이션이 있는 업그레이드는 특히 주의가 필요합니다.
백업 명령 예시:
sudo -u postgres pg_dumpall > /root/pg_dumpall-`date +%F`.sql
sudo tar czf /root/openerp-files-`date +%F`.tgz /opt/openerp
중요: 데이터베이스 스키마 변경이 있는 메이저 업그레이드는 미리 테스트 환경에서 필수로 검증하세요.
운영자별 체크리스트
시스템 관리자
- OS 패치와 보안 업데이트 적용
- SSH 키 관리 및 방화벽 설정
- 로그 수집 및 로테이션 확인
- 서비스 모니터링(프로세스 다운 경보)
데이터베이스 관리자
- PostgreSQL 백업 및 복원 절차 문서화
- pg_hba.conf 및 postgresql.conf 최적화 검토
- 연결 수와 maxconn 값 조정
애플리케이션 관리자
- 사용자 계정과 권한 관리
- 모듈 설치/업데이트 기록 유지
- 이메일 발송 설정 확인 및 테스트
개발자
- 커스텀 모듈 소스 관리(버전 관리 권장)
- 테스트 환경에서 모듈 검증
- 업그레이드 호환성 테스트
보안 강화 권장 사항
- SSH는 키 인증만 허용하도록 설정
- 불필요한 포트는 차단
- /etc/openerp-server.conf와 같은 민감 파일에 엄격한 권한 적용
- PostgreSQL은 로컬 접속으로 제한하거나 SSL 연결 사용 검토
- 정기적인 패치 정책 수립
- 모니터링과 로그 분석으로 의심 활동 탐지
문제 해결 체크리스트
- 서버가 시작되지 않음: 로그 파일(/var/log/openerp/openerp-server.log) 확인
- DB 연결 오류: db_user/db_password, pg_hba.conf, PostgreSQL 서비스 상태 확인
- 모듈 로드 실패: addons_path 및 파일 권한 확인
- 포트 충돌: 다른 서비스가 8069 포트를 사용하고 있는지 확인
테스트 항목과 수락 기준
핵심 테스트 케이스
- 데이터베이스 연결: OpenERP가 PostgreSQL에 인증 후 DB를 생성/삭제할 수 있다.
- 웹 UI 접근: HTTPS(또는 HTTP 내부 테스트 포트)로 웹 클라이언트에 로그인 가능
- 모듈 설치: 기본 모듈 하나를 설치/활성화/비활성화할 수 있다.
- 백업/복원: 백업으로부터 DB를 복원하고 애플리케이션이 정상 동작한다.
수락 기준
- 시스템은 재부팅 후 자동으로 OpenERP 서비스를 시작한다.
- 관리자는 웹 UI에 로그인 후 기본 거래(예: 고객 생성)를 수행할 수 있다.
- 로그에 심각한 오류(critical/error)가 남지 않는다.
대체 접근 방식 및 언제 적용할지
패키지 설치(apt) 사용
- 장점: 설치가 빠르고 관리가 단순
- 단점: 배포판 저장소의 버전이 오래되었거나 구성 옵션이 제한적일 수 있음
- 권장 시나리오: 내부 테스트 서버나 빠른 데모 환경
도커 컨테이너 사용
- 장점: 격리된 환경, 배포와 롤백이 쉬움
- 단점: Docker를 운영 환경에 도입해야 하며 네트워크/스토리지 설계가 필요
- 권장 시나리오: 컨테이너 기반 인프라를 운영 중인 경우
업그레이드 시 자주 하는 실수
- 데이터베이스 백업 없이 업그레이드 진행
- 커스텀 모듈 호환성 미확인
- SSL과 리버스 프록시 설정을 업그레이드 후 검토하지 않음
요약
- 수동 설치는 더 많은 제어와 유연성을 제공합니다.
- PostgreSQL 사용자와 비밀번호 관리는 설치의 핵심입니다.
- SSL은 리버스 프록시로 처리하는 것을 권장합니다.
- 업그레이드 전 백업과 테스트는 필수입니다.
중요
이 문서는 OpenERP 6의 설치와 운영을 돕기 위한 실무 가이드입니다. 실제 프로덕션 환경에서는 추가적인 보안 검토와 내부 정책을 반영하세요.
참고 링크
- 원문 튜토리얼: http://www.theopensourcerer.com/2011/04/19/how-to-install-openerp-6-on-ubuntu-10-04-lts-server-part-1/
- 원문 튜토리얼(SSL): http://www.theopensourcerer.com/2011/04/21/how-to-install-openerp-6-on-ubuntu-10-04-lts-server-part-2-ssl/
끝으로 요약된 체크리스트
- OS 최신 상태 확인
- openssh-server 설치 및 SSH 키 기반 로그인 구성
- PostgreSQL과 OpenERP DB 사용자 생성
- Python 라이브러리 설치
- OpenERP 소스 압축 해제 및 권한 설정
- /etc/openerp-server.conf 구성 및 권한 설정
- 서비스 자동 시작 스크립트 설치
- SSL 또는 리버스 프록시 구성
- 백업과 복원 절차 문서화