AWS입문(3)-배포
프론트 서버(웹서버)
sudo apt install nginx
sudo rm /etc/nginx/sites-available/default
sudo rm /etc/nginx/sites-enabled/default
cd /etc/nginx/sites-available/
sudo touch myapp.conf
myapp.conf의 내용은 아래와 같이 수정한다.
server {
listen 80;
listen [::]:80;
root "(뷰일 경우 dist, 리액트일 경우 build)폴더경로를 여기에 작성";
index index.html index.htm;
location / { # 프론트엔드 연결
try_files $uri $uri/ /index.html;
}
}
심볼릭 링크를 sites-enabled에 작성한다.
sudo ln -s /etc/nginx/sites-available/myapp.conf /etc/nginx/sites-enabled/myapp.conf
sudo systemctl stop nginx
sudo systemctl start nginx
sudo systemctl status nginx
위와 같이 나오면 성공.
프론트엔드 폴더에서
yarn run build
webpack으로 빌드한 것을 위에 작성한 build폴더 경로안으로 파일질라를 통해 모두 업로드하면 프론트엔드 배포 성공 (그냥 깃 풀해도 되게 설정하면 편하며 배포 자동화를 하면 더 편하다.)
(프록시 패스 설명 추가)
백엔드(WAS)
spring(스프링)인 경우 tomcat
tomcat8 설치 후 (deprecated되어 tomcat8은 이제 수동설치해야한다. 귀찮으면 tomcat9를 설치한다.)
sudo apt-get install tomcat8
sudo service tomcat8 start
스프링 부트 프로젝트에서 export한 .war파일을 /var/lib/tomcat8/webapps 경로에 업로드한다.
안 올라갈 경우 아래 명령어 실행
sudo chown -R ubuntu /var/lib/tomcat8/webapps
또한 새로운 .war파일을 업로드 할 경우 아래 명령어로 기존 파일과 압축해제된 폴더를 지우고 다시 올린다.
sudo rm /var/lib/tomcat8/webapps/war파일이름.war
sudo rm -rfv /var/lib/tomcat8/webapps/war파일이름
(redis maxmemory 설정 등을 잘못하면 에러뜨고 Cacheable 작동안함)
django(장고)인 경우 - 작성중
/gitlab settings reminders off설치 되어있는지 확인 안되어있을 경우 pip로 필요한 버전 설치
python3 -m django --version
장고 프로젝트 안의 settings.py에서 DB등 여러 가지 설정 한 다음
일단 기본 db등을 마이그레이션 후 서버 실행
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
위와 같이 할 경우 터미널 창을 끄면 서버가 함께 종료되어 버리므로
임시로 screen을 설치하여 screen상에서 runserver를 하고 터미널을 끄면 된다.
(이 방식은 테스트서버를 배포하는 방법이므로 싱글 thread라는 단점이 있다.) - 상세한건 추후 업뎃(uWSGI 등)
DB
MySQL(기본 포트 : 3306)
RDBMS를 위해서 mysql8.0을 사용할 것이다.
일단 최신 repo를 가져온다. (https://dev.mysql.com/downloads/repo/apt/ 여기서 최신버전을 확인)
wget -c https://repo.mysql.com/mysql-apt-config_0.8.15-1_all.deb
패키지를 풀고
sudo dpkg -i mysql-apt-config_0.8.15-1_all.deb
위 알림창이 뜨면 옵션을 적당히 선택해준후 ok를 누른다. 나는 위와 같이 선택한다.(mysql cluster는 여러 대의 서버에서 한 db를 관리하는 시스템인 것 같다. 일단은 선택하지 않는다.)
그 다음 설치
sudo apt update
sudo apt-get upgrade
sudo apt-get install mysql-server
sudo apt upgrade
mysql서버 root계정의 비밀번호를 세팅하라고 뜰 것이다. 세팅해준후 ok
Strong Password Encryption으로 설정하고 compatibiility를 위해 로컬PC의 mysql클라이언트도 5.대 이하가 아닌 8.0으로 설치해주자.
sudo dpkg -l | grep "mysql-community"
잘 되었는지 확인한 후 그 다음 보안 설정을 해주자.
sudo mysql_secure_installation
setup VALIDATE PASSWORD component? = y (암호 강도는 적당히 1로 설정)
Remove anonymous users? = y
Disallow root login remotely? = y (root가 아닌 다른 계정을 추가해 원격접속 설정 해준다.)
Remove test database and access to it? = y
Reload privilege tables now? = y
다음 명령어로 boot타임에 자동으로 켜지게 한다.
sudo systemctl enable mysql
sudo systemctl status mysql
보안설정이 끝났다. 이제 원격설정을 해준다.
아래 명령어로 mysql shell을 킨다.(비밀번호는 아까 설정한 mysql서버 root비번)
sudo mysql -u root -p
sql문으로 특정 스키마를 사용할 원격 접속용 유저를 만들자.
이제 프로젝트에서 사용할 스키마를 하나 만든다.
create database 스키마이름;
아래와 같이 해당 스키마를 사용할 user를 생성한다.
create user 'bigdata'@'%' identified by '이 유저 비밀번호 여기에 입력';
grant all privileges on 사용할스키마.* to 'bigdata'@'%';
flush privileges;
(이 때 전체 스키마에 허용하려면 사용할스키마 대신 * 입력)
참고) grant ~ to 의 반대 명령은 revoke ~ from. 스키마에 대한 권한을 없앤다. 모든 스키마 * 에 대한 권한을 없애지 않도록 주의하자! (다시 추가하기 곤란)
이제 아래와 같이 로컬 mysql 클라이언트에서 set up new connection (+)모양 버튼을 눌러서 방금만든 유저로 접속하면 잘 되는것을 확인할 수 있다.
MongoDB(기본 포트 27017)
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
튜토리얼을 참고하자.
sudo systemctl status mongod
위 명령어로 active상태를 확인한 후, 외부 접속 방법을 만들자.
show databases;
use admin;
db;
db.createUser({user: "아이디", pwd: "비밀번호", roles: ["root"]});
exit;
sudo vim /etc/mongod.conf
위 vim명령어로 아래와 같아 network interfaces와 security 항목을 수정한다.
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
security:
authorization: 'enabled'
이제부터는 우분투에서 mongo가 아닌 아래 명령어로 접속이 가능하다.
mongo -u 유저아이디 -p
이제 서비스에 사용할 database를 만들고 해당 database에 읽기 쓰기 권한을 갖는 user를 생성한다.
use db이름;
db;
db.createUser({user: "아이디", pwd: "비밀번호", roles: ["readWrite"]});
위 계정으로 원격에서 해당 user에 접속할 수 있다.
댓글남기기