[비트교육센터][리눅스] 3일차 리눅스에 JDK, MySql, 스프링부트 설치, guincorn
1. JDK 깔기
[1] 자바 설치 되어져 있는지 확인
- java -version을 입력해 자바가 설치되어 있는지 확인한다.
- 현재 not found로 되어 있어서 없다는 것을 알 수 있다.
[2] jdk 설치
sudo apt install openjdk-17-jdk
[3] 자바 경로 확인
last@last-VirtualBox:~$ which java
- which java를 입력해 경로를 확인한다.
- /usr/bin/java경로가 뜬다.
[4] 자바 버전 확인
- java -version을 입력해 버전을 띄운다.
[5] JAVA_HOME, 환경변수
- echo $JAVA_HOME를 입력해 JAVA_HOME환경변수 경로를 표시한다
- 현재 아직 아무것도 없음을 알 수 있다.
[6] 리눅스 상 JAVA_HOME 찾기
- ls -l /usr/bin/java를 입력한다.
- /usr/bin/java의 경로는 /etc/alternatives/java의 링크주소임을 알 수있다.
- ls -l /usr/alternatives/java를 입력한다.
- /etc/alternatives/java의 경로는 /usr/lib/jvm/java-17-openjdk-amd64/bin/java의 링크주소임을 알 수있다.
- cd /usr/lib/jvm/java-17-openjdk-amd64/bin로 해당 디렉토리로 이동한다.
- jdk17버전에 대한 파일들이 뜬다.
[7] jdk 11 설치
- sudo apt install openjdk-11-jdk를 입력해 jdk 11버전을 입력한다.
- 여러가지 jdk 버전을 설치해 왔다갔다 쓴다.
[8] jdk 버전 바꾸기
- sudo update-alternatives --config java를 입력해 jdk 버전을 바꿀 수 있는 선택지를 띄운다.
- 1을 입력하고 엔터를 누른다. 그리고 java -version을 입력하면 jdk 11버전으로 바뀐 것을 볼 수 있다.
- ls -l /etc/alternatives/java를 입력하면 최종링크가 11로 바뀐 것을 볼 수 있다.
[9] readlink
- readlink: 심볼릭 링크의 정보를 읽고 출력하는 프로그램이다.
- readlink $(which java)를 입력해 링크 주소를 확인한다.
- readlink -f $(which java)를 입력해 주소의 끝까지 올라간다.
[10] dirname
- dirname: 입력된 경로에서 디렉토리 이름을 뽑아내는 명령어이다.
- dirname $(readlink -f $(which java))를 입력하면 경로의 맨마지막 바로 직전까지 경로를 출력한다.
- sudo update-alternatives --config java를 입력해 자바 버전을 바꾸고 dirname $(readlink -f $(which java))입력하면 경로가 버전에 따라 바뀌었음을 알 수 있다.
[11] 환경변수 설정하기
- root경로에서 vi .bashrc로 .bashrc를 연다.
- 마지막 줄에 export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))을 입력한다.
- 저장하고 나와서 . .bashrc를 입력해 변경사항을 적용한다.
- 여담으로 . .bashrc는 source bashrc와 같다.
- echo $JAVA_HOME을 입력하면 이제 jdk버전에 따라 경로가 표시된다.
2. DB 설치하기
[1] mysql 설치하기
- sudo apt install mysql-server입력해 mysql을 설치한다.
- sudo systemctl status mysql을 입력해 mysql 서버가 동작하는지 확인한다.
- 윗 사진을 보면 동작하고 있음을 볼 수 있다.
- which mysql을 입력하면 mysql경로가 뜬다.
[2] db만들기
- 우분투 root와 mysql root는 연결된다.
- sudo mysql을 입력해 mysql의 root계정으로 들어간다.
create user 'lastcoder'@'%' identified by '1234'; #외부에서 들어올때
create user 'lastcoder'@'localhost' identified by '1234'; #로컬호스트에서 들어올때
create database everytime default character set utf8mb4;
grant all privileges on everytime.* to 'lastcoder'@'%';
grant all privileges on everytime.* to 'lastcoder'@'localhost';
flush privileges;
- lastcoder계정을 만들고 jpa게시판에 필요한 db를 만든다.
- jpa게시판 때처럼 다음처럼 입력하면 된다.
https://julian5383.tistory.com/229
[비트교육센터][Spring-boot] JPA를 이용한 게시판 만들기
1. Jpa를 이용한 판매시스템 게시판 만들기 - 게시물 입력, 수정, 삭제, 조회가 가능하다. - 사진업로드가 가능하다. - 게시물 조회수 기록이 가능하다. - 댓글 작성, 수정, 삭제가 가능하다. - 부트
julian5383.tistory.com
[3] 확인하기
- quit을 입력해 mysql에서 나온다.
- mysql -u lastcoder -p를 입력해 lastcoder계정으로 들어간다.
- show databases를 입력해 everytime데이터베이스가 생겼는지 확인한다.
[4] 데이터베이스를 파일로 추출하기
- powershell를 하나 더 연다.
- e:를 입력하고 cd tmp를 입력해 e드라이브의 tmp 디렉토리로 이동한다.(다른 디렉토리도 가능)
- mysqldump -u root -p everytime -r everytime_db.sql를 입력해 everytime데이터베이스를 파일로 추출한다.
- 추출된 것을 볼 수 있다.
[5] work 디렉토리로 보내기
- scp .\everytime_db.sql ubuntu22:~/work를 입력해 리눅스의 work디렉토리로 전송한다.
- work 디렉토리로 들어가 ls -l을 입력하면 everytime_db.sql 파일이 있음을 알 수 있다.
[6] import하기
- sudo mysql --default-character-set=utf8 everytime를 입력해 everytime데이터베이스로 접속한다.
- set names 'utf8';를 입력해 문자데이터를 utf8로 읽고 source everytime_db.sql를 입력해 sql파일을 가져온다.
- use everytime;를 입력해 everytime 데이터베이슬 이용한다고 명시한다.
- show tables;를 입력해 해당 db의 테이블들을 조회한다.
- select * from sell;을 입력하면 sell테이블에 있는 정보들을 조회할 수 있다.
3. 스프링부트
https://julian5383.tistory.com/233
[비트교육센터][Django] 2일차 자바와 장고를 연결하기
1. 자바와 장고를 연결해 개인지 고양이인지를 구별하는 웹페이지 만들기 - jpa게시판 https://julian5383.tistory.com/229 [비트교육센터][Spring-boot] JPA를 이용한 게시판 만들기 1. Jpa를 이용한 판매시스템
julian5383.tistory.com
- 해당 게시물에서 이어진다.
- jpa게시판에 고양이와 개 사진을 분석하는 웹을 담은 프로젝트를 이용한다.
[1] 로그기록을 담는 디렉토리 만들기
- 스프링부트에서 logback.xml파일을 띄운다.
- root에 로그를 담을 logs 디렉토리를 만든다.
- mkdir logs
- cd logs로 logs디렉토리로 들어가고 pwd로 현재 경로를 출력한다.
- /home/last/logs라고 떴다.
- 스프링부트의 logback.xml로 들어온다.
- value에 /home/last/logs경로를 넣는다.
[2] 이미지를 저장할 디렉토리 만들기(고양이와 개 이미지 분석)
- 먼저 root에서 my_service디렉토리를 만든다.
- 그안에 고양이와 개 사진에서 업로드한 이미지를 저장할 디렉토리 image_repo를 my_service안에 만든다.
- pwd를 입력해 현재 경로를 출력한다.
- FileTransferService.java의 baseurl변수에 /home/last/my_service/image_repo경로를 입력한다.
[3] 게시판 사진을 저장할 디렉토리 만들기
- my_service디렉토리에 image 디렉토리를 만든다.
- pwd를 입력해 image디렉토리의 현재경로를 출력한다.
- addResourceLocations함수에 'file:////home/last/my_service/image/'경로를 입력한다.
[4] jar파일 담기
@PreAuthorize("isAnonymous()")
@GetMapping("/login")
public String login() {
logger.debug("##########################");
return "login/login_form";
}
- 우선 리눅스는 경로에 굉장히 엄격하기 때문에 /login/login_form을 login/login_form으로 바꾸어준다.
1) jar 디렉토리 만들기
- mkdir jar를 입력해 my_service디렉토리에 jar디렉토리를 생성한다.
2) jar파일 만들기
- 해당 프로젝트를 우클릭을 하고 Run As -> Maven clean을 클릭한다.
- 그다음 마찬가지로 Run As의 Maven install을 클릭해 jar파일을 출력한다.
- 그러면 해당 프로젝트의 target폴더로 가면 jar파일이 있는 것을 볼 수 있다.
- 입력하기 편하게 파일명을 변경했다.
2) jar파일 전송하기
- powershell 하나를 더 열어 cd명령어로 해당 target폴더 경로로 이동한다.
- scp .\everytime.jar ubuntu22:~/my_service/jar를 입력해 everytime.jar파일을 리눅스 jar디렉토리로 전송한다.
- 파일이 전송된 것을 확인할 수 있다.
[5] 실행하기
- java -jar everytime.jar를 입력해 jar파일을 실행한다.
- 우분투에 들어가 파이어폭스에서 localhost:8080/list를 입력하면 게시판이 뜨는 것을 볼 수 있다.
[6] 포트 포워딩
- VirtualBox에서 설정->네트워크->포트 포워딩으로 들어가 윗 사진처럼 게시판 관련 포트를 하나 생성한다.
- 그러면 윈도우 브라우저에서 localhost:9000/list를 입력하면 게시판에 접속할 수 있다.
4. 장고
[1] 장고 설치하기
https://docs.conda.io/en/latest/miniconda.html
Miniconda — conda documentation
Miniconda is a free minimal installer for conda. It is a small, bootstrap version of Anaconda that includes only conda, Python, the packages they depend on, and a small number of other useful packages, including pip, zlib and a few others. Use the conda in
docs.conda.io
- 미니콘다 사이트에 들어간다.
- 아래고 스크롤해 Linux Installers에서 Python 3.9버전을 찾는다.
- Miniconda3 Linux 64-bit를 우클릭하고 링크 주소를 복사한다.
- download디렉토리로 가기전 root에 opt디렉토리를 만들어준다.
- 리눅스의 Downloads디렉토리로 이동해 wget+링크 주소 식으로 입력한다.
- wget은 웹에서 파일 다운로드를 도와주는 리눅스 커맨드라인 유틸리티이다.
- sh파일이 들어온 것을 볼 수 있다.
- bash Miniconda3-py39_23.5.2-0-Linux-x86_64.sh를 입력해 미니콘다 설치를 진행한다.
- 엔터를 눌러준다.
- 다음 같이 나오면 q누르고 yes를 입력한다.
- opt경로로 미니콘다가 설치된다. 엔터를 눌러준다.
- yes를 누른다. 그러면 설치가 마무리 된다.
- cat ~/.bashrc를 입력해 bashrc 파일을 연다.
- 맨 아래쪽으로 내리면 콘다에 관련된 내용이 있는 것을 볼 수 있다.
- 이는 리눅스를 다시 시작했을 때 나오는 가상환경에 관련된 내용이다.
- 리눅스를 나갔다가 다시 들어오면 다음처럼 (base)가 뜬다.
- conda config --set auto_activate_base False를 입력해 가상환경을 수동으로 키는 것으로 바꾼다.
- 다시 들어오면 (base)가 없음을 볼 수 있다.
- 이니셜라이저 내용들을 한 번 저장해준다.
[2] 가상환경 만들기
- conda activate를 입력해 가상환경을 실행한다.
- conda create -n dist-env python=3.9를 입력해 dist-env 가상환경을 만든다.
- conda activate dist-env를 입력해 dist-env가상환경을 실행한다.
- 그리고 conda install tensorflow를 입력해 tensorflow를 설치한다.
[3] 장고 설치
- conda install -c conda-forge django를 입력해 django를 설치한다.
- my_service디렉토리로 이동후 mkdir django를 입력해 django디렉토리를 만든다.
- 이전 django 2일차때 만든 django_project폴더에서 catdog폴더를 압축한다.
- 압축된 것을 볼 수 있다.
- cd E:\source\django_project를 입력해 django_project폴더로 이동한다.
- scp .\catdog.zip ubuntu22:~/my_service/django를 입력해 django 디렉토리로 catdog.zip파일을 리눅스 서버로 전송한다.
- django 디렉토리로 가고 unzip catdog.zip를 입력해 catdog.zip파일을 압축해제한다.
- 그다음 rm catdog.zip를 입력해 zip파일을 삭제한다.
- cd catdog/디렉토리로 이동하고 ls -l을 입력해 파일과 디렉토리들을 확인한다.
- config디렉토리로 이동하 vi settings.py를 입력해 settings.py를 편집기로 연다.
- DEBUG를 False로 바꾸고 ALLOWED_HOSTS = []에서 []안에 '*'를 입력한다.
- django디렉토리에서 mkdir model을 입력해 model 디렉토리를 만든다.
- cd ../..를 입력해 최상위 폴더로 간 후 scp .\dogs-vs-cats.hdf5 ubuntu22:~/my_service/django/model을 입력해 model 디렉토리로 dogs-vs-cats.hdf5파일을 전송한다.
- 파일이 전송된 것을 확인할 수 있다.
- config 디렉토리에서 vi settings.py를 입력해 settings.py파일을 편집기로 연다.
- MODEL이 있는 줄에서 load_model 경로에 '/home/last/my_service/django/model/dogs-vs-cats.hdf5'를 입력해 해당 경로의 모델을 이용할 수 있도록 해준다.
- 하지만 python manage.py runserver 0.0.0.0:8000으로 실행하면 텐서플로우 버전이 높아서 서버가 실행이 되지 않는다.
- conda install numpy=1.23.4를 입력해 버전을 다운 시키고 하시 서버를 실행한다.
- localhost:9000/catdog를 입력하면 페이지가 뜨지만 이미지를 분석하면 undefined가 뜬다.
- powershell에 나타난 오류에 의하면 pillow라이브러리가 없었다.
- conda install pillow를 입력해 라이브로리를 설치해준다.
- 그러면 이미지가 정상적으로 분석된다.
- 여담으로 버그를 확인하고 싶을때에는 DEBUG를 True로 바꾸어준다.
- 다만 배포할 때에는 False로 해주어야 한다.
0.0.0.0:8000
- 해당서버(장고가 올라와 있는 서버)에 접근할 수 있는 모든 주소
1) 127.0.0.1:8000
2) localhost:8000
3) 43.27.1.60:8000
4) www.도메인주소.com:8000
이런 계열들의 모든주소에 접근이 가능하다.
[3] sh 파일 만들기
- java -jar파일을 만들지 않아도 실행이 가능하다.
- jar디렉토리로 이동해 vi start_jar.sh를 입력해 start_jar.sh파일을 만든다.
- java -jar everytime.jar을 입력하고 저장하고 나온다.
- start_jar.sh파일을 chmod 775 start_jar.sh를 입력해 user와 group에 실행권한을 만들어준다.
- ./start_jar.sh를 입력해 jar파일을 실행한다.
- localhost:9000/catdog를 입력하면 웹페이지로 가지는 것을 볼 수 있다.
5. Django, Gunicorn 연동
- Gunicorn: 파이썬 WSGI로 웹서버로부터 서버사이트 요청을 받으면 WSGI를 통해 서버 애플리케이션(Django)로 전달해주는 역할을 수행한다.
https://leffept.tistory.com/282
[Django]Django + Nginx + Gunicorn 연동하기 1
저번 포스팅에서는 가상환경 설정과 그 위에 Django 를 설치하였다. 이번에는 Django, Nginx, Gunicorn 을 서로 연동하는 작업을 해볼 것이다. Gunicorn 사용 이유 "Django의 내장서버 (runserver)는 실서비스에
leffept.tistory.com
- conda activate dist-env를 입력해 dist-env가상환경으로 이동한다.
- conda install gunicorn를 입력해 gunicorn 라이브러리를 설치한다.
- gunicorn --bind 0:8000 config.wsgi:application을 입력해 gunicorn을 실행한다.
- 그리고 8000번으로 실행되는지 확인하고 ctrl+c를 눌러 실행을 중단한다.
- system 디렉토리로 이동해 sudo vi gunicorn.service파일을 만든다.
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=last
Group=last
WorkingDirectory=/home/last/my_service/django/catdog
ExecStart=/home/last/opt/miniconda3/envs/dist-env/bin/gunicorn --bind 0.0.0.0:8000 config.wsgi:application
[Install]
WantedBy=multi-user.target
- 다음처럼 입력해 서비스를 등록한다.
- 서비스 파일을 등록해 서버가 재시작할때 Gunicorn도 실행되도록 설정한다.
- /opt/miniconda3/envs/dist-env/bin 디렉토리로 이동해 gunicorn이 있는지 확인한다.
- pwd를 입력해 bin디렉토리 경로를 확인한다.
- django 디렉토리로 와서 catdog의 경로를 확인한다. 이렇게 확인한 경로들을 위의 서버스를 작성할때 프로젝트 경로와 설치된 가상환경 위치에 입력했다.
- sudo systemctl daemon-reload를 입력해 데몬을 리로드 해주고 sudo systemctl start gunicorn을 입력해 작성한 서비스를 실행한다.
- 그리고 sudo systemctl status gunicorn.service를 입력해 실행한 서비스 상태를 확인한다.
- sudo systemctl enable gunicorn을 입력해 서버 재시작시 자동으로 실행하게 하고 exit을 입력해 접속한 리눅스 서버를 종료한다.
- ubuntu 서버는 Restart를 눌러 재시작한다.
- 이제 구인콘이 자동 실행되면서 장고가 서비스를 할 준비가 되어서 스프링 jar만 올려주면 서비스가 된다.
- 그리고 윈도우의 브라우저에 들어가 localhost:9000/catdog 주소를 입력하면 페이지가 뜰 것이다.