Files
106_105_181_40/hospital_media_antmedia.md

12 KiB
Raw Permalink Blame History

Hospital Media Server 筆記

主機資訊

  • IP: 106.105.181.40
  • SSH 別名: hospital_media
  • 檔案擁有者: tpech_1duan / sftpuser / root

全部容器一覽

容器名稱 Image 網路 用途
caddy caddy host 反向代理、SSL 終端、靜態檔案
antmedia antmediaserver:2.13.2 host Ant Media Server串流
php timmy/php_base:v1.0 port 8888→80 正式環境 PHP 應用
php-staging timmy/php_base:v1.0 port 6666→80 測試環境 PHP 應用ISO27001 驗證用)
coturn coturn port 3478 TURN/STUN 伺服器
phpmyadmin phpmyadmin port 1888→80 資料庫管理介面
mysql-container mysql:latest port 3306 MySQL 資料庫

所有容器皆設為 restart: always


Caddy 反向代理

  • 部署路徑: /opt/caddy
  • 使用 docker-compose.yaml 管理,--network host 模式
  • Volume 掛載:Caddyfilecaddy_data、SSL 憑證、tel-server 靜態檔案

操作腳本

./run.sh                        # docker-compose up -d
./stop.sh                       # docker-compose down
./restart.sh                    # stop + run
./shell.sh                      # docker exec -it caddy sh
./list-containers.sh            # docker-compose ps
./view-output-from-containers.sh  # docker-compose logs -f

路由規則Caddyfile

入口 後端 說明
tel.tpech.gov.tw:443 127.0.0.1:8888php 容器) 正式環境HTTPS
tel.tpech.gov.tw:443/phpmyadmin/* 10.200.251.40:1888 phpMyAdminstrip prefix 後轉發)
tel.tpech.gov.tw:80 127.0.0.1:8888 正式環境HTTP
:1443 127.0.0.1:6666php-staging 容器) 測試環境ISO27001
tel-server.tpech.gov.tw:80/443 /srv/tel-server 靜態檔案服務(用於 PKI 驗證 .well-known
:443 / :80 127.0.0.1:8888 其他網域的 fallback
:8081 健康檢查(回傳 "I am 8081"
  • auto_https off:不使用 Caddy 自動 HTTPS手動管理憑證

Caddy SSL 憑證

項目
網域 tel.tpech.gov.tw
簽發者 中華電信 HiPKI OV TLS CA - G1
有效期 2025-04-23 ~ 2026-04-23
憑證路徑(主機) /opt/caddy/fullchain.pem/opt/caddy/privkey.pem
憑證路徑(容器內) /etc/caddy/ssl/fullchain.pem/etc/caddy/ssl/privkey.pem

更新 Caddy 憑證:

# 1. 上傳新憑證到主機
scp fullchain.pem privkey.pem hospital_media:/opt/caddy/

# 2. 重啟 Caddyvolume 掛載會自動載入新憑證)
ssh hospital_media "cd /opt/caddy && ./restart.sh"

# 3. 驗證
openssl s_client -connect tel.tpech.gov.tw:443 -servername tel.tpech.gov.tw < /dev/null 2>/dev/null | openssl x509 -noout -dates

憑證備份hospital/

目錄 內容
hospital/ssl_tel_tpech_gov_tw_2025/ tel.tpech.gov.tw 2025 年憑證key + csr + fullchain
hospital/ssl_tel_server_tpech_gov_tw_2025/ tel-server.tpech.gov.tw 2025 年憑證key + csr + fullchain

Ant Media Server

  • 部署路徑: /opt/antmediaserver

服務狀態

項目
容器名稱 antmedia
Docker Image antmediaserver:2.13.2
安裝包 ant-media-server-enterprise-2.13.2-20250207_1708.zip
基礎映像 ubuntu:22.04
網路模式 --network host
時區 Asia/Taipei
重啟策略 --restart=always
資料 Volume antmedia_volume/usr/local/antmedia/

操作腳本(/opt/antmediaserver

./build_antmedia_image.sh    # 建構 Docker image
./run.sh                     # 停舊容器 → 啟動新容器(掛載 antmedia_volume
./stop.sh                    # docker stop antmedia
./shell.sh                   # docker exec -it antmedia bash
./enable_ssl.sh <CERT_DIR> [DOMAIN]   # 一鍵更新 SSL 憑證
./backup_antmedia_data.sh    # 備份 antmedia_volume 到當前目錄

build_antmedia_image.sh

docker build --network=host -t antmediaserver \
  --build-arg AntMediaServer=ant-media-server-enterprise-2.13.2-20250207_1708.zip .

run.sh

docker stop antmedia && docker rm antmedia
docker run -d --network host --privileged \
  --restart=always \
  -e TZ=Asia/Taipei \
  -v /etc/localtime:/etc/localtime:ro \
  --mount source=antmedia_volume,target=/usr/local/antmedia/ \
  --name antmedia antmediaserver:2.13.2

backup_antmedia_data.sh

docker run --rm \
  -v antmedia_volume:/data \
  -v "$(pwd)":/backup \
  busybox \
  sh -c "cd /data && tar czf /backup/antmedia_backup_$(date +%Y%m%d_%H%M%S).tar.gz ."

AMS SSL 憑證

目前憑證資訊

項目
網域 tel-server.tpech.gov.tw
簽發者 中華電信 HiPKI OV TLS CA - G1
有效期 2025-04-23 ~ 2026-04-23
憑證位置(容器內) /usr/local/antmedia/conf/fullchain.pemprivkey.pemchain.pem
Keystore 密碼 網域名稱 tel-server.tpech.gov.tw(由容器內 enable_ssl.shgenerate_password 決定)

更新 AMS SSL 憑證

方法一:使用 /opt/antmediaserver/enable_ssl.sh推薦

將新的 fullchain.pem + key 放入憑證資料夾,然後一行搞定:

# 把憑證檔案放到對應資料夾(資料夾內需有 fullchain.pem 和 tel_server_tpech_gov_tw.key
cd /opt/antmediaserver
./enable_ssl.sh ssl_tel_server_tpech_gov_tw_2025
# 或指定網域
./enable_ssl.sh ssl_tel_server_tpech_gov_tw_2025 tel-server.tpech.gov.tw

此腳本會自動:docker cp 憑證進容器 → 在容器內執行 enable_ssl.sh 生成 keystore/truststore 並重啟 AMS。

方法二:手動操作

  1. 準備 PEM 檔:fullchain.pem(伺服器憑證 + 中繼 CAprivkey.pemchain.pem(中繼 CA

    如果拿到的是 .cerDER 格式),先轉換:

    openssl x509 -inform der -in certificate.cer -out certificate.pem
    cat server.pem intermediate_ca.pem > fullchain.pem
    cp intermediate_ca.pem chain.pem
    
  2. 複製進容器並執行:

    docker cp fullchain.pem antmedia:/usr/local/antmedia/
    docker cp privkey.pem antmedia:/usr/local/antmedia/
    docker cp chain.pem antmedia:/usr/local/antmedia/
    docker exec -it antmedia bash -c "cd /usr/local/antmedia && ./enable_ssl.sh \
      -d tel-server.tpech.gov.tw \
      -f /usr/local/antmedia/fullchain.pem \
      -p /usr/local/antmedia/privkey.pem \
      -c /usr/local/antmedia/chain.pem"
    

驗證

openssl s_client -connect tel-server.tpech.gov.tw:5443 -servername tel-server.tpech.gov.tw < /dev/null 2>/dev/null | openssl x509 -noout -dates

連接埠

協定 Port
HTTP 5080
HTTPS 5443
RTMP 1935
RTMPS 8443
TURN/STUN 3478
WebRTC UDP 50000-60000

Web 應用

應用 路徑 說明
LiveApp /LiveApp 直播應用主要使用WebRTC 20fpsHLS 啟用
WebRTCAppEE /WebRTCAppEE WebRTC 企業版30fps目前無串流
root / AMS 管理後台Angular SPA
  • 轉碼設定720p (1.5Mbps) + 480p (1Mbps)
  • TURN/STUN 指向 106.105.181.40:3478(帳密為預設 testuser/testpassword,建議更換)
  • LiveApp 的 remoteAllowedCIDR 有格式錯誤:106.105.181.40.106.105.181.70,中間句點應為逗號

系統維護

SSL 憑證到期時間

兩張憑證皆為中華電信簽發,每年需手動更新:

網域 到期日 使用於
tel.tpech.gov.tw 2026-04-23 Caddy 反向代理
tel-server.tpech.gov.tw 2026-04-23 Ant Media Server

年度 SSL 更新 checklist

步驟一網域驗證DCV

中華電信 HiPKI 簽發憑證前,會要求透過 HTTP 驗證網域所有權。驗證檔案放在:

/opt/caddy/tel-server/.well-known/pki-validation/
├── DN_CHECK_FILE.htm   # HiPKI DCV 驗證檔JSON 格式,含 randomNumber + expireTime
└── whois.txt           # 域名所有權驗證

Caddy 中 tel-server.tpech.gov.tw:80 設定為靜態檔案服務,就是為了讓 CA 能存取: http://tel-server.tpech.gov.tw/.well-known/pki-validation/DN_CHECK_FILE.htm

流程:

  1. 向中華電信提交 CSR 申請憑證
  2. 中華電信會提供新的驗證檔案內容
  3. 更新 /opt/caddy/tel-server/.well-known/pki-validation/ 下的檔案
  4. 等待 CA 驗證通過後取得新憑證

步驟二:安裝新憑證

  1. 更新 Caddy 憑證:覆蓋 /opt/caddy/fullchain.pem + privkey.pem./restart.sh
  2. 更新 AMS 憑證:cd /opt/antmediaserver && ./enable_ssl.sh ssl_tel_server_tpech_gov_tw_<年份>
  3. 備份新憑證到 /opt/caddy/hospital//opt/antmediaserver/ssl_tel_server_tpech_gov_tw_<年份>/
  4. 備份 AMS 資料:cd /opt/antmediaserver && ./backup_antmedia_data.sh

備份

項目 方式 說明
AMS 資料卷備份 /opt/antmediaserver/backup_antmedia_data.sh antmedia_volume 備份到當前目錄
AMS 歷史完整備份 /opt/antmedia_*.tar.gz 手動 tar 備份最新2025-05-123.4GB
憑證備份 /opt/caddy/hospital//opt/antmediaserver/ssl_*/ 各時期憑證

注意事項

  • AMS 使用 Docker volumeantmedia_volume):容器刪除後資料仍保留,但刪除 volume 則遺失
  • AMS 特權模式: 容器以 --privileged 運行
  • Caddy 使用 bind mount: Caddyfile 和憑證直接掛載主機檔案
  • host 網路: caddyantmedia 皆使用 host 網路模式,直接共用主機所有 port
  • TURN/STUN 帳密為預設值 testuser/testpassword,建議更換
  • LiveApp 的 remoteAllowedCIDR 有格式錯誤106.105.181.40.106.105.181.70,中間句點應為逗號

NFS 備份掛載hdsnas02 / TEL_BACKUP_NFS

將院內 NAS 的備份空間掛載到本機 /mnt/tel_backup_nfs

項目
NAS 主機 hdsnas02.tpech.gov.tw10.200.30.149
Export 路徑 /TEL_BACKUP_NFS大寫,小寫會被 server 回 "No such file or directory"
掛載點 /mnt/tel_backup_nfs
容量 54G掛載時已用 2.3G
NAS 支援版本 僅 NFSv2/v3無 NFSv4mountd 在 4048外觀像 Synology/QNAP
Export ACL 10.200.251.4010.200.251.70(本機符合)

fstab開機自動掛載

hdsnas02.tpech.gov.tw:/TEL_BACKUP_NFS  /mnt/tel_backup_nfs  nfs  vers=3,soft,timeo=100,retrans=2,_netdev,nofail  0  0
  • nofail + softNAS 未上線時不卡開機。手動掛載用 sudo mount /mnt/tel_backup_nfs

防火牆需求(重要)

NFSv3 掛載除了 2049nfsd111rpcbind必須能連 NAS 的:

服務 Port 協定
mountd 4048 TCP+UDP
nlockmgr (lockd) 4045 TCP+UDP
status (statd) 4050 TCP+UDP

初次掛載時僅 2049/111 通4048/4045/4050 被擋導致 mount 卡在向 mountd 取 filehandle 而 timeout請網管開放後才成功。

nfs-common 離線安裝

本機無對外網路apt 無法下載。改在有網路的機器下載 amd64 deb → scpdpkg -i

  • keyutilsrpcbindlibnfsidmap1nfs-common(已安裝完成,/sbin/mount.nfs 就位,rpcbind service 已啟用)
  • 套件來源:security.ubuntu.com / archive.ubuntu.compool/main

每日自動備份到 NFS

各服務每天備份到 NAS結構與還原方式詳見備份目錄內的 README.md

項目
備份腳本 /opt/backup_all_to_nfs.shroot0750
排程 /etc/cron.d/backup-nfs,每天 03:30
備份根目錄 /mnt/tel_backup_nfs/106_105_181_40/(內含 README.mdbackup.log、每日 YYYYMMDD_HHMMSS/
保留天數 14 天(腳本 RETAIN_DAYS,逾期自動刪)
單次大小 約 619M

備份內容(每日各一壓縮檔):

服務 檔案 來源
Caddy caddy.tar.gz /opt/caddy
PHP 正式 php.tar.gz /opt/php
PHP 測試 php-staging.tar.gz /opt/php-staging
phpMyAdmin phpmyadmin.tar.gz /opt/phpmyadminstateless
Coturn coturn.tar.gz /opt/coturn
Ant Media antmedia_volume.tar.gz docker volume antmedia_volume(非 /opt/antmedia 舊快照)
MySQL mysql_all_databases.sql.gz mysqldump --all-databases --single-transaction
  • 腳本有 mountpoint 安全檢查NFS 未掛載即中止,避免寫爆本機根磁碟。
  • 手動執行:sudo /opt/backup_all_to_nfs.sh。還原步驟見 106_105_181_40/README.md