MongoDB

MongoDB远程连接

开启服务

1
mongod -f CONFIG文件路径

本地连接数据库,创建管理员

1
2
3
4
mongo

use admin #切换到管理库
db.createUser({user:'',pwd:'',roles:[]}) #3.x版本用createUser代替旧版的addUser,roles至少是个空数组

关闭数据库

1
2
3
4
mongo

use admin #切换到管理库
db.shutdownServer()

yum 换镜像源

yum更换源

阿里云镜像源

备份yum默认源

1
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

下载阿里云镜像到本地

1
wget http://mirrors.aliyun.com/repo/Centos-7.repo

把下载下来的镜像挪到yum.repo.d目录下,并命名为默认的名字

1
mv Centos-7.rep /etc/yum.repos.d/CentOS-Base.repo

然后建立缓存(实话说我并不知道这是什么)

1
yum makecache

CentOS7 最小化安装+配置+Nodejs

centos7最小化安装

1.yum换源

2.安装服务

  • net-tools (不然连ifconfig命令都没有)[yum install 即可]

  • vim (默认只有最小的vi,没有vim其他服务)[yum install 即可]

  • nginx

  • iptables-services [yum install 即可]

  • nodejs + npm

  • zsh + ohmyzsh

  • yarn

  • mongodb

  • redis

以上全部可以用yum安装方法如下:

2.1 vim

1
2
rpm -qa|grep vim #查看vim是否正确安装,如果缺少包,就会提示
yum install vim-common.x86_64 vim-enhanced.x86_64 #安装2个包

2.2 nginx

官方文档操作:指定yum.repo

1
vi /etc/yum.repos.d/nginx.repo

然后写入:(OS换成你的系统,OSRELEASE换成你的系统版本,比如你用centos7,就是…packages/centos/7/$basearch/)

1
2
3
4
5
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1

然后

1
yum install nginx

2.3 nodejs + npm

nodesource看这里

1
2
3
curl -sL https://rpm.nodesource.com/setup_7.x | bash -

yum install -y nodejs

2.4 zsh + ohmyzsh

首先要保证你有zsh。打印出所有shell,如果没有zsh,就yum install zsh一个

1
echo $SHELL

安装ohmyzsh

1
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

2.5 yarn

yarn是干嘛用的就自己看官网或者百度吧

1
2
3
wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo

yum install yarn

2.6 mongodb

跟nginx类似的方法,添加yum.repo,我这里使用的是aliyun镜像

1
vi /etc/yum.repos.d/mongodb-org.repo
1
2
3
4
5
[mongodb-org]
name=MongoDB Repository
baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/$releasever/mongodb-org/stable/$basearch/
gpgcheck=0
enabled=1
1
yum install -y mongodb-org

2.7 redis

1.官网方法,下载,解压,编译(应该是吧)

1
2
3
4
wget http://download.redis.io/releases/redis-3.2.5.tar.gz
tar xzf redis-3.2.5.tar.gz
cd redis-3.2.5
make

2.yum 安装法,默认没有repo,请自行百度
安装完server跟cli是在/usr/bin/

1
yum install redis

3.配置

3.1 vim

1
vi ~/.vimrc
1
2
3
4
5
6
7
syntax on "语法高亮
set cursorline "当前行高亮
set tabstop=4 "tab占4空格
set softtabstop=4 "退格键删除的长度
set expandtab "tab转为空格\s;noexpandtab,tab不转空格,保留\t
set autoindent "自动缩进
set number "显示行号,nonumber

可以用缩写,比如 set nu == set numberset ts=4 == set tabstop=4 等。

3.2 nginx

转发代理配置

3.3 npm

3.3.1 更换安装源,可以使用nrm模块

1
npm install -g nrm

安装完成后,直接nrm就可以得到相关帮助的提示,一般就2个命令就够了

1
2
nrm ls #列出nrm目前收录的源信息
nrm use taobao ##使用taobao源

3.3.2 node版本管理,可以使用n模块

1
npm install -g n

基本命令

1
2
3
n ls #列出所有版本
n use <version> #替换<version>,比如n use 7.0.0安装并使用nodejs7.0.0版本
n rm <version ...> #删除版本

3.4 ohmyzsh

由于我们用zsh当做我们的默认shell,导致.bash_profile不执行(它基于/bin/bash),所以要配置

配置.zshrc

1
vi .zshrc

然后添加一行

1
source ~/.bash_evan

这里zsh会在你登录时source .bash_evan文件,但是我们是没有自定义的这个.bash_evan,我们可以新建一个。

1
vi ~/.bash_evan

接下来我们可以将配置写入这个文件。

1
2
3
4
5
alias vi="vim" #我这里默认情况下vi命令并不会指向vim,所以自己定义一下
export tree="tree -C -N" #-C是颜色高亮,-N是解决中文乱码问题
#如果是用了nvm安装、管理nodejs版本,也可以把nvm的配置写到这里

export PATH=$PATH:$HOME/bin #这里我复制了.bash_profile的环境变量

其实也就是说,你使用了zsh之后,.bashrc / .bash_profile基本上可以说没用。如果你需要使用的时候,可以source。但是我在zsh下source这两个文件是会导致报错的。外行的我就不懂怎么回事了,估计是bash本身的一些功能在zsh上找不到吧。

3.5 mongodb

config文件的设置 官方文档

在用户目录下新增一个用来存放dblogconfig的文件夹mongodb,并创建db,log文件夹

1
2
mkdir -p ~/mongodb/db  ~/mongodb/log
vi ~/mongodb/mongo.config
1
2
3
4
5
6
storage:
dbPath: "mongodb/db/"

systemLog:
destination: file
path: "mongodb/log/db.log"
1
mongod -f ~/mongodb/mongo.config

mongodb有2个主要的命令:

  1. mongod:开启mongodb服务
  2. mongo:进入mongodb,可对数据进行操作

(默认端口号是27017)

3.6 redis

redis也是有2个主要命令,在redis目录下:

  1. src/redis-server
  2. src/redis-cli

(默认端口号是6379)

官方教程


gulp插件

gulp

  • gulp-tinypng
  • gulp-babel
  • gulp-beautify
  • gulp-concat
  • gulp-uglify

gulp-tinypng

tinypng是一个压缩png32/24的网站,提供免费压缩服务。压缩比是ps自带的无法比拟的。不过这是有损压缩,要看情况使用。对于移动端小游戏,这点质量损失,肉眼几乎看不出。

1
2
3
4
5
6
7
8
var gulp = require('gulp');
var imagemin = require('gulp-tinypng');
var APIKEY = '这个key要去tinypng官网获取';
gulp.task('TINY', function () {
gulp.src(['./images/*.png'])
.pipe(tinypng(APIKEY))
.pipe(gulp.dest('./compress/'));
});
1
gulp TINY

这个服务是必须联网的,也就是说,他是将图片(或图片数据)传输到tinypng的服务器进行压缩,再返回压缩后的图片给你的。

如何获取tinypng的apikey

其实还是慢开放的,不需要注册,不需要填各种资料。

首先进入官网的developers目录,这里这里

上面一堆话的意思大概就是:想要用tinypng服务,就赶紧告诉我你的邮箱吧。

  1. 填一下你的名字、邮箱(尝试过,qq邮箱是不被允许的)
  2. 然后你就会收到邮件
  3. 按邮件里面的指示操作,打开一个连接
  4. 然后就看到apikey了

==每月免费压缩500张==,超额的按官方价格,每张$0.009、$0.002。

目前我也只是用了一个邮箱去获取,暂时没发现有超额现象。

不使用gulp-tinypng

当然gulp-tinypng只是其中一个方法,我们可以用官方给出的方法自己写一个node app来实现,而且功能更多更强大。官网nodejs指引


pm2——nodejs进程管理

不太了解,反正自己的开发过程,自己记录一下。只用到表层的东西,高端的东西还没用上。

pm2是一个node应用的进程管理器。以前你可能npm start &之后,想要结束进程还要先找到对应进程的PID然后再kill。现在用pm2,可以变得更灵活。

pm2官网

安装、更新

1
2
npm install pm2 -g
pm2 update

启动一个app

1
pm2 start app.js

这时候app的进程就在系统后台运行了,经过pm2监控、管理。

常用的几个命令

基本上,pm2的参数可以是allapp-nameid

  • all:所有进程
  • app-name:某个进程的名称
  • id:某个进程对应的id
1
2
3
4
5
6
7
pm2 list  # 列出pm2监控的所有进程
pm2 start #
pm2 stop #
pm2 delete #
pm2 restart all # 重启所有进程
pm2 logs # 显示进程的log,可指定id/app-name
pm2 show id/app-name # 显示指定app的信息

其他方法直接看官方github

process.json

进程的配置信息,官方文档

简单的示例

1
2
3
4
5
6
7
{
apps : [{
name : "Evan's website",
script : "./app.js",
watch : true
}]
}

然后

1
pm2 start process.json

这样就启动了json里声明的app了。而且,官网还有更多配置,比如watch其实是可以指定watch哪些文件的。

暂时先这样。


npm install报fs错

我的node版本是旧版的,印象中是v4的。install n,然后用n更新了node。再使用npm 安装pm2的时候包错,错误如下:

1
(node:XXXXX) fs: re-evaluating native module sources is not supported. If you are using the graceful-fs module, please update it to a more recent version.

其实跟pm2本身没什么关系,因为我试过更新npm,也是这样报错。

1
sudo npm update -g npm

继续报上面的错误。

不明所以,搜索一番,据说要降到v6以下,看来还是先node降级吧。

1
sudo n v5.12.0

好了,现在不报错了。update npm,好,成功。

然后再用n切换node版本到新版。再安装pm2,成功。

1
2
sudo n v6.x.x
sudo npm install pm2 -g

通过这次,引出另一个知识点——“npm基本命令”


npm基本命令

官方文档

install

安装模块

1
npm install

具体请参考官方的文档,比较详细。

这里列出几个常用的

1
2
3
npm install #不带参数,会根据当前目录的package.json来安装依赖
npm install 模块名@版本号 #安装指定版本的module,版本号(@xxx)可省略
npm install 模块名 --save #安装该module,并自动把模块和版本号写入package.json

uninstall

1
2
npm uninstall #参数跟install对应
#等同于: remove, rm, r, un, unlink

outdated

输出需要update的模块

-g:全局

1
npm -g outdated

输出:

1
2
3
4
Package         Current  Wanted  Latest  Location
gulp 3.9.0 3.9.1 3.9.1
hexo 3.2.0 3.2.2 3.2.2
npm 3.10.9 3.10.9 3.10.8

update

更新

1
npm update [-g] [<pkg>...]

start

用于执行package.json里面声明的start脚本。

比如package.json里面有。

1
2
3
4
5
6
7
8
9
{
"name": "xxx",
"version": "0.0.1",
"scripts": {
"start": "node app.js"
},
"dependencies": {},
"devDependencies": {}
}
1
npm start

这样就执行了node app.js


Createjs相关

Createjs相关

我并不非常了解canvas的基础。虽说用createjs写过不少游戏,但是其实并不非常了解其中的“奥秘”。就好像你用jQuery能写出很多效果,但可能你并不知道jQuery究竟干了什么。

Createjs的基本构成

  • Easeljs 图形库,最基本的canvas绘图功能
  • Tweenjs 补间动画的库
  • Soundjs 音频库
  • Preloadjs 预加载库
  • (以前还有一个叫做MovieClip的库,好像现在整合到Easeljs里面去了)

Createjs就是这几个库的集合(不确定还有没有不属于这几个库的其他东西)。

而这几个库也可以单独使用。

单独使用的话,其实PreloadjsSoundjs比较常用。

下面简单说几个我比较常用的对象、方法

Easeljs

舞台 Stage

1
2
3
4
// new 一个stage,用于绘制图案
var stage = new createjs.Stage('canvas_id');
// 刷新stage,当你stage里面的内容有修改的时候,通过update方法可以绘制出来
stage.update();

计时器 Ticker

1
2
3
4
5
6
7
8
9
10
11
12
// 设置帧率,以下方法即表示每秒60帧
createjs.Ticker.setFPS(60);

// 官方表示setFPS已过时,请用framerate代替
createjs.Ticker.framerate = 60;

// createjs默认是使用的requestAnimationFrame方法
// 一般用于stage的update
createjs.Ticker.addEventListener("tick", (e) =>{
console.log(e)
stage.update(e);
});

常用的图形元素

  • Bitmap 位图元素
  • Text 文字元素
  • Sprite 精灵元素,其实就是序列帧,需要搭配SpriteSheet
  • Shape 图形元素,需要搭配Graphics
  • BitmapText 图片化的文字,跟Sprite类似的位图元素,需要搭配SpriteSheet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 用到image、spriteSheet等的,需要先load,否则会取不到图片资源

// Bitmap 参数可以是img元素、canvas元素、video元素、或者图片路径
var bitmap = new createjs.Bitmap('img.png');


// Text 参数分别是text,font,color
// font:等同于CSS的font属性值,比如可以是'bold 20px Arial'
// color:CSS可用的color均能使用
var text = new createjs.Text("Hello World", "20px Arial", "#FFF");


// Sprite 参数是spriteSheet和开始帧
// 第二参数可选
var sprite = new createjs.Sprite(spriteSheet);
sprite.gotoAndPlay('帧名');
//等同于
var sprite = new createjs.Sprite(spriteSheet, '帧名');


//Shape 参数是Graphics对象,api重点在Graphics
var graphics = new createjs.Graphics().beginFill("#ff0000").drawRect(0, 0, 100, 100);
var shape = new createjs.Shape(graphics);
//同样的,你也能这么写
var shape = new createjs.Shape();
shape.graphics.beginFill("#ff0000").drawRect(0, 0, 100, 100);


// BitmapText 参数是text和spriteSheet
var bitmaptext = new createjs.Sprite('Hello world', spriteSheet);

Container

顾名思义,容器:

1
2
var container = new createjs.Container();
container.addChild(bitmap, sprite);

最简单的案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<title>test</title>
<style>
*{margin:0;padding:0;}
body{text-align:center;}
#game{margin:0 auto;}
</style>
</head>
<body>
<canvas id="game" width="640" height="640" style="width:320px;height:320px;"></canvas>
<script src="/js/createjs-2015.11.26.min.js"></script>
<script>
var stage = new createjs.Stage('game');

createjs.Ticker.framerate = 60;
createjs.Ticker.addEventListener("tick", (e) =>{
// 定时渲染
stage.update(e);
});

var container = new createjs.Container();
stage.addChild(container);

var text = new createjs.Text('Hello world', '30px Tahoma', "#333");
container.addChild(text);
</script>
</body>
</html>

可以参考官方demo

Tweenjs

1
2
3
4
5
6
7
8
9
10
11
var t = new createjs.Text('Hello world', '30px Tahoma', "#333");
stage.addChild(t);
t.x = 0;
t.y = 100;
createjs.Tween.get(t)
.wait(500)
.to({x: 200}, 2000, createjs.Ease.backOut)
.call(()=>{
// 结束
});

createjs.Ease可以参考官方demo

Soundjs

不太了解 囧

一般用于播放音乐、音效

1
2
3
4
5
6
var soundsList = {};
// 这里需要结合preloadjs
var audio = loader.getResult(id);
var list = {};
list[id] = createjs.Sound.createInstance(id);
list[id].play({loop:-1});

Preloadjs

少说废话,直接上代码

1
2
3
4
5
6
7
8
9
10
11
12
var loader = new createjs.LoadQueue();
var res = [
{id:'n',src:'http://demo.com/thumb-default.png'}
];
loader.loadManifest(res);
loader.on("complete", (e) => {
var img = new createjs.Bitmap(loader.getResult('n'));
container.addChild(img)
});
loader.on("progress", (e) => {
// 这里可以做进度条
});

CentOS常用命令

查看指定端口占用情况

1
2
lsof -i tcp:xxxx
lsof -i:xxxx

查看所有端口

1
netstat -ntlp

查看进程

1
ps -aux | grep mongod

搜索文件

1
find ./ -name 'keywords' -print

显示硬件时间

1
hwclock -r

从当前系统时间(date)设置硬件时钟

1
hwclock -w

hardware clock read 的意思吧,我猜的

显示软件时间

1
date

如果软件时间是错误的,可以通过 ntpdate 纠正

1
ntpdate time.nist.gov

如果没有ntpdate命令,就用 yum install 一下 ntp