티스토리 뷰

728x90
SMALL

이전에도 글을 썼는데 뭔가 좀 애매해서 처음부터 다시 글을 써볼려고 한다. 이번에도 배포하다가 오류가 나서 몇시간을 날려먹은지 모르겠다. 진짜... 개빡.....친다

 

이런일이 발생하지 않게 상세하게 글을 써야겠다.

 

인스턴스 생성

먼저 arm ubuntu로 만들어준다. 인바운드에는 기본 ssh, 80, 3306, 8080을 열었고 아웃바운드에는 전체를 허용해놨다.

 

nodejs 설치

먼저 nodejs를 lts버전으로 깔아준다. 공식사이트 참조(매번 버전이 바뀌기 때문에)

https://github.com/nodesource/distributions#installation-instructions

 

기본 설정

우분투 패키지 업그레이드 및 한글 설정(위에랑 순서가 바뀌어도 상관없을듯??)

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install language-pack-ko
$ sudo locale-gen ko_KR.UTF-8
$ sudo update-locale LANG=ko_KR.UTF-8 LC_MESSAGES=POSIX

 

ssh 재접속 후 코드 확인

$ locale
LANG=ko_KR.UTF-8
LANGUAGE=
LC_CTYPE="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES=POSIX
...

 

mysql 설치

공식홈페이지 참조해서 mysql 설치. 기본 설정은 전부 yes

https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04

 

설치 후 secure 옵션도 설치를 해준다.

sudo apt install mysql-server
sudo mysql_secure_installation

 

유저를 만들고 권한을 준다.

create user '(사용자 계정명)'@'%' identified by '(비밀번호)'
grant all privileges on *.* to '(사용자계정명)'@'%';
grant all privileges on (데이터베이스명칭).* to '(사용자계정명)'@'%';

 

문제가 생기는 경우가 가끔 있기때문에 바꿔줘도 좋다. 물론 보안상으로는 좋지 않은데 이것때문에 문제가 생길때 아래 명령어 하나로 해결이 가능한 경우가 많다. mysql-session같은 경우도 그랬고 달느 언어를 사용하는 경우도 문제가 있는 경우가 있다. 심지어 위의 사이트에서도 note에 따로 빼서 설명해놨다.

ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

 

 @ 뒤에 있는 '%'는 사용자 계정을 허용하는 접속 IP이다. localhost로 적용해도 될것같은데 일단 나는 %로 입력했다.

 

CREATE USER 'yoonminsang'@'localhost'
  IDENTIFIED WITH mysql_native_password BY 'password';

 

msyql 시간 설정

sudo cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime

이렇게 하면 new Date(time)을 할 때 오류가 난다. db에서 확인할때는 정상적으로 들어간 것같은데 데이터를 가져올 때 z가 마지막에 있는데 현재시간이다. 즉 utc0인데 현재시간을 가져온다는 것이다. 음.. 그러니까 z라면 -9시간이 나와야한다. 

 

어떤분 블로그에 시간설정관련해서 정리가 잘 되어있다.

https://velog.io/@taelee/mysql%EC%97%90%EC%84%9C-9%EC%8B%9C%EA%B0%84-%EC%B0%A8%EC%9D%B4%EB%82%A0%EB%95%8CGCP

 

mysql에서 9시간 차이날때(GCP)

T는 날짜와 시간을 구분해주는 delimiter(구분자)이다. 그이외의 의미는 없다.끝에 Z는 영국 그리니치 천문대 시간을 가르킨다(+00:00). 한국은 (+09:00)이다.Z = Zulu time = GMT = UTC 다 같은말이다.따라서

velog.io

 

 

mysql 한글 설정

이거는 따로 안했는데 혹시 몰라서 올린다. 기본 설정이 위에서 설정할 대 utf8로 되어서 그런지 한글이 잘 나온다. 그래서 일단은 적용하지 않았다.

$ sudo -i #root
$ cat /etc/mysql/my.cnf
$ cat << 'EOF' > /etc/mysql/mysql.conf.d/utf8.cnf
# for utf8 characterset
[client]
default-character-set = utf8

[mysqld]
init_connect = SET collation_connection = utf8_general_ci
init_connect = SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8
EOF

 

 

이제 완성!!

포트 이슈

인데 80포트가 열리지 않는다. 아파치나 nginx를 연결하면 연결이 된다는 것 같기도 한데 그냥 express에서 라우팅을 해버리면 80포트가 적용이 안된다. 그래서 redirect를 시켜줘야하는데 역시 코딩은 마음대로 되는게 하나도 없다. 구글링해서 많이 나오는 것을 적용하면 적용이 안된다. 아마 버전이 바뀌어서?? 잘 모르겠다.. 알면 알려주세요

그래서 리다이렉트를 해보고 있는데 갑자기 인스턴스 새로 만들어서 하니 안된다....

...... 근데 그냥 포트 80으로 적용하니 정상작동했다.

이전과 바뀐건 bcrypt를 어떤거 깔아서 오류잡았는데 지금은 bcryptjs를 설치한 것. 밖에 없는데...

포트이슈가 일단은 발생하지 않으니 글을 따로 올리지 않고 나중에 포트이슈가 발생한다면 다시 글을 올리겠다.

갑자기 다시 이슈 발생.... 이슈 발생하면 아래코드를 작성

iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo apt install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload

 

아 그리고

.env, config파일들을 까먹지 말고 꼭 올리자.

sequelize나 기본 테이블 생성코드를 만들지 않았다면 만들어주고

 

 

 

참고글

루카스 호누스님 글

 

http://codecrue.egloos.com/v/2216457

 

Progressive ICT : AWS AMI Server에서의 HTTP 80 포트 개방

Amazon AMI linux 서버를 기반으로 웹서비스를 진행중인데 Security Group에서 HTTP 80 포트를 개방하도록  설정했음에도 불구하고 외부에서 웹브라우저를 통한 80포트의 접속이 불가능했다. 웹서버는 tomc

codecrue.egloos.com

 

728x90
LIST
댓글
공지사항