Category Archives: Setting

centos, windows, eclipse, vscode, etc tools
각종 설정과 관련된 내용을 다룹니다.

[Setting | Windows] ReactJS 개발환경 설정

Windows 에서 ReactJS 개발환경을 설치하는 방법을 정리한다.


작성일 : 2022-06-15
NodeJS : v16.15.0

1> 프로젝트 생성

npx create-react-app frontend

2> package.json 에 정보 입력

{
  "name": "frontend",
  "version": "0.1.0",
  "description": "Opendocs Frontend Client.",
  "author": "Opendocs",

3> GitLab에 프로젝트를 생성하고 Commit & Push

# 초기화
git reset --hard
git clean -df
git remote remove origin
#.git 폴더 삭제
git remote -v

# GitLab에 Push
git init --initial-branch=main
git remote add origin http://[gitlab_url]/[group_name]/[project_name].git
git add .
git commit -m "Initial commit"
git pull origin main --allow-unrelated-histories
git push -u origin main

# 참고
## ! [remote rejected] main -> main (pre-receive hook declined) 오류발생시
> GitLab > Settings > Repository > Protected Branchs 
> Developers+Maintainers 로변경
## SSL인증서 에러시
fatal: unable to access 'http://[gitlab_url]/[group_name]/[project_name].git/': SSL certificate problem: unable to get local issuer certificate
PS C:\_Work\source\frontend> git config --global http.sslVerify false

[Setting | Windows] NestJS 개발환경 설정

Windows 에서 NestJS 개발환경을 설치하는 방법을 정리한다.


작성일 : 2022-06-15
NodeJS : v16.15.0

1> 명령 프롬프트에서 nestjs – cli 설치

npm i -g @nestjs/cli

2> 프로젝트 생성

cd /workspaceFolder/
nest new backend

3> package.json 에 정보 입력

{
  "name": "backend",
  "version": "0.0.1",
  "description": "Opendocs Backend Server.",
  "author": "Opendocs",

4> GitLab에 프로젝트를 생성하고 Commit & Push

# 초기화
git reset --hard
git remote remove origin
#.git 폴더 삭제
git remote -v

# GitLab에 Push
git init --initial-branch=main
git remote add origin http://[gitlab_url]/[group_name]/[project_name].git
git add .
git commit -m "Initial commit"
git pull origin main --allow-unrelated-histories
git push -u origin main

# 참고
## ! [remote rejected] main -> main (pre-receive hook declined) 오류발생시
> GitLab > Settings > Repository > Protected Branchs 
> Developers+Maintainers 로변경
## SSL인증서 에러시
fatal: unable to access 'http://[gitlab_url]/[group_name]/[project_name].git/': SSL certificate problem: unable to get local issuer certificate
PS C:\_Work\source\backend> git config --global http.sslVerify false

5> SonarQube Report 설정

npm install --save-dev sonarqube-scanner
npm install --save-dev jest-sonar-reporter

6> package.json 설정

{
  "scripts": {
    "test": "jest",
    "test:coverage": "jest --coverage",
    "sonar": "node report.js"
  },
...
  "jest": {
    "testResultsProcessor": "jest-sonar-reporter"
  },
...
  "jestSonar": {
    "reportPath": "../coverage",
    "reportFile": "sonar_report.xml"
  }
}

[Setting | Ubuntu] 내부망용 인증서 생성 및 등록

내부망용 시스템에 인증서를 생성하고 nginx를 통해 SSL 접속하는 방법을 정리한다.


작성일 : 2022-06-13
OS : Ubuntu 22.04 LTS

1> 서버용 키 생성

openssl genrsa -des3 -out private.key 2048
# 비밀번호를 입력하여 생성
-------------------------------------------------
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-------------------------------------------------

2> Root CA 인증서 생성

openssl req -x509 -new -nodes -key private.key -sha256 -days 365 -out rootCA.pem
# 1>에서 입력한 비밀번호 입력
-------------------------------------------------
Enter pass phrase for private.key:
# 인증서 정보 입력
-------------------------------------------------
Country Name (2 letter code) [AU]:KO
State or Province Name (full name) [Some-State]:SEOUL
Locality Name (eg, city) []:KangNam
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Opendocs
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:opd.kr
-------------------------------------------------

3> crt 파일로 변환

openssl x509 -outform der -in rootCA.pem -out rootCA.crt

4> 접속할 시스템에 인증서 등록

4-1> 윈도우

> 서버로 부터 rootCA.crt파일 다운로드
> 파일 더블클릭
> 인증서 설치(I)
> 로컬 컴퓨터(L)
> 모든 인증서를 다음 저장소에 저장(P)
> 찾아보기(R) > 신뢰할 수 있는 루트 인증 기관 선택 > 확인
> 다음(N) > 마침(F)

4-2> 맥

> 서버로 부터 rootCA.pem파일 다운로드
sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" rootCA.pem

5> Nginx 설치

Nginx설치 메뉴얼

# Install the prerequisites
apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
# Fetch the key
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
# Verify Key 
gpg --dry-run --quiet --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
# Set Up Stable Repo
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx
# Install nginx
sudo apt update
sudo apt install nginx=1.22.*
sudo systemctl start nginx

6> 사이트 인증서 생성

# 인증서 생성
openssl genrsa -out sample.opendocs.co.kr.key 2048
openssl req -new -key sample.opendocs.co.kr.key -out sample.opendocs.co.kr.csr
# ext 파일 생성
vi sample.opendocs.co.kr.ext
-------------------------------------------------
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = sample.opendocs.co.kr
-------------------------------------------------
#  crt 파일 생성
openssl x509 -req -in sample.opendocs.co.kr.csr -CA rootCA.pem -CAkey private.key -CAcreateserial \
-out sample.opendocs.co.kr.crt -days 365 -sha256 -extfile sample.opendocs.co.kr.ext
# pem 파일 생성
openssl x509 -in sample.opendocs.co.kr.crt -outform PEM -out sample.opendocs.co.kr.pem

7> Nginx 사이트 설정

vi /etc/nginx/conf.d/sample.opendocs.co.kr.conf
server {
        listen                      443 ssl;
        server_name                 sample.opendocs.co.kr;

        ssl_certificate             /etc/encrypt/sample.opendocs.co.kr.pem;
        ssl_certificate_key         /etc/encrypt/self/sample.opendocs.co.kr.key;

        ssl_session_cache           shared:SSL:1m;
        ssl_session_timeout         5m;

        ssl_ciphers                 HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;

        location / {
                proxy_pass          https://172.20.0.104:8443;
        }
}

8> Nginx 재시작

systemctl restart nginx

9> 사이트 접속시 자물쇠 확인


10> 사이트별 설정값

Docker 구성시 컨테이너 마다 프록시 설정값이 다름
( proxy_pass 부분이 상이함)

10-1> GitLab

server {
   listen                     443 ssl;
   server_name                gitlab.opendocs.co.kr;

   ssl_certificate            /etc/letsencrypt/self/gitlab.opendocs.co.kr.pem;
   ssl_certificate_key        /etc/letsencrypt/self/gitlab.opendocs.co.kr.key;

   ssl_session_cache          shared:SSL:1m;
   ssl_session_timeout        5m;

   ssl_ciphers                HIGH:!aNULL:!MD5;
   ssl_prefer_server_ciphers  on;

   location / {
      proxy_pass              http://127.0.0.1:9999;
   }
}

10-2> Jenkins

server {
   listen                     443 ssl;
   server_name                jenkins.opendocs.co.kr;

   ssl_certificate            /etc/letsencrypt/self/jenkins.opendocs.co.kr.pem;
   ssl_certificate_key        /etc/letsencrypt/self/jenkins.opendocs.co.kr.key;

   ssl_session_cache          shared:SSL:1m;
   ssl_session_timeout        5m;

   ssl_ciphers                HIGH:!aNULL:!MD5;
   ssl_prefer_server_ciphers  on;

   location / {
      proxy_pass              http://127.0.0.1:8888;
   }
}

10-3> SonarQube

server {
   listen                     443 ssl;
   server_name                sonar.opendocs.co.kr;

   ssl_certificate            /etc/letsencrypt/self/sonar.opendocs.co.kr.pem;
   ssl_certificate_key        /etc/letsencrypt/self/sonar.opendocs.co.kr.key;

   ssl_session_cache          shared:SSL:1m;
   ssl_session_timeout        5m;

   ssl_ciphers                HIGH:!aNULL:!MD5;
   ssl_prefer_server_ciphers  on;

   location / {
      proxy_pass              http://127.0.0.1:7777;
   }
}

10-4> Wiki

server {
   listen                     443 ssl;
   server_name                wiki.opendocs.co.kr;

   ssl_certificate            /etc/letsencrypt/self/wiki.opendocs.co.kr.pem;
   ssl_certificate_key        /etc/letsencrypt/self/wiki.opendocs.co.kr.key;

   ssl_session_cache          shared:SSL:1m;
   ssl_session_timeout        5m;

   ssl_ciphers                HIGH:!aNULL:!MD5;
   ssl_prefer_server_ciphers  on;

   location / {
      proxy_pass              https://172.20.0.104:8443;
   }
}

10-5> Redmine

server {
   listen                     443 ssl;
   server_name                issue.opendocs.co.kr;

   ssl_certificate            /etc/letsencrypt/self/issue.opendocs.co.kr.pem;
   ssl_certificate_key        /etc/letsencrypt/self/issue.opendocs.co.kr.key;

   ssl_session_cache          shared:SSL:1m;
   ssl_session_timeout        5m;

   ssl_ciphers                HIGH:!aNULL:!MD5;
   ssl_prefer_server_ciphers  on;

   location / {
      proxy_pass              http://127.0.0.1:5555;
   }
}