From 2da97adf9dfc426f526e914aad1790da900ddf84 Mon Sep 17 00:00:00 2001 From: Robin Kim Date: Tue, 27 Apr 2021 18:55:39 +0900 Subject: [PATCH] =?UTF-8?q?Dockerfile,=20docker-compose.yml=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- docker-compose.production.yml | 10 ++--- docker-compose.staging.yml | 10 ++--- docker-compose.yml | 17 +++++++ docker/.envrc | 45 ------------------- docker/app/Dockerfile | 36 +++++++++++++++ docker/nginx/Dockerfile | 7 +++ docker/nginx/app.conf | 44 ++++++++++++++++++ {docker => docker_old}/Dockerfile | 0 {docker => docker_old}/README.md | 0 .../bashrc/production/.bashrc | 0 {docker => docker_old}/bashrc/staging/.bashrc | 0 .../production/docker-compose.yml | 0 .../docker-compose/staging/docker-compose.yml | 0 {docker => docker_old}/env/production/.keep | 0 {docker => docker_old}/env/staging/.keep | 0 .../logrotate/production/api | 0 .../logrotate/production/serverlog | 0 {docker => docker_old}/logrotate/staging/api | 0 .../logrotate/staging/serverlog | 0 {docker => docker_old}/mac_init.sh | 2 +- .../load_balencer/canary/nginx.conf.template | 0 .../load_balencer/single/nginx.conf.template | 0 .../nginx/production/nginx.conf | 0 .../nginx/staging/nginx.conf | 0 {docker => docker_old}/scripts/_docker_env.sh | 0 {docker => docker_old}/scripts/deploy.sh | 0 {docker => docker_old}/scripts/docker_env.sh | 0 {docker => docker_old}/scripts/env.sh | 2 +- .../scripts/folder_structure_init.sh | 0 .../scripts/useful_commands.sh | 0 31 files changed, 118 insertions(+), 59 deletions(-) create mode 100644 docker-compose.yml delete mode 100644 docker/.envrc create mode 100644 docker/app/Dockerfile create mode 100644 docker/nginx/Dockerfile create mode 100644 docker/nginx/app.conf rename {docker => docker_old}/Dockerfile (100%) rename {docker => docker_old}/README.md (100%) rename {docker => docker_old}/bashrc/production/.bashrc (100%) rename {docker => docker_old}/bashrc/staging/.bashrc (100%) rename {docker => docker_old}/docker-compose/production/docker-compose.yml (100%) rename {docker => docker_old}/docker-compose/staging/docker-compose.yml (100%) rename {docker => docker_old}/env/production/.keep (100%) rename {docker => docker_old}/env/staging/.keep (100%) rename {docker => docker_old}/logrotate/production/api (100%) rename {docker => docker_old}/logrotate/production/serverlog (100%) rename {docker => docker_old}/logrotate/staging/api (100%) rename {docker => docker_old}/logrotate/staging/serverlog (100%) rename {docker => docker_old}/mac_init.sh (97%) rename {docker => docker_old}/nginx/load_balencer/canary/nginx.conf.template (100%) rename {docker => docker_old}/nginx/load_balencer/single/nginx.conf.template (100%) rename {docker => docker_old}/nginx/production/nginx.conf (100%) rename {docker => docker_old}/nginx/staging/nginx.conf (100%) rename {docker => docker_old}/scripts/_docker_env.sh (100%) rename {docker => docker_old}/scripts/deploy.sh (100%) rename {docker => docker_old}/scripts/docker_env.sh (100%) rename {docker => docker_old}/scripts/env.sh (95%) rename {docker => docker_old}/scripts/folder_structure_init.sh (100%) rename {docker => docker_old}/scripts/useful_commands.sh (100%) diff --git a/.gitignore b/.gitignore index d3df80d7..e33a218a 100644 --- a/.gitignore +++ b/.gitignore @@ -60,8 +60,8 @@ db/data_schema.rb # D O C K E R .direnv/ .docker-sync/ -docker/.docker_password.txt -docker/.envs +docker_old/.docker_password.txt +docker_old/.envs # A U T O M I Z A T I O N .envrc diff --git a/docker-compose.production.yml b/docker-compose.production.yml index 73de2a2e..d51f8bc6 100644 --- a/docker-compose.production.yml +++ b/docker-compose.production.yml @@ -12,11 +12,11 @@ services: - ./log/nginx/production:/opt/nginx/logs - ./log:/app/log - ./config/master.key:/app/config/master.key - - ./docker/env/production/.env:/app/.env - - ./docker/bashrc/production/.bashrc:/root/.bashrc - - ./docker/logrotate/production/api:/etc/logrotate.d/api - - ./docker/logrotate/production/serverlog:/etc/logrotate.d/serverlog - - ./docker/nginx/production/nginx.conf:/opt/nginx/conf/nginx.conf + - ./docker_old/env/production/.env:/app/.env + - ./docker_old/bashrc/production/.bashrc:/root/.bashrc + - ./docker_old/logrotate/production/api:/etc/logrotate.d/api + - ./docker_old/logrotate/production/serverlog:/etc/logrotate.d/serverlog + - ./docker_old/nginx/production/nginx.conf:/opt/nginx/conf/nginx.conf stdin_open: true tty: true command: diff --git a/docker-compose.staging.yml b/docker-compose.staging.yml index b143d015..84c39a2b 100644 --- a/docker-compose.staging.yml +++ b/docker-compose.staging.yml @@ -12,11 +12,11 @@ services: - ./log/nginx/staging:/opt/nginx/logs - ./log:/app/log - ./config/credentials/staging.key:/app/config/credentials/staging.key - - ./docker/env/staging/.env:/app/.env - - ./docker/bashrc/staging/.bashrc:/root/.bashrc - - ./docker/logrotate/staging/api:/etc/logrotate.d/api - - ./docker/logrotate/staging/serverlog:/etc/logrotate.d/serverlog - - ./docker/nginx/staging/nginx.conf:/opt/nginx/conf/nginx.conf + - ./docker_old/env/staging/.env:/app/.env + - ./docker_old/bashrc/staging/.bashrc:/root/.bashrc + - ./docker_old/logrotate/staging/api:/etc/logrotate.d/api + - ./docker_old/logrotate/staging/serverlog:/etc/logrotate.d/serverlog + - ./docker_old/nginx/staging/nginx.conf:/opt/nginx/conf/nginx.conf stdin_open: true tty: true command: diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..bdebac76 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +version: '3' + +services: + app: + build: + context: . # docker build 명령을 실행할 폴더 경로 + dockerfile: ./docker/app/Dockerfile + container_name: app_container + nginx: + build: + context: ./docker/nginx + dockerfile: Dockerfile + container_name: nginx_container + depends_on: + - app + ports: + - 80:80 diff --git a/docker/.envrc b/docker/.envrc deleted file mode 100644 index 3e175bd5..00000000 --- a/docker/.envrc +++ /dev/null @@ -1,45 +0,0 @@ -function export_alias() { - local name=$1 - shift - local alias_dir=$PWD/.direnv/aliases - local target="$alias_dir/$name" - mkdir -p "$alias_dir" - PATH_add "$alias_dir" - echo "#!/usr/bin/env bash -e" > "$target" - echo "$@" >> "$target" - chmod +x "$target" -} - -export_alias db_init "docker run --rm -v platform-api_codes:/app --env-file ./.env platform-api bash -c 'rails db:create' \ - && docker run --rm -v platform-api_codes:/app --env-file ./.env platform-api bash -c 'rails db:migrate' \$@" - -export_alias image_init "docker build --pull -t platform-api . --no-cache \ - && rm -rf Gemfile.lock \ - && docker run --rm -v platform-api_codes:/app platform-api bash -c 'bundle install' \$@" - -export_alias yarn_install "docker run --rm -v platform-api_codes:/app platform-api bash -c \ - 'yarn install' \$@" - -export_alias dev_start "docker-sync start && docker-compose up -d \$@" - -export_alias dev_stop "docker-compose stop && docker-sync stop \$@" - -export_alias dev_down "docker-compose down \$@" - -export_alias shell "docker exec -it platform-api-web /bin/bash \$@" - -export_alias railss "docker exec -it platform-api-web bash -c 'rails s -b 0.0.0.0 -p 3030' \$@" - -export_alias console "docker exec -it platform-api-web bash -c 'rails c' \$@" - -export_alias sandbox "docker exec -it platform-api-web bash -c 'rails console --sandbox' \$@" - -export_alias prod_image_build "docker build --pull -t gomicorp/platform-api -f ./docker/Dockerfile ./ \$@" - -export_alias staging_deploy "docker push gomicorp/platform-api \ - && bash docker/scripts/deploy.sh ${ssh_host_name} platform-api staging - \$@" - -export_alias production_production_deploy "docker push gomicorp/platform-api \ - && bash docker/scripts/deploy.sh ${ssh_host_name} platform-api production - \$@" diff --git a/docker/app/Dockerfile b/docker/app/Dockerfile new file mode 100644 index 00000000..a06e8b94 --- /dev/null +++ b/docker/app/Dockerfile @@ -0,0 +1,36 @@ +FROM ruby:2.6.3 + +RUN apt-get update -qq \ + && apt-get install -y build-essential + +# Node.js 설치 +RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g yarn + +# 컨테이너의 루트에 webapp 폴더 생성 +RUN mkdir /app +WORKDIR /app + +# host의 Gemfile, Gemfile.lock을 컨테이너에 복사 +ADD Gemfile Gemfile +ADD Gemfile.lock Gemfile.lock + + +# bundle install 실행 +RUN gem update --system \ + && gem install bundler:1.17.3 \ + && bundler update --bundler + + +# host의 app 코드를 컨테이너에 복사 +COPY . . + +RUN yarn install --check-files + +RUN mkdir -p tmp/pids + +EXPOSE 3000 + +CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"] + diff --git a/docker/nginx/Dockerfile b/docker/nginx/Dockerfile new file mode 100644 index 00000000..b6d2cc31 --- /dev/null +++ b/docker/nginx/Dockerfile @@ -0,0 +1,7 @@ +FROM nginx:latest + +RUN rm -f /etc/nginx/conf.d/* + +COPY app.conf /etc/nginx/conf.d/app.conf + +CMD ["nginx", "-g", "daemon off;"] diff --git a/docker/nginx/app.conf b/docker/nginx/app.conf new file mode 100644 index 00000000..450404eb --- /dev/null +++ b/docker/nginx/app.conf @@ -0,0 +1,44 @@ +upstream rails_app { + server app_container:3030; +} + +server { + # define your domain + server_name app_container; + # define the public application root + root /app/public; + index index.html; + # define where Nginx should write its logs + # access_log /app/log/nginx.access.log; + # error_log /app/log/nginx.error.log; + + # deny requests for files that should never be accessed + location ~ /\. { + deny all; + } + location ~* ^.+\.(rb|log)$ { + deny all; + } + + location ~ ^/(assets|images|javascripts|stylesheets|swfs|system)/ { + try_files $uri @rails; + access_log off; + gzip_static on; + # to serve pre-gzipped version + expires max; + add_header Cache-Control public; + + add_header Last-Modified ""; + add_header ETag ""; + break; + } + + # send non-static file requests to the app server + location / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header Host $http_host; + proxy_redirect off; + proxy_pass http://rails_app; + } +} diff --git a/docker/Dockerfile b/docker_old/Dockerfile similarity index 100% rename from docker/Dockerfile rename to docker_old/Dockerfile diff --git a/docker/README.md b/docker_old/README.md similarity index 100% rename from docker/README.md rename to docker_old/README.md diff --git a/docker/bashrc/production/.bashrc b/docker_old/bashrc/production/.bashrc similarity index 100% rename from docker/bashrc/production/.bashrc rename to docker_old/bashrc/production/.bashrc diff --git a/docker/bashrc/staging/.bashrc b/docker_old/bashrc/staging/.bashrc similarity index 100% rename from docker/bashrc/staging/.bashrc rename to docker_old/bashrc/staging/.bashrc diff --git a/docker/docker-compose/production/docker-compose.yml b/docker_old/docker-compose/production/docker-compose.yml similarity index 100% rename from docker/docker-compose/production/docker-compose.yml rename to docker_old/docker-compose/production/docker-compose.yml diff --git a/docker/docker-compose/staging/docker-compose.yml b/docker_old/docker-compose/staging/docker-compose.yml similarity index 100% rename from docker/docker-compose/staging/docker-compose.yml rename to docker_old/docker-compose/staging/docker-compose.yml diff --git a/docker/env/production/.keep b/docker_old/env/production/.keep similarity index 100% rename from docker/env/production/.keep rename to docker_old/env/production/.keep diff --git a/docker/env/staging/.keep b/docker_old/env/staging/.keep similarity index 100% rename from docker/env/staging/.keep rename to docker_old/env/staging/.keep diff --git a/docker/logrotate/production/api b/docker_old/logrotate/production/api similarity index 100% rename from docker/logrotate/production/api rename to docker_old/logrotate/production/api diff --git a/docker/logrotate/production/serverlog b/docker_old/logrotate/production/serverlog similarity index 100% rename from docker/logrotate/production/serverlog rename to docker_old/logrotate/production/serverlog diff --git a/docker/logrotate/staging/api b/docker_old/logrotate/staging/api similarity index 100% rename from docker/logrotate/staging/api rename to docker_old/logrotate/staging/api diff --git a/docker/logrotate/staging/serverlog b/docker_old/logrotate/staging/serverlog similarity index 100% rename from docker/logrotate/staging/serverlog rename to docker_old/logrotate/staging/serverlog diff --git a/docker/mac_init.sh b/docker_old/mac_init.sh similarity index 97% rename from docker/mac_init.sh rename to docker_old/mac_init.sh index dc9dba1a..54911037 100644 --- a/docker/mac_init.sh +++ b/docker_old/mac_init.sh @@ -1,6 +1,6 @@ #!/bin/sh -# docker-sync install +# docker_old-sync install gem install docker-sync docker-sync start diff --git a/docker/nginx/load_balencer/canary/nginx.conf.template b/docker_old/nginx/load_balencer/canary/nginx.conf.template similarity index 100% rename from docker/nginx/load_balencer/canary/nginx.conf.template rename to docker_old/nginx/load_balencer/canary/nginx.conf.template diff --git a/docker/nginx/load_balencer/single/nginx.conf.template b/docker_old/nginx/load_balencer/single/nginx.conf.template similarity index 100% rename from docker/nginx/load_balencer/single/nginx.conf.template rename to docker_old/nginx/load_balencer/single/nginx.conf.template diff --git a/docker/nginx/production/nginx.conf b/docker_old/nginx/production/nginx.conf similarity index 100% rename from docker/nginx/production/nginx.conf rename to docker_old/nginx/production/nginx.conf diff --git a/docker/nginx/staging/nginx.conf b/docker_old/nginx/staging/nginx.conf similarity index 100% rename from docker/nginx/staging/nginx.conf rename to docker_old/nginx/staging/nginx.conf diff --git a/docker/scripts/_docker_env.sh b/docker_old/scripts/_docker_env.sh similarity index 100% rename from docker/scripts/_docker_env.sh rename to docker_old/scripts/_docker_env.sh diff --git a/docker/scripts/deploy.sh b/docker_old/scripts/deploy.sh similarity index 100% rename from docker/scripts/deploy.sh rename to docker_old/scripts/deploy.sh diff --git a/docker/scripts/docker_env.sh b/docker_old/scripts/docker_env.sh similarity index 100% rename from docker/scripts/docker_env.sh rename to docker_old/scripts/docker_env.sh diff --git a/docker/scripts/env.sh b/docker_old/scripts/env.sh similarity index 95% rename from docker/scripts/env.sh rename to docker_old/scripts/env.sh index 52f45921..f82fc5dc 100644 --- a/docker/scripts/env.sh +++ b/docker_old/scripts/env.sh @@ -14,7 +14,7 @@ rsync -avz ../.envs/${type}/.env ${endpoint}:~/${app_name}/${type}/ #nginx config 업데이트 rsync -avz ../nginx/${type}/nginx.conf ${endpoint}:~/${app_name}/${type} -#docker-compose 업데이트 +#docker_old-compose 업데이트 rsync -avz ../docker-compose/${type}/docker-compose.yml ${endpoint}:~/${app_name}/${type} #entrypoint 업데이트 diff --git a/docker/scripts/folder_structure_init.sh b/docker_old/scripts/folder_structure_init.sh similarity index 100% rename from docker/scripts/folder_structure_init.sh rename to docker_old/scripts/folder_structure_init.sh diff --git a/docker/scripts/useful_commands.sh b/docker_old/scripts/useful_commands.sh similarity index 100% rename from docker/scripts/useful_commands.sh rename to docker_old/scripts/useful_commands.sh