feat(ads/seo/release): v1.2.0 with live Google Ads, isolated ad profile, ads.txt, and SEO/AEO/GEO optimization

This commit is contained in:
Yun Chan 2026-09-14 00:39:44 +09:00
parent a88aafa1e5
commit 0e568f1f0a
975 changed files with 130593 additions and 16783 deletions

View file

@ -1,4 +1,4 @@
# Video Downloader — 멀티플랫폼 배포 체계 계획서 (v1)
# Video Downloader — 멀티플랫폼 배포 체계 계획서 (v1)
> **범위**: Windows · macOS · Linux 데스크톱 + Android · iOS 모바일의 **빌드→서명→패키징→배포→업데이트** 전 체계.
> GitHub Releases 를 단일 배포 소스로, GitHub Actions 로 전 아티팩트 자동 빌드.
@ -40,11 +40,11 @@ GitHub Actions 대신(또는 보완으로) **사용자 소유 빌드머신 2대*
| 제품 | 플랫폼 | 아티팩트 | 채널 | 서명 |
|---|---|---|---|---|
| **App (WPF+WebView2)** — 주력 | Windows x64 | `VideoDownloader-Setup-x64.exe` (Inno, 기존) | GitHub Releases | Authenticode (선택, 후순위) |
| | Windows arm64 | `VideoDownloader-Setup-arm64.exe` (기존) | 〃 | 〃 |
| **App (Avalonia 셸)** — 크로스플랫폼 이관 | Linux x64/arm64 | `videodownloader-linux-x64.tar.gz` (기본) + `.AppImage` + `.deb` | GitHub Releases | (GPG 서명 선택) |
| | macOS x64/arm64 | `VideoDownloader-<arch>.dmg` (+ `.app` in DMG) | GitHub Releases | Developer ID + 공증 필수 |
| **Mobile (MAUI)** | Android | `VideoDownloader-<ver>-arm64.apk` | GitHub Releases + Obtainium | Keystore (CI 시크릿) |
| **App (WPF+WebView2)** — 주력 | Windows x64 | `Paca-Setup-x64.exe` (Inno, 기존) | GitHub Releases | Authenticode (선택, 후순위) |
| | Windows arm64 | `Paca-Setup-arm64.exe` (기존) | 〃 | 〃 |
| **App (Avalonia 셸)** — 크로스플랫폼 이관 | Linux x64/arm64 | `Paca-linux-x64.tar.gz` (기본) + `.AppImage` + `.deb` | GitHub Releases | (GPG 서명 선택) |
| | macOS x64/arm64 | `Paca-<arch>.dmg` (+ `.app` in DMG) | GitHub Releases | Developer ID + 공증 필수 |
| **Mobile (MAUI)** | Android | `Paca-<ver>-arm64.apk` | GitHub Releases + Obtainium | Keystore (CI 시크릿) |
| | Android (Play, 선택) | `.aab` | Google Play (추출코드 없는 빌드) | Play App Signing |
| | iOS | `.ipa` | TestFlight → App Store | Apple 배포 인증서 |
| **Server / 웹 컴패니언** | 데스크톱 앱에 내장 | 별도 배포 없음 (앱이 Kestrel 서빙) | — | 앱 서명에 포함 |
@ -156,7 +156,7 @@ jobs:
## 5-bis. CI/CD 현행 채널 — Forgejo Actions 자체 러너 (2026-08-17 가동)
저장소가 자체 Forgejo(`https://git.chanpaca.net/Video-Downloader/client`)로 이관되고 org 러너 3대가
저장소가 자체 Forgejo(`https://git.chanpaca.net/Paca/client`)로 이관되고 org 러너 3대가
등록되어, §5(GitHub) 대신 **자체 러너로 전 아티팩트를 빌드·배포**한다. §5 는 저장소 GitHub 공개 시
백업 채널로 유지(`.github/workflows/release.yml` 존치).
@ -175,19 +175,19 @@ jobs:
- **리허설**: workflow_dispatch → `ci-rehearsal` draft prerelease 로 태그 없이 전 파이프라인 검증.
- **시크릿**: `RELEASE_TOKEN`(Forgejo PAT, `write:repository`) — 릴리스 생성·자산 업로드. 체크아웃은 잡
자동 토큰(`github.token`). `ANDROID_KEYSTORE/ALIAS/PASS` 등록 전까지 APK 는 디버그 서명.
- **업로드 대상**: 공개 배포 저장소 **`Video-Downloader/releases`**(워크플로 env `RELEASE_REPO`).
- **업로드 대상**: 공개 배포 저장소 **`Paca/releases`**(워크플로 env `RELEASE_REPO`).
소스 저장소(client)는 비공개라 자산 익명 다운로드가 불가해 분리했다. draft 는 익명에게 보이지
않으므로 "빌드 → draft → QA → 수동 Publish" 흐름은 그대로다. Publish 하면 §5-ter 사이트가 노출한다.
- **머신 전제**: win = SDK 8/10 + `maui-android` 워크로드 + JDK 17 + Inno Setup 6 ·
linux/mac = `~/.dotnet` SDK 8.0.424 + 10.0.400 (§0.5).
- **갭**: §6 자동 업데이트 v1(`UpdateChecker`)은 GitHub Releases API 를 폴링하므로 GitHub 공개 전까지
미동작 — Forgejo Releases API(`/repos/{owner}/{repo}/releases/latest`, 동일 형태) 대응은 후속 항목.
대상은 공개 저장소 `Video-Downloader/releases` 가 되어야 한다.
대상은 공개 저장소 `Paca/releases` 가 되어야 한다.
## 5-ter. 배포 사이트 — MEDIABROWSER (Cloudflare Pages, 2026-08-18 가동)
## 5-ter. 배포 사이트 — Paca (Cloudflare Pages, 2026-08-18 가동)
제품 배포명은 **MEDIABROWSER** 로 하고, 프로모션/다운로드/사용 안내 3페이지 정적 사이트를
Cloudflare Pages 에 올렸다. **https://mediabrowser-7r4.pages.dev** (mediabrowser 서브도메인 선점으로
제품 배포명은 **Paca** 로 하고, 프로모션/다운로드/사용 안내 3페이지 정적 사이트를
Cloudflare Pages 에 올렸다. **https://Paca-7r4.pages.dev** (Paca 서브도메인 선점으로
접미 부여 — 커스텀 도메인 연결은 후속).
- **소스**: `site/` — `index.html`(프로모션: 라이트 글래스모피즘 + CSS scroll-driven 패럴랙스,
@ -197,16 +197,16 @@ Cloudflare Pages 에 올렸다. **https://mediabrowser-7r4.pages.dev** (mediabro
`site/fetch-releases.mjs` 가 공개 저장소 릴리스를 `site/releases.json`(git 무시)으로 굽는다.
published 릴리스만 포함(draft 제외), 최신판 강조 + 이전 버전 접힘 + OS 자동 감지 권장 표시.
- **배포**: `./build/deploy-site.ps1` — .env 의 `CLOUDFLARE_API_TOKEN/ACCOUNT_ID` 로
`wrangler pages deploy site --project-name mediabrowser`. **자동화(2026-08-18)**: 공개 releases
`wrangler pages deploy site --project-name Paca`. **자동화(2026-08-18)**: 공개 releases
저장소의 `.forgejo/workflows/site-deploy.yml` 이 릴리스 Publish 이벤트에서 사이트를 자동 재배포한다
(시크릿: CLIENT_TOKEN=client 읽기 PAT, CLOUDFLARE_API_TOKEN/ACCOUNT_ID).
- **개명 완료(2026-08-18)**: 설치자 `MediaBrowser-Setup-<arch>.exe` · tar.gz `mediabrowser-<rid>` ·
APK `MediaBrowser-<ver>-arm64.apk` · 앱 타이틀/모바일 표시명 MediaBrowser · obtainium.json 공개 저장소 URL.
AppId(GUID)·실행 파일명(VideoDownloader.exe)·데이터 경로는 유지(업그레이드·사용자 데이터 호환).
- **커스텀 도메인(2026-08-18 완료)**: **https://mediabrowser.chanpaca.net** — Pages 프로젝트 도메인 등록 +
DNS CNAME(`mediabrowser` → `mediabrowser-7r4.pages.dev`, 프록시 ON, 대시보드에서 추가). og:url 도 정식
도메인 기준으로 갱신. 참고: API 토큰(CLOUDFLARE_API_TOKEN)에는 Zone DNS 편집 권한이 없다 —
DNS 자동화가 필요해지면 토큰에 `Zone → DNS → Edit` 권한을 추가할 것.
- **개명 완료(2026-08-18)**: 설치자 `Paca-Setup-<arch>.exe` · tar.gz `Paca-<rid>` ·
APK `Paca-<ver>-arm64.apk` · 앱 타이틀/모바일 표시명 Paca · obtainium.json 공개 저장소 URL.
AppId(GUID)·실행 파일명(Paca.exe)·데이터 경로는 유지(업그레이드·사용자 데이터 호환).
- **커스텀 도메인(2026-08-18 완료)**: **https://Paca.chanpaca.net** — Pages 프로젝트 도메인 등록 +
DNS CNAME(`Paca` → `Paca-7r4.pages.dev`, 프록시 ON). og:url 도 정식
도메인 기준으로 갱신. **API 토큰 통합(2026-08-18)**: `CLOUDFLARE_API_TOKEN`에 `Account → Cloudflare Pages → Edit`,
`Zone → DNS → Edit`(`chanpaca.net`), `Zone → Zone → Read` 권한을 통합하여 Pages 배포 및 DNS 조회가 API로 일원화됨.
## 6. 업데이트 체계
@ -242,14 +242,14 @@ Cloudflare Pages 에 올렸다. **https://mediabrowser-7r4.pages.dev** (mediabro
`.env.example`(빈 값 템플릿)뿐 — 공개해도 유출 없음.
```powershell
gh repo create <owner>/videodownloader --public --source . --push # 또는 --private 로 시작
gh repo create <owner>/Paca --public --source . --push # 또는 --private 로 시작
git tag v1.0.0 && git push origin v1.0.0 # → release.yml 자동 실행(Draft)
```
공개 후 마무리 3가지:
1. `build/obtainium.json` · README 의 `<owner>/<repo>` 치환
2. (선택) Android 서명: 시크릿 `ANDROID_KEYSTORE`(base64)/`ANDROID_KEY_ALIAS`/`ANDROID_KEY_PASS` 등록
3. 설정창 "앱 업데이트"에 `owner/videodownloader` 입력 → D6 v1 폴링 활성
3. 설정창 "앱 업데이트"에 `owner/Paca` 입력 → D6 v1 폴링 활성
### D4 — macOS 서명·공증 (Apple Developer Program 가입 후)