2017年8月18日 星期五

將line 的chatbot改回對話框!

基本設定
您可在此設定顯示在好友名單、聊天室、主頁的資訊。
公開設定

行動官網選單
顯示 隱藏 儲存
可於聊天室顯示行動官網的選單。 顯示全部

在後台 你去找這個把它設成隱藏


2017年8月1日 星期二

AWS elb + ecs 攻略

https://www.youtube.com/playlist?list=PLimSISlC6rNGdNsstsp9Sn1Cvj9z3oL1Y

ECS mount ebs

ebs mount 後,進shell 關一個 docker container 例如 nginx;
ecs-agent 就會自動全部重啟,
就會認得 mount 的 ebs了

aws ecs ec2 用user data自動mount ebs 上去

應該可以從ecs 裡 綁一個自的 ec2 然後塞 user data 讓他每次 crea
http://docs.aws.amazon.com/AmazonECS/latest/developerguide/bootstrap_container_instance.html
之後再研究

2017年7月25日 星期二

AWS ECS 實作 mongo + mongo-express

https://www.youtube.com/watch?v=3a8xYLU0JgY&feature=youtu.be

AWS ECS 開始入坑筆記。

1.看了一下,去年十月剛推出,我就摸了,還有沒砍的repo,都沒注意到。
2.重摸,順很多,記得剛推出時,有很多靈異狀況都不見了。
3.ECS 主要是將每一個 專案 打包成 Docker Image 上傳到 ECR 上,之後的更新都是以更新 Image 為主。這和 eb (multi-docker)不一樣。
4.eb(multi-docker) 只能在一台機器裡只有1024的memeroy 配置到每一個 docker container 裡,如果只有一堆靜態網站,還ok,但當要操作db時,惡夢就來臨了。
5.原本 db 目錄在 instance 裡,當AWS 偵測到流量 HA 啟動時,會砍舊的instance,自動開新的instance,資料就全沒了。
6.當我開始掛ecs時,我的mongo一直不斷的掛掉,原來是memory不夠。但傻掉,eb只給1024可配置,我的container 還有 ui ...
7.另外不便是 eb create 之後,之前通常可以直接 eb deploy ,但掛 ecs 之後,每次都eb deploy fail.....所以每次都要再 eb create 新主機,也太折騰人。
8.因為問題太多了。另外看ECS經過半年的推出,看起來穩定很多,某默司大神用的很開心,好吧!
開始進入ECS的世界。


2017年7月24日 星期一

找出mongo一直斷線,導致parse-server跟著斷線,導致整個服務中斷的原因

1.發現 multi-docker的 eb 每一次 eb deploy 都會將舊的contianer 砍掉,重新建新的。
2.ebs mount 上去之後,mongo很容易斷線。
mongo很容易斷線的原因是因為mongo container 太小?
還是ebs太大?

3.直接mount node_moudle / 然後減少 ui 的 memory 加到 parse-server 跟 mongo 各256

4. 先 eb create 然後,設定完 https ; email
5.再將 版本丟過去
6.如果出現 Internal Server Error 就console重建吧
因為會重建container故
再進shell重新 service docker restart

2017年7月20日 星期四

aws eb multi-docker with ebs restart

最好先開好兩台機器

1. eb deploy如果動到 Dockerrun.aws.json 很容易導致整個 eb  instance 掛掉,最好先將ebs snapshot 掛在能用的那台eb 然後,所有服務先轉過去,再繼續玩下去。

3.snapshot ebs volume
4.umount 舊的 ebs
5.mount ebs volume:snapshot
6.service docker restart
7.console reboot
不行的話 service docker restart 然後一個一個docker start
sudo docker start $(sudo docker ps -a -q)

8.確定都正常之後,再將服務轉回來



2017年7月18日 星期二

AWS eb 操作良方

一個eb環境
開dev , prod兩個,跟一個 ebs 資料存這裡
eb deploy 只到dev,免得搞掛全部
確認之後
就將版本 部署到 prod
是 需要 重啟 prod (因為ebs mount ; multi-docker 的 eb 會認不到,需要重啟!)





2017年7月17日 星期一

nodejs unzip

s3.getObject({ Bucket: opts.bucket, Key: key }).createReadStream().pipe(unzip.Extract({ path: 'data' }))

2017年7月13日 星期四

2017年7月7日 星期五

punnycode 中文網址 中文網域 轉換

https://www.npmjs.com/package/punycode

2017年6月8日 星期四

2017年5月16日 星期二

website-scraper 好用的爬網站套件

npm install website-scraper

2017年5月7日 星期日

next.j next build失敗 解法

node_module 全部移除 重新安裝
跑一次  node server.js 或 next
再跑 next build
就可以了

解決aws eb multi-docker 資料會被刪除

[最終解法]
eb 只會動 /var/app/current
所以 我直接 mkdir /var/app/db
然後 Dockerrun.aws.json
直接
"volumes": [{
"name": "mongo",
"host": {
"sourcePath": "/var/app/db"
}
}],
這樣就可以了
ebs就沒有很需要了

2017年4月17日 星期一

nginx cache + websocket on AWS single docker

worker_processes 4;

events { worker_connections 1024; }

http {
proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache:30m max_size=1G;

upstream app_upstream {
server localhost:3001;
}

server {
listen 80;

location ~* \.io {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;

proxy_pass http://app_upstream;
proxy_redirect off;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}

location /static {
proxy_cache cache;
proxy_cache_valid 30m;
proxy_pass http://app_upstream;
}

location / {
proxy_cache cache;
proxy_cache_valid 30m;
add_header X-Cache-Status $upstream_cache_status;
proxy_pass http://app_upstream;
}
}

}

2017年3月20日 星期一

botframewotk locale 設定很特別

export var bot = new builder.UniversalBot(lineConnector, {
    localizerSettings: {
        botLocalePath: __dirname + "/locale",
        defaultLocale: "zh"
    }
});

1. 要注意。tsc 不會自動將 json 引用過去。
2.BotBuilder.json 是 botframework的基礎語言檔 , ex: defualt_number 等,要定義在這裡
3.index.json才是你自已的自定義的 語言檔


2017年3月10日 星期五

docker single docker file on aws nginx setting

FROM node:7.4.0

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

ARG NODE_ENV
ENV NODE_ENV $NODE_ENV
RUN npm install yarn -g
ADD package.json /usr/src/app/package.json
RUN yarn

ENV NGINX_VERSION 1.11.8-1~jessie

RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \
    && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \
    && apt-get update \
    && apt-get install --no-install-recommends --no-install-suggests -y \
                        ca-certificates \
                        nginx=${NGINX_VERSION} \
                        nginx-module-xslt \
                        nginx-module-geoip \
                        nginx-module-image-filter \
                        nginx-module-perl \
                        nginx-module-njs \
                        gettext-base \
    && rm -rf /var/lib/apt/lists/*

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log


# Remove the default Nginx configuration file
RUN rm -v /etc/nginx/nginx.conf

# Copy a configuration file from the current directory
ADD nginx.conf /etc/nginx/

# Append "daemon off;" to the configuration file
RUN echo "daemon off;" >> /etc/nginx/nginx.conf

COPY . /usr/src/app/
CMD service nginx start & npm start;
EXPOSE 80

2017年2月14日 星期二

解 dokcer nodejs "ENOENT: no such file or directory, uv_cwd" issue.

可能是docker 內部的神奇部份,
所以只要 node app.js 跟 node ./app.js or node ../app/app.js
每個docker node 錯開 啟使,就正常了

2017年2月11日 星期六

aws multi docker 心得

每次重啟,每一個docker container 的資料會清空,記得要加上volume到外部的folder,才能保存資料。

Dockerrun.aws.json 的 environment 的設定方式

"environment": [
        {
          "name":"PORT",
          "value":"1337"
        },
        {
          "name":"DATABASE_URI",
          "value":"mongodb://mongo:27017/test"
        },
        {
          "name":"APP_ID",
          "value":"test"
        },
        {
          "name":"MASTER_KEY",
          "value":"test_MASTER_KEY"
        },
        {
          "name":"JAVASCRIPT_KEY",
          "value":"test_JAVASCRIPT_KEY"
        }

     
      ]

2017年2月10日 星期五

aws eb multi docker Dockerrun.aws.json

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_v2config.html

{
  "AWSEBDockerrunVersion": 2,
  "volumes": [
    {
      "name": "app",
      "host": {
        "sourcePath": "/var/app/current/app"
      }
    },

    {
      "name": "nginx-proxy-conf",
      "host": {
        "sourcePath": "/var/app/current/proxy/conf.d"
      }
    },
    {
      "name": "mongo"
    },
    {
      "name": "parse-server"
    }
  ],
  "containerDefinitions": [
    {
      "name": "app",
      "image": "node:latest",
      "essential": true,
      "memory": 256, //不能太少,會 npm install 失敗
      "command": [
        "/bin/bash",
        "/usr/src/app/run-dev.sh"
      ],
      "portMappings": [
        {
          "hostPort": 3000,
          "containerPort": 3000
        }
      ],
      "mountPoints": [
        {
          "sourceVolume": "app",
          "containerPath": "/usr/src/app"
        }
      ]
    },

    {
      "name":"mongo",
      "image":"mongo",
      "essential": true,
      "memory": 128,
      "portMappings": [
        {
          "hostPort": 27017,
          "containerPort": 27017
        }
      ]

    },
    {
      "name": "parse-server",
      "image": "yongjhih/parse-server",
      "essential": true,
      "memory": 256,
      "portMappings": [
        {
          "hostPort": 1337,
          "containerPort": 1337
        }
      ],
      "mountPoints": [
        {
          "sourceVolume": "app",
          "containerPath": "/usr/src/app"
        }
      ],
      "links": [
        "mongo"
      ],
      "environment": [
        {
          "name":"parse-server",
          "PORT": "1337",
          "DATABASE_URI":"mongodb://mongo:27017/test",
          "APP_ID":"test",
          "MASTER_KEY":"test_MASTER_KEY",
          "JAVASCRIPT_KEY":"test_JAVASCRIPT_KEY"

        }
      ]
    },
 
    {
      "name": "nginx-proxy",
      "image": "nginx",
      "essential": true,
      "memory": 128,
      "portMappings": [
        {
          "hostPort": 80,
          "containerPort": 80
        }
      ],
      "links": [
        "parse-server",
        "mongo",
        "app"
      ],
      "mountPoints": [
        {
          "sourceVolume": "awseb-logs-nginx-proxy",
          "containerPath": "/var/log/nginx"
        },
        {
          "sourceVolume": "nginx-proxy-conf",
          "containerPath": "/etc/nginx/conf.d",
          "readOnly": true
        }
      ]
    }

  ]
}

2017年2月8日 星期三

multi docker nginx + nodejs 心得


  1. 用nginx prxoy 可以mapping到不同的image,但外部可以持續用相同的cookie . 
  2. 多專案debug時,直接用內網ip做 proxy_pass就可以了
  3. 用docker-compose做 multi docker,做link後,所有的port都不需要開到外部去,增加安全性.



server {
listen 80;
server_name localhost;
location /test {
proxy_pass http://app:3000/test; # proxy_pass http://192.168.1.100:3000/test;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location / {
proxy_pass http://app2:3001; # proxy_pass http://192.168.1.100:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /parse {
proxy_pass http://parse-server:1337/parse; # proxy_pass http://192.168.1.100:1337/parse;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
} docker-compose.yml <
version: '2'
services:
app:
image: "node:latest"
working_dir: /usr/src/app
command: ./run-dev.sh
volumes:
- ./app:/usr/src/app
environment:
- port=3000
depends_on:
- parse-server
app2:
image: "node:latest"
working_dir: /usr/src/app
command: ./run-dev.sh
volumes:
- ./app:/usr/src/app
environment:
- port=3001
depends_on:
- parse-server
mongo:
image: "mongo"
parse-server:
image: yongjhih/parse-server
# ports:
# - "1337:1337"
environment:
PORT: 1337
DATABASE_URI: "mongodb://mongo:27017/test"
APP_ID: "test"
MASTER_KEY: test_MASTER_KEY
JAVASCRIPT_KEY: test_JAVASCRIPT_KEY
links:
- mongo
depends_on:
- mongo
nginx:
image: nginx
ports:
- "5010:80"
volumes:
- ./proxy/conf.d:/etc/nginx/conf.d
links:
- parse-server
- mongo
- app
- app2

2017年2月7日 星期二

docker nginx 連外面的localhost port

 proxy_pass          http://192.168.1.108:3000/;
直接mapping 內網ip

2017年2月6日 星期一

2017年2月2日 星期四

解injectTapEventPlugin.js 錯誤 ,不要用yarn 用npm install

ERROR in ./~/react-tap-event-plugin/src/injectTapEventPlugin.js
Module not found: Error: Cannot resolve module 'react-dom/lib/EventPluginHub' in /Users/chienhunglin/Dropbox/c
hatbot/web-platform/node_modules/react-tap-event-plugin/src
 @ ./~/react-tap-event-plugin/src/injectTapEventPlugin.js 23:2-41

ERROR in ./~/react-tap-event-plugin/src/TapEventPlugin.js
Module not found: Error: Cannot resolve module 'react-dom/lib/EventConstants' in /Users/chienhunglin/Dropbox/c
hatbot/web-platform/node_modules/react-tap-event-plugin/src
 @ ./~/react-tap-event-plugin/src/TapEventPlugin.js 22:21-60

ERROR in ./~/react-tap-event-plugin/src/TapEventPlugin.js
Module not found: Error: Cannot resolve module 'react-dom/lib/EventPluginUtils' in /Users/chienhunglin/Dropbox
/chatbot/web-platform/node_modules/react-tap-event-plugin/src
 @ ./~/react-tap-event-plugin/src/TapEventPlugin.js 23:23-64

ERROR in ./~/react-tap-event-plugin/src/TapEventPlugin.js
Module not found: Error: Cannot resolve module 'react-dom/lib/EventPropagators' in /Users/chienhunglin/Dropbox
/chatbot/web-platform/node_modules/react-tap-event-plugin/src
 @ ./~/react-tap-event-plugin/src/TapEventPlugin.js 24:23-64

ERROR in ./~/react-tap-event-plugin/src/TapEventPlugin.js
Module not found: Error: Cannot resolve module 'react-dom/lib/SyntheticUIEvent' in /Users/chienhunglin/Dropbox
/chatbot/web-platform/node_modules/react-tap-event-plugin/src
 @ ./~/react-tap-event-plugin/src/TapEventPlugin.js 25:23-64

ERROR in ./~/react-tap-event-plugin/src/TapEventPlugin.js
Module not found: Error: Cannot resolve module 'react-dom/lib/ViewportMetrics' in /Users/chienhunglin/Dropbox/
chatbot/web-platform/node_modules/react-tap-event-plugin/src
 @ ./~/react-tap-event-plugin/src/TapEventPlugin.js 27:22-62

https://github.com/zilverline/react-tap-event-plugin/issues/93
用npm install