728x90
반응형

Computer Science 56

[Jenkins, Docker] Jenkins CI/CD Docker-out-of-docker 방식으로 구현하기

저번 프로젝트 때 Jenkins pipeline을 쉘 접속을 활용했던 게 마음에 안 들어서이번 프로젝트에서는 꼭 DooD를 구현하겠다 마음먹고 다시 구현해봤다. 다른 방식으로 구현하면서 깨달은 점이 있다면 1. .env파일은 프로덕션 환경에서 만들거나 관리할 필요가 없다.전부 jenkins credential에 만들어두고 compose up 할 때 환경 변수를 withcredentials 이용하여 주입해주기만 하면 되는 것이었다...!이 사실을 알고 나서 빌드 프로세스의 이해가 쉬워지고, 구현이 간편해졌다.- 그럼 jenkins credential이 무엇이냐?: 환경 변수나 계정 정보와 같은 민감한 정보를 관리해주는 역할을 한다. 2. scm checkout하면 jenkins 아래에 jenkins_wor..

[Nginx, React, Docker] 웹서버와 웹 프로젝트 컨테이너 분리하기

우선 분리한 이유기존에는 react + nginx를 합쳐서 프론트엔드 빌드가 끝나면 nginx를 실행하는 방식을 사용했다. 이렇게 하게 되면 불편한 점이: 프론트엔드 빌드가 실패하면 그대로 전체 서버가 죽어버린다.프론트엔드 빌드는 실패해도 기존의 정적 파일을 서빙하는데기존 컨테이너 방식으로는 nginx가 프엔 빌드 실패 시 실행을 안 해서 서빙을 못 한다.게다가 nginx가 리버스 프록싱도 같이 하기 때문에 백엔드 서버 게이트웨이가 죽어버리면................. 이런 이유로 분리했다. 기존의 docker-compose.yml의 client 부분services: client: build: context: ./client dockerfile: Dockerfile c..

[Nginx, WebSocket] Invalid character found in method name [ ]. HTTP method n

GPT를 그렇게 돌렸는데 뭐가 문제였을까나이게 그 서버는 https를 원하는데 http가 와서 에러가 계속 났었다나의 경우에는 STOMP 소켓은 당시 http였고일반 WebSocket은 https여서그런가 이런 에러가 났던거다결과적으로는 nginx 패스를 하도록 location에 해당 소켓 엔드포인트를 추가하고, worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;events { worker_connections 1024;}http { include /etc/nginx/mime.types; default_type application/octet-stream; limit_req_zone $..

[Docker, AWS, Jenkins, Spring Boot, Nginx, React, MySQL, Redis, RTMP/HLS] 프로젝트 인프라 세팅하기 (3) - AWS EC2 설정

네 이번에는 Spring Boot로 백엔드 서버만 달라졌습니다. 우선 EC2 접속하면 할 일1. Docker 설치https://docs.docker.com/engine/install/ubuntu/ UbuntuJumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.docs.docker.com# Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl sudo i..

[Docker, AWS, Jenkins, Spring Boot, Nginx, React, MySQL, Redis, RTMP/HLS] 프로젝트 인프라 세팅하기 (2) - Jenkins로 CI/CD 구축하기

빌드를 어떤 방식으로 진행했는가?1) Docker-in-docker 방식 (Jenkins 컨테이너에 Docker 설치하여 빌드)2) SSH 접속하여 해당 EC2에서 쉘 스크립트 실행 (Jenkins 컨테이너에서 호스트 EC2에 SSH 접속)저는 2번째 방식으로 빌드했습니다.Docker-compose.yml 파일의 작성 방식 상 다른 컨테이너와 Jenkins 컨테이너가 같은 단에서 돌고 있기 때문에 DnD방식은 번거롭고, 그다지 원하지 않는 방식이어서 쉘 실행 방식으로 빌드했습니다. Jenkins 실행하기Jenkins는 docker container로 실행이 가능합니다.1) 첫 실행 시 콘솔창에 비밀번호가 출력되므로 해당 비밀번호로 로그인하시고, admin 계정을 셋업하시면 됩니다.2) 필요한 플러그인을 ..

[Docker, AWS, Jenkins, Spring Boot, Nginx, React, MySQL, Redis, RTMP/HLS] 프로젝트 인프라 세팅하기 (1) - nginx.conf, Dockerfile, Docker compose 작성

2년 반 만의 인프라 세팅이다.2년 전에는 그냥 api테스트하려고 docker썼는데 이번엔 좀 다르다. 0. 폴더 구조├── aws (키 보관, gitignore 설정으로 레포에 올라가지 않음)├── client│ ├── Client project│ ├── Dockerfile├── db│ ├── init.sql (DDL 정의 - schema) ├── hls (폴더 이하 내용은 방송 시작 시 생성, 종료 시 삭제됨) │ ├── 스트리밍key-스트림번호.ts│ ├── 스트리밍key.m3u8├── media├── nginx│ ├── default.conf # client 요청 처리할 웹서버│ ├── rtmp.conf # nginx-rtmp 전용├── server│ ├── Server project├── .gi..

[Docker] permission denied

while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get: dial unix /var/run/docker.sock: connect: permission denied  Docker desktop이나 Docker가 실행되지 않은 상태입니다.Docker desktop을 켜거나 ec2같은 linux 환경이면 아래 명령어를 실행해서 확인해보세요.sudo systemctl status docker # Docker 상태 확인 inactive (dead)면 꺼져있는것sudo systemctl start docker # Docker 시작# active 상태인데 안 될 경우groups # 현재 유저가 docker 그룹에 속..

[기상청 API] 날씨 불러오기: CORS error & Service key is not registered error

우와 이거 연결한다고 몇 시간을 쓴거야~~우선 이러한 에러가 났던 나에게는 3가지의 문제가 있었다.1. CORS error웹에서 직접 요청을 보내면 발생한다.프론트에서 직접 보내지 말고 백엔드에서 요청을 보내주면 해결된다.나의 경우 Spring boot를 백엔드 프레임워크로 쓰고있어서 java를 이용했는데, 공공데이터포털에서 제공하는 샘플코드가 프레임워크를 전혀 쓰지 않은 코드라서... Spring boot에 맞게 GPT한테 잘 물어봐서 작성했다.2. Error code 30: Service key is not registered이거는 정말 오랫동안 애먹었는데, 서비스키도 정상적이고 디버깅으로 찍어본 요청 URL도 정상이었다. 이 에러가 뜨는 이유는 여러 가지가 있는데1) Encoded key를 사용하지..

728x90
반응형