Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

各ディレクトリごとに散らばった.envを統合する #201

Open
reibomaru opened this issue Dec 21, 2022 · 6 comments
Open

各ディレクトリごとに散らばった.envを統合する #201

reibomaru opened this issue Dec 21, 2022 · 6 comments

Comments

@reibomaru
Copy link
Contributor

.envが肥大化してきて、共通の項目も増えたので統合しよう

@shugo256
Copy link
Member

shugo256 commented Jan 4, 2023

#182 と一緒にやることで、Makefileで.envを自動生成できそう

@shugo256 shugo256 self-assigned this Jan 4, 2023
@shugo256
Copy link
Member

shugo256 commented Jan 4, 2023

現状使ってる環境変数一覧:

ETHERSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1
MUMBAI_URL=https://your-mumbai-host-to-deploy-contract.com
PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1

COGNITO_USER_POOL_ID=<aws-cognito-user-pool-id>
COGNITO_CLIENT_ID=<aws-cognito-client-id>
COGNITO_IDENTITY_POOL_ID=<aws-cognito-identity-pool-id>
CLIENT_S3_BUCKET=<aws-s3-bucket-name-to-deploy-client>
ARTICLE_RESOURCES_S3_BUCKET=<aws-s3-bucket-name-to-upload-article-resources>
CLOUD_FRONT_DISTRIBUTION_ID=<aws-cloud-front-distribution-id-for-deploy>
TINY_MCE_API_KEY=<tiny-mce-api-key>

DB_URI=root:password@tcp(db:3306)/knowtfolio-db
# Ethereum
ADMIN_PRIVATE_KEY=0xabc123abc123abc123abc123abc123abc123abc123abc123abc123abc123abc1
CONTRACT_ADDRESS=0xABC123ABC123ABC123ABC123ABC123ABC123ABC1
NETWORK_URI=https://your-mumbai-host-to-deploy-contract.com
CHAIN_ID=12345
# AWS
AWS_ACCESS_KEY_ID=ABC123ABC123
AWS_SECRET_ACCESS_KEY=ABC123ABC123
AWS_REGION=foo-bar
S3_BUCKET_NAME=foo-bar

@shugo256
Copy link
Member

shugo256 commented Jan 4, 2023

環境変数まとめ

✅はそのディレクトリの.envで使われているかどうか

AWS関連

命名規則:AWS_{サービス名}_{中身の名前}

key blockchain client server
AWS_IAM_ADMIN_ACCESS_KEY_ID
AWS_IAM_ADMIN_SECRET_ACCESS_KEY
AWS_COGNITO_USER_POOL_ID
AWS_COGNITO_CLIENT_ID
AWS_COGNITO_IDENTITY_POOL_ID
AWS_S3_CLIENT_BUCKET_NAME
AWS_S3_ARTICLE_RESOURCES_BUCKET_NAME
AWS_S3_NFTS_BUCKET_NAME
AWS_CLOUD_FRONT_DISTRIBUTION_ID
AWS_REGION

これらはすべてterraform outputを使って生成すれば良さそう
このためには、terraform_user.awsのクレデンシャルたちがあらかじめ必要

その他

命名規則:

  • apikeyなど具体的なサービスに紐づくもの:{サービス名}_{中身の名前}
  • その他blockchain関連:ETH_{中身の名前}

公開(ベタ書き)できないもの

key blockchain client server
ETHERSCAN_API_KEY
ETH_ADMIN_PRIVATE_KEY
TINY_MCE_API_KEY
DB_URI
ETH_MUMBAI_NETWORK_URI
ETH_POLYGON_NETWORK_URI

DB_URIについては、gorm形式のものとなってしまっているので、DB_USER_NAMEDB_PASSWORDなどに細かく分割した方が良さそう( #210 に関連)

ETH_*_NETWORK_URIは、alchemyのapikeyを含むので、公開できない
現時点では、MUMBAIPOLYGONの代わりにdevとprodとしてもよいが、今後複数ネットワークをサポートする場合を見据えてネットワーク名ごとに分ける方式をとってみる

これらはユーザ入力に頼るか、aws secrets managerに保存するかになりそう
github actions上ではsecretsに登録する必要あり

公開して良いもの

key blockchain client server
ETH_CHAIN_ID
ETH_CONTRACT_ADDRESS

ETH_CONTRACT_ADDRESSについては、contractのデプロイ時に確定するので、blockchain/scripts/deploy.tsでアドレスをなんらかの形で保存しておくのが良さそう(このファイルはignoreしないでgit管理した方がいいと思われる)
参考:https://ethereum.stackexchange.com/questions/119967/how-to-get-the-address-of-an-already-deployed-contract-in-hardhats-network

@shugo256
Copy link
Member

shugo256 commented Jan 4, 2023

実装案

プロジェクトルートにenvironmentsディレクトリを用意し、ここに.awsのcredentialと、↑で生成される各種.envファイルたちをまとめる

knowtfolio/
├─ blockchain/
├─ client/
├─ infrastructure/
├─ server/
├─ environment/
│  ├─ .aws/
│  ├─ .gitignore
│  ├─ aws.env [AWS_*]
│  ├─ eth.env [ETH_*, ETHERSCAN_API_KEY (, MUMBAI_URL)]
│  ├─ db.env [DB_*]
│  ├─ misc_apis.env [TINY_MCE_API_KEY]

各種.envファイルについては、Makefileで生成するようにする
docker-compose.ymlでは、これらの中から必要なものだけを選択すれば良い

services:
  client:
    env_file:
      - ./environment/aws.env
      - ./environment/misc_apis.env # for tiny-mce

.awsinfrastructureから移動するが、これはconfig.tfを書き換えるだけで対応可能

@shugo256
Copy link
Member

shugo256 commented Jan 5, 2023

表を見ると、envの内容はサービス(blockchain, client, server)間でほとんど重複していないので、データソースごとのjson?か何かを生成後に、サービスごとの.envにまとめるのはありかもしれない

@shugo256
Copy link
Member

shugo256 commented Jan 21, 2023

公開できない変数の格納にaws secrets managerの使用を検討していたが、調べた結果、これとは別のaws system manager パラメータストアが内容ほぼ変わらず無料(secrets managerは無料枠なし)なので、こっちでええやんとなっている
参考:https://qiita.com/tomoya_oka/items/a3dd44879eea0d1e3ef5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants