YuoVisionは、動画の視聴とアップロードが可能な動画配信プラットフォームです。 あなたの動画をアップロードして、世界中の人々と共有しましょう。新しい発見をYuoVisionでシェアし、一緒に新しい世界を探求しましょう。
- 視聴
- チャンネル登録
- アップロード
- コメント
- 広告
- Go
- GraphQL
- スキーマと型を定義することで、GraphQLではドキュメントのようにスキーマが明確になります。これにより、リゾルバーが自動生成される利点があります。また、必要な分だけデータを取得することができるという考え方もよいです。
- 自宅サーバー
- Proxmox VE 8.1
- Ubuntu22.04
- Cloudflare Tunnel
- パブリックにルーティング可能なIPアドレスを持たずに安全にCloudflareに接続することができます。
Kubernetes現在はリソース不足のためDockerで動かしています。
- HLS
- MySQL
- RDBMSです。
- Redis
- キャッシュサーバとして動かしています。動画一覧を取得した際に1分間キャッシュとして保存します。
- MinIO
- S3と互換性のあるストレージサービスです。
- Keycloak
- SSOと使いたいです。
- Docker Hub
- CI
- FFmpeg - 動画に関する様々なことを扱うツールです。
- kolesa-team/go-webp
- webpに変換するライブラリです。
HLS(HTTP Live Streaming)を使いました。ストリーミング
さまざまなOSSを駆使してVMの上に構築しました。
- クリーンアーキテクチャで構築しました。DBなど外部のものに依存しないような設計にしました。
- GraphQL
- スキーマ設計は1回で必要な情報を取得できるようにしました。
- テスト動かしています。
- Docker Hubにpushしています。
- kubernetesのマニフェストファイルのimage tagをコミット最新のものに変更しています。またimage tagはgitのcommit hashを使っています。
. ├── Dockerfile ├── Dockerfile.dev ├── Makefile ├── app │ ├── adapter │ │ ├── infrastructure │ │ │ ├── comment.go │ │ │ ├── convert_hls.go │ │ │ ├── image.go │ │ │ ├── infrastructure.go │ │ │ ├── redis.go │ │ │ ├── upload_video_for_storage.go │ │ │ ├── user.go │ │ │ └── video.go │ │ └── presentation │ │ └── resolver │ │ ├── comment.resolvers.go │ │ ├── node.resolvers.go │ │ ├── resolver.go │ │ ├── user.resolvers.go │ │ └── video.resolvers.go │ ├── application │ │ ├── app.go │ │ ├── comment.go │ │ ├── image.go │ │ ├── port │ │ │ ├── comment.go │ │ │ ├── image_port.go │ │ │ ├── user_port.go │ │ │ └── video_port.go │ │ ├── usecase.go │ │ ├── user.go │ │ ├── video.go │ │ ├── video_test.go │ │ └── video_upload.go │ ├── domain │ │ ├── comment.go │ │ ├── domain.go │ │ ├── id.go │ │ ├── models │ │ │ └── models_gen.go │ │ ├── user.go │ │ ├── uuid.go │ │ └── video.go │ └── driver │ ├── db │ │ ├── mongo.go │ │ └── mongodb │ │ └── collection │ │ ├── comment.go │ │ ├── user.go │ │ └── video.go │ ├── redis │ │ └── redis.go │ └── router │ └── router.go ├── compose.yaml ├── go.mod ├── go.sum ├── gqlgen.yml ├── graph │ ├── generated │ │ └── generated.go │ └── schema │ ├── auth.graphqls │ ├── comment.graphqls │ ├── node.graphqls │ ├── user.graphqls │ └── video.graphqls ├── kubernetes │ ├── deployment.yaml │ ├── secret_example.yaml │ └── service.yaml ├── lib │ └── pointers.go ├── main.go ├── middleware │ └── auth.go ├── mock │ └── video_port.go ├── public_key.pem ├── public_key.pem.sample ├── shell │ ├── fmt.sh │ ├── gen.sh │ └── gen_mock.sh └── tools.go
円の一番外側として定義してあります。
外部との通信であったり、DBに接続を行います。
受け取りと出力を行っています。
ビジネスロジックを入れています。
interfaceを定義してあります。
さまざまな定義が置いてあります。
接続、設定が置いてあります。
リゾルバー以外のGraphQL関連のものが置いてあります。
Kubernetesのマニフェストファイルが置いてあります。
ちょっとしたものを置いています。
認証をしています。
gomockの生成ファイルがあります。
必要なものをまとめてあります。