Files
106_105_181_40/nfs_backup/README.md
2026-06-29 14:31:39 +08:00

106 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 備份說明 — 主機 106.105.181.40hospital_media
本目錄存放主機 `106.105.181.40` 各服務的**每日自動備份**。
備份來源主機 SSH 別名:`hospital_media`
- NFS 來源:`hdsnas02.tpech.gov.tw:/TEL_BACKUP_NFS`
- 主機掛載點:`/mnt/tel_backup_nfs`(本目錄即 `/mnt/tel_backup_nfs/106_105_181_40/`
- 備份腳本:主機上 `/opt/backup_all_to_nfs.sh`
- 排程:`/etc/cron.d/backup-nfs`,每天 **03:30** 以 root 執行
- 保留天數:**14 天**(更舊的自動刪除,可在腳本 `RETAIN_DAYS` 調整)
- 紀錄檔:本目錄 `backup.log`
## 目錄結構
```
106_105_181_40/
├── README.md # 本文件
├── backup.log # 每次備份的紀錄
└── YYYYMMDD_HHMMSS/ # 每天一個資料夾(備份時間戳)
├── caddy.tar.gz
├── php.tar.gz
├── php-staging.tar.gz
├── phpmyadmin.tar.gz
├── coturn.tar.gz
├── antmedia_volume.tar.gz
└── mysql_all_databases.sql.gz
```
## 各檔案備份的是什麼
| 檔案 | 內容 | 主機來源 | 對應容器 |
|------|------|----------|----------|
| `caddy.tar.gz` | Caddy 設定、SSL 憑證、`tel-server` 靜態檔 | `/opt/caddy` | `caddy` |
| `php.tar.gz` | 正式環境 PHP 程式碼 | `/opt/php`(網站根:`www/` | `php` |
| `php-staging.tar.gz` | 測試環境 PHP 程式碼 | `/opt/php-staging` | `php-staging` |
| `phpmyadmin.tar.gz` | phpMyAdmin compose 設定無資料stateless | `/opt/phpmyadmin` | `phpmyadmin` |
| `coturn.tar.gz` | TURN/STUN 設定 `turnserver.conf` | `/opt/coturn` | `coturn` |
| `antmedia_volume.tar.gz` | Ant Media Server **實際資料卷**(串流設定、應用、錄影等) | docker volume `antmedia_volume`(容器內 `/usr/local/antmedia` | `antmedia` |
| `mysql_all_databases.sql.gz` | **所有資料庫**的邏輯匯出(含 `tpech_tel``myapp` 等) | `mysqldump --all-databases` | `mysql-container` |
> 注意NAS 啟用 root_squash檔案 owner 會顯示 `nobody:nogroup`,屬正常現象。
---
# 還原方法
> 以下指令都在主機 `106.105.181.40` 上以 root`sudo`)執行。
> 先設定要還原的備份時間戳,例如:
> ```bash
> BK=/mnt/tel_backup_nfs/106_105_181_40/20260629_142059
> ```
## 1. 檔案型服務Caddy / PHP / PHP-staging / phpMyAdmin / Coturn
解壓回 `/opt`(會覆蓋現有檔案),再重啟容器:
```bash
# 範例:還原 Caddy
sudo tar xzf "$BK/caddy.tar.gz" -C /opt
cd /opt/caddy && ./restart.sh # 或 docker restart caddy
# 其餘服務同理(換檔名與容器名):
sudo tar xzf "$BK/php.tar.gz" -C /opt && docker restart php
sudo tar xzf "$BK/php-staging.tar.gz" -C /opt && docker restart php-staging
sudo tar xzf "$BK/phpmyadmin.tar.gz" -C /opt && docker restart phpmyadmin
sudo tar xzf "$BK/coturn.tar.gz" -C /opt && docker restart coturn
```
## 2. Ant Media Server資料卷
必須先停容器,清空舊資料卷再解壓,避免殘留檔案:
```bash
docker stop antmedia
VOL=/var/lib/docker/volumes/antmedia_volume/_data
sudo rm -rf "$VOL"/* # 清空(確認 BK 正確再執行!)
sudo tar xzf "$BK/antmedia_volume.tar.gz" -C "$VOL"
docker start antmedia
```
## 3. MySQL所有資料庫
把 dump 灌回執行中的容器(會覆蓋同名資料庫):
```bash
zcat "$BK/mysql_all_databases.sql.gz" | \
docker exec -i mysql-container sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"'
```
只還原單一資料庫:
```bash
# 先從整包過濾出該 DB或用 sed 擷取對應段落),簡單作法是全部灌回後只保留需要的
zcat "$BK/mysql_all_databases.sql.gz" | \
docker exec -i mysql-container sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" tpech_tel'
# ↑ 注意dump 為 --all-databases 格式,含 USE 語句;指定單庫還原前請確認段落,
# 或改用 mysqldump 重新針對單一資料庫匯出。
```
## 還原後檢查
- 容器狀態:`docker ps`
- Caddy 設定語法:`docker exec caddy caddy validate --config /etc/caddy/Caddyfile`
- MySQL`docker exec -it mysql-container mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e 'SHOW DATABASES;'`
- Ant Media瀏覽器開管理介面確認應用與設定