ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 프로젝트 배포하기 - 톰캣 설치 후 배포
    기타/배포 2024. 12. 23. 00:12
    728x90
    반응형

    웹 프로젝트 배포하기 - 톰캣 설치 후 배포

     

    리눅스 서버 구성이 끝났으므로 본격적으로 배포 준비를 해보겠다.

    먼저 톰캣을 설치하려면 자바를 설치해야 한다.

     

    리눅스 OS만 설치하고, 자바 설치를 아직 안했는데 java -version 입력해보면 8버전이 깔려있다.
    리눅스 배포판들마다 기본적으로 제공해주는 게 있다고 한다. 
    물론 없는 것도 있다.

    톰캣의 자바 버전이랑 내 스프링 프로젝트 자바 버전은 맞춰야 한다.
    jdk 종류는 달라도 버전만 같으면 호환이 되는데, 이유는 아래와 같다.

    Java는 Oracle이 관리하는 Java SE (Standard Edition) 사양에 따라 구현됨
    OpenJDK는 이 표준 사양에 기반한 **참조 구현(Reference Implementation)**으로, 
    다른 모든 배포판도 OpenJDK를 기반으로 개발됨
    따라서 Java SE 사양에 따라 구현된 JDK들은 거의 동일한 기능과 호환성을 가진다.

    Java 배포판의 차이는 라이선스 정책, 부가 기능, 최적화 수준, 보안 업데이트 속도나 LTS ( 장기 지원 ) 정책이 다름

    근데 혹시 몰라서 일단 프로젝트랑 톰캣 둘다 이클립스 테무린 11로 맞춰서 했다.

     

     

     

    1. 자바

    1 - 1. 설치

    참고로 openjdk 그냥 쓸거면 아래 간단한 명령어 한줄 입력하면 된다.

    sudo dnf install -y java-11-openjdk
    

     

    근데 테무린을 깔아보고 싶으니까 다르게 하겠음
    wget은 인터넷에서 파일을 다운로드할 수 있는 패키지다.
    나는 자꾸 저장소가 말썽이라 직접 설치했다.
    그리고 이런 것들은 /opt에 설치해야 한다.

    직접 /opt로 이동해서 설치하던지, 아니면 설치경로를 지정하던지 그건 마음대로 하면 된다.

    cd /opt



    # 파일 다운로드

    주소는 자기가 원하는 jdk 다운받는 곳에 가면 그냥 나온다.

    sudo wget https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.25%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.25_9.tar.gz​
    

    https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.25%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.25_9.tar.gz

    # /opt/java 생성

    mkdir /opt/java
    


    # 압축 해제

    sudo tar -xvzf OpenJDK11U-jdk_x64_linux_hotspot_11.0.25_9.tar.gz -C /opt/java

     

     

    1 - 2. 자바 환경변수 설정


    # 환경변수 파일 편집기로 열기
    # 폴더이름이 .d인건 설정파일 보관 폴더임

    sudo nano /etc/profile.d/java.sh
    

     

    # 파일 끝에 환경변수 내용 추가
    # PATH=$JAVA_HOME/bin:$PATH 를 적으면, 
    # 기존 PATH를 덮어씌우는 게 아니라, 
    # 여러 PATH가 존재하는 배열에 새 PATH를 추가하는 거임

    export JAVA_HOME=/opt/java/jdk-11.0.25+9
    export PATH=$JAVA_HOME/bin:$PATH


    # 저장하고 나와서 설정 적용

    source /etc/profile

     

     

    1 - 3. 설치 확인

    java -version
    

     

    # 결과

    openjdk version "11.0.25" 2024-12-05
    OpenJDK Runtime Environment (build 11.0.25+9)
    OpenJDK 64-Bit Server VM (build 11.0.25+9, mixed mode)

     

    이러고 주의할 점이 하나 있는데, 뒤에서 또 설명할 것이다.

    시스템의 환경변수로 설정해도 톰캣이 자바경로를 인식 못하는 경우가 있다.

     

    처음에 말한 리눅스 배포판들에 기본으로 설치된 자바의 위치는 /usr/lib/jvm에 있는데,

    내가 새로 자바 11버전을 설치하고 환경변수를 지정하더라도,

    톰캣의 로그를 찍어보면 여전히 jvm 8버전을 쓰고 있는 모습을 확인할 수 있다.

     

    그래서 시스템 변수로 JAVA_HOME을 등록하고 안심하지 말고,

    톰캣의 설정파일에 명시적으로 내가 사용할 자바의 경로를 적어주자.

    그러면 톰캣이 실행될 때 실행될 jvm 버전이 동적으로 정해진다.

     

     

     

    2. 톰캣 설치


    # 톰캣 압축파일 다운로드
    # 톰캣 다운 사이트 들어가서 버전 맞게 써야됨 이건 지금 9.0.97 버전
    # .zip은 윈도우/맥에서 주로, .tar.gz는 리눅스/유닉스에서 자주 씀, 근데 맘대로 써도 큰 상관은 없음
    # /opt/tomcat에 설치할거라 먼저 폴더 생성

    mkdir /opt/tomcat
    


    # 설치가 보통 현재 경로에 되기 땜에 tomcat 폴더로 이동

    cd /opt/tomcat



    # tomcat 압축파일 다운

    wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.97/bin/apache-tomcat-9.0.97.tar.gz​

     

     

     

     

     

     

     

     

     



    # 압축 해제

    tar -xvzf apache-tomcat-9.0.97.tar.gz



    # 파일 디렉토리 권한 변경
    # 아파치한테 하던거랑 똑같음

    chown -R tomcat:tomcat /opt/tomcat

     

     

     

     

    3. 톰캣을 시스템 서비스에 등록

    Q. 시스템 서비스로 등록 안하고 그냥 쓰면 안됨?

    A. 됨. 근데 불편하게 써야됨

     

    자동 시작 불가
    시스템 재부팅시, 매번 직접 실행시켜줘야함

    백그라운드 실행 관리 부족
    startup.sh를 실행하면 현재 터미널에 의존하기 때문에, 
    터미널을 닫으면 톰캣도 종료될 수 있습니다. 
    이를 방지하려면 nohup이나 screen을 사용하여 백그라운드에서 실행해야 합니다.

    systemctl 
    시스템 명령어를 통해 톰캣 서비스의 상태를 확인 불가능

    로그 관리
    톰캣 로그가 특정 경로에 기록되며, 
    서비스가 종료되지 않거나 오류가 발생했을 때 이를 수동으로 확인해야 합니다. 
    systemd 서비스를 사용하면 로그를 중앙화하여 쉽게 모니터링할 수 있음

     

     

    3 - 1. 등록

    # 일단 톰캣 서비스용 관리 파일 생성

    sudo nano /etc/systemd/system/tomcat.service



    CATALINA 라는 이름은 톰캣의 핵심 설정 이름임 그냥

     

    보통 터미널에 명령어로 입력하면 터미널을 나가면 해당 터미널의 모든 프로세스가 종료됨.

    근데 아래처럼 부모 자식 구조로 만들면, 부모 프로세스와 자식 프로세스가 별개로 동작함

    ***부모 프로세스가 종료되도 자식 프로세스는 종료되지 않는다는 말***

     

    [Unit]
    Description=Apache Tomcat Web Application Container # 서비스 설명
    After=network.target # 톰캣 서비스가 네트워크 서비스가 시작된 후 실행되도록 지정.
    # 톰캣은 네트워크에 연결된 후에 동작해야 하므로, 네트워크 서비스가 준비될 때까지 대기
    
    [Service]
    Type=forking # 부모 - 자식 구조로 만들기, startup.sh가 부모, 톰캣이 자식
    # 자식 프로세스를 백그라운드로 실행시킴
    ExecStart=/opt/tomcat/apache-tomcat-9.0.97/bin/startup.sh
    ExecStop=/opt/tomcat/apache-tomcat-9.0.97/bin/shutdown.sh
    User=tomcat # 톰캣 서버를 tomcat 사용자로 실행하도록 설정
    # 보안을 강화하고 톰캣을 시스템 관리자 권한이 아닌, 제한된 권한으로 실행되게 합니다.
    
    Group=tomcat # 톰캣을 실행할 그룹을 tomcat으로 설정
    # 이 역시 보안상의 이유
    
    Restart=always # 톰캣이 종료되었을 때 항상 재시작하도록 설정
    # 톰캣이 비정상적으로 종료되어도 자동으로 재시작되게 함
    
    [Install]
    WantedBy=multi-user.target # 시스템이 여러 사용자가 동시에 로그인할 수 있는 상태를 나타내는 시스템 상태입니다.
    # 톰캣 서비스가 이 상태에서 실행되도록 설정
    # 즉, 서버가 여러 사용자를 지원할 수 있게 서비스를 활성화



    Q. 톰캣을 왜 관리자가 아니라 제한된 권한으로 실행함?
    A. 톰캣 서버를 시스템 관리자(root) 권한으로 실행하면, 
    서버에 취약점이 있을 경우 시스템에 심각한 영향을 미칠 수 있음. 
    예를 들어, 톰캣이 해킹당하면 시스템 전체에 대한 제어가 가능해질 수 있음

    참고
    보안 관련 규칙 중 하나인 최소 권한 원칙 (Principle of Least Privilege)


    프로그램은 수행에 필요한 최소한의 권한만을 가지도록 설정해야 함 
    이를 통해 시스템에서 발생할 수 있는 피해를 최소화할 수 있음

     

     

     

    3 - 2. 사용자와 그룹 생성

    앞에서 유저와 그룹을 tomcat으로 했는데, 우린 그런걸 만든 적이 없다.

    # tomcat 그룹 생성

    sudo groupadd tomcat



    # -r 시스템 계정으로 tomcat 사용자 생성, 
    # -s /bin/false 시스템 계정은 일반적인 계정과는 다르게, 로그인할 수 없게 설정해야 한다.
    # -g 그룹은 tomcat으로 설정

    sudo useradd -r -g tomcat -s /bin/false tomcat



    # 톰캣 폴더 전체 소유자 변경
    # chown: 파일이나 디렉터리의 소유권을 변경.
    # -R: 하위 디렉터리 및 파일까지 모두 적용(재귀적).
    # tomcat:tomcat: 소유자와 그룹을 각각 tomcat 사용자와 그룹으로 설정.

    sudo chown -R tomcat:tomcat /opt/tomcat/apache-tomcat-9.0.97

     

     

    3 - 3. 실행 설정


    # 시스템에 반영

    systemctl daemon-reload



    # Tomcat 서비스 시작

    systemctl start tomcat



    # Tomcat 서비스 부팅시 자동시작

    systemctl enable tomcat



    # 방화벽에 등록 및 방화벽 재시작
    # 8080 포트 방화벽 열어주기

    firewall-cmd --permanent --add-port=8080/tcp
    firewall-cmd --reload

     

     

    3 - 4. 파일지라 사용을 위한 ftp 설정 키기

    서버와 파일을 편하게 주고받기 위해 ftp 설정을 열고, ftp 응용 프로그램인 파일지라를 사용할거다.

    그냥 공식사이트에서 다운받아서 쓰면 된다.


    #fptd 다운로드
    # dnf install httpd, dnf install vsftpd 처럼 뒤에 붙는 d는 daemon을 나타낸다.
    # 백그라운드 프로세스라는 의미임

    dnf install vsftpd



    #설정파일 수정

    nano /etc/vsftpd/vsftpd.conf



    #사용자 목록 설정 활성화

    userlist_enable=YES



    #허용 규칙: 기본 차단 목록 유저만 허용

    userlist_deny=NO



    #허용하는 유저들 목록, root 없다면 추가 해주기

    nano /etc/vsftpd/user_list



    #허용하지 않는 유저 목록, root 있다면 주석 또는 지우기

    nano /etc/vsftpd/ftpusers
    

     

     

    3 - 5. 방화벽 ftp 허용


    # 방화벽에서 ftp 허용

    firewall-cmd --permanent --add-service=ftp
    firewall-cmd --reload



    # vsftpd 재시작 및 시작프로그램 등록

    systemctl restart vsftpd
    systemctl enable vsftpd

     

     

     

    4. war 배포

     

    스프링부트 웹프로젝트를 war로 말고, 리눅스 서버에 설치한 톰캣의 webapps 폴더에 war파일을 올리자.

     

    톰캣에 다양한 설정이 있는데,

    디폴트로 설정된 것을 그대로 사용하면 war파일을 올릴 때 압축해제한 폴더를 톰캣이 알아서 배포한다.

     

    # 파일지라로 wepapps에 war파일 등록 후
    # 톰캣 재실행

    systemctl restart tomcat

     

     

    이제 주소창에 http://[자기 톰캣 IP]:8080 을 입력해서 확인해보자.

    728x90
    반응형

    '기타 > 배포' 카테고리의 다른 글

    웹 프로젝트 배포하기 - 리눅스 서버 구성  (1) 2024.12.15
Designed by Tistory.