
#1.Summary.
AWS SageMaker - NoteBook 환경을 통해 JupyterHub를 사용하고 있는 상황이 아니고, EC2 안에 JupyterHub를 설치, 구성하여 사용하는 상황. VPC에 Internet Gateway를 연결하여 신규 EC2 안에 JupyterHub 설치, 구성하였다.
Jupyter <=> JupyterHub
Jupyter (프로젝트): Jupyter 프로젝트 전체를 말함. 그 안에 Jupyter Notebook, JupyterLab 같은 싱글-유저 애플리케이션이 포함
Jupyter Notebook / JupyterLab: 한 명의 사용자가 로컬 또는 서버에서 브라우저로 접속해 코드, 텍스트, 시각화를 실행하는 환경.
JupyterHub: 여러 사용자가 동시에 각자의 노트북 환경을 사용할 수 있게 해주는 중간 계층(허브). 인증 · 사용자별 스폰(spawn) · 리소스 분리 · 관리 기능 제공.
#2.Main.
OS : Amazon Linux 2023
설치 방식 : Root에서 전역으로 설치
Python-3.12, requirements.txt
EC2 타입 : r6i.2xlarge
보안 그룹 : SSH(22), HTTP(8000, Jupyterhub default 포트)
특이사항 : Amazon Linux2023에는 기본적으로 Python 3.9 버전이 설치되어 있고, 필요에 의해 3.12 설치.
환경 구축 방법은 크게 2가지 방법이 존재.
1.root에서 전역으로 설치 ⇒ 장점은 모든 os user들이 root의 설정을 따라가서 유지 보수 차원에서 쉬움.
2.OS User별로 jupyterHub 설치 ⇒ user별로 Customizing 하게 할 수 있으나 os user 만들 때마다 jupyterhub 설치해야 됨.
==> 둘 다 해보니 무조건 1.root에서 전역으로 설치하는 게 유지 보수 차원에서 편한 방법.
설치 방식이 Docker를 활용한 방법도 있고, Systemd 방식도 있고, 1개가 아닌데 이번 글에서는 Systemd 방식으로 설치한 것을 이야기해보겠다.
1.서버 접속 후 기본 설정.
sudo dnf update -y
sudo dnf install -y git wget curl
2.Python 3.12 설치.
sudo dnf install -y python3.12 python3.212-pip python3.12-devel
sudo alternatives — install /usr/bin/python3 python3 /usr/bin/python3.12 1
sudo alternatives —install /usr/bin/pip3 pip3 /usr/bin/pip3.12 1
3.Node.js 설치.
Curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
#다른 설치 명령어 많은데 다른 명렁어는 하나도 안 먹힘. 설치 방법은 여러 방식이 있음.
sudo dnf install -y nodejs
4.configurable-http-proxy 설치.(jupyterhub 설정 시 필수 설치 요소)
sudo npm install -g configurable-http-proxy
#설치를 안 하고 하는 방법을 여러 번 시도해봤으나, 테스트해본 결과 무조건 설치해야 정상적으로 되었다.
5.JupyterHub 설치.
sudo pip3 install jupyterhub jupyterlab notebook
6. requirements.txt 설치.
sudo pip3 install -r requirements.txt
7. JupyterHub 설정 및 시작.(사실 설정 위치는 마음대로 변경 가능)
sudo mkdir -p /etc/jupyterhub/data
sudo jupyterhub —generate-config -f /etc/jupyterhub/jupyterhub_config.py
sudo jupyterhub -f /etc/jupyterhub/jupyterhub_config.py
8.JupyterHub.config_py 설정.
c.Spawner.environment = {
‘PYTHONPATH’: ‘/usr/local/lib/python3.12/site-packages:/usr/lib/python3.12/site-packages’
9.JupyterHub.confing_py 추가 옵션 설정.
**필수 옵션:**
c.Authenticator.allow_all = True (모든 사용자 접속 허용)
c.JupyterHub.allow_named_servers = True (사용자별 여러 서버 허용)
c.JupyterHub.ip = ‘0.0.0.0’ (외부 접속 허용)
*특정 사용자만 허용하려면 c.Authenticator.allowed_users 옵션 사용
***JupyterHub_config.py 옵션을 추가, 변경, 생성하여도 JupyterHub 재시작 할 필요 X**
10.Systemd 설정.
path ⇒ /etc/systemd/system
vi Jupyterhub.service
[Unit]
Description=JupyterHub Service
After=network.target
[Service]
User=root
Group=root
UMask=0000
WorkingDirectory=/xxxxx/jupyter/jupyterhub # 해당 Path는 원하는데 위치로 지정.
ExecStart=/usr/local/bin/jupyterhub -f /etc/jupyterhub/jupyterhub_config.py
[Install]
WantedBy=multi-user-target
11.JupyterHub 실행.(Systemd를 활용)
sudo systemctl daemon-reload
sudo systemctl start jupyterhub.service
sudo systemctl enable jupyterhub.service
sudo systemctl status jupyterhub.service
12.참고사항.
*필요시 사용자 추가
sudo useradd -m -s /bin/bash (사용자명)
passwd (사용자명)
EX) sudo useradd -u 1000(UID) -m -s /bin/bash hiware
*필요시 그룹 추가
sudo groupadd (그룹명)
*EBS 볼륨이 부족했을 때.
AWS Console 작업 이후
EC2 접속 후
lsblk
파티션 확장 sudo growpart /dev/nvme0n1 1
XFS 파일 확장 sudo xfs_growfs
*Requirements.txt에 적혀 있는 패키지 성공 or 실패 설치 여부 (txt 파일로 빼기)
comm -23 <(sed ‘s/[≥≤]. //’ requirements.txt | sort) <(pip freeze | sed ‘s/==//’ | sort) > failed_packages.txt*
*Requirements.txt에 적혀 있는 실패한 패키지들 하나씩 설치(진행 상황 확인 가능)
cat failed_packages.txt | xargs -nl pip install -v
*파이썬 라이브러리 추가적으로 설치 할 때
pip install (해당 라이브러리 이름)
설치 확인은 pip show (해당 라이브러리 이름)
기본적으로 AL2023에는 python보다는 python3가 설치되어 있음.
python -m pip install pillow wordcloud (에러) =⇒ python ≤= 이 놈이 심볼릭 링크 안 되어 있음.
python3 -m pip install pillow wordcloud
python대신 python3 써도 전혀 이상할 거 없고, jupyterhub도 사용하는데 무리 없음
python3 말고 python 을 쓰려면 심볼릭 링크 설정해야 된다.
(ex ln -s /usr/bin/python3 /usr/bin/python)
#3.Conclusion.
상황에 따라 다르겠지만, 어떤 방식으로 사용을 하든 다 장단점이 있는 것 같다.
좋은 경험이였다. 확실히 Internet Gateway 사용없이 수동으로 한 땀 한 땀 설치했다고 하면 많이 어려웠을 것 같다.
'#OS' 카테고리의 다른 글
| #JupyterHub 환경 구축 비하인드 -1. (0) | 2025.11.14 |
|---|