{"id":16310589,"url":"https://github.com/astj/hatena-intern-2021","last_synced_at":"2025-04-14T04:41:58.575Z","repository":{"id":47660705,"uuid":"397850866","full_name":"astj/Hatena-Intern-2021","owner":"astj","description":null,"archived":false,"fork":false,"pushed_at":"2021-08-19T08:15:58.000Z","size":176,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-16T09:41:51.591Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/astj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-08-19T07:10:12.000Z","updated_at":"2021-08-19T08:15:57.000Z","dependencies_parsed_at":"2022-09-13T09:12:28.077Z","dependency_job_id":null,"html_url":"https://github.com/astj/Hatena-Intern-2021","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"hatena/Hatena-Intern-Kubernetes-Microservice","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astj%2FHatena-Intern-2021","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astj%2FHatena-Intern-2021/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astj%2FHatena-Intern-2021/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/astj%2FHatena-Intern-2021/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/astj","download_url":"https://codeload.github.com/astj/Hatena-Intern-2021/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248824662,"owners_count":21167343,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-10T21:42:20.124Z","updated_at":"2025-04-14T04:41:58.228Z","avatar_url":"https://github.com/astj.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [Hatena REMOTE INTERNSHIP 2021](https://hatenacorp.jp/recruit/intern/2021)\n\n「Hatena REMOTE INTERNSHIP 2021」では、Kubernetes上に構築されたブログシステムを題材としました。ブログシステムはマイクロサービスを意識しており、メインであるブログサービスに加えて、アカウントサービスや、Markdownなどの記法を変換するサービスが用意されています。それぞれのサービス間はgRPCを使ってやりとりしています。\n\n\u003c!--\nインターンシップのカリキュラムについては、[講義動画](https://hatenacorp.jp/intern2020/public_broadcast)や[課題](/docs/exercise.md)を公開しているので、参照してください。\n--\u003e\n\n## セットアップ\nアプリケーションの起動には以下が必要です.\n\n- [Docker](https://docs.docker.com/engine/install/)\n  - Windows または macOS の場合は Docker Desktop\n  - Linux の場合は各ディストリビューションごとのインストール方法に従ってください\n- Kubernetes\n  - [Minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/)\n- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)\n- [Kustomize](https://kubernetes-sigs.github.io/kustomize/installation/)\n- [Skaffold](https://skaffold.dev/docs/install/)\n\n個々のサービスの開発には, 以下がローカル環境にインストールされていることを想定しています.\n\n- Make\n- [Go](https://golang.org/)\n  - go:embed を利用しているため Go 1.16 (以降) が必要です\n- (TypeScript を使う場合) [Node.js](https://nodejs.org/en/), [Yarn](https://classic.yarnpkg.com/lang/en/)\n\n動作確認は以下の環境で行っています.\n\n- macOS 10.15.6 (19G73)\n- Docker Desktop 2.3.0.4 (46911) (Kubernetes v1.16.5)\n- minikube v1.22.0 (Kubernetes v1.19.8)\n\n``` console\n$ docker version\nClient: Docker Engine - Community\n Cloud integration: 1.0.12\n Version:           20.10.5\n API version:       1.41\n Go version:        go1.13.15\n Git commit:        55c4c88\n Built:             Tue Mar  2 20:13:00 2021\n OS/Arch:           darwin/amd64\n Context:           default\n Experimental:      true\n\nServer: Docker Engine - Community\n Engine:\n  Version:          20.10.5\n  API version:      1.41 (minimum version 1.12)\n  Go version:       go1.13.15\n  Git commit:       363e9a8\n  Built:            Tue Mar  2 20:15:47 2021\n  OS/Arch:          linux/amd64\n  Experimental:     false\n containerd:\n  Version:          1.4.4\n  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e\n runc:\n  Version:          1.0.0-rc93\n  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec\n docker-init:\n  Version:          0.19.0\n  GitCommit:        de40ad0\n\n$ minikube version\nminikube version: v1.22.0\ncommit: a03fbcf166e6f74ef224d4a63be4277d017bb62e\n\n$ kubectl version --client\nClient Version: version.Info{Major:\"1\", Minor:\"21\", GitVersion:\"v1.21.2\", GitCommit:\"092fbfbf53427de67cac1e9fa54aaa09a28371d7\", GitTreeState:\"clean\", BuildDate:\"2021-06-16T12:52:14Z\", GoVersion:\"go1.16.5\", Compiler:\"gc\", Platform:\"darwin/amd64\"}\n\n$ kustomize version\n{Version:kustomize/v4.2.0 GitCommit:d53a2ad45d04b0264bcee9e19879437d851cb778 BuildDate:2021-07-01T01:00:35+01:00 GoOs:darwin GoArch:amd64}\n\n$ skaffold version\nv1.27.0\n\n$ go version\ngo version go1.16.5 darwin/amd64\n\n$ node -v\nv14.6.0\n\n$ yarn -v\n1.22.4\n```\n\n## 起動\n### Minikube\n以下の手順でアプリケーションを起動します.\n\n``` shell\n# Minikube を起動\nminikube start --kubernetes-version v1.19.8\neval $(minikube docker-env)\n\n# context を設定\nkubectl config set-context hatena-intern-2021 --cluster=minikube --user=minikube --namespace=hatena-intern-2021\nkubectl config use-context hatena-intern-2021\n\n# 起動\nmake up\n```\n\n以下のコマンドを実行するとブラウザが自動的に開き, アプリケーションにアクセスします.\n\n``` shell\nminikube -n hatena-intern-2021 service blog\n```\n\n## サービス\nアプリケーションには以下の 3 つのサービスが存在します.\n\n- 認証基盤 (Account) サービス\n  - ユーザーアカウントの登録や認証を管轄します\n- ブログ (Blog) サービス\n  - ユーザーに対して, ブログを作成したり記事を書いたりする機能を提供します\n- 記法変換 (Renderer) サービス\n  - ブログの記事を記述するための「記法」から HTML への変換を担います\n\nこのうちブログサービスが Web サーバーとして動作し, ユーザーに対してアプリケーションを操作するためのインターフェースを提供します.\n認証基盤サービスと記法変換サービスは gRPC サービスとして動作し, ブログサービスから使用されます.\n\n## ディレクトリ構成\n\n- `pb/`: gRPC サービスの定義\n- `services/`: 各サービスの実装\n  - `account/`: 認証基盤サービス\n  - `blog/`: ブログサービス\n  - `renderer-go/`: 記法変換サービスの Go による実装\n  - `renderer-ts/`: 記法変換サービスの TypeScript による実装\n- `k8s/`: アプリケーションを Kubernetes 上で動作させるためのマニフェスト\n\n## クレジット\n- 株式会社はてな\n  - [@akiym](https://github.com/akiym)\n  - [@cockscomb](https://github.com/cockscomb)\n  - [@itchyny](https://github.com/itchyny)\n  - [@susisu](https://github.com/susisu)\n  - [@astj](https://github.com/astj)\n\n(順不同)\n\nこのリポジトリの内容は MIT ライセンスで提供されます. 詳しくは `LICENSE` をご確認ください.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fastj%2Fhatena-intern-2021","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fastj%2Fhatena-intern-2021","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fastj%2Fhatena-intern-2021/lists"}