AWS 서버 구축(1) - AWS 인스턴스, WinSCP, NPM, Datagrip, PHPmyadmin

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

1. AWS 가입 및 인스턴스 만들기

  • 본인은 OS를 Ubuntu 20.04 로 진행하였다.

설치 시 주의

  • 지역 설정
  • 적절한 운영체제
  • 스토리지 30GB
  • 보안 그룹
    • 해당 port 를 설정하면 원격 컴퓨터로 접근하여 조작 가능
  • 키페어(절대 잃어버리지않기)
    • EC2 출입카드

2. WinSCP(FTP 클라이언트SW) 설치

  • 목적: 로컬 컴퓨터와 원격 컴퓨터 간의 보안 파일 전송 / 기본 파일 관리자, 파일 동기화 기능

    • 이를 통해 내 컴퓨터와 AWS 클라우드 컴퓨터에 접근 가능
    • 즉, 서버에서 파일을 업로드, 다운로드 및 관리
  • 비슷한 FTP 클라이언트SW 친구들: SolarWinds, FileZilla, Putty

  • 설정

    • pem 파일을 ppk로 자동 변환된다.
    • 설정 저장
    • 로그인
      • 로그인을 하면 아래와 같이 GUI 환경에서 접근 가능하다. 여기서 동그라미(putty)를 클릭하면 원격 컴퓨터에서 cmd를 진행하는 것처럼 할 수 있다.

3. NPM 설치

  • 링크
    • 설치 참조 링크
    • **nginx 출처:** https://icarus8050.tistory.com/57
      • 웹서버

        Nginx는 간단하게 말씀드리자면 경량 웹 서버입니다. 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고, Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 합니다.

        Apache 서버와 다른 점

        Apache와 같은 웹서버는 클라이언트로부터 받은 요청을 처리할 때 새로운 프로세스 또는 쓰레드를 생성하여 처리합니다. 요청마다 쓰레드가 생성되므로 접속하는 사용자가 많으면 그만큼 쓰레드가 생성되어 CPU와 메모리 자원의 소모가 커집니다.

        Nginx는 Event-Driven 구조로 동작하기 때문에 한 개 또는 고정된 프로세스만 생성하여 사용하고, 비동기 방식으로 요청들을 Concurrency 하게 처리할 수 있습니다. 위의 그림에서 보이듯이 Nginx는 새로운 요청이 들어오더라도 새로운 프로세스와 쓰레드를 생성하지 않기 때문에 프로세스와 쓰레드 생성 비용이 존재하지 않고, 적은 자원으로도 효율적인 운용이 가능합니다. 이러한 Nginx의 장점 덕분에 단일 서버에서도 동시에 많은 연결을 처리할 수 있습니다.

**설치 과정**

  • Nginx 설치

    설치가 됬다면 인바운드 규칙으로 80번을 열어주고 원격 IP 주소로 들어가면 nginx 설치 확인

    • nginx html의 기본 경로는 /var/www/html/ 이다.
    • 기본 nginx 파일의 경로는 /etc/nginx
  • Mysql 설치

    • 필요에 따라 secure-installation
  • PHP 설치

    • php-fpm 필요 : 아파치 설치할 때는 php와 연동되지만, Nginx와 연동할 때는 fpm이 필요
    • **nginx와 php 간의 연동**
      sudo vi /var/www/html index.php 만들기
      sudo vi /etc/nginx/sites-available/default
      접속을 하면 서버, root 디렉토리 등을 볼 수 있다.
      • 아래와 같이 php 주석 해제
      • 설정 후 nginx restart : sudo service nginx restart

에러

  • nginx 재시작 하는 과정에서 발생
    • nginx 설정에 무슨 문제가 있다면 다 이런 에러 메시지가 발생한다.
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xe" for details.
  • 해결 시도

    1. systemctl status nginx.service 진행

    2. journalctl -xe

  1. sudo nginx -t 를 통해 오류를 확인할 수 있다. ⇒ **해결**

    • sudo vi /etc/nginx/sites-available/default 편집을 하는 과정에서 } 하나 주석 해제 안해서..

4. mysql 외부 접속(Datagrip)

  • 참고 링크
  • Datagrip
    • JetBrains에서 제공하는 DB 개발과 관리를 용이하게 해주는 GUI 개발 도구
    • 장점
      • 데이터 추출이 빠르고 간편하다.
      • 데이터 추출 후 정렬Sort, 검색Regrex 등이 매우 편하다.
      • 쿼리 저장 및 데이터 임시 저장
      • 커스텀한 테마 변경 가능
  • **사용자 계정**
    • Datagrip에서 접속하기 전에 mysql 사용자 계정을 설정해주어야한다.
 sudo mysql

# user_name에는 원하는 계정 이름을 입력한다. @ 뒤의 %는 모든 호스트에서의 접속을 허용한다.
mysql > CREATE USER 'user_name'@'%' IDENTIFIED BY 'password';
# 계정을 생성한 뒤 바로 권한 설정을 한다. *.*는 모든 데이터베이스와 테이블에 대한 접근 권한을 주는 것이다.
mysql > GRANT ALL PRIVILEGES ON *.* TO 'user_name'@'%' WITH GRANT OPTION;
# 권한 설정 후 테이블을 갱신한다.
mysql > FLUSH PRIVILEGES;
# 추가) root 계정의 비밀번호를 바꾸거나 재설정하려면 아래와 같이 한다. 다른 계정도 마찬가지로 바꿀 수 있다.
mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
# 생성된 계정을 확인한다.
mysql > SELECT user, host, plugin FROM mysql.user;
  • **방화벽 설정**
    • AWS 인스턴스에 인바운드 규칙 편집해서 3306 허용
    • 우분투 방화벽에 3306 포트를 허용하고, config 파일을 수정해서 외부에서 MySQL 서버에 접속할 수 있도록 bind-address를 0.0.0.0으로 바꾼다. 설정을 바꾼 뒤에는 MySQL 서버를 재시작한다.
$ sudo ufw allow 3306
$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
$ sudo service mysql restart

  • Local 환경의 Datagrip과 AWS 인스턴스 MYSQL 서버 연결
    • Datagrip에 들어가서 MySQL 데이터소스를 새로 만들기
  • 설정 창이 나오면 호스트에는 현재 사용중인 AWS 인스턴스의 IP를 입력
  • Datagrip 이나 AWS 컴퓨터 cmd 에서 데이터베이스를 만들고, 데이터를 만들고 서로 잘 조회되는 지 확인해본다.

에러

  • vi /etc/mysql/mysql.conf.d/mysqld.cnf 하는 과정에서 swp 파일로 인해 생긴 문제

    • readonly 문제
      • read only 파일인 경우는 :w! 로 강제 저장하기
      • 수정할 때는, insert 모드!
    • swp 파일 삭제
      • 해당 디렉토리 내부에서 숨겨진 파일 찾기 ll -all
      • /var/tmp 폴더에 가서 모든 swp 파일 다 지워준다.
    • e212 can't open file for writing 에러 ⇒ 권한이 없기 때문에 생기는 에러
      • 강제 저장(임시방편) :w !sudo tee % > /dev/null
      • 제대로 해결하려면? sudo chown [사용자이름] . chown root:root [파일 이름] sudo chomod 775 [파일이름]

5. phpMyadmin 적용

  • 설치링크 https://velog.io/@sanbonai06/phpMyAdmin

  • **phpMyAdmin**은 웹으로 MySQL 서버에 접속해서 사용할 수 있는 툴이다. 웹 서버인 Nginx로 MySQL을 제어할 수 있으나 보안상의 문제가 생길 수 있으므로 HTTP에서는 절대 구동하면 X

$ sudo apt update
$ sudo apt install phpmyadmin

위와 같은 명령어를 실행하면 패키지 설치가 진행된다.

  • 패키지 설치하면서 위와 같은 두 가지 질문이 나타난다.

    • 첫 번째 질문은 apche2, lighttpd중 무엇을 사용 할 것인지를 물어본다. 우리는 nginx를 사용 하기 때문에 체크하지 않고 ok를 누르고 넘어간다.
    • 두 번째 질문은 mysql을 추가로 설치하는지에 대한 창이 나온다. 우리가 진행하는 실습 환경 상 이미 설치했기 때문에 no를 누르고 넘어간다.
  • phpMyAdmin이 설치된 위치는 현재 웹 브라우저에서 접근할 수 없기에 심볼릭 링크(바로가기)를 설정해 웹 브라우저에서 Nginx를 통해 phpMyAdmin으로 접근할 수 있게 한다.

// nginx의 설정 디렉토리 접근
$ sudo vi /etc/nginx/sites-available/default

// phpinfo.php를 입력한다.

다만, index.nginx-debian.html보다 앞에 phpinfo.php를 입력하면 aws 인스턴스 ip로 접속할 때 default 값으로 phpinfo.php가 연결되므로 주의 해야 한다.

// nginx 웹서버가 phpmyadmin을 정상적으로 찾고 제공하기 위해 설치 파일에서 Nginx 문서 루트 디렉터리로 심볼릭 링크를 만들어준다
$ sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin
// nginx 서버를 재시작
$ sudo service nginx restart


이미 만들어놓은 사용자 계정으로 로그인 하면 아래와 같은 화면이 나타난다.

0개의 댓글