220729

HyeonKi Jo·2022년 7월 29일
0
post-thumbnail

시작

인스턴스 시작


  • 어제 정지시킨 인스턴스들을 다시 시작시킨다.

Route53

  • 도메인주소도 업데이트해준다.

CI/CD

  • 개발자가 개인 git환경에서 개발한다.
  • 완성본을 github에 push하게 되면, jenkins에서 리스너로 확인하여 변화가 있으면 코드를 Pull한다.
    • Poll(여론조사), Poll SCM으로 설정했다.
  • 그러나 Jenkins에서는 Build기능이 없다. Jenkins에서 Maven API를 사용해 빌드해준다.
  • Maven에서 WAR파일로 빌드해주면, Tomcat에서 최종적으로 Deployment 해준다.

Github -> Gitlab 마이그레이션

프로젝트 생성


  • 이름: dev-site
  • 퍼블릭으로 올려야 다른 팀원과 같이 작업할 수 있다.

Github에서 clone받기

  • gitbash를 켜준다.
  • mkdir git-migration
  • git clone --mirror https://github.com/jo1132/hello-world.git git-migration
  • cd git-migration/
  • git push -uf http://gitlab.cocudeny.shop/cocudeny/dev-site --all
  • 잘 push되고 있다.
  • master 브랜치에 잘 올라가있다.

만약 Permission때문에 Branch에러가 난 경우

  • 다음과같이 Unprotected Branch설정을 해준다.

Jenkins서버 다시만들어보기

  • AWS인스턴스를 모두 지운다.

인스턴스 생성

  • 이름: Jenkins-server
  • AMI: Amazon Linux 2
  • t2.micro
  • NEW-VPC -2A
  • dev-SG 보안그룹
  • 사용자데이터
#!bin/bash
timedatectl set-timezone Asia/Seoul
hostnamectl set-hostname jenkins-server
  • Route53에서도 도메인주소를 편집해준다.

Jenkins 설치

  • sudo su -
    • root계정으로 이동
  • wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
    • Repository설정
  • rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    • jenkins 설치에 대한 key를 가져와야 한다.
    • 우린 수상한 사용자가 아니라는 키
  • yum install -y fontconfig java-11-openjdk
    • 친절하게 java-openjdk11을 추가 설치하는 코드를 보여준다.
    • 이후에는 이 코드를 사용자데이터에 추가할 수 있다.
  • amazon-linux-extras install -y java-openjdk11
  • yum install -y jenkins git
    • 젠킨스 설치
    • 오래 걸리기 때문에, 사용자데이터에 넣기는 힘들 것이다.
    • git도 같이 설치해준다.
  • systemctl enable --now jenkins
    • jenkins를 기동시킨다.
    • jenkins초기 비밀번호가 존재하는 폴더가 이때 생성된다.
    • 그래서 이러한 과정이 필요하기 때문에 시간이 오래걸리게된다.
  • cat /var/lib/jenkins/secrets/initialAdminPassword # 젠킨스 임시 패스워드

Jenkin 페이지에 접속

  • 도메인주소로 접속하니 아무것도 안나온다.
  • ss -ant명령어를 입력하면 현재 *:8080으로 접근을 받고있다.
  • 8080를 붙혀주니 접속되었다.
  • 아래 임시 비밀번호를 입력해 들어가준다.
  • 플러그인을 우리가 직접 설치할 것이기 때문에 x로 나가준다.
  • 시작해준다.
  • 먼저 비밀번호를 바꿔줘야한다.
  • admin -> 설정으로 가서 변경해준다.

  • 비밀번호 변경하며, 타임존도 맞춰준다.

프로젝트

프로젝트 생성

  • HelloWorldJob로 프로젝트를 만들어준다.

설명

  • 나중에는 넣지 않겠지만, 지금은 설명을 간단하게 추가해본다.

Build

  • Excute shell으르 추가해주고, 명령어를 넣어준다.
echo "Hello World"
uptime
ip a

프로젝트 빌드

  • 지금빌드를 한번만 눌러 실행해준다.
  • 코드가 간단해 바로 빌드되었다.

플러그인

  • 플러그인 설치, 업데이트 등을 진행할때 여기서 하게된다.
  • gitlab을 설치한다.

플러그인 설치 후 관리

  • 플러그인을 설치 한 후, 설정을 위해 Global Tool Configuration에 들어간다.
  • Default로 되어있는 곳에 Git으로만 이름을 바꿔준다.
  • 아래 git으로 되어있는 부분 아래 에러가 있다면, 서버에서 git이 설치되어있는지 확인해줘야한다.

두번째 프로젝트

  • 이름: PullCodeFromGitLab
  • 프리스타일로 생성해준다.

설명

  • 간단하게 입력한다.

Build

  • Git에 체크해주고, GitLab의 master branch의 경로를 복사해서 넣어준다.
    - http://gitlab.cocudeny.shop/cocudeny/dev-site.git
  • 잘 가져왔는지 확인

Maven 설치

버전확인

  • 최신버전은 3.8.6으로 되어있다.

Jenkins서버에 설치

  • cd /opt
    • opt디렉토리에 설치한다.
  • wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
    • 3.8.6버전의 Maven을 설치한다.
  • tar -xvzf apache-maven-3.8.6-bin.tar.gz
    • tar압축파일을 압축 해제한다.
    • z옵션이 들어가는데, 반드시 f옵션 앞에 있어야한다.
    • z옵션은 gzip파일을 열때, 사용한다.
      • tar.gz
  • mv apache-maven-3.8.6 maven
  • cd maven/bin
    • maven의 실행파일이 있다.
  • cd ~
  • find / -name java-11*
    • 뒤에 무슨 문자가 붙던, java-11을 찾는다.
  • vi .bash_profile
M2_HOME=/opt/maven
M2=/opt/maven/bin
JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.13.0.8-1.amzn2.0.3.x86_64
- User specific environment and startup programs
>
PATH=$PATH:$HOME/bin:$JAVA_HOME:$M2_HOME:$M2
  • 환경변수를 정의해준다.
  • echo $PATH
    • echo를 출력해보지만, 우리가 추가한 내용은 아직 나오지 않는다.
  • source .bash_profile
    • 환경변수 설정을 리프레쉬해준다.
  • echo $PATH
    • 우리가 입력해준 경로가 추가되어 잘 나온다.
  • mvn -v
    • Maven의 버전을 출력한다.

Jenkins에서 Maven 플러그인 설치

  • Maven 플러그인을 철치해준다.

Global Tool Configuration

  • 여기서 java설치할 때의 이름, jdk의 버전명을 넣어주고, JAVAHOME을 입력해준다.
  • 만약 버전이 달라진다면, 그 버전명과 JAVAHOME을 맞춰줘야 한다.
  • Maven도 설정해준다.
  • Maven의 폴더명을 넣어준다.

(Maven활용) 프로젝트 생성

  • Maven활용 프로젝트를 생성해준다.

General

소스코드관리

Build

Apply and Save

지금빌드

  • Success!
  • 잘 빌드됬다.

Tomcat

AWS EC2 생성

  • 이름: Tomcat-server
  • 사용자 데이터
#!bin/bash
timedatectl set-timezone Asia/Seoul
hostnamectl set-hostname jenkins-server

Tomcat 설치

  • sudo su
  • hostnamectl set-hostname tomcat-server
  • amazon-linux-extras install -y java-openjdk11
    • 자바 설치
  • wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz
  • tar -xvzf apache-tomcat-9.0.65.tar.gz
    • tar파일 압축 해제
  • mv apache-tomcat-9.0.65 tomcat
    • 폴더 이름을 줄여준다.
  • cd tomcat/bin
    • 실행파일 폴더로 이동
    • ./startup.sh: tomcat을 부팅하는 명령어이다.
  • Tomcat도 역시 8080포트에서 열려있다.

Tomcat 페이지 접근

  • 8080포트를 붙혀 접근하면 페이지가 나온다.
  • 여기서 Manage App에 403에러가 나온다.

context.xml파일 수정

  • find / -name context.xml
    • context.xml파일을 찾는다.
  • 먼저 /opt/tomcat/webapps/host-manager/META-INF/context.xml 를 수정한다.

vi /opt/tomcat/webapps/host-manager/META-INF/context.xml

vi /opt/tomcat/webapps/manager/META-INF/context.xml

Manage App

  • context수정 후, Manage App에 들어가면 로그인할 수 있다.

Tomcat 계정 추가하기

  • vi /opt/tomcat/conf/tomcat-users.xml
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="kosa0401" roles="manager-gui, manager-script, manager-jmx, manager-status"/>
<user username="deployer" password="kosa0401" roles="manager-script"/>
<user username="tomcat" password="kosa0401" roles="manager-gui"/>
  • 위 내용을 추가해준다.
  • admin계정으로 로그인하니 들어갈 수 있다.

Tomcat up/down명령어 단축

  • ln -s /opt/tomcat/bin/startup.sh /usr/local/bin/tomcatup
  • ln -s /opt/tomcat/bin/shutdown.sh /usr/local/bin/tomcatdown

Jenkins에서 Tomcat 플러그인설치

Tomcat Credential




Tomcat 프로젝트

프로젝트 생성

General

Git

Build

Build 후 조치

  • 모든 경로, 모든 이름의 war파일을 의미한다.

Build후 조치 아래에 Containers를 추가

  • Tomcat 9.X Remote를 추가해준다.
  • Credentail은 deployer의 계정을 넣어주고, Tomcat URL에 Tomcat-server 주소를 올려준다.

확인


  • 페이지가 잘 나온다.

Gitlab git clone하기

  • git clone -b master http://gitlab.cocudeny.shop/cocudeny/dev-site.git
    • 우리의 branch는 master이다. 그래서 -b 브랜치옵션을 주고 master만 찾아 clone한다.

  • index.jsp에 to the course 링크가 거슬려서 지워준다.
  • 불편하지만, push하고 지금빌드를 눌러줘야한다.

자동화

빌드 유발

  • PollSCM에 체크해준다.
  • * * * * * 를 안에 Schedule에 넣어준다.
    • 는 리스닝하는 간격을 지정하는데, 다섯개는 최소시간 1분을 뜻한다.
    • 각 *들은 띄어쓰기로 구별되어있어야 한다.
  • 빌드를 누르지 않았는데, 자동으로 빌드가 시작되었다.

쿠버네티스

VM 새로 만들기

Import

네트워크

  • 첫번째 랜카드는 NAT로 한다.
  • NAT는 수신전용 랜카드라고 생각할 수 있다.
  • AWS에서 VPC를 보면, NAT게이트웨이와 송신전용 인터넷 게이트웨이가 있다.
  • 여기서 NAT게이트웨이는 트래픽을 수신할 때 사용하는 게이트웨이이고, 송신전용인터넷 게이트웨이는 송신전용 인터넷 게이트웨이라고 할 수 있다.
  • 두번째 랜카드는 호스트 전용 어댑터로 해준다.
  • 호스트PC와 통신하기 위한 전용 어댑터 랜카드이다.

추가

  • site-to-site VPN도 VPN연결할 수 있고, Trainsit Gateway도 VPN을 연결할 수 있다.
  • 그런데 왜 site-to-site VPN을 사용하는가?
  • sts VPN이 더 저렴하다. Trainsit Gateway는 더 비싸지만 다양한 기능을 지원한다.
  • 피어링 연결도 있다. IP대역이 다른 영역끼리 연결하는 것이 피어링 연결이다.
  • 그러나 Trainsit Gateway는 피어링 연결도 해줄 수 있다.
  • VPC내의 통신 게이트웨이들의 역할을 어느정도 넓게 사용할 수 있는 것이 Trainsit Gateway이다.

Kubernetes 설치

공통

  • curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
  • sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/docker-ce.repo
  • yum --enablerepo=docker-ce-stable -y install docker-ce-19.03.15-3.el7
  • mkdir /etc/docker
  • cat <<EOF | sudo tee /etc/docker/daemon.json
    {
    "exec-opts": ["native.cgroupdriver=systemd"],
    "log-driver": "json-file",
    "log-opts": {
    "max-size": "100m"
    },
    "storage-driver": "overlay2"
    }
    EOF
  • systemctl enable --now docker
  • systemctl daemon-reload
  • systemctl restart docker
  • systemctl disable --now firewalld
  • setenforce 0
  • sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

SWAP 제거

  • swapoff -a
    • swap은 디스크공간의 일부를 메모리가 부족할 떄, 메모리를 대체해서 사용하는 공간이다.
  • sed -i '/ swap / s/^/#/' /etc/fstab
    • fstab에서 swap이라는 문구 앞에 #을 넣어 주석처리하겠다.
  • cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
    • /etc/sysctl.d/k8s.conf라는 파일 안에 내용을 넣는 방법이다.
  • sysctl --system
  • reboot
  • cat <<'EOF' > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF
    • repository를 설정한다.
  • yum -y install kubeadm-1.19.16-0 kubelet-1.19.16-0 kubectl-1.19.16-0 --disableexcludes=kubernetes
  • systemctl enable kubelet
profile
Talking Potato

0개의 댓글