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
/1.png)
위와 같이 나오면 성공.
프론트엔드 폴더에서
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
/2.png)
위 알림창이 뜨면 옵션을 적당히 선택해준후 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
/3.png)
보안설정이 끝났다. 이제 원격설정을 해준다.
아래 명령어로 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 (+)모양 버튼을 눌러서 방금만든 유저로 접속하면 잘 되는것을 확인할 수 있다.
/5.png)
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에 접속할 수 있다.
댓글남기기