Cloud Foundry buildpack 개발 배포 인스턴스 분석
CF가 응용 프로그램을 실행하는 기본 과정은 사용자가 발표한 응용 프로그램 패키지를 압축을 풀고 자신의 모든build 패키지를 가져와 지정한 순서에 따라 패키지와 일치하게 하고 이 코드를 실행할 수 있는build 패키지를 찾을 때까지build 패키지를 풀고 이 응용 코드와 패키지(droplet)를 만들어 지정한 실행 환경 파라미터에 따라 용기를 생성하여droplet를 던져 넣는 것이다.buildpack에서 지정한 시작 명령에 따라 응용을 시작합니다.위의 과정에서buildpack은 세 가지 기능을 실현했다. 첫 번째,detect: 현재 응용 프로그램 패키지가 이buildpack으로 실행될 수 있는지 검사한다. 예를 들어javabuildpack은WEB-INF 경로를 발견하면 자신이 실행할 수 있다고 생각한다.두 번째 단계,compile: 응용 프로그램 패키지와buildpack 패키지를 융합시킨다. 예를 들어 자바 프로그램 패키지를tomcat의 응용 디렉터리에 놓고 일부 파라미터를 바꾼다. 예를 들어 현재 dea의 무작위 포트에 이tomcat의 실례를 부여한다.세 번째,release:droplet을 시작합니다. 예를 들어tomcat을 실행하는 startup.sh.모든buildpack에bin 경로가 있고 지정된 이름 (detect,compile,release) 의 스크립트 세 개가 놓여 있으며, 구체적인 실현 논리는 여기서 터치됩니다.다음은javabuildpack를 예로 삼아 세 가지 실제 수요를 통해buildpack의 개발과 사용을 소개할 것이다.
사용자 정의buildpack
자바 응용 프로그램의 기본 시간대와 인코딩 업데이트
요구 사항
국제 소프트웨어는 모두 그리니치 시간을 시스템의 기본 시간으로 사용하기 때문에 우리가 쓴 로그나 프로그램 코드로 얻은 시스템 시간(사실은 모두 dea의 시스템 시간)은 모두 +0000이고 우리는 +0800이 필요하다. 물론 코드에서 스스로 처리할 수 있다.그러나 내 사용자들은 기분이 좋지 않다. 그들은 내가 이 프로그램을 로컬로 테스트해야 한다고 말한다. 너무 어지러우니 네가 나에게 처리해야 한다.Tomcat의 기본 인코딩은 모두utf8이어야 하지만, 일부 장면에서, 예를 들어 Tomcat에서 실행되는rest 서비스의 경우, 메시지에 중국어가 포함되어 있어 정상적으로 수신할 수 없습니다.CF의javabuildpack에 포함된 것이 기본적인tomcat이기 때문에 이 문제를 해결하기 위해 아래의 명령을 사용하여 설정할 수 있습니다. 그러나 시원하지 않기 때문에buildpack을 직접 고치는 것이 좋습니다.
cf set-env appname CATALINA_OPTS "$CATALINA_OPTS -Dfile.encoding=UTF-8"
솔루션
자바buildpack는 루비가 쓴 것이기 때문에 원칙적인 변동이 아니라면 압축 패키지를 열고 루비 코드를 수정한 다음에 압축하는 방법을 사용할 수 있습니다.그러나 winrar는 엉뚱한 문제가 있는 것 같습니다. 압축을 풀고 압축하면 문제가 있을 수 있지만, 수정된 동명 파일을 winrar의 창으로 직접 드래그해서 바꾸면 작업을 할 수 있습니다.시간대와 인코딩 두 가지 요구 사항을 충족하기 위해 필요한 파일은 다음과 같습니다.
java-buildpack-offline-v#.#.#\lib\java_buildpack\component\java_opts.rb에는 다음 두 가지 방법이 추가되었습니다.
# @return [JavaOpts] +self+-Duser.timezone
def add_timezone(value)
self << "-Duser.timezone=#{value}"
self
end
# @return [JavaOpts] +self+-Dfile.encoding
def add_fileencode(value)
self << "-Dfile.encoding=#{value}"
self
end
java-buildpack-offline-v#.#.#\lib\java_buildpack\jre\open_jdk_like.rb에서 release 방법을 수정하고add 증가timezone 및 addfileencode 호출
@droplet.java_opts
.add_system_property('java.io.tmpdir', '$TMPDIR')
.add_option('-XX:OnOutOfMemoryError', killjava)
.add_timezone('GMT+08')
.add_fileencode('UTF-8')
.concat memory
수정 후 이 두 파일을 원래의 오프라인buildpack 패키지로 교체한 다음 CF에 발표하여 현재buildpack 상황을 보십시오:
cf buidlpacks
그리고 새buildpack을 만듭니다. 마지막 매개 변수는 cf가buildpack을 보기 위한 순서에 따라 실제 상황에 따라 조정해야 합니다.
cf create-buildpack java_buildpack_with_gmt0800_offline d:\somedir\java-buildpack-with-gmt0800-offline-v2.4.zip 1
업데이트된 경우
cf update-buildpack
를 사용합니다.프로그램 패키지를 사용하는tomcat
요구 사항
일부 응용, 특히 제품을 만드는 회사가 하는tomcat에 대해 일정한 커팅을 하는데 이런 응용이 cf로 옮겨갈 때 매우 고통스럽다.간단한 방법은 jre만 제공하는 build 패키지를 만드는 것이다.
솔루션
이 제품의 ID가 LiveBOS라고 가정하면 패키지의 첫 번째 경로 아래에 LiveBOS 폴더가 있습니다.
java-buildpack-with-livebos-offline-v#.#\lib\java_buildpack\container\에 libe 추가bos.rb:
# Encoding: utf-8
# Cloud Foundry Java Buildpack
# Copyright 2013 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'java_buildpack/container'
require 'java_buildpack/container/dist_zip_like'
require 'java_buildpack/util/dash_case'
module JavaBuildpack
module Container
# Encapsulates the detect, compile, and release functionality for +LiveBOS+ style applications.
class LiveBOS < JavaBuildpack::Container::DistZipLike
# Creates an instance
#
# @param [Hash] context a collection of utilities used the component
def initialize(context)
super(context)
end
# (see JavaBuildpack::Component::BaseComponent#compile)
def compile
startup.chmod 0755
end
# (see JavaBuildpack::Component::BaseComponent#release)
def release
@droplet.java_opts.add_system_property 'http.port', '$PORT'
[
@droplet.java_home.as_env_var,
@droplet.java_opts.as_env_var,
qualify_path(catalina, @droplet.root),
'run'
].flatten.compact.join(' ')
end
protected
# (see JavaBuildpack::Container::DistZipLike#id)
def id
LiveBOS.to_s.dash_case
end
# (see JavaBuildpack::Container::DistZipLike#supports?)
def supports?
livebos? && catalina.exist?
end
private
def startup
candidates = (root + 'bin/startup.sh').glob
candidates.size == 1 ? candidates.first : nil
end
def catalina
candidates = (root + 'bin/catalina.sh').glob
candidates.size == 1 ? candidates.first : nil
end
def livebos?
(root + 'LiveBos').exist?
end
end
end
end
java-buildpack-with-livebos-offline-v2.4\config\components.yml containers 아래에 추가:
- "JavaBuildpack::Container::LiveBOS"
뒤에 포장해서 나왔어요.
buildpack에서 jre 바꾸기
요구 사항
일부 응용 프로그램은 특정 버전의 jre만 사용할 수 있습니다. 만약 이 jre가 비교적 새것이라면 쉽지만, 예를 들어 1.6이라면 현재 cf에서 찾을 수 있는build 패키지는 모두 지원되지 않습니다.또한oracle jre를 사용해야 할 수도 있습니다. (cf에서 기본값은open jre입니다.)
솔루션
시작하기 전에 윈도우즈에서 이 컴파일 과정을 시도하지 않는 것을 권장합니다. 기본적으로 성공할 가능성이 없습니다. 인터넷에 접속해서 루비를 실행할 수 있는 linux를 마음대로 찾아보세요.
java-buildpack-offline-v2 수정.4\config\components.yml, 사용하지 않는 jre 주석을 삭제합니다.
- "JavaBuildpack::Jre::OpenJdkJRE"
# - "JavaBuildpack::Jre::OracleJRE"
java-buildpack-offline-v2 수정.4\config\oracle_jre.yml, 다음 줄의 내용을 로컬 토마토캣의 주소로 업데이트합니다.
repository_root: http://localhost:8080/myapp
로컬 my app 아래에 index를 놓으십시오.yml 파일입니다. 아래 내용과 유사한oracle jre 다운로드 주소를 넣으십시오. 만약oracle 사이트에서 찾을 수 없으면 로컬tomcat에도 놓으십시오.
---
1.7.0_01: http://download.run.pivotal.io/openjdk/centos6/x86_64/openjdk-1.7.0_01.tar.gz
......
1.8.0_M6: http://download.run.pivotal.io/openjdk/centos6/x86_64/openjdk-1.8.0_M6.tar.gz
그리고 포장을 컴파일할 수 있습니다.
bundle install
bundle exec rake package OFFLINE=true
...
Creating build/java-buildpack-offline-cfd6b17.zip
마지막으로 당연히 cf에 발표됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
노드 및 Express AWS Lambda 함수 생성첫 번째 AWS Lambda 함수를 배포하기 전에 Serverless 및 AWS Lambda에 대해 조금 이야기하겠습니다. 이것에 대해 이미 많이 알고 있다면 다음 부분으로 건너뛸 수 있습니다. AWS Lambda는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.