node的typescript的常用操作

1.安装node版本,建议选择v8.11.3版本。

https://nodejs.org/dist/v8.11.3/node-v8.11.3-x64.msi
2.安装visual studio code,选择最新版。
【npm的所有命令,请不要powershell中执行,目前还不知道为什么在本人环境发现在执行npm config set注册下载源时,会出错,且错得很离谱。故需要用cmd.exe来解决。】
3.安装全局组件。
  
     npm install -g typescript
     npm install -g pm2
     npm install -g ts-node
  

4.安装本地组件
npm install
5.如果觉得安装有问题,可以直接清理npm缓存及组件。
%appdata%/npm和%appdata%/npm

ssh的连接复用

Host mini
   ControlPath ~/.ssh/master-%r@%h:%p
   ControlMaster auto
   ControlPersist yes
   HostName 192.168.10.104
   Port 22
   User abc

woweb的yii2容器化服务部署

version: '3.1'

networks:
  default:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
    ipam:
      driver: default
      config:
        - subnet: 192.168.57.0/24

services:
  mysql:
    image: mysql:5.5.60
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: abc3.0123
    # links:
    ports:
      - 13306:3306
      # 13306端口是补人使用的,不能随便修改。
    volumes:
      - ./data/share/localtime:/etc/localtime:ro
      - ./data/share/timezone:/etc/timezone:ro
      - ./data/mysql/data:/var/lib/mysql

  php:
    image: yiisoftware/yii2-php:7.2-fpm
    restart: always
    ports:
      - 9900:9000
    links:
      - mysql:mysql
    extra_hosts:
      - mysql.woterm.com:abc.24.129.221
    depends_on:
      - mysql
    volumes:
      - ./data/share/localtime:/etc/localtime:ro
      - ./data/share/timezone:/etc/timezone:ro
      - ./data/wwwroot:/home/wwwroot
      - ./data/wwwlogs:/home/wwwlogs
      - ./../../woweb:/home/wwwroot/woweb
    # php-fpm运行的用户为www-data,需要将wwwroot的权限为[chmod a+w ]

  nginx:
    image: nginx:1.13.6
    restart: always
    ports:
      - 80:80
    links:
      - mysql
      - php
    depends_on:
      - mysql
      - php
    volumes:
      - ./data/share/localtime:/etc/localtime:ro
      - ./data/share/timezone:/etc/timezone:ro
      - ./data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./data/nginx/conf/vhost:/etc/nginx/vhost:ro
      - ./data/wwwroot:/home/wwwroot
      - ./data/wwwlogs:/home/wwwlogs
      - ./../../woweb:/home/wwwroot/woweb

  ftp:
    image: stilliard/pure-ftpd
    restart: always
    ports:
      - "21:21"
    volumes:
      - ./data/vsftp:/home/vsftp
    environment:
      FTP_USER_NAME: uftp
      FTP_USER_PASS: xxxxxxx
      FTP_USER_HOME: ./data/vsftp/home

mongo分片及副本集搭建例子

https://github.com/senssei/mongo-cluster-docker

基于上面仓库,改造了一个副本集。
https://github.com/kxtry/mongo-cluster-docker

1.副本集docker-compose脚本

version: '3'
services:
    mgoprimary:
        container_name: "mgoprimary"
        image: mongo:4.2
        ports:
            - "27017:27017"
        command: mongod --replSet vmlocal --port 27017  --oplogSize 16
        links:
            - mgoreplica1:mgoreplica1
            - mgoreplica2:mgoreplica2
        restart: always
        extra_hosts:
            - "mgo.db.com:{{extern_ip}}"
        volumes:
            - /etc/localtime:/etc/localtime:ro
            - /etc/timezone:/etc/timezone:ro
            - ./data/mgoprimary/data:/data/db

    mgoreplica1:
        container_name: "mgoreplica1"
        image: mongo:4.2
        ports:
            - "27018:27017"
        command: mongod --replSet vmlocal --port 27017  --oplogSize 16
        restart: always
        extra_hosts:
            - "mgo.db.com:{{extern_ip}}" 
        volumes:
            - /etc/localtime:/etc/localtime:ro
            - /etc/timezone:/etc/timezone:ro
            - ./data/mgoreplica1/data:/data/db

    mgoreplica2:
        container_name: "mgoreplica2"
        image: mongo:4.2
        ports:
            - "27019:27017"
        command: mongod --replSet vmlocal --port 27017  --oplogSize 16        
        restart: always
        extra_hosts:
            - "mgo.db.com:{{extern_ip}}"
        volumes:
            - /etc/localtime:/etc/localtime:ro
            - /etc/timezone:/etc/timezone:ro
            - ./data/mgoreplica2/data:/data/db

    setup-vmlocal:
        container_name: "setup-vmlocal"
        image: mongo:4.2
        depends_on:
            - "mgoprimary"
            - "mgoreplica1"
            - "mgoreplica2"
        extra_hosts:
            - "mgo.db.com:{{extern_ip}}"
        links:
            - mgoprimary:mgoprimary
            - mgoreplica1:mgoreplica1
            - mgoreplica2:mgoreplica2
        volumes:
            - ./scripts:/scripts
        environment: 
            - MONGO1=mgo.db.com:27017
            - MONGO2=mgo.db.com:27018
            - MONGO3=mgo.db.com:27019
            - RS=vmlocal
        entrypoint: [ "/scripts/setup.sh" ]

3.与docker-compose.yml相同子目录下的./scripts/setup.sh脚本

#!/bin/bash 

mongodb1="${MONGO1}"
mongodb2="${MONGO2}"
mongodb3="${MONGO3}"

echo "Waiting for startup.."
until mongo --host ${mongodb1} --eval 'quit(db.runCommand({ ping: 1 }).ok ? 0 : 2)' &>/dev/null; do
  printf '.'
  sleep 1
done

echo "Started.."

echo setup.sh time now: `date +"%T" `
mongo --host ${mongodb1} <

3.构建脚本build_cluster.sh

#!/bin/sh                                                                                                                                                                                                   
                                                                                                                                                                                                            
path_current=`pwd`                                                                                                                                                                                          
path_script=$(cd "$(dirname "$0")"; pwd)                                                                                                                                                                    
                                                                                                                                                                                                            
mode=$1                                                                                                                                                                                                     
extern_ip=$2                                                                                                                                                                                                
                                                                                                                                                                                                            
case "$mode" in                                                                                                                                                                                             
     'build')                                                                                                                                                                                               
        if [ -f $path_script/docker-compose.yml ]; then                                                                                                                                                     
           echo 'the docker-compose.yml had been exist. if you want to continue, remove it.'                                                                                                                
           exit 1                                                                                                                                                                                           
        fi                                                                                                                                                                                                  
        /bin/cp $path_script/docker-compose.yml.template $path_script/docker-compose.yml && echo "$path_script/docker-compose.yml" | xargs /bin/sed -i "s#{{extern_ip}}#$extern_ip#g"                       
        echo 'success to build the file.'                                                                                                                                                                   
     ;;                                                                                                                                                                                                     
     *)                                                                                                                                                                                                     
       basename=`basename "$0"`                                                                                                                                                                             
       echo "Usage: $basename  {build}{extern_ip}"                                                                                                                                                          
       echo "---$basename build 192.168.10.104"                                                                                                                                                             
     ;;                                                                                                                                                                                                     
esac             

Dockerfile的CMD和ENTRYPOINT的关系

以下示范,表示该形式下的CMD与ENTRYPOINT的关系。
CMD相当于应用程序的参数,ENTRYPOINT相当于应用的main入口或主程序入口。

FROM centos 
CMD ["echo 'p222 in cmd'"]     #传递给ENTRYPOINT的参数项。
ENTRYPOINT ["echo"]     #应用入口,相当于程序的main函数

1.构建

docker build  -t test .
2.执行以下指令执行默认的CMD命令。
docker run test
输出结果:
echo 'p222 in cmd'

3.修改程序输入参数

docker run test abct123
输出结果:
abct123

mongo的测试脚本

conn = new Mongo("mongodb://wps_credit:2f25da558f6e79c452a61bea4a8d762f@10.100.2.216:27017,10.100.2.217:27017,10.100.2.218/wps_credit?maxPoolSize=300&replicaSet=kae-mongo-test42");
db = conn.getDB("wps_credit");

var t1 = new Date();
printjson(db.getCollectionNames());

var t2 = new Date().getTime();
printjson(t1, t2, t2 - t1);

mongodb脚本执行

1.编写脚本:job.js,内容如下:

conn = new Mongo("mongodb://abc:b=abc@10.0.1.183:27017,10.0.1.184:27017/wps_credit?maxPoolSize=300&replicaSet=c45134ec-6a5f-461e-8745-7081b46b0d87");
db = conn.getDB("abc");

var result = db.transaction_5.find().limit(10);
while(result.hasNext()) {
    printjson(result.next());
}
var tm = new Date();
printjson(db.transaction_6.count());
db.transaction_6.remove({});
printjson(db.transaction_7.count());
db.transaction_7.remove({});
printjson(db.transaction_8.count());
db.transaction_8.remove({});

var t2 = new Date().getTime() - t1;
printjson(t2);

2.执行它

mongo -nodb job.js