

AWS Lightsail 로 MLflow 와 MySQL 서버를 띄울 것이다.
기본적인 것은 첫번째로 .pem 파일을 chmod 400 ~~~.pem 해주는 것
윈도우는 chmod가 안되서 ubuntu를 깔고 홈으로 파일을 옮겨서 꾸역꾸역해야 될까말까
사용한 setup.sh 코드
echo "=== MLflow Tracking Server + MySQL 설치 시작 ==="
# 1. 시스템 업데이트
echo "1. 시스템 패키지 업데이트 중..."
apt update && apt upgrade -y
# 2. 필요한 패키지 설치
echo "2. 필요한 패키지 설치 중..."
apt install -y python3 python3-pip python3-venv mysql-server mysql-client git curl wget
# 3. MySQL 서비스 시작 및 보안 설정
echo "3. MySQL 설정 중..."
systemctl start mysql
systemctl enable mysql
# MySQL 보안 설정 (자동화된 응답)
mysql_secure_installation_automated() {
mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mlflow123!';"
mysql -e "DELETE FROM mysql.user WHERE User='';"
mysql -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"
mysql -e "DROP DATABASE IF EXISTS test;"
mysql -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';"
mysql -e "FLUSH PRIVILEGES;"
}
mysql_secure_installation_automated
# 4. MLflow용 데이터베이스 생성
echo "4. MLflow용 데이터베이스 생성 중..."
mysql -u root -pmlflow123! -e "CREATE DATABASE mlflow_db;"
mysql -u root -pmlflow123! -e "CREATE USER 'mlflow'@'localhost' IDENTIFIED BY 'mlflow123!';"
mysql -u root -pmlflow123! -e "GRANT ALL PRIVILEGES ON mlflow_db.* TO 'mlflow'@'localhost';"
mysql -u root -pmlflow123! -e "FLUSH PRIVILEGES;"
# 5. Python 가상환경 생성 및 MLflow 설치
echo "5. Python 가상환경 생성 및 MLflow 설치 중..."
cd /opt
python3 -m venv mlflow_env
source mlflow_env/bin/activate
# MLflow 및 MySQL 연결 라이브러리 설치
pip install --upgrade pip
pip install mlflow[extras] pymysql sqlalchemy
# 6. MLflow 디렉토리 생성
echo "6. MLflow 디렉토리 생성 중..."
mkdir -p /opt/mlflow
mkdir -p /opt/mlflow/artifacts
chown -R $USER:$USER /opt/mlflow
# 7. MLflow 설정 파일 생성
echo "7. MLflow 설정 파일 생성 중..."
cat > /opt/mlflow/mlflow.conf << EOF
[mlflow]
# MLflow 서버 설정
backend_store_uri = mysql+pymysql://mlflow:<비밀번호>@localhost:3306/mlflow_db
default_artifact_root = /opt/mlflow/artifacts
host = 0.0.0.0
port = 5000
workers = 4
EOF
# 8. MLflow 서비스 파일 생성
echo "8. MLflow 서비스 파일 생성 중..."
cat > /etc/systemd/system/mlflow.service << EOF
[Unit]
Description=MLflow Tracking Server
After=network.target mysql.service
Requires=mysql.service
[Service]
Type=simple
User=root
WorkingDirectory=/opt/mlflow
Environment=PATH=/opt/mlflow_env/bin
ExecStart=/opt/mlflow_env/bin/mlflow server
--backend-store-uri mysql+pymysql://mlflow:<비밀번호>@localhost:3306/mlflow_db
--default-artifact-root /opt/mlflow/artifacts --host 0.0.0.0 --port 5000
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# 9. 방화벽 설정 (Ubuntu/Debian)
echo "9. 방화벽 설정 중..."
# 기본 정책 설정: 인바운드 거부, 아웃바운드 허용
ufw default deny incoming
ufw default allow outgoing
# SSH 유지 (원격 접속 유지 필수)
ufw allow OpenSSH
# MLflow UI 포트만 공개
ufw allow 5000/tcp
# MySQL(3306)은 내부에서만 사용 → 외부 공개 비권장
# 필요 시 VPC/보안그룹/SSH 터널만 사용 권장
# ufw allow 3306/tcp
# UFW 활성화
ufw --force enable
# 10. 서비스 시작
echo "10. MLflow 서비스 시작 중..."
systemctl daemon-reload
systemctl enable mlflow
systemctl start mlflow
# 11. 상태 확인
echo "11. 서비스 상태 확인 중..."
sleep 5
systemctl status mlflow --no-pager
systemctl status mysql --no-pager
echo "=== 설치 완료 ==="
echo "MLflow Tracking Server: http://3.36.117.183:5000"
echo "MySQL 데이터베이스: localhost:3306"
echo "MLflow 데이터베이스: mlflow_db"
echo "아티팩트 저장소: /opt/mlflow/artifacts"
echo ""
echo "서비스 관리 명령어:"
echo " MLflow 시작: sudo systemctl start mlflow"
echo " MLflow 중지: sudo systemctl stop mlflow"
echo " MLflow 재시작: sudo systemctl restart mlflow"
echo " MLflow 상태: sudo systemctl status mlflow"
echo ""
echo "MySQL 접속:"
echo " mysql -u mlflow -pmlflow123! -h localhost mlflow_db"
아무튼 따라서 결과적으로
이 sh 스크립트를 실행하면:
MySQL 서버 (mysql.service)
MLflow Tracking Server (mlflow.service)
둘 다 systemd 서비스로 등록 + 자동 시작 설정되기 때문에,
👉 서버가 24시간 켜져 있는 한 자동으로 계속 실행된다.
이제 네트워크쪽을 보면

방화벽에서 Custom TCP 5000포트를 모든 주소에서 올 수 있도록 열어준다
이것은 컴퓨터의 5000포트를 열어놓은 것일 뿐이다.
.sh 파일 보면 이런 코드가 있는데
#MLflow UI 포트만 공개
ufw allow 5000/tcp
이걸 해줘야만 5000포트에 있는 MLflow 의 UI에 접속이 가능하다.
약간 내벽/외벽 이중창같은 느낌

그래서 퍼블릭 IP : 5000 포트로 접속이 가능하게 되었다.