라이징캠프 (2주차)-2

Do_Doolly·2022년 2월 16일
0

라이징캠프

목록 보기
4/14
post-thumbnail
  • 부트캠프 상세내용은 아래 링크[1] 참고.

AWS의 인스턴스에서 SSH 설정하는 것부터 이어간다. 굳이 안 바꿔도 잘 동작하지만, 한 번 설정해두면 앞으로 따로 건드릴 일이 없을 것 같아서 인터넷으로 내용을 좀 찾아봤다.


📖 강의 주제

- Server & Client

Protocol, IP, Port Forwarding, Domain 등의 전반적인 네트워크 인프라 개념 구축


📝 목표

- 로컬 서버 운영

  • Bitnami 설치 (MAMP)
  • 포트 포워딩

- AWS 서버 운영

  • AWS 인스턴스 생성
  • 인스턴스 및 OS (Ubuntu) 설정
  • LEMP 설치
  • MySQL 외부 접속
  • Domain 적용
  • HTTPS 적용

▶️ 개발 일지

3. AWS 서버 운영

4) SSH 포트 설정 및 방화벽 추가 (블로그 참고[2])

  • 혹시 모르니 AWS 인바운드 규칙에서 22번 포트는 삭제하지 않는다! (나중에 지울 것이다)
    macOS 터미널에서 AWS 인스턴스로 접속한 뒤 sshd_config 파일을 vim 에디터로 연다. 그리고 Port라 적혀져 있는 곳에 '#' 주석을 지운 뒤 내가 설정한 SSH 포트 번호를 입력하고 저장한다.
# 혹시 vim 에디터가 없으면 apt install vim으로 설치한다
$ sudo vim /etc/ssh/sshd_config

  • services 파일의 ssh 포트도 변경한다. 포트가 많아 일일이 찾기는 힘드니, vim 에디터에 들어간 후 명령모드에서 /ssh를 통해 검색하자
$ sudo vim /etc/services

  • ubuntu에서 방화벽을 활성화 하고 설정한 포트들을 허용한다.
$ sudo ufw enable
# 기존 SSH 프로토콜 포트 허용
$ sudo ufw allow 22/tcp
# 신규 SSH 프로토콜 포트 허용
$ sudo ufw allow ***/tcp
# HTTP 포트 허용
$ sudo ufw allow 80/tcp
# HTTPS 포트 허용
$ sudo ufw allow 443/tcp
# 허용된 포트 확인
$ sudo ufw status
# SSH 재시작
$ sudo systemctl restart sshd
  • 나중에 22번 포트를 막을 때는 아래 명령을 입력하면 된다.
$ sudo ufw deny 22/tcp
  • macOS 터미널에서 /.ssh 폴더로 이동하여 config 파일을 만들고, 아래와 같이 입력한다.
$ cd ~/.ssh
$ sudo vim config

  • 인스턴스를 재부팅한 뒤, macOS 터미널에서 위에서 설정한 Host로 연결하면 잘 되는 것을 확인할 수 있다. 연결이 되는 것을 확인하면 인스턴스 보안 그룹에서 22번 포트는 삭제한다.
$ ssh rising-server

5) LEMP 설치

이전에 소스설치할 때와 다르게 패키지 설치로 진행한다. apt로 패키지를 설치하기 전에 update와 upgrade 하는 것을 잊지 말자!

  • 웹 서버
    LEMP는 APM과 다르게 웹 서버로 Nginx를 사용한다.
$ sudo apt install nginx
$ sudo service nginx start
  • DB
    mysql을 설치한다. 패키지명은 mysql이 아니라 mysql-server
$ sudo apt install mysql-server
  • Backend Language
    PHP를 설치한다. PHP 패키지를 설치할 때는 fpm이라는 FastCGI Process Manager와 mysql 모듈을 같이 설치한다.
$ sudo apt install php-fpm
$ sudo apt install php-mysql
  • Nginx, PHP 연동
    vim 에디터로 기본설정 파일에서 fastcgi_pass 포함한 부분을 주석 해제한다.
$ sudo vim /etc/nginx/sites-available/default

  • php.ini 설정 변경
    /cgi.fix_pathinfo로 검색해서 설정값을 1이 아닌 0으로 바꾼다.
$ sudo vim /etc/php/7.4/fpm/php.ini

  • 서버 접속
    nginx 기본 디렉토리로 이동해서 index.php파일을 만든다. 웹 브라우저를 열고 ip/index.php를 주소창에 입력하면 phpinfo 화면이 나온다.
$ vim /var/www/html/index.php

4. MySQL 외부접속

  • MySQL 8.0.28 버전이며 클라이언트는 Jetbrain의 Datagrip을 사용했다.
  • Datagrip에서 접속하기 전에 설정해야 할 것들이 있다. 일단 사용자 계정을 추가해보자. 처음에 MySQL을 설치할 때 루트 계정의 비밀번호를 따로 설정하지 않았다면 아래와 같이 루트 권한으로 MySQL Prompt를 실행한다. 혹시라도 MySQL 5.x 이하의 버전을 사용중이거나 PHP 7.4 이하 버전에서는 아래와 같이 명령 실행하면 오류가 날 수 있다.[3]
$ 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;

  • 이제 MySQL에 접속할 개인 계정을 생성했으니 AWS EC2의 보안그룹에서 MySQL 서버에 대한 포트를 할당하자. AWS EC2 대시보드에서 보안그룹에 들어간 뒤 인바운드 규칙 편집 탭을 누른다. 유형에 MySQL/Aurora를 추가하고 규칙을 저장한다.
  • 우분투 방화벽에 3306 포트를 허용하고, config 파일을 수정해서 외부에서 MySQL 서버에 접속할 수 있도록 bind-address를 0.0.0.0으로 바꾼다. 설정을 바꾼 뒤에는 MySQL 서버를 재시작한다.
$ sudo ufw allow 3306
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
$ sudo service mysql restart

  • Datagrip에 들어가서 MySQL 데이터소스를 새로 만든다.
  • 설정 창이 나오면 호스트에는 현재 사용중인 AWS 인스턴스의 IP를 입력한다. 사용자에는 방금전에 생성한 계정 이름을 적고, 비밀번호도 입력한다. 아래에 연결 테스트를 눌러 정상 동작하는지 확인한다.
  • 이제 로컬 환경의 Datagrip과 AWS 인스턴스에 있는 MySQL 서버가 연결됐다! 간단하게 쿼리를 작성해서 실제로 잘 동작하는지 확인해보면 잘 나오는 것을 알 수 있다.

5. phpMyAdmin 설치

  • phpMyAdmin은 웹으로 MySQL 서버에 접속해서 사용할 수 있는 툴이다. 웹 서버인 Nginx로 MySQL을 제어할 수 있으나 보안상의 문제가 생길 수 있으므로 HTTP에서는 절대 구동하면 안된다고 한다.
  • 설치하기 전에 최신 버전을 받으려면 apt에 리포지토리를 추가해야 한다.
$ sudo add-apt-repository ppa:phpmyadmin/ppa

  • 리포지토리를 추가한 뒤 apt로 설치를 진행하면 아래와 같이 요상한 화면이 나온다. 현재 웹 서버는 Nginx로 설치했으니 tab 키로 OK만 선택해서 누르자.
  • 데이터베이스를 자동 설정하도록 하는 건데 Yes를 클릭하면 된다.
  • 추가)[4] 설치를 진행하는 도중 An error occurred while installing the database라고 나오면 Abort를 선택한 뒤 MySQL에서 validate password component를 사용 중지하자.
# 실제로 삭제하는건 아니고 중지 시켰다가 다시 해제하는 것이다
mysql > UNINSTALL COMPONENT "file://component_validate_password";
# phpMyAdmin 설치가 다 끝나면 아래와 같이 Component를 다시 실행한다
mysql > INSTALL COMPONENT "file://component_validate_password";

  • phpMyAdmin이 설치된 위치는 현재 웹 브라우저에서 접근할 수 없다. 따라서 심볼릭 링크(바로가기)를 설정해 웹 브라우저에서 Nginx를 통해 phpMyAdmin으로 접근할 수 있게 해야한다.
$ cd /var/www/html
# myAuth는 심볼릭 링크명으로 임의로 설정한다
$ sudo ln -s /usr/share/phpmyadmin myAuth
$ sudo chown -h www-data:www-data myAuth
  • 웹 브라우저 주소창에서 ip/심볼릭 링크명으로 접속하면 phpMyAdmin 로그인 화면이 나온다. MySQL 서버에 등록된 계정중 하나로 로그인하면 아래와 같이 나온다.
  • 추가적으로 보안설정을 할 수 있다. 쿠키에서 쓰일 암호화 과정에서 사용할 해쉬 문자열을 설정하는 것인데 이 블로그에 설명이 잘 나와있으니 참고하자.

다음은 Domain과 HTTPS를 적용해보겠다.


& 링크모음

[1] : 라이징캠프
[2] : AWS SSH 포트 변경하기
[3] : How to install MySQL on Ubuntu 20.04
[4] : How to install and secure phpMyAdmin

profile
생각하면 복잡하니까 일단 해보자

0개의 댓글