컨테이너에서 dev.to 실행

새로운 게시물, 더 나은 UX!







아래 원본글은 여기



! 대박! 애플리케이션을 실행하는 것은 상대적으로 쉬우므로 좋은 문서화와 깨끗한 레일 프로젝트를 위해 dev.to 팀에 지원합니다.

이 문서에서는 컨테이너에서 실행 중인 dev.to의 개발 버전을 가져오는 방법을 안내합니다.

아키텍처



dev.to는 개발 모드에서 실행하기 위해 웹 서버와 데이터베이스가 필요합니다. 생산을 위해 더 많은 서비스가 필요할 수 있지만 지금은 범위를 벗어납니다.

데이터베이스



데이터베이스는 앱의 종속성이므로 먼저 존재해야 합니다. 데이터베이스 컨테이너와 앱 컨테이너는 동일한 네트워크에 상주하므로 tcp를 통해 통신할 수 있습니다.

데이터베이스 상태는 호스트 컴퓨터(이 경우 내 노트북)의 디스크에 저장됩니다. 컨테이너가 다시 시작될 때 약간의 지속성을 갖도록 데이터 디렉토리를 postgres 컨테이너에 마운트하는 것을 좋아합니다. Here is some optional reading 다음 부분을 좀 더 명확하게 만들 수 있습니다.

# create the data directory
mkdir data

# create the docker network that will be shared by db and app containers
docker network create devto

# launch postgres
#   `--rm` removes the container when it stops running. This just helps us clean up
#   `--network devto` connects this container to our created network
#   `--name db` names the container and is shown in the output of `docker ps`
#   `-e POSTGRES_PASSWORD=devto` sets an environment variable which will set the password we will use to connect to postgres
#   `-e POSTGRES_USER=devto` sets the env var which will define the user that will connect to postgres
#   `-e POSTGRES_DB=PracticalDeveloper_development` sets the env var that defines the default database to create
#   `-v $(PWD)/data:/var/lib/postgresql/data` mounts the data directory we created above into the postgres container where all the data will live
#   `postgres:10` runs postgres using the latest stable 10 release (example: v10.5)
docker run --rm --network devto --name db -e POSTGRES_PASSWORD=devto -e POSTGRES_USER=devto -e POSTGRES_DB=PracticalDeveloper_development -v $(PWD)/data:/var/lib/postgresql/data postgres:10

웹 애플리케이션



다음 Dockerfile과 함께 작동하려면 코드를 약간 수정해야 합니다. 내가 변경한 사항은 다음과 같습니다.
  • gem "tzinfo-data"Gemfile 추가
  • url: <%= ENV['DATABASE_URL'] %>의 기본 데이터베이스 구성에서 config/database.yaml를 설정합니다.
  • 테스트 구성
  • 에서 동일한 파일의 주석 처리host: localhost
    이 작업을 마친 후에 나는 이미 존재하는 것과 가 둘 다 있다는 것을 알게 되었습니다. 이 기사에 제시된 접근 방식은 첫 번째 패스이며 정리가 필요하지만 진행 상황에 대해 명확하게 설명하려고 노력했습니다.

    FROM ubuntu:18.04
    
    ADD . /root/dev.to
    WORKDIR /root/dev.to/
    
    # Set up to install ruby
    RUN apt update && apt install -y autoconf bison build-essential libssl-dev libyaml-dev libreadline-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm5 libgdbm-dev
    
    # This uhh helps when you run the container in interactive mode
    RUN echo 'export PATH=/root/.rbenv/bin:/root/.rbenv/shims:$PATH' >> ~/.bashrc
    
    # install rbenv-installer
    RUN apt install -y curl git && \
        export PATH=/root/.rbenv/bin:/root/.rbenv/shims:$PATH && \
        curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash
    
    # install rbenv
    RUN export PATH=/root/.rbenv/bin:/root/.rbenv/shims:$PATH && \
        rbenv install && \
        echo 'eval "$(rbenv init -)"' >> ~/.bashrc
    
    # Install gems and yarn
    RUN export PATH=/root/.rbenv/bin:/root/.rbenv/shims:$PATH && \
        gem install bundler && \
        gem install foreman && \
        curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
        echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
        apt-get update &&\
        apt install -y yarn libpq-dev && \
        bundle install && \
        bin/yarn
    

    아래에서 올바른 Algolia 키/앱 ID로 이 명령을 수정한 다음 도커 이미지를 빌드하고 실행합니다.

    docker build . -t dev.to:latest
    
    # setting the various timeouts to large numbers 10000 since the docker version of this app and database tend to be *extremely* slow.
    # -p 3000:3000 exposes the port 3000 on the container to the host's port 3000. This lets us access our dev environment on our laptop at http://localhost:3000.
    docker run -it --rm --network devto -p 3000:3000 -e RACK_TIMEOUT_WAIT_TIMEOUT=10000 -e RACK_TIMEOUT_SERVICE_TIMEOUT=10000 -e STATEMENT_TIMEOUT=10000 -e ALGOLIASEARCH_API_KEY=yourkey -e ALGOLIASEARCH_APPLICATION_ID=yourid -e ALGOLIASEARCH_SEARCH_ONLY_KEY=yourotherkey -e DATABASE_URL=postgresql://devto:devto@db:5432/PracticalDeveloper_development dev.to:latest /bin/bash
    
    > bin/setup
    > bin/rails server
    ...
    

    그런 다음 노트북을 엽니다http://localhost:3000.

    문제가 있는 경우 댓글을 남겨주시면 이 게시물을 업데이트하겠습니다!

    Kubernetes에서 dev.to를 실행하는 방법에 대한 시리즈의 1부입니다. 다음 글도 기대해주세요!

    좋은 웹페이지 즐겨찾기