AWS 서버 구축- AWS 인스턴스, WinSCP, NPM, Datagrip, PHPmyadmin, Domain, HTTPS, 서브 도메인, Redirection 서론

Daniel_Yang·2022년 6월 6일
0
post-thumbnail

중요한 부분

Ubuntu

  • 보통 웹서버를 서비스할 때 루트 계정으로 진행하지 않는다.
  • 하지만 리눅스 보안 정책으로 1024 이하 포트는 root 계정을 통해서만 진행하도록 하고 있다.
  • 이 부분을 일반 계정으로 수행하고자 한다면 capability 라는 것을 사용해야 한다. 이는 root의 권한을 세분화해서 일반 계정도 root의 여러 권한을 갖도록 하는 보안 모델
    // 명령어
    setcap CAP_NET_BIND_SERVICE=+eip /engn/nginx/버전/servers/webd-instance_80/sbin/nginx
    
    //nginx 디렉토리 소유자 변경
    chown -R 소유자:그룹 /{엔진엑스 디렉토리}
    
    //Nginx 실행
    nginx -s reload;
  • 유닉스 디렉토리 구조
    /etc : 서비스와 애플리케이션이 사용하는 시스템 차원의 환경 설정 파일.
    		  예를 들어, 엔진엑스 서버 설정이나 가상 호스트 편집 등
    /opt : 옵션 소프트웨어 패키지. 기본 운영체제 설치에 포함되지 않는 애플리케이션 파일과 추가 패키지를 지원할 목적으로 마련된 것. 거의 사용하지 않는다.
    /bin: 바이너리. 시스템의 모든 사용자가 공통으로 사용할 수 있는 실행 가능한 바이너리와 스크립트. ls, cp, mv 등등
    /sbin: 시스템 바이너리. 시스템 관리자 전용 유틸리티. 루트 사용자만 접근 가능하다. ifconfig, halt, service 등등
    /lib: 시스템 차원에서 공유하는 라이브러리와 커널 모듈. /bin과 /sbin에 있는 바이너리를 실행할 때 필요
    /home: 사용자 홈 디렉토리
    
    /usr : 읽기 전용 사용자 데이터. 읽기 전용 사용자 데이터를 공유하기 위한 두 번째 계층
    /usr/bin : 모든 사용자가 공유하는 필수적이지 않은 명령 바이너리와 스크립트 (wget, gzip 등)
    /usr/include : 컴파일 시 포함되는 C 라이브러리에서 넘어온 헤더 파일
    /usr/lib : /usr/bin 과 /usr/sbin 에서 사용하는 라이브러리
    /usr/sbin : 모든 사용자가 공유하는 필수적이지 않은 시스템 명령 바이너리와 스크립트(useradd, ntpdate 등)
    /usr/local : 지역 데이터 전용으로 사용되는 세 번째 계층
    
    /var : 변동 파일. 로그 파일, 캐시, 스풀 등과 같은 실행 중인 애플리케이션이나 서비스에 의해 내용이 변경되는 파일들.
    /var/lib : 애플리케이션이나 운영체제와 관련된 변수 상태 정보.
    					MySQL 데이터베이스 파일은 보통 `/var/lib/mysql`에 저장된다.
    /var/lock : 애플리케이션의 자원 접근 동기화에 사용되는 잠금 파일
    /var/log : 프로그램, 서비스, 시스템 커널에서 생성되는 로그 파일
    /var/run : 실시간 변수 데이터. 시스템 재부팅 시 완전히 삭제되고, 가동이 시작될 때 상태에 관한 모든 정보를 제공한다. (pid 같은 걸 여기에 저장하는 모양이다)
    /var/spool : 이메일, 프린트 작업과 같이 처리를 기다리는 파일을 저장하는 디렉토리
    /var/tmp : 시스템을 재부팅하더라도 삭제돼서는 안되는 임시 파일을 위한 저장소

winscp

  • permission denied 가 생기는 경우

    • root 이외 계정도 폴더를 만들 수 있도록 sudo chmod -R 777 진행

    • 혹은

      • 전송 -> 편집 -> 규칙 에서 전송모드를 자동으로 변경해준다.

      • 업로드 옵션에서 권한 오류 무시 체크를 해준다.

      • $ sudo vi 혹은 vim /etc/ssh/sshd_config

      • sudo chown ubuntu:ubuntu /var/www/html -R

nginx

  • nginx.service failed with result 'exit-code’ 에러

    • journalctl -xe 로 확인 시 맨위 부분이 에러나는 부분
    • 혹은 sudo nginx -t 를 통해 오류를 확인할 수 있다
  • 서버 블록문의 의미

    if ($host = www.도메인) {
            return 301 https://도메인$request_uri;
        }
    현재 도메인에 접속하면 https가 적용된 도메인으로 된다. 
    
    • listen **특정 포트 듣는다**
    • server_name 사이트의 도메인 주소
    • root 화면에 보여줄 파일이 담긴 디렉토리;
    • try_files $url $url /=404 의 의미 링크
    • return 301 scheme://도메인명scheme://도메인명request_uri
      • 301은 http status code에서 영구 이동을 의미함. 즉, 당신이 접속하려는 사이트가 영구 이동했으니 리다이렉트 사이트로 이동하라
      • $scheme : HTTP의 구조로 http, https를 의미한다.
      • $request_uri : uri와 질의구문을 합친 것(queryString는 매개변수있는 것)
  • 많이 쓰는 명령어

    // nginx 방화벽
    sudo apt install ufw 방화벽 설치
    $ sudo ufw allow @@@ 포트번호 허용
    $ sudo ufw status verbose 방화벽 상태 확인
    $ sudo ufw enable/disable 방화벽 활성화/비활성화
    
    // nginx 환경 설정
    $ sudo vim /etc/nginx/sites-available/default
    
    // nginx 테스트
    $ sudo nginx -t
    
    // nginx 재시작(환경 설정 반영)
    	// nginx 쪽에 문제가 있으면 재시작이 실패한다.
    $ sudo service nginx restart

SSH(port 22)

  • 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜

배운 점

  • APM 설치
    • APM 링크
      • IT 서비스 운영 때 가장 중요한 것은 안정성. 이를 위해선 인프라 ~ APP 까지 구성이 완벽해야하는데, 지속적으로 시스템 관찰, 개선이 필요하다. 이때 필요한 것이 시스템을 관찰하는 툴인 APM으로 APP이 정상/비정상인지 확인한다.
      • 개발자 시점: 자신이 만든 코드 중에서 Code level로 성능을 측정할 수 있게 해준다.

어떻게 진행되는 것이며, 왜 진행하는가?

  • Local 서버에 APM 설치 + 포트포워딩

    • Local 서버에 APM을 설치함으로써 이제 내 컴퓨터에서도 성능 측정 가능!
    • 포트포워딩: 서버를 따로 구축하지않고 내 작업물을 외부에 보여줄 수 있게 된다.
  • AWS 서버 구축 ⇒ **1시간 내로 실 서버 구축**!

    • AWS 인스턴스: 자동 포트포워딩 등 인프라 설정 관리에 용이. 가상 컴퓨터
    • Nginx: 프로젝트에서 사용하는 많은 라이브러리의 버전과 의존성 관리가 편하다.
      • vs Apache : Nginx가 트래픽이 많은 웹사이트에 적합 링크
    • 외부에서 도메인 접근 → DNS 에서 외부 IP 주소 변환 → 공유기에 도착하면 내부 IP주소로 AWS 인스턴스 접근
  • 멀티스레드(Apache) vs 싱글 스레드(Nginx) 참조 링크

    • 스레드: CPU의 이용의 기본 단위다. 프로세스 내에서 프로그램 명령을 실행하는 기본 단위
    • 싱글 스레드
      • 장점: 동기화 상관 x, 작업 전환(문맥 교환) x
      • 단점: CPU 자원 제대로 사용 x, 특정작업이 긴 경우 하염없이 기다려야한다.. (CPU만을 사용하는 단순 계산작업에 적합)
    • 멀티스레드
      • 장점: 자원과 상태를 공유하여 효율적으로 운영, 응답성
      • 단점: 실행 지연 가능성, 운영체제의 지원 필요 (게임, 영상 등에 적합)
  • 127.0.0.1 은 왜 localhost와 같은가?

    • localhost는 자신의 컴퓨터를 말한다.
    • 127.0.0.1 는 루프백이라는 특수한 목적을 가진 IP주소다.
      • 루프백
        (Loopback, loop-back)이란 전기신호의 라우팅, 디지털 데이터 스트림(digital data streams), 또는 품목의 흐름이 의도적인 가공이나 수정 없이 원래의 장치나 장비로 돌아가는 것을 말한다. 이것은 주로 전송이나 수송 기반 시설을 테스트하는 수단으로 사용됨
    • 127.0.0.1 을 쓰는 이유는 로컬 컴퓨터를 원격 컴퓨터인것처럼 통신할 수 있어 테스트 목적으로 주로 사용하기 위함이다. 즉, 실제 IP 주소처럼 다른 장치와 통신 할 수는 없습니다.
  • 192.168 의미?

    • IP 주소의 수요가 너무 많아지다보니 보통 인터넷 1회선당 하나의 IP주소를 배정한다. 이때 192.168.0.1 은 공유기 주소, 즉 하나의 IP주소의 대표격. 그 외 192.168.0.X 들은 연결된 기기
  • 네이버는 ip 주소가 4개나 있는데, 어떻게 된 것일까?

    • 서버가 다운되는 것을 막기위해 4 곳에서 프로그램을 돌리고 있는 것이다.

느낀 점

  • Bitnami로 APM을 금방 설치하는 것을 보면서 35시간이상을 투자했던 APM 수동설치가 허무하게 느껴졌지만, CLI 환경에서 APM 관련 폴더들이 너무 익숙해져서 **GUI 환경이 바로 파악**

  • 포트포워딩 단계에서 **시간이 많이 소요**됬지만 덕분에 **제대로 이해**하고 넘어갈 수 있었다.

  • conf 를 작업할 때 ; 가 빠져있지않도록!! =⇒ **오타 주의**할 것

  • 설치하는 과정에서 설정을 바꿔줘야하는 경우가 많기 때문에 **잘 기록**하는 것이 중요하다.

    • 특히, 권한을 강제로 부여받아 진행하는 경우가 많기에 내가 어떤 설정을 했는지 기록 필수!

0개의 댓글