Skip to content

Junwu0615/Forex-Get-Quotes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GitHub Views GitHub Clones


A. Update Plan

事件 敘述 更新時間
專案上架 Forex-Get-Quotes 2024-09-12
加入排程邏輯 自動化抓取數據 2024-09-12
與 Database 串接 Database-Template 完成該功能 2024-12-29
Docker 包裝成服務 2025-01-24
更新 README 說明 Docker & Database 連線問題 2025-01-24
更新撰寫方式 - 2025-09-25
更新專案路徑編排 - 2025-09-25
回補歷史邏輯 - -

B. How To Use

STEP.1 Clone

git clone https://github.com/Junwu0615/Forex-Get-Quotes.git

STEP.2 Requirements

pip install -r requirements.txt

STEP.3 Notice

  • 記得填寫 .env 或是在 IDE 設定參數 # 可參考下面的描述

  • 有引用 Database-Template 功能完成餵入 Database 的動作

STEP.4 Run

python Entry.py

00.gif

00.jpg

01.jpg


C. Dockerization

Directory Structure Diagram

Forex-Get-Quotes/docker
  ├── app
  │   ├── lib
  │   │   ├── __init__.py
  │   │   └── utils.py
  │   │
  │   ├── Entry.py
  │   └── requirements.txt
  │
  └── script
      ├── .env
      ├── docker-compose.yaml
      └── Dockerfile

STEP.1 創建檔案夾 & 進入腳本路徑

md log;
md datasets;
cd docker

STEP.2 新增檔案 : ./script/.env

SQL_SERVER_DRIVER=17
SQL_SERVER_BROKER_HOST=<Your SQL Server IP>,<YOUR SQL Server Port>
SQL_SERVER_LOGIN_USER=<Your User Name>
SQL_SERVER_LOGIN_PASSWORD=<Your User Password>
SCHEDULE_SETTINGS=MTWTFss=22:00:00,MTWTFss=10:00:00 # Linux 時間計算為+0
SAVE_PATH=/builds/rep/datasets
LOG_PATH=/builds/rep/log
FMP_TOKEN=<Your FMP_TOKEN>
TELEGRAM_BOT_TOKEN=<Your TELEGRAM_BOT_TOKEN>
TELEGRAM_CHAT_ID=<Your TELEGRAM_CHAT_ID>
TARGET_LIST=xauusd,eurusd,usdjpy,btcusd,ethusd
INTERVAL_LIST=M1,M5,M15,H1,H4,D1

STEP.3 安裝 Dockerfile

docker build -t forex-get-quotes:latest -f script/Dockerfile . --no-cache

STEP.4 若無,創建網路

docker network create --driver overlay open_network

STEP.5 安裝 docker-compose

docker stack deploy -c script/docker-compose.yaml forex-get-quotes

STEP.6 檢視 docker service 清單

docker service ls

STEP.7 查看專案 log 打印

docker service logs -f forex-get-quotes_task

02.jpg


D. Other

新增 SQL 用戶來登入 Database

  • 確認使用者是否存在

    SELECT name FROM sys.server_principals WHERE name='new_user';
    • 若不存在,則新增使用者

      CREATE LOGIN new_user WITH PASSWORD='YourPassword';
    • 若忘記密碼,可重設使用者密碼

      ALTER LOGIN new_user WITH PASSWORD='NewPassword';
  • 檢查目標資料庫中是否已建立使用者

    USE [YourDatabase];
    SELECT name FROM sys.database_principals WHERE name = 'new_user';
    • 若不存在,則建立資料庫使用者並關聯登入

      CREATE USER new_user FOR LOGIN new_user;
      -- 賦予管理權限
      ALTER ROLE db_owner ADD MEMBER new_user; 
  • SQL Server 身份驗證模式設定與調整,變更驗證模式

    • 變更登入驗證模式

      regedit
      
      • 瀏覽至該路徑: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL{InstanceID}.MSSQLSERVER\LoginMode
      • 改變 LoginMode 數值
        • 1 = 僅允許 Windows 身份驗證
        • 2 = 啟用混合模式 (SQL Server 和 Windows 身份驗證)
      • 儲存更改,然後重新啟動 SQL Server 服務
    • SQL 查詢指令確認有無生效

      -- 0:混合模式
      -- 1: 僅 Windows 身份驗證
      SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') AS AuthenticationMode;

刪除欲移除的 SQL 用戶

  • 確認使用者的 principal_id & 類型

    SELECT name, principal_id, type_desc FROM sys.database_principals
    SELECT name, principal_id, type_desc FROM sys.server_principals
  • 確認使用者的 綁定的角色 ID

    SELECT * FROM sys.database_role_members WHERE member_principal_id=<principal_id> 
  • 刪除使用者 (依使用者類型決定以什麼方式刪除)

    DROP USER <user_name>
    DROP LOGIN <user_name>

測試是否有以 IP 形式連接上 Database

  • 進入 container 輸入指令

    docker exec -it <container id> bash
  • 開啟 SQL Server TCP/IP 協議

    Win + R : compmgmt.msc
    
  • 確認是否有連接上 Database

    • telnet 測試

      telnet <SQL Server IP> <port>
    • Docker container 進去 bash 測試

      # 確認是否能連接該位置
      telnet <SQL Server IP> <port>
      # 確認是否能以該使用者登入資料庫,成功後可下指令測試
      sqlcmd -S <SQL Server IP>,<port> -U <user> -P <password> -d <database>

其他指令

  • 確認實體連線設定等狀態

    EXEC sp_helpserver
  • SQL 版本確認

    SELECT @@VERSION;
  • 查閱資料庫允許通過的連線設定

    EXEC xp_readerrorlog 0, 1, N'server is listening';

Notice: About SPN

  • btw,這玩意兒讓我瘋狂鬼打牆,卡了近 4 天

  • 法 1. 直接設定 NTLM,繞過 SPN

    regedit
    
    • 瀏覽至該路徑: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
    • 新增 DWORD 32 位元 DisableLoopbackCheck,數值設置 1
  • 法 2. 設定 SPN ( 我沒成功,未來有機會再搞 )

    setspn -L <服務帳戶>
    # 預期出現
    MSSQLSvc/<服務帳戶>:<port>
    MSSQLSvc/<服務帳戶>.domain.local:<port>
    
    • 若無則手動新增

    setspn -A MSSQLSvc/<SQL Server IP>:<port> <服務帳戶>$
    setspn -A MSSQLSvc/<服務帳戶>.domain.local:<port> <服務帳戶>$
    
  • 重啟 SQL server 服務,確認 IP 形式是否能正常連上 Database


E. Data & Reference Sources

About

外匯定時收報價 ( Docker / Schedule / Telegram / Line / Python )

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors