---
# System prepended metadata

title: Ubuntu Setup

---

# Ubuntu Setup

Spring Boot App(Virtual Machine) 기준
- `sudo apt-get update && sudo apt-get upgrade`
- Java 11:
    - 설치: `sudo apt-get install openjdk-11-jdk`
    - 환경변수 설정:
        ```
        vi ~/.bashrc
        아래 줄 추가
        export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
        export PATH=$PATH:$JAVA_HOME/bin

        source ~/.bashrc
        ```
- Nginx:
    - 설치:
        ```
        sudo apt-get -y update
        sudo apt-get -y install nginx
        ```
    - 설정: 80포트로 앱 포워딩
        ```
        upstream 서버이름 {
          server 127.0.0.1:${서버 포트번호};
        }

        server {
          listen 80;
          location / {
            proxy_set_header        Host                    $host;
            proxy_set_header        X-Real-IP               $remote_addr;
            proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto       $scheme;
            proxy_pass 서버이름;
          }
        }
        ```
- MySQL Client:
    - 설치:
        ```
        sudo apt install mysql-client-core-8.0
        ```
    - MySQL 방화벽 설정:
        ```
        Azure Console 접속해서 VM ip 등록
        vnet설정이 되어있으면 Private IP를 사용하기 때문이 불필요함
        
        CREATE USER 'username'@'host' IDENTIFIED BY 'password';
        GRANT ALL ON dbName.* TO 'username'@'password';
        FLUSH PRIVILEGES;
        ```
- CI/CD
    - Jenkins 서버와 VM간 ssh authorized keys 설정
        ```
        # Jenkins rsa public key 확인
        cat ~/.ssh/id_rsa.pub
        
        # VM에 public key 적용
        ~/.ssh/authorized_keys 에 해당 값 추가
        ```
    - Jenkins Spring Boot VM 연결: [링크](https://devocean.sk.com/blog/techBoardDetail.do?ID=163889)
    - Jenkins에서 trigger되는 shell script:
        ```
        # script.sh
        kill -9 $(ps aux | grep java | grep ${프로세스 이름} | awk '{print $2}')
        nohup java -jar ${jar파일 위치} --spring.profiles.active=${프로파일 값} &
        
        # script.sh 권한 설정
        chmod 777 script.sh
        ```
- SSL적용:
    - self-signed CA 생성 및 인증서 발급: [링크](https://www.lesstif.com/system-admin/openssl-root-ca-ssl-6979614.html)
    - VM에 ssl 적용:
        ```
        upstream ${서버이름} {
          server 127.0.0.1:${서버 포트번호};
        }

        server {
          listen 443 ssl;
          ssl_certificate     ${crt파일 위치};
          ssl_certificate_key ${key파일 위치};
          location / {
            proxy_set_header        Host                    $host;
            proxy_set_header        X-Real-IP               $remote_addr;
            proxy_set_header        X-Forwarded-For         $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto       $scheme;
            proxy_pass http://${서버이름};
          }
        }
        ```
