Page tree
Skip to end of metadata
Go to start of metadata

자바 웹 프로젝트 배포

  • 한 대의 개발 서버에서 여러 프로젝트를 구축할 수 있도록 한다.
  • 예를 들어 개발 서버에서 slipp-admin, slipp-web, slipp-batch 웹 서비스를 배포할 수 있는 배포 환경을 구축한다.

작업 목록

  • fabric에서 여러 개의 서비스에 대한 디렉토리를 관리할 수 있도록 한다.
  • 배포할 디렉토리에 웹 애플리케이션 기본 디렉토리를 초기화할 수 있어야 한다.
    • 예를 들어 tomcat의 경우 conf, temp, webapps, work 디렉토리와 설정을 자동 생성한다.
    • 특정 디렉토리에 이 설정 파일을 두고 복사하는 방식으로 해도 괜찮겠다.
  • 웹 서비스의 base 디렉토리를 설정을 통해 관리하도록 한다.

배포 시나리오

  • 각 서비스별 배포 시나리오는 2st fabric examples의 배포 시나리오를 따른다.
  • 2st fabric examples 배포 시나리오에 각 서비스별로 소스 코드, 배포 버전을 관리할 수 있어야 한다.

배포 스크립트

import os.path
from fabric.api import env, local, run, execute
env.base_dir = "/Users/javajigi/python-workspace/fabric/projects"
environments = {
    "dev": {
        "source_dir": "%(base_dir)s/source" % {"base_dir":env.base_dir},
        "release_suffix_dir": "releases",
        "tomcat_base_suffix_dir": "tomcat_base",
    },
}
projects = {
    "slipp-web": {
        "hosts": ["localhost"],
        "web_port": 8080
    }    
}
 
def init(environment='dev', name='slipp-web'):
    print "Setting environment", environment
    env.update(environments[environment])
    env.update(projects[name])
    env.environment = environment
    env.project_name = name
    execute(create_project_dir)

def create_project_dir():
    env.project_base = '%s/%s' % (env.base_dir, env.project_name)
    print "project base", env.project_base
    if not os.path.exists(env.project_base):
        print "does not exists", env.project_base
        local("cp -R %s %s" % (env.source_dir, env.project_base)) 
 
def configure():
    origin_serverxml = '%s/%s/conf/server.xml' % (env.source_dir, env.tomcat_base_suffix_dir)
    target_serverxml = '%s/%s/conf/server.xml' % (env.project_base, env.tomcat_base_suffix_dir)
    with open(target_serverxml, "w") as fout:
        with open(origin_serverxml, "r") as fin:
            for line in fin:
                fout.write(line.replace('${PORT}', '%s' % (env.web_port)))
            fin.close
            fout.close
  • No labels