Cloud☁️/NHN Cloud

[NHN cloud] [KDT 2차 프로젝트] 인스턴스 설정

nayeo2 2024. 8. 23. 17:07

1. PUB instance 설정

1.1 Jenkins, docker, java install

  • 젠킨스, 도커, 자바 자동화 쉘 스크립트
vi install_docker_jenkins.sh
#!/bin/bash

# 도커 설치
sudo apt-get update

sudo apt-get install -y ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 자바 설치
sudo apt update
sudo apt install -y openjdk-17-jdk

# 젠킨스 설치
sudo apt update

# Jenkins 공식 키 가져오기
curl -fsSL https://pkg.jenkins.io/debian/jenkins.io-2023.key | sudo tee \
  /usr/share/keyrings/jenkins-keyring.asc > /dev/null

# Jenkins 레포지토리 추가
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
  https://pkg.jenkins.io/debian binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null

sudo apt update
sudo apt install -y jenkins

# Jenkins 서비스를 시작하고 부팅 시 자동으로 시작하도록 설정
sudo systemctl start jenkins
sudo systemctl enable jenkins

echo "Docker와 Jenkins 설치가 완료되었습니다."
chmod +x install_docker_jenkins.sh
./install_docker_jenkins.sh
  • 해당 인스턴스 플로팅 IP:8080 접속 후
sudo cat /var/lib/jenkins/secrets/initialAdminPassword

에서 출력된 값으로 로그인 하기~

1.2 Nginx install & setting

vi install_nginx.sh
#!/bin/bash

# 업데이트 및 필요한 패키지 설치
sudo apt-get update
sudo apt-get install -y curl gnupg2 ca-certificates lsb-release
sudo apt-get install -y ubuntu-keyring

# Nginx 서명 키 추가
curl -s https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

# 서명 키 확인
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

# Nginx 저장소 추가
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

# 업데이트 및 Nginx 설치
sudo apt-get update
sudo apt-get install -y nginx

# Nginx 버전 확인
nginx -v
chmod +x install_nginx.sh
./install_nginx.sh
  • nginx 실행
sudo systemctl start nginx
  • nginx 설정
sudo vi /etc/nginx/nginx.conf
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'
                      'backend_server=$upstream_addr';

        upstream app {
          server 연결할 서버 비공인 IP:8080 weight=100 max_fails=3 fail_timeout=3s;

        }

        server {
                location / {
                  proxy_pass http://app;
                  proxy_http_version 1.1;
                  proxy_set_header Upgrade $http_upgrade;
                  proxy_set_header Connection 'upgrade';
                  proxy_set_header Host $host;
                  proxy_cache_bypass $http_upgrade;
                }
        }



    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
}
  • nginx 재실행
sudo systemctl reload nginx

1.3 Jenkins SSH 연결 (작성중)


2. PRI APP instance 설정

2.1 접속을 위한 bastion instance setting

scp -i NHN.pem ./NHN.pem ubuntu@PEM 키를 보낼 IP:/home/ubuntu
  • 참조
    • 나의 pem키 이름: NHN.pem
    • 위 명령어는 당연히 pem키를 갖고 있는 (내 PC)에서 수행해야 함
    • 키를 보낸 후에 bad permissions: ignore key 에러가 발생한 경우
chmod 400 ./NHN.pem

2.2 Docker, java install

#!/bin/bash

# Update package index
sudo apt-get update

# Install prerequisites
sudo apt-get install -y ca-certificates curl gnupg

# Create directory for Docker keyrings
sudo install -m 0755 -d /etc/apt/keyrings

# Download and install Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Set proper permissions for Docker GPG key
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add Docker repository to sources list
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Update package index again after adding Docker repository
sudo apt-get update

# Install Docker packages
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Run Docker hello-world to test installation
sudo docker run hello-world

# Install Java (OpenJDK)
sudo apt install openjdk-17-jdk

# Check Docker service status
sudo systemctl status docker

3. DB instance 설정

- 앞서 언급했듯이 최적의 이중화를 위한 DB replication은 3차 프로젝트에서 구현할 예정

MySQL instance는 기본 인스턴스에 MySQL을 설치한 버전이라고 보면 됨

  • 관리자 권한을 가질 유저 생성
    • 유저가 모든 서버 (%)에 대해 권한이 있어야하고
    • 어플리케이션에 의해 만들어질 DB는 직접 만들어주고 (table은 자동생성)
    • 접근 가능한 DB를 모든 DB가 아닌 해당 DB로 권한 등록을 해줘야한다.

4. Ingress Instace 설정

  • 아래 글에서 언급한 구조도처럼 Ingress Subnet과 Ingress instance를 설정한다 ..
  • 이 때 IGW 위치를 주의깊게 봐줘야한다
  • 라우팅 테이블 또한 변경을 해줘야한다
    • IGW, ingress, pub1
    • IGWB, pub2
    • pri01,pri02, nat1
    • pri03, pri04, nat2

2024.08.23 - [Cloud☁️/NHN Cloud] - [NHN cloud] [KDT 2차 프로젝트] 인스턴스 설정

  • 또한 당연히 Nginx 설치해서 설정파일 건드려야함