Perlanet 컨테이너 구축

나는 여전히 웹 피드가 꽤 깔끔한 아이디어라고 믿는 공룡입니다. 저는 perlanet(웹 피드를 새 피드로 집계하고 해당 새 피드를 기반으로 웹 사이트를 구축하기 위한 Perl 프로그램)을 작성하고 유지 관리하며 이를 사용하여 a few sites on topics I’m interested in 을 구축합니다.

작년에 나는 몇 시간마다 GitHub Actions를 사용하는 방법을 알아내어 GitHub Pages에서 사이트를 호스팅할 수 있게 되었습니다. – GitHub의 누군가는 반드시 언젠가는 알아차릴 것입니다!)

어제 저는 이러한 사이트 중 하나에서 간단한 유지 관리를 수행하고 있었는데, 이 사이트를 다시 구축하는 데 상당한 시간(즉, 4~5분)이 걸린다는 사실을 깨닫고 속도를 높일 수 있는 방법이 있는지 궁금해지기 시작했습니다. GitHub의 리소스를 적게 사용합니다. 문제는 Perlanet이 꽤 무거운 모듈이고 매번 다시 빌드할 때마다 원래의 Ubuntu 컨테이너에 해당 모듈(따라서 수십 개의 다른 모듈)을 설치한다는 것입니다.

그렇게 말하면 해결책은 뻔하다.

GitHub가 제공하는 표준 컨테이너에서 GitHub Actions를 실행할 필요가 없습니다. 퍼블릭 컨테이너 호스팅 서비스에서 사용할 수 있는 모든 컨테이너에서 실행할 수 있습니다. 따라서 해결책은 Perlanet 컨테이너를 구축하고 대신 이를 사용하여 작업을 실행하는 것이었습니다. 그래서 어제 한 시간 정도를 보냈습니다.

내가 만든 Dockerfile은 다음과 같습니다.

FROM perl:latest

RUN apt-get update && \
    apt-get -y upgrade && \ 
    apt-get install -y build-essential && \
    apt-get install -y cpanminus libtidy-dev libxml++2.6-dev libhtml-tidy-perl && \
    cpanm --notest Test::Exception && \
    cpanm --notest Perlanet && \
    cpanm --notest LWP::Protocol::https


(분명히) available on GitHub 누군가가 Docker에 대한 다소 끈질긴 지식을 개선하고 싶어하는 경우입니다.

HTML::Tidy(Perlanet의 전제 조건 중 하나)에 Test::Exception이 필요하기 때문에 Test::Exception을 명시적으로 설치하고 표준 설치 절차에서 설치하지 않는 이유를 알 수 없습니다. 그리고 LWP::Protocol::https는 엄밀히 말하면 Perlanet에서 요구하지 않지만 HTTP를 통해 사용할 수 있는 웹 피드에만 액세스하는 경우 현대 웹에서 멀리 가지 못할 것입니다.

약간의 Docker Hub 설정 및 컨테이너는 available for everyone to use입니다(그리고 리포지토리에 커밋할 때마다 자동으로 다시 빌드됨).

그런 다음 내 컨테이너를 사용하도록 내 GitHub Actions를 변경하는 경우였습니다. 다음은 그렇게 한 one of the commits의 예입니다.

나는 여기 파티에 꽤 늦었다는 것을 깨닫지만 이것이 유용한 패턴이라고 생각합니다. 사용자에게 서비스를 제공하기 위해 존재하는 Perl 라이브러리(또는 실제로 다른 소프트웨어)가 있는 경우 해당 소프트웨어의 컨테이너화된 버전을 제공하는 것이 좋습니다.

그리고 사이트 재구축 시간이 4~5분에서 ​​약 45초로 단축되었다는 소식을 전하게 되어 기쁩니다.

게시물 Building a Perlanet ContainerPerl Hacks에 처음 나타났습니다.

좋은 웹페이지 즐겨찾기