지금껏 학과에서 했던 프로젝트들의 목표는 알고리즘을 위한 코드를 짜고 나오는 그래프들뿐이였다.
하지만 코드를 짜는건 일부분일뿐, 배포하고 운영하는것까지 프로젝트의 끝과 시작이다.
그에 있어 싸피 2학기의 공통프로젝트를 하며 aws를 사용해보고 어떤 문제가 있었는지 기록해보려고 한다.
기존에 AWS를 공부했을때 나오는 웹에서 여러가지 설정을 할 수 있는데에 반해 싸피에서 나오는 AWS는 오로지 인증키 하나만 준다. 오로지 검은화면에 흰글씨와 함께 싸워야하는 환경으로 들어가게 된다.
기본적으로 필요한 포트들은 열어서 우분투 머신 한대를 주게 되는데 접속 방법은 SSH 방법으로 인증키를 통한 접속으로 들어가고 있다.
Load를 클릭한 후 All Files를 눌러보면 지급받은 보안키 (.pem) 방식을 로드해준다.
로드해주면 save private key
가 활성되고, 클릭하면 ppk 파일을 저장한다.
기본적인 apt, nginx, gradle, mysql,npm 등을 깔아준다.
putty 접속후에 cmd창 접속
apt 업데이트
$ sudo apt-get update
$ sudo apt-get upgrade
서버 시간 변경
$ sudo timedatectl set-timezone "Asia/Seoul"
# 확인하는법
$ date
Mon Aug 2 15:46:24 KST 2021
npm 설치
$ sudo apt install npm
$ git clone <주소>
$ ls
frontend backend ...
# frontend(vue.js) 빌드 진행
$ cd frontend
$ npm install
$ npm run build
nginx 설치
$ sudo apt install nginx
$ sudo systemctl start nginx
nginx 설정
insert 하고 들어가서 편집후 :wq!
$ sudo apt-get install mysql-server
# 포트 열기
$ sudo ufw allow mysql
Rules updated
Rules updated (v6)
# 실행
$ sudo systemctl start mysql
# 접속
$ sudo /usr/bin/mysql -u root -p
# 접속하면 아래처럼 sql 프롬프트가 보임
mysql>
# 비번 변경
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root1234';
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root1234';
database 만들기
mysql> CREATE DATABASE ssafy_web_db;
# db 확인
mysql> SHOW DATABASES;
계정 만들기
# 계정은 kimyunbin Host는 localhost 패스워드는 root1234
mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY 'root1234';
# mysql의 user 테이블에 추가하거나 변경이 있을 경우 flush privileges 쿼리를 실행
mysql> FLUSH PRIVILEGES;
# 만들어졌는지 확인
mysql> SELECT User, Host, authentication_string FROM mysql.user;
권한 부여
mysql> GRANT ALL PRIVILEGES ON ssafy_web_db.* to kimyunbin@localhost;
# 권한 변경후 flush privieges 실행
mysql> FLUSH PRIVILEGES;
# 권한 가지고 있는지 확인
mysql> SHOW GRANTS FOR 'kimyunbin'@'localhost';
gradle 권한주기
$ chmod +x ./gradlew
java 설치
openjdk 8
$ sudo apt-get install openjdk-8-jdk
$ sudo apt-get install openjdk-8-jre
# javac 위치 확인
$ which javac
usr/bin/javac
# 환경변수 파일 들어가기
$ sudo nano /etc/profile
# 환경변수 맨 밑에 추가
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASS_PATH=$JAVA_HOME/lib:$CLASS_PATH
# 입력 후 Ctrl+X → Y 입력 → 엔터 키를 눌러 저장을 한다.
# reload
$ source /etc/profile
$ sudo apt install wget unzip # wget, unzip 설치
$ cd /tmp
$ wget <https://services.gradle.org/distributions/gradle-6.7-bin.zip>
$ sudo mkdir /opt/gradle
$ sudo unzip -d /opt/gradle gradle-6.7-bin.zip
$ export PATH=$PATH:/opt/gradle/gradle-6.7/bin
$ gradle -v
$ cd home
$ cd ubuntu/
$ cd S05P13C104
$ cd /backend
$ chmod +x ./gradlew
$ ./gradlew clean build
실행
$ cd build/libs
$ java –jar ssafy-fifth-web-common-project-1.0-SNAPSHOT.jar
mysql bind-address = 0.0.0.0 포트 열어주기
Nginx backend reverse proxy 설정 추가
$ sudo vim /etc/nginx/sites-enabled/default
server {
listen 80;
…
root /home/ubuntu/S05P13C104/frontend/dist; # dist 파일 찾아서 넣어야함
location / {
try_files $uri $uri/ /index.html;
}
# 대충 설명하자면 / 로가면 프론트
# /api로 가면 서버의 api/~ request를 찾아간다.
location /api {
proxy_pass <http://localhost:8080>;
proxy_http_version 1.1;
proxy_set_header Connection "";
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_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
터미널을 종료해도 프로세스를 유지할 수 있는 방법
$ nohup {{ 프로세스 실행 명령어}}&
프로세스를 종료하고 싶다면?
# Java가 들어간 프로세스를 모두 표시
$ ps –ef | grep java
# - 해당 프로세스 종료
$ kill -9 {{ 프로세스 번호 }}
sudo docker run --rm \\
-p8888:8888/tcp \\
-p5000-5050:5000-5050/udp \\
-e KMS_MIN_PORT=5000 \\
-e KMS_MAX_PORT=5050 \\
kurento/kurento-media-server:latest