7channel-operation
WIP(現在進行中)
Work In Progress
このプロジェクトで現在進行中の作業と、過去のスナップショットを記録する。
現在の状況
プロジェクト概要
7channel の運用を管理するモノレポ的な構成。主要コンポーネントは以下:
7channel-ios/— iOSアプリ(gitignore済み)7channel-server/— サーバー初代(gitignore済み)7channel-server-v2/— FastAPI製サーバーv2。多目的Lightsailで稼働中(http://7ch.ikapps.com)。リポジトリに統合済み
現在の状態
7channel-server-v2/を多目的サーバーに移行完了、リポジトリにも統合済みcurate.pyの10分おきcron稼働中- 動画追加時のSNSアラートメールを復旧(新サーバーに
~/.aws/credentials配置) 7channel-webサービス稼働中、7ch.ikapps.comでアクセス可
次にやること
- 旧Lightsailインスタンス(旧
7channel-serverのホスト)の廃止検討 7ch.ikapps.comのHTTPS化(Let's Encrypt)
過去のWIPアーカイブ
2026-04-25 02:10 時点のスナップショット
7channel-server-v2/ 統合完了、lightsail-claude-avatar/ は破棄、curate.py cron復旧済み。残課題は旧Lightsail廃止検討と 7ch.ikapps.com のHTTPS化。
2026-04-24 移行完了直後のスナップショット
リポジトリ初期化・GitHub連携済み。7channel-server-v2 は多目的サーバーに移行完了。7channel-server-v2/ と lightsail-claude-avatar/ はローカルに存在するが未コミット(untracked)。次は両ディレクトリのコミット管理方針を決めること。
2026-04-24 時点のスナップショット
(以下、ディレクトリ構成からの推測)
git init したばかり。.gitignore に 7channel-ios/ と 7channel-server/ を除外設定済み。7channel-server-v2/ と lightsail-claude-avatar/ は未コミット状態。初回コミット & GitHub push、7channel-server-v2/ の整理が次のステップ。
(新しい「現在の状況」を書く前に、古いものをここに追記でアーカイブする。新しいものが上)
ROADMAP(計画)
ロードマップ
今週
-
7channel-server-v2/とlightsail-claude-avatar/をこのリポジトリでコミット管理するか方針を決める(v2は統合、avatarは破棄)
今月
- 旧Lightsailインスタンス(13.230.63.19 / ec2-user)の廃止検討
今四半期
(今四半期の目標)
いつか
-
7ch.ikapps.comにHTTPS(Let's Encrypt)を導入する
DECISIONS(意思決定)
意思決定記録
このプロジェクトで下した重要な意思決定を記録する。 最新が上に来る。
2026-04-25: Lightsail 上のアプリから AWS リソースへのアクセスは IAM ユーザーのアクセスキー方式を採用
背景: SNS アラートメールが新サーバーから飛ばなくなった。Lightsail のデフォルトロール AmazonLightsailInstanceRole には SNS:Publish 権限がなく、ロール自体が AWS 管理リソースのため IAM ポリシーをアタッチできない。SNSトピック側にクロスアカウント許可を入れても、IAM側ロールに権限がないため動かない。
決定: IAM ユーザー ichirokisanuki のアクセスキーを ~/.aws/credentials(mode 600)に配置して、boto3 のデフォルト認証チェーン経由で SNS を叩く方式にした。
理由: Lightsail のデフォルトインスタンスロールは AWS 管理で変更不可なので、ロールベース認証は実質不可能。アクセスキー方式は旧サーバーでも採用していた実績ある方法で、運用がシンプル。
2026-04-24: 7channel-server-v2 を独立リポジトリではなく7channel-operationに統合
背景: 7channel-server-v2 は元々独立したGitリポジトリ(.git 内蔵)として運用していたが、7channel-operation モノレポからもgit管理したかった。サブモジュール化と統合の二択だった。
決定: 7channel-server-v2/.git を削除して 7channel-operation リポジトリに通常のディレクトリとして統合。GitHub上の独立リポジトリは作られていなかったので破棄も不要。
理由: 個人開発でサブモジュールを使うほどの複雑さは不要。1リポジトリで完結する方が運用が楽。
2026-04-24: 7channel-server-v2 を多目的Lightsailサーバーに移行
背景: 旧Lightsailインスタンス(ec2-user@13.230.63.19)で動いていた7channel-server-v2を、新しい多目的サーバーに集約したかった。
決定: multipurpose-server1(ubuntu@13.230.63.19)に移行し、Nginxバーチャルホストで 7ch.ikapps.com をルーティングする構成にした。
理由: 複数サービスを1台でNginxで束ねる運用に統一するため。旧インスタンスを廃止してコストを抑える意図もある。
2026-04-24: 静的IP 7channel-v2-ip を多目的サーバーにアタッチして固定運用
背景: 多目的サーバーは動的IPのままだと再起動のたびにRoute53を更新する必要があり運用が煩雑。
決定: 旧サーバーで使っていた静的IP 7channel-v2-ip(13.230.63.19)を多目的サーバーに移植してアタッチ。
理由: Lightsailの静的IPはアタッチ中無料。Route53のAレコードを固定できるため運用が楽になる。
DEVLOG(作業ログ)
開発日誌
このプロジェクトでの作業を時系列で記録する。 最新のエントリが上に来る。
2026-04-25
セッション - 動画追加時のアラートメール復旧
やったこと:
- 動画追加時のSNS経由アラートメールが届かない問題を調査
- cron.log で
AuthorizationError: ...is not authorized to perform: SNS:Publishを確認 - 原因特定: Lightsailインスタンスは AWS 管理アカウント(
385232584017)で動いており、デフォルト付与のAmazonLightsailInstanceRoleには SNS:Publish 権限がない。しかもこのロールは AWS 管理で変更不可 - SNSトピック側にはクロスアカウント許可(
AllowLightsailPublish)が既にあったが、IAM側ロールを変更できないので無効 - 解決策として旧サーバーで使っていた IAM ユーザーのアクセスキーを新サーバーの
~/.aws/credentialsに配置([default]プロファイル、パーミッション 600) notify.send_notificationを手動実行してメール到達を確認
気づき:
- Lightsail インスタンスは「ユーザーアカウント」と「AWS管理アカウント」の二層構造になっている
AmazonLightsailInstanceRoleは AWS 管理リソースなので IAM ポリシーをアタッチできない- Lightsail から AWS リソースを使う場合、IAMユーザーのアクセスキーを置く方式が現実解
2026-04-24
セッション - サブディレクトリ整理とcron復旧
やったこと:
lightsail-claude-avatar/をゴミ箱へ移動(不要のため)7channel-server-v2/を7channel-operationリポジトリに統合- 元々独立リポジトリ(
.git内蔵)だったが、.gitを削除して通常ファイルとして取り込み - GitHub上の独立リポジトリ
7channel-server-v2はそもそも作られていなかったのでアーカイブ不要
- 元々独立リポジトリ(
- 旧サーバーで動いていた
curate.pyの10分おきcronが新サーバーで未稼働だったので復旧*/10 * * * * cd /home/ubuntu/7channel-server-v2 && venv/bin/python curate.py >> cron.log 2>&1
- 「サーバー移管時はcron等の周辺要素も漏れなくチェック」を memory に保存
気づき:
- サーバー移行ではコードのデプロイだけでなく、cron / systemd timer / 常駐デーモンのチェックも必須
セッション - リポジトリ初期化と7channel-server-v2の多目的サーバー移行
やったこと:
git init実行、.gitignore設定(7channel-server/,7channel-ios/, Claude Code ローカル状態).devnotes/運用を導入(DEVLOG.md, WIP.md)- GitHubにprivateリポジトリ(
7channel-operation)を作成、初回commit & push 7channel-server-v2を旧Lightsail(13.230.63.19/ ec2-user)から多目的サーバー(multipurpose-server1/ ubuntu)に移行- 新サーバーに
python3.10-venvインストール、venv作成 - systemdサービス(
7channel-web)を8001ポートで設定・起動 - Nginx に
7ch.ikapps.comのバーチャルホスト設定を追加 - ファイルをSCPで転送、依存パッケージインストール、サービス起動確認(HTTP 200)
- Route53のAレコードを
13.230.63.19に手動更新 - 静的IP
7channel-v2-ip(13.230.63.19)を多目的サーバーにアタッチ deploy.shを新サーバー向けに更新
- 新サーバーに
multi-purpose-lightsail-server1のREADME/CLAUDE.mdを更新してcommit & push
次回やること:
7channel-server-v2/とlightsail-claude-avatar/をこのリポジトリでコミット管理するか方針決め