wsl 환경에서 node.js+react(+nginx)를 활용해 웹페이지를 만들어 보면서
ubuntu 환경에서 서버를 어떻게 구축하는지에 대한 감을 익히고 서버 구성에 대해 알아볼 것이다.
📢본 작업은 wsl상에서 서버를 어떤 식으로 구축하고 연동이 되는지 흐름을 확인 해보기 위함으로 세세한 코드내용은 넣지 않았습니다.
- 자세한 코드 내용은 깃허브 링크 참조
🎋깃허브 : https://github.com/pier101/STUDY_linux_server_test
[추후에 별도 업로드 예정] ubuntu 내에서 node.js 설치
[추후에 별도 업로드 예정] ubuntu 내에서 mariaDB 설치
[추후에 별도 업로드 예정] ubuntu 내에서 nginx 설치
서버 (react 활용)
클라이언트 (node.js 활용)
(build 폴더는 추후에 생성되는 폴더라 초기에는 없는 상태로 보시면 됩니다)
중간 요약
- ubuntu내 node.js / mariaDB / nginx 설치
- ubuntu내 home폴더에 프로젝트 폴더 생성
- 프로젝트 폴더 내에 client / server 폴더를 위와 같이 구성 및 코딩
nginx설정관련 자세한 부분은 추후에 업로드 예정
1) 설정하기에 앞서 client폴더 내에서 작업한 내용들을 build 한다.
$ npm run build
2) nginx 설정파일(default.conf) 열기
$ cd /etc/nginx/sites-available/
$ sudo vi default
3) nginx 설정(default.conf)
# default.conf 파일 내부
server {
listen 80;
location / {
root /home/kdw/linux/client/build;
index index.html index.htm;
try_files $uri /index.html;
}
# node api reverse proxy
location /api {
proxy_pass http://localhost:5000;
}
}
간략하게만 설명을 하자면
server{...} : 서버 블록
=> 하나의 웹 사이트를 선언하는데 사용되며, 가상 호스팅 개념이 적용되기 때문에 하나의 서버에 추가된 가상 서버도 운영할 수 있다.
location{...} : 로케이션 블록
=> server 블록 내에서 특정 URL을 처리하는 방법을 정의한다.
listen 80; => 80번 포트로 들어오는 요청 받는다
location / => 포트 뒤에 '/' 가 있을 때 location블록 내부로 들어간다
root => 80번포트의 '/' 로 시작되는 요청이 들어올 때 즉,http(s)://url:80/ 으로 접근해 올 때 수행할 파일의 경로
index => root 경로안에서 수행될 파일
try_files => 경로 오류가 생길경우 재 요청 시도시 수행할 파일
위와 같이 설정 후 nginx가 켜져 있다면 재시작 꺼져 있다면 시작시킨다
$ sudo service nginx stop # 종료
$ sudo service nginx start # 시작
4) wsl의 ip주소:포트(80)을 입력해 root경로에 지정되었던 build 폴더 내의 index.html과 연결되는 지 확인한다.
1) server폴더 내에서 npm start
$ npm start
🚩이슈 발생
- 상황 : npm run start시 에러 나타남
- 에러명 :
connectionerror sequelizeconnectionerror access denied for user 'root'@'localhost'
- 파악 : sequelize 에서 mariaDB 연동시 user에 대한 접근 관련한 문제로 보임
- 원인 :
현재 mariaDB에서 사용중인 계정의 plugin이 unix_socket으로 지정되있음 . unix_socket은 mariaDB접근 시 root 권한여부만으로 증명하기 때문에 sequelize에서 password로 인증하는 방식과 맞지 않음.- 해결 :
비밀번호 재지정을 통해 unix_socket >> mysql_native_password 로 변경** 비밀번호로 로그인이 될 경우 ** 1) $ sudo mysql -u root -p 2) mysql 비밀번호 입력 후 접속 3) MariaDB [(none)]> set password = password("새로운 비밀번호 입력"); 4) MariaDB [(none)]> SELECT user,authentication_string,plugin,host FROM mysql.user; #plugin 확인 5) $ sudo service mysql restart ** 비밀번호로 로그인이 안 될 경우 ** 1) $ sudo mysql -u root 2) MariaDB [(none)]> USE mysql; 3) MariaDB [(none)]> UPDATE user SET plugin='mysql_native_password' WHERE User='root'; 4) MariaDB [(none)]> FLUSH PRIVILEGES; 5) MariaDB [(none)]> exit; 6) $ sudo service mysql restart
2) db 연동 확인 완료
1) 앞서 nginx상에 열어놓은 홈페이지로 접속
2) 회원가입/로그인 확인
3) 생성된 db 확인
$ sudo mysql -u root -p
# 패스워드 입력
use 데이터베이스명;
SELECT * FROM users;
가입된 정보들이 정상적으로 mariaDB에 들어가는 걸 확인할 수 있다.