6d3b0bacc0
- 19개 마이크로서비스 (news-collector, score-engine, ta-engine, dart-collector, aux-signal, us-market, graph-engine, telegram-bot, dashboard-api, kis-api 등) - 가치투자 스코어링 + 10공식 앙상블 보팅 (매직포뮬러/F-Score/Altman/PEG/ 모멘텀/Beneish/GP-A/G-Score/Amihud/BAB) - 뉴스 수집→형태소→임베딩→중복제거→AI분석 파이프라인 - 기술적분석 + GAT 그래프신경망 + 미증시 동조 시그널 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
147 lines
4.9 KiB
Bash
Executable File
147 lines
4.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# PostgreSQL 로컬 설치 + 데이터 경로를 시놀로지 NAS(/mnt/nas)에 설정
|
|
# 실행: sudo bash setup-postgres-local.sh
|
|
|
|
set -e
|
|
|
|
NAS_HOST="192.168.0.36"
|
|
NAS_NFS_PATH="/volume1/trading"
|
|
NFS_MOUNT_LOCAL="/mnt/nas"
|
|
PG_DATA_DIR="${NFS_MOUNT_LOCAL}/postgresql/data"
|
|
PG_VERSION="16"
|
|
PG_USER="kyu"
|
|
PG_PASSWORD="7895123"
|
|
PG_DB="trading_ai"
|
|
|
|
echo "=============================="
|
|
echo "1. NFS 클라이언트 설치 확인"
|
|
echo "=============================="
|
|
apt-get install -y nfs-common 2>/dev/null || true
|
|
|
|
echo ""
|
|
echo "=============================="
|
|
echo "2. NAS NFS 마운트"
|
|
echo "=============================="
|
|
mkdir -p "${NFS_MOUNT_LOCAL}"
|
|
|
|
# 이미 마운트 되어있으면 스킵
|
|
if mountpoint -q "${NFS_MOUNT_LOCAL}"; then
|
|
echo "이미 마운트됨: ${NFS_MOUNT_LOCAL}"
|
|
else
|
|
mount -t nfs "${NAS_HOST}:${NAS_NFS_PATH}" "${NFS_MOUNT_LOCAL}" -o rw,hard,intr,timeo=30,retrans=3
|
|
echo "마운트 완료: ${NAS_HOST}:${NAS_NFS_PATH} -> ${NFS_MOUNT_LOCAL}"
|
|
fi
|
|
|
|
# /etc/fstab에 자동 마운트 등록 (없으면 추가)
|
|
FSTAB_ENTRY="${NAS_HOST}:${NAS_NFS_PATH} ${NFS_MOUNT_LOCAL} nfs rw,hard,intr,timeo=30,retrans=3,_netdev 0 0"
|
|
if ! grep -qF "${NFS_MOUNT_LOCAL}" /etc/fstab; then
|
|
echo "${FSTAB_ENTRY}" >> /etc/fstab
|
|
echo "fstab에 자동 마운트 추가됨"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=============================="
|
|
echo "3. PostgreSQL 데이터 디렉토리 생성"
|
|
echo "=============================="
|
|
mkdir -p "${PG_DATA_DIR}"
|
|
chown postgres:postgres "${PG_DATA_DIR}"
|
|
chmod 700 "${PG_DATA_DIR}"
|
|
echo "데이터 경로: ${PG_DATA_DIR}"
|
|
|
|
echo ""
|
|
echo "=============================="
|
|
echo "4. PostgreSQL 서비스 설정"
|
|
echo "=============================="
|
|
|
|
# 기존 클러스터 중지 및 제거
|
|
pg_ctlcluster ${PG_VERSION} main stop 2>/dev/null || true
|
|
|
|
# 기존 기본 데이터 디렉토리를 NAS 경로로 교체
|
|
CONF_FILE="/etc/postgresql/${PG_VERSION}/main/postgresql.conf"
|
|
if [ -f "${CONF_FILE}" ]; then
|
|
# data_directory 변경
|
|
sed -i "s|^data_directory.*|data_directory = '${PG_DATA_DIR}'|" "${CONF_FILE}"
|
|
# 이미 변경된 경우가 아니면 추가
|
|
if ! grep -q "^data_directory" "${CONF_FILE}"; then
|
|
echo "data_directory = '${PG_DATA_DIR}'" >> "${CONF_FILE}"
|
|
fi
|
|
echo "postgresql.conf 업데이트 완료"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=============================="
|
|
echo "5. 데이터 디렉토리 초기화 (최초 1회)"
|
|
echo "=============================="
|
|
if [ ! -f "${PG_DATA_DIR}/PG_VERSION" ]; then
|
|
sudo -u postgres /usr/lib/postgresql/${PG_VERSION}/bin/initdb \
|
|
-D "${PG_DATA_DIR}" \
|
|
--encoding=UTF8 \
|
|
--locale=ko_KR.UTF-8 \
|
|
--auth=md5 2>/dev/null || \
|
|
sudo -u postgres /usr/lib/postgresql/${PG_VERSION}/bin/initdb \
|
|
-D "${PG_DATA_DIR}" \
|
|
--encoding=UTF8 \
|
|
--locale=C.UTF-8 \
|
|
--auth=md5
|
|
echo "DB 초기화 완료"
|
|
else
|
|
echo "이미 초기화된 데이터 디렉토리 (스킵)"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=============================="
|
|
echo "6. 외부 접속 허용 설정"
|
|
echo "=============================="
|
|
# postgresql.conf - 모든 인터페이스 리슨
|
|
sed -i "s|^#listen_addresses.*|listen_addresses = '*'|; s|^listen_addresses.*|listen_addresses = '*'|" "${PG_DATA_DIR}/postgresql.conf" 2>/dev/null || \
|
|
echo "listen_addresses = '*'" >> "${PG_DATA_DIR}/postgresql.conf"
|
|
|
|
# pg_hba.conf - Docker 네트워크(172.30.0.0/16) 접속 허용
|
|
PG_HBA="${PG_DATA_DIR}/pg_hba.conf"
|
|
if ! grep -q "172.30.0.0/16" "${PG_HBA}" 2>/dev/null; then
|
|
cat >> "${PG_HBA}" << 'HBA'
|
|
# Trading AI Docker 네트워크
|
|
host all all 172.30.0.0/16 md5
|
|
host all all 127.0.0.1/32 md5
|
|
host all all ::1/128 md5
|
|
HBA
|
|
echo "pg_hba.conf 업데이트 완료"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=============================="
|
|
echo "7. PostgreSQL 서비스 시작"
|
|
echo "=============================="
|
|
systemctl start postgresql
|
|
systemctl enable postgresql
|
|
sleep 3
|
|
systemctl is-active postgresql && echo "PostgreSQL 실행 중"
|
|
|
|
echo ""
|
|
echo "=============================="
|
|
echo "8. 유저 및 DB 생성"
|
|
echo "=============================="
|
|
sudo -u postgres psql -c "DO \$\$ BEGIN
|
|
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '${PG_USER}') THEN
|
|
CREATE USER ${PG_USER} WITH SUPERUSER PASSWORD '${PG_PASSWORD}';
|
|
ELSE
|
|
ALTER USER ${PG_USER} WITH PASSWORD '${PG_PASSWORD}';
|
|
END IF;
|
|
END \$\$;"
|
|
|
|
sudo -u postgres psql -c "CREATE DATABASE ${PG_DB} OWNER ${PG_USER};" 2>/dev/null || \
|
|
echo "DB ${PG_DB} 이미 존재 (스킵)"
|
|
|
|
echo ""
|
|
echo "=============================="
|
|
echo "완료! PostgreSQL 로컬 실행 중"
|
|
echo " Host: localhost (또는 127.0.0.1)"
|
|
echo " Port: 5432"
|
|
echo " DB: ${PG_DB}"
|
|
echo " User: ${PG_USER}"
|
|
echo " Data: ${PG_DATA_DIR} (NAS)"
|
|
echo "=============================="
|
|
echo ""
|
|
echo "다음 단계: 덤프 임포트"
|
|
echo " PGPASSWORD=${PG_PASSWORD} psql -h 127.0.0.1 -U ${PG_USER} -d ${PG_DB} -f /home/kyu/trading/pg_backup/trading_ai_backup.sql"
|