diff --git a/.gitignore b/.gitignore index 20feacc..276d613 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ node_modules/ package-lock.json util/*.json +build/ +build.zip +build.tar.gz diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..e0e089f --- /dev/null +++ b/build.sh @@ -0,0 +1,15 @@ +mkdir build +cd main-web/client +npm run build +cd ../../ +mv main-web/client/client build/ +cd tools/janken +npm run build +cd ../../ +mv tools/janken/tool build +cd main-web/server +npm run build +cd ../../ +mv main-web/server/build server/ +tar czf build.tar.gz build/ +rm -rf build/ \ No newline at end of file diff --git a/infra/custom_ami/packer/.gitignore b/infra/custom_ami/packer/.gitignore new file mode 100644 index 0000000..7a764f7 --- /dev/null +++ b/infra/custom_ami/packer/.gitignore @@ -0,0 +1,2 @@ +manifest-*.json +manifest-*.json.lock \ No newline at end of file diff --git a/infra/custom_ami/packer/catherine-fc.json b/infra/custom_ami/packer/catherine-fc.json new file mode 100644 index 0000000..0987690 --- /dev/null +++ b/infra/custom_ami/packer/catherine-fc.json @@ -0,0 +1,67 @@ +{ + "variables": { + "vpc": "{{env `BUILD_VPC_ID`}}", + "subnet": "{{env `BUILD_SUBNET_ID`}}", + "PROFILE": "{{env `AWS_PROFILE`}}", + "STAGE": "{{env `STAGE`}}", + "AMI_BASENAME": "{{env `AMI_BASENAME`}}" + }, + "builders": [ + { + "type": "amazon-ebs", + "name": "Custom AMI builder", + "region": "ap-northeast-1", + "source_ami": "ami-0cc75a8978fbbc969", + "instance_type": "t3.small", + "ssh_username": "ec2-user", + "ami_name": "{{user `AMI_BASENAME`}}-{{user `STAGE`}}-{{timestamp}}", + "tags": { + "Name": "{{user `AMI_BASENAME`}}-{{user `STAGE`}}", + "Base_AMI_ID": "{{ .SourceAMI }}", + "Base_AMI_NAME": "{{ .SourceAMIName }}", + "PROJECT": "CATHERINE_FC" + }, + "run_tags": { + "Name": "{{user `AMI_BASENAME`}}-{{user `STAGE`}}-packer", + "PROJECT": "CATHERINE_FC" + }, + "run_volume_tags": { + "Name": "{{user `AMI_BASENAME`}}-{{user `STAGE`}}-packer", + "PROJECT": "CATHERINE_FC" + }, + "ami_description": "Amazon Linux 2 with NodeJS", + "vpc_id": "{{user `vpc`}}", + "subnet_id": "{{user `subnet`}}" + } + ], + "provisioners": [ + { + "type": "shell", + "inline": [ + "sudo yum update", + "sudo yum -y install unzip", + "sudo yum -y install nano", + "sudo yum -y install dos2unix", + "wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash", + ". ~/.nvm/nvm.sh", + "nvm install 12" + ] + }, + { + "type": "file", + "source": "../platform-uploads", + "destination": "/tmp" + }, + { + "type": "shell", + "inline": [ + "sudo chown -R root:root /tmp/platform-uploads", + "sudo dos2unix /tmp/platform-uploads/opt/web-init/web-init.sh", + "sudo cp -rf /tmp/platform-uploads/etc/* /etc/", + "sudo cp -rf /tmp/platform-uploads/opt/* /opt/", + "sudo systemctl enable web-init", + "sudo rm -rf /tmp/platform-uploads" + ] + } + ] +} diff --git a/infra/custom_ami/packer/vars/prod/vars.json b/infra/custom_ami/packer/vars/prod/vars.json new file mode 100644 index 0000000..5660a83 --- /dev/null +++ b/infra/custom_ami/packer/vars/prod/vars.json @@ -0,0 +1,6 @@ +{ + "vpc": "vpc-c54553a2", + "subnet": "subnet-0d0fdf45", + "STAGE": "prod", + "AMI_BASENAME": "catherine-fc" +} diff --git a/infra/custom_ami/platform-uploads/etc/systemd/system/web-init.service b/infra/custom_ami/platform-uploads/etc/systemd/system/web-init.service new file mode 100644 index 0000000..44fb262 --- /dev/null +++ b/infra/custom_ami/platform-uploads/etc/systemd/system/web-init.service @@ -0,0 +1,11 @@ +[Unit] +Description=Web Init +Wants=network-online.target +After=network-online.target + +[Service] +ExecStart=/opt/web-init/web-init.sh +Restart=always + +[Install] +WantedBy=multi-user.target diff --git a/infra/custom_ami/platform-uploads/opt/web-init/web-init.sh b/infra/custom_ami/platform-uploads/opt/web-init/web-init.sh new file mode 100644 index 0000000..226bf7b --- /dev/null +++ b/infra/custom_ami/platform-uploads/opt/web-init/web-init.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +aws s3 cp s3://catherine-fc-infra/build.tar.gz . +tar zxf build.tar.gz +rm build.tar.gz +node build/server/index.js \ No newline at end of file diff --git a/infra/custom_ami/platform-uploads/stationlink-agent-monitor.json b/infra/custom_ami/platform-uploads/stationlink-agent-monitor.json new file mode 100644 index 0000000..bc95f9f --- /dev/null +++ b/infra/custom_ami/platform-uploads/stationlink-agent-monitor.json @@ -0,0 +1,180 @@ +{ + "variables": { + "vpc": "{{env `BUILD_VPC_ID`}}", + "subnet": "{{env `BUILD_SUBNET_ID`}}", + "PROFILE": "{{env `AWS_PROFILE`}}", + "STAGE": "{{env `STAGE`}}", + "AMI_BASENAME": "{{env `AMI_BASENAME`}}" + }, + "builders": [ + { + "type": "amazon-ebs", + "name": "Custom AMI builder", + "region": "ap-northeast-1", + "source_ami_filter": { + "filters": { + "name": "RHEL-7.*" + }, + "owners": [ + "309956199498" + ], + "most_recent": true + }, + "instance_type": "t2.small", + "ssh_username": "ec2-user", + "ami_name": "{{user `AMI_BASENAME`}}-{{user `STAGE`}}-{{timestamp}}", + "tags": { + "Name": "{{user `AMI_BASENAME`}}-{{user `STAGE`}}", + "Base_AMI_ID": "{{ .SourceAMI }}", + "Base_AMI_NAME": "{{ .SourceAMIName }}", + "BUSINESS_REGION": "ACYAN", + "BUSINESS_UNIT": "MOBILITY", + "CLIENT": "KDDI", + "PLATFORM": "JAPAN_HORIZON_CTI" + }, + "run_tags": { + "Name": "{{user `AMI_BASENAME`}}-{{user `STAGE`}}-packer", + "BUSINESS_REGION": "ACYAN", + "BUSINESS_UNIT": "MOBILITY", + "CLIENT": "KDDI", + "PLATFORM": "JAPAN_HORIZON_CTI", + "SCHEDULER:SLEEP": "INACTIVE" + }, + "run_volume_tags": { + "Name": "{{user `AMI_BASENAME`}}-{{user `STAGE`}}-packer", + "BUSINESS_REGION": "ACYAN", + "BUSINESS_UNIT": "MOBILITY", + "CLIENT": "KDDI", + "PLATFORM": "JAPAN_HORIZON_CTI" + }, + "snapshot_tags": { + "Name": "{{user `AMI_BASENAME`}}-{{user `STAGE`}}", + "BUSINESS_REGION": "ACYAN", + "BUSINESS_UNIT": "MOBILITY", + "CLIENT": "KDDI", + "PLATFORM": "JAPAN_HORIZON_CTI" + }, + "ami_description": "RHEL7 with Java/Filebeat", + "vpc_id": "{{user `vpc`}}", + "subnet_id": "{{user `subnet`}}", + "encrypt_boot": "true" + } + ], + + "provisioners": [ + { + "type": "shell", + "inline": [ + "sudo yum -y install java-1.8.0-openjdk.i686 java-1.8.0-openjdk-debug.i686", + "sudo yum -y install java-1.8.0-openjdk-devel.i686 java-1.8.0-openjdk-devel-debug.i686", + "sudo yum -y install unzip", + "sudo yum -y install nano", + "sudo yum -y install dos2unix", + "sudo curl 'https://s3.amazonaws.com/aws-cli/awscli-bundle.zip' -o 'awscli-bundle.zip'", + "sudo unzip awscli-bundle.zip", + "sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws", + "sudo rm -rf awscli-bundle", + "sudo rm -f awscli-bundle.zip", + "sudo yum -y install https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-agent.rpm", + "sudo yum -y install https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm" + ] + }, + { + "type": "shell", + "inline": [ + "mkdir -p /tmp/platform-uploads/etc/cron.d", + "mkdir -p /tmp/platform-uploads/etc/gov-ad-auth", + "mkdir -p /tmp/platform-uploads/etc/metricbeat/conf.d", + "mkdir -p /tmp/platform-uploads/etc/metricbeat/shell", + "mkdir -p /tmp/platform-uploads/etc/systemd/system", + "mkdir -p /tmp/platform-uploads/etc/yum.repos.d", + "mkdir -p /tmp/platform-uploads/opt/asurion", + "mkdir -p /tmp/platform-uploads/opt/aws/amazon-cloudwatch-agent/etc", + "mkdir -p /tmp/platform-uploads/opt/gov-ad-auth/bin", + "mkdir -p /tmp/platform-uploads/opt/mvap/tsapi/client/certs/CA", + "mkdir -p /tmp/platform-uploads/usr/lib" + ] + }, + { + "type": "file", + "source": "../platform-uploads", + "destination": "/tmp" + }, + { + "type": "shell", + "inline": [ + "sudo chown -R root:root /tmp/platform-uploads", + "sudo mv -f /tmp/platform-uploads/etc/yum.repos.d/* /etc/yum.repos.d/", + "sudo yum -y install metricbeat", + "sudo mv /tmp/platform-uploads/opt/cti-agent-monitor/{{user `STAGE`}}.sh /tmp/platform-uploads/opt/cti-agent-monitor/startup.sh", + "sudo dos2unix /tmp/platform-uploads/opt/cti-agent-monitor/startup.sh", + "sudo dos2unix /tmp/platform-uploads/opt/log-tailer/log-tail.sh", + "sudo mv /tmp/platform-uploads/opt/aws/amazon-cloudwatch-agent/etc/json/{{user `STAGE`}}.json /tmp/platform-uploads/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json", + "sudo rm -rf /tmp/platform-uploads/opt/aws/amazon-cloudwatch-agent/etc/json/", + "sudo mv /tmp/platform-uploads/etc/metricbeat/shell/{{user `STAGE`}}.sh /tmp/platform-uploads/etc/metricbeat/start-metricbeat.sh", + "sudo rm -rf /tmp/platform-uploads/etc/metricbeat/shell/", + "sudo yum -y install filebeat", + "sudo mv /tmp/platform-uploads/etc/filebeat/shell/{{user `STAGE`}}.sh /tmp/platform-uploads/etc/filebeat/start-filebeat.sh", + "sudo rm -rf /tmp/platform-uploads/etc/filebeat/shell/", + "sudo cp -rf /tmp/platform-uploads/etc/* /etc/", + "sudo cp -rf /tmp/platform-uploads/usr/* /usr/", + "sudo cp -rf /tmp/platform-uploads/opt/* /opt/", + "sudo yum -y install /opt/asurion/tsapi-client-linux-8.0.1-132.i386.rpm", + "sudo chmod 644 /etc/metricbeat/metricbeat.yml /etc/metricbeat/conf.d/*", + "sudo chmod 755 /etc/metricbeat", + "sudo chmod 755 /etc/metricbeat/conf.d", + "sudo chmod 755 /etc/metricbeat/start-metricbeat.sh", + "sudo chmod 644 /etc/filebeat/filebeat.yml /etc/filebeat/conf.d/* /etc/filebeat/modules.d/*", + "sudo chmod 755 /etc/filebeat", + "sudo chmod 755 /etc/filebeat/conf.d", + "sudo chmod 755 /etc/filebeat/modules.d", + "sudo chmod 755 /etc/filebeat/start-filebeat.sh", + "sudo chmod 775 /opt/cti-agent-monitor", + "sudo chmod 755 /opt/cti-agent-monitor/startup.sh", + "sudo chmod 775 /opt/log-tailer", + "sudo chmod 755 /opt/log-tailer/log-tail.sh", + "sudo chmod 755 /opt/gov-ad-auth/bin/startup.sh", + "sudo chmod 755 /usr/lib/libTsapiJava.so", + "sudo chmod 644 /usr/lib/tslibrc", + "sudo chmod 755 /etc/yum.repos.d", + "sudo systemctl enable gov-ad-auth", + "sudo systemctl enable cti-agent-monitor", + "sudo systemctl enable cti-log-tailer", + "sudo systemctl enable metricbeat", + "sudo systemctl enable amazon-cloudwatch-agent", + "sudo rm -rf /tmp/platform-uploads" + ] + }, + { + "type": "shell", + "inline": [ + "sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm", + "sudo yum -y install ansible" + ] + }, + { + "type": "ansible-local", + "playbook_files": [ + "../ansible/updatepackages.yml", + "../ansible/user-creation.yml", + "../ansible/beats.yml", + "../ansible/post-install-cleanup.yml" + ], + "playbook_dir": "../ansible", + "galaxy_file": "../ansible/requirements.yml", + "extra_arguments": [ + "--extra-vars \"STAGE={{user `STAGE`}}\"" + ] + } + ], + "post-processors": [ + { + "type": "manifest", + "output": "manifest-stationlink-agent-monitor-{{user `STAGE`}}.json", + "strip_path": true, + "custom_data": { + "ami_name": "{{user `AMI_BASENAME`}}-{{user `STAGE`}}" + } + } + ] +} diff --git a/infra/custom_ami/readme.md b/infra/custom_ami/readme.md new file mode 100644 index 0000000..70c96cf --- /dev/null +++ b/infra/custom_ami/readme.md @@ -0,0 +1,11 @@ +## Infrastructure scripting tools + +* Packer + - create AMI + +1. Create AMI + 1. assume $env is one of ~~nonprod, uat,~~ prod + 1. $ cd packer + 1. $ packer build -var-file=vars/${env}/vars.json catherine-fc.json + + diff --git a/main-web/client/.gitignore b/main-web/client/.gitignore index 4d29575..d211b3b 100644 --- a/main-web/client/.gitignore +++ b/main-web/client/.gitignore @@ -10,7 +10,7 @@ # production /build - +/client # misc .DS_Store .env.local diff --git a/main-web/client/package.json b/main-web/client/package.json index b26bb53..0ea987b 100644 --- a/main-web/client/package.json +++ b/main-web/client/package.json @@ -33,7 +33,7 @@ }, "scripts": { "start": "react-scripts start", - "build": "react-scripts build", + "build": "react-scripts build && rm -rf client && mv build client", "test": "react-scripts test", "eject": "react-scripts eject", "lint": "tslint -c tslint.json -p tsconfig.json" diff --git a/tools/client/.env b/tools/janken/.env similarity index 100% rename from tools/client/.env rename to tools/janken/.env diff --git a/tools/client/.env.production b/tools/janken/.env.production similarity index 100% rename from tools/client/.env.production rename to tools/janken/.env.production diff --git a/tools/client/.gitignore b/tools/janken/.gitignore similarity index 98% rename from tools/client/.gitignore rename to tools/janken/.gitignore index 4d29575..3d30376 100644 --- a/tools/client/.gitignore +++ b/tools/janken/.gitignore @@ -10,6 +10,7 @@ # production /build +/tool # misc .DS_Store diff --git a/tools/client/README.md b/tools/janken/README.md similarity index 100% rename from tools/client/README.md rename to tools/janken/README.md diff --git a/tools/client/package.json b/tools/janken/package.json similarity index 92% rename from tools/client/package.json rename to tools/janken/package.json index 0c0dc5b..103c056 100644 --- a/tools/client/package.json +++ b/tools/janken/package.json @@ -2,6 +2,7 @@ "name": "catherine-janken", "version": "0.1.0", "private": true, + "homepage": "tool", "dependencies": { "dotenv": "^8.2.0", "node-sass": "^4.13.1", @@ -28,7 +29,7 @@ }, "scripts": { "start": "react-scripts start", - "build": "react-scripts build", + "build": "react-scripts build && rm -rf tool && mv build tool", "test": "react-scripts test", "eject": "react-scripts eject" }, diff --git a/tools/client/public/favicon.ico b/tools/janken/public/favicon.ico similarity index 100% rename from tools/client/public/favicon.ico rename to tools/janken/public/favicon.ico diff --git a/tools/client/public/index.html b/tools/janken/public/index.html similarity index 100% rename from tools/client/public/index.html rename to tools/janken/public/index.html diff --git a/tools/client/public/logo192.png b/tools/janken/public/logo192.png similarity index 100% rename from tools/client/public/logo192.png rename to tools/janken/public/logo192.png diff --git a/tools/client/public/logo512.png b/tools/janken/public/logo512.png similarity index 100% rename from tools/client/public/logo512.png rename to tools/janken/public/logo512.png diff --git a/tools/client/public/manifest.json b/tools/janken/public/manifest.json similarity index 100% rename from tools/client/public/manifest.json rename to tools/janken/public/manifest.json diff --git a/tools/client/public/robots.txt b/tools/janken/public/robots.txt similarity index 100% rename from tools/client/public/robots.txt rename to tools/janken/public/robots.txt diff --git a/tools/client/src/App.css b/tools/janken/src/App.css similarity index 100% rename from tools/client/src/App.css rename to tools/janken/src/App.css diff --git a/tools/client/src/App.test.tsx b/tools/janken/src/App.test.tsx similarity index 100% rename from tools/client/src/App.test.tsx rename to tools/janken/src/App.test.tsx diff --git a/tools/client/src/App.tsx b/tools/janken/src/App.tsx similarity index 100% rename from tools/client/src/App.tsx rename to tools/janken/src/App.tsx diff --git a/tools/client/src/component/janken/Janken.module.scss b/tools/janken/src/component/janken/Janken.module.scss similarity index 100% rename from tools/client/src/component/janken/Janken.module.scss rename to tools/janken/src/component/janken/Janken.module.scss diff --git a/tools/client/src/component/janken/Janken.tsx b/tools/janken/src/component/janken/Janken.tsx similarity index 100% rename from tools/client/src/component/janken/Janken.tsx rename to tools/janken/src/component/janken/Janken.tsx diff --git a/tools/client/src/component/stage/Stage.module.scss b/tools/janken/src/component/stage/Stage.module.scss similarity index 100% rename from tools/client/src/component/stage/Stage.module.scss rename to tools/janken/src/component/stage/Stage.module.scss diff --git a/tools/client/src/component/stage/Stage.tsx b/tools/janken/src/component/stage/Stage.tsx similarity index 100% rename from tools/client/src/component/stage/Stage.tsx rename to tools/janken/src/component/stage/Stage.tsx diff --git a/tools/client/src/index.css b/tools/janken/src/index.css similarity index 100% rename from tools/client/src/index.css rename to tools/janken/src/index.css diff --git a/tools/client/src/index.tsx b/tools/janken/src/index.tsx similarity index 100% rename from tools/client/src/index.tsx rename to tools/janken/src/index.tsx diff --git a/tools/client/src/logo.svg b/tools/janken/src/logo.svg similarity index 100% rename from tools/client/src/logo.svg rename to tools/janken/src/logo.svg diff --git a/tools/client/src/model/messages.ts b/tools/janken/src/model/messages.ts similarity index 100% rename from tools/client/src/model/messages.ts rename to tools/janken/src/model/messages.ts diff --git a/tools/client/src/react-app-env.d.ts b/tools/janken/src/react-app-env.d.ts similarity index 100% rename from tools/client/src/react-app-env.d.ts rename to tools/janken/src/react-app-env.d.ts diff --git a/tools/client/src/serviceWorker.ts b/tools/janken/src/serviceWorker.ts similarity index 100% rename from tools/client/src/serviceWorker.ts rename to tools/janken/src/serviceWorker.ts diff --git a/tools/client/src/setupTests.ts b/tools/janken/src/setupTests.ts similarity index 100% rename from tools/client/src/setupTests.ts rename to tools/janken/src/setupTests.ts diff --git a/tools/client/src/static/img/01.png b/tools/janken/src/static/img/01.png similarity index 100% rename from tools/client/src/static/img/01.png rename to tools/janken/src/static/img/01.png diff --git a/tools/client/src/static/img/02.png b/tools/janken/src/static/img/02.png similarity index 100% rename from tools/client/src/static/img/02.png rename to tools/janken/src/static/img/02.png diff --git a/tools/client/src/static/img/03.png b/tools/janken/src/static/img/03.png similarity index 100% rename from tools/client/src/static/img/03.png rename to tools/janken/src/static/img/03.png diff --git a/tools/client/src/static/img/04.png b/tools/janken/src/static/img/04.png similarity index 100% rename from tools/client/src/static/img/04.png rename to tools/janken/src/static/img/04.png diff --git a/tools/client/src/static/img/05.png b/tools/janken/src/static/img/05.png similarity index 100% rename from tools/client/src/static/img/05.png rename to tools/janken/src/static/img/05.png diff --git a/tools/client/src/static/img/06.png b/tools/janken/src/static/img/06.png similarity index 100% rename from tools/client/src/static/img/06.png rename to tools/janken/src/static/img/06.png diff --git a/tools/client/src/static/img/07.png b/tools/janken/src/static/img/07.png similarity index 100% rename from tools/client/src/static/img/07.png rename to tools/janken/src/static/img/07.png diff --git a/tools/client/src/static/img/08.png b/tools/janken/src/static/img/08.png similarity index 100% rename from tools/client/src/static/img/08.png rename to tools/janken/src/static/img/08.png diff --git a/tools/client/src/static/img/09.png b/tools/janken/src/static/img/09.png similarity index 100% rename from tools/client/src/static/img/09.png rename to tools/janken/src/static/img/09.png diff --git a/tools/client/src/static/img/10.png b/tools/janken/src/static/img/10.png similarity index 100% rename from tools/client/src/static/img/10.png rename to tools/janken/src/static/img/10.png diff --git a/tools/client/src/static/img/11.png b/tools/janken/src/static/img/11.png similarity index 100% rename from tools/client/src/static/img/11.png rename to tools/janken/src/static/img/11.png diff --git a/tools/client/src/straysheep.png b/tools/janken/src/straysheep.png similarity index 100% rename from tools/client/src/straysheep.png rename to tools/janken/src/straysheep.png diff --git a/tools/client/tsconfig.json b/tools/janken/tsconfig.json similarity index 100% rename from tools/client/tsconfig.json rename to tools/janken/tsconfig.json