gocha124の日記

ごちゃごちゃ書きます

Node.jsのインストール(nodenvを使う)

Node.jsのインストールをしてみました。
手順は次のとおりです。


Homebrewインストール

Homebrewのインストールする。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

エラーになった。メッセージに出力された内容を実行。

git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow
/usr/local/bin/brew update --force --quiet


anyenv

anyenvをインストールする。

brew install anyenv
anyenv init
echo 'eval "$(anyenv init -)"' >> ~/.zprofile
anyenv install --init


nodenv

nodenvをインストールする。

anyenv install nodenv
exec $SHELL -l

Node.jsのインストール可能なバージョンをみる。

nodenv install -l
mkdir -p $(anyenv root)/plugins
git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update


Node.js

Node.jsをインストールする。

nodenv install 16.2.0
source ~/.zprofile    

インストールしたnodeのバージョンを確認する。

nodenv whence npm

コンピュータのデフォルトに指定。

nodenv global 16.2.0

nodeが使えるか確認する。

node -v



Node.jsのインストール

Qiitaを参考に自分のMacにNode.jsをインストールしました。
手順を書いておきます。

Homebrewのインストールする。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

エラーになった。メッセージに出力された内容を実行。

git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow
/usr/local/bin/brew update --force --quiet

nodebrewのインストールする。
Homebrewを使用してインストールする。

brew install nodebrew
nodebrew -v
nodebrew setup

202105 % nodebrew setup
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew

========================================
Export a path to nodebrew:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================

Node.jsのインストールする。

nodebrew install-binary latest

インストールしたnodeを有効化する。

nodebrew ls
nodebrew use v16.2.0

環境パスに通す。

echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zprofile
source ~/.zprofile 

nodeが使えるか確認する。

node -v


qiita.com

AWSの勉強

Athena。S3に対して標準SQLインタラクティブなクエリサービス。

Amplify。Cognito, API Gateway, AppSync, Iot Core, DynamoDB, S3, CloudFrontから成る構成を、Amplify APIで共通的な操作手順で作成できる。独自バックエンドの追加も可能である。

オーケストレーション。ECS、EKS
イメージレジストリ。ECR
実行環境。Fargate、EC2。

ECSとmesosで、mesosを選択する事例。
Quby. | Sysdigユーザー事例 - コンテナ・Kubernetes環境向けセキュリティ・モニタリング プラットフォーム
増減が簡単
AWS以外のクラウドが選択肢に残る

ECSはWindows/Linuxサポート。

AWS Black Belt Online Semirar AWS CDKメモ

AWS Cloud Deployment Kitを見ながらのメモ書き。
CDKについてというより、付帯して自分の知らないキーワードめも。不勉強。

スクリプトSDKCLI

操作手順の定義。

プロビジョニングツール

あるべき状態の定義。

  • AWS CloudFormation

 - CloudFormation

  • HashiCorp Configuration Language(HCL)

 - TerraForm

Document Object Models

あるべき状態の定義をコードで定義。

  • Troposhpere Python
  • SparkleFormation Ruby
  • GoFormation Go
CDK開発環境の準備
  • AWS CLI
  • Node.js 10.3.0
  • npm install -g aws-cdk
  • cdk init app --language=typescript
  • CDKデプロイ管理用の環境(S3バケット
  • cdk bootstrap
  • ビルドとCFnテンプレート生成
  • npm run build
  • cdk synth mystack
  • デプロイ
  • cdk deploy mystack
  • npm run test

AWS CLI認証情報とリージョンの指定

Pythonの場合
  • node --version
  • cdk --version
  • python3 --version
  • cdk init sample-app --language=python
  • vertialenv
  • source .env/bin/activateでvertualenvを有効化
  • pip install -r requreiments.txt
Javaビルドとデプロイ
  • javac -version
  • mvn -version
  • mvn versions:use-latest-versions
  • cdk ls
  • mvn package
  • cdk deploy

virtualenv
nuget
.NET Core
Fargate

CDKアプリケーションの構成

f:id:gocha124:20200329224029p:plain

Multi-language libaries

JSii

JSii
JSii

Dockerコンテナの連携(別ホスト)

MySQLを動かすサーバ側

docker run -itd -p 10000:3306 --name mysql01 txcdb738/mysql:backup

MySQLを呼び出すサーバ側

docker run -itd -8000:80 --name shorturl01 ¥
  -e DB_PORT_3306_TCP_ADDR=<MySQLのIPアドレス> ¥
  -e DB_PORT_3306_TCP_PORT=10000 ¥
  txcdb738/shorturl:ver0¥1.0

Dockerコンテナの連携(同一ホスト)

mkdir ~/build_mysql
vi ~/build_mysql/Dockerfile

FROM enakai00/centos:centos6
MAINTAINER txcdb738

ENV HOME /root
RUN yum -y install mysql-server
ADD init.sh /usr/local/bin/init.sh
RUN chmod u+x /usr/local/bin/init.sh

EXPOSE 3306
CMD ["/usr/local/bin/init.sh"]

vi ~/build_mysql/init.sh
#!/bin/bash

service mysqld start

cat <<EOF >>~/.bashrc
trap 'service mysqld stop; exit 0' TERM
EOF
exec /bin/bash

docker build -t txcdb738/mysql:ver1.0 ~/build_mysql
docker run -itd --name mysql01 txcdb738/mysql:ver1.0
docker attach mysql01
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'nodeuser'@'localhost';"
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'nodeuser'@'%' IDENTIFIED BY 'pas4mysql';"
mysql -u nodeuser -e "CREATE DATABASE shorturl_service;"
mysql shorturl_service -u nodeuser -e " ¥
CREATE TABLE url_list ( ¥
  hash CHAR(2) PRIMARY KEY, ¥
  url VARCHAR(256) UNIQUE NOT NULL COLLATE utf8_bin ¥
);"

cd ~
git clone https://github.com/enakai00/build_shorturl
cd build_shorturl
git checkout dockerbon
cp pre-commit .git/hooks/
git commit -a -m "Commit to build an image."


~/build_shorturl/Dockerfile

FROM enakai00/centos:centos6
MAINTAINER txcdb738

RUN yum -y install epel-release
RUN yum -y install nodejs nodejs-mysql nodejs-ejs nodejs-express
RUN mkdir /root/app
ADD app /root/app
ADD init.sh /usr/local/bin/init.sh
RUN chmod u+x /usr/local/bin/init.sh

ENV NODE_DBNAME shoturl_service
ENV NODE_DBUSER nodeuser
ENV NODE_DBPASS pas4mysql
ENV NODE_PATH /usr/lib/node_modules

CMD ["/usr/local/bin/init.sh"]

~/build_shorturl/init.sh

#!/bin/bash

cd /root/app
node server.js &

cat <<EOF >>~/.bashrc
trap 'pkill-TERM node; sleep 3; exit 0' TERM
EOF
exec /bin/bash

~/build_shorturl/app/server.js

var LISTEN = '0.0.0.0;
var HOSTNAME = 'localhost';
var PORT = 80;

var DBHOST = process.env.DB_PORT_3306_TCP_ADDR;
var DBPORT = process.env.DB_PORT_3306_TCP_PORT;
var DBNAME = process.env.NODE_DBNAME;
var DBUSER = process.env.NODE_DBUSER;
var DBPASS = process.env.NODE_DBPASS;

var sys = require('sys),
      express = require('express'),
      ejs = require('ejs'),
      mysql = require('mysql'),
      crypto = require('crypto')

function db_access(callback) {
  var client = mysql.createConnection({
                                    host: DBHOST,
                                    port: DBPORT,
                                    user: DBUSER,
                                    password: DBPASS,
                                    database: DBNAME
                });

docker run -itd -p 8000:80 --link mysql01:db --name shorturl01 txcdb738/shorturl:ver1.0
docker run -itd --name mysql01 --expose 3306 txcdb738/mysql:ver1.0

Dockerfileからshellを使ってビルド

Dockerfileを記述する。

[centos@ip-172-31-39-215 build_rails]$ vi Dockerfile


FROM enakai00/fedora:21
MAINTAINER txcdb738

RUN rpm --rebuilddb; yum install -y make gcc gcc-c++ ruby-devel rubygem-rails \
                   rubygem-therubyracer libsqlite3x-devel
ADD create_app.sh /usr/local/bin/create_app.sh
RUN chmod u+x /usr/local/bin/create_app.sh && /usr/local/bin/create_app.sh
ADD init.sh /usr/local/bin/init.sh
RUN chomd u+x /usr/local/bin/init.sh
CMD ["/usr/local/bin/init.sh"]

Dockerfileから呼び出すcreate_app.sh

[centos@ip-172-31-39-215 build_rails]$ vi create_app.sh
#!/bin/bash -x

mkdir /root/rails
cd /root/rails
rails new dengonban
cd dengonban
echo "gem 'therubyracer', platforms: :ruby" >> Gemfile
sed -i "s/# \(config.time_zone\) =.*/\1 = 'Tokyo' /" \
       config/application.rb
sed -i "s/\(config.serve_static_assets\) =.*/\1 = true/" \
       config/environments/production.rb
RAILS_ENV=production bundle exec rake assets:precompile
rails generate scaffold Message name:string content:text date:datetime
rake db:migrate RAILS_ENV="production"

Dockerfileから呼び出されるinit.sh

[centos@ip-172-31-39-215 build_rails]$ vi init.sh 

#!/bin/bash

export SECRET_KEY_BASE=\
$(ruby -e 'require "securerandom"; print SecureRandom.hex(64)')
cd /root/rails/dengonban
rails s -e production -p 80 -d

cat <<EOF >>~/.bashrc
trap 'pkill -TERM ruby-rmi; sleep 3;exit0' TERM
EOF
exec /bin/bash
docker run -itd -p 8000:80 --name rails01 txcdb738/rails:ver1.0
docker ps -l
docker top rails01 ax | unexpand -t20

docker stop rails01
docker rm rails01