#windows下mongodb安装

##下载mongodb

http://www.mongodb.org/downloads

##选择自定义安装

本机路径为:d:\tools\mongodb

##建立如下文件目录
数据库路径:d:\tools\mongodb\db
日志路径:d:\tools\mongodb\log
配置文件目录d:\tools\mongodb\etc
建立配置文件d:\tools\mongodb\etc\mongodb.conf

1
2
3
4
5
6
dbpath=d:\tools\mongodb\db #数据库路径
logpath=d:\tools\mongodb\log\mongodb.log #日志输出文件路径
logappend=true #错误日志采用追加模式,配置这个选项后mongodb的日志会追加到现有的日志文件,而不是从新创建一个新文件
journal=true #启用日志文件,默认启用
quiet=true #这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
port=27017 #端口号 默认为27017

##启动服务

切换到d:\tools\mongodb\bin 目录下:

  • 普通启动

mongod --config d:\tools\mongodb\etc\mongodb.conf

  • 注册为windows服务

mongod --config d:\tools\mongodb\etc\mongodb.conf --install

补充

  • windows服务卸载

mongod --remove --serviceName "MongoDB"

  • 启动服务
    net start mongodb

启动成功后,通过浏览器访问 http://localhost:27017 ,看到下面的文字,证明启动服务成功!

It looks like you are trying to access MongoDB over HTTP on the native driver port.

  • 关闭服务
    net stop mongodb

#图形化工具

官方提供的很全:https://docs.mongodb.org/ecosystem/tools/administration-interfaces/

#maven3下jdk1.7编译错误解决

#环境

1
2
3
4
5
6
7
8
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:3
7+08:00)
Maven home: d:\tools\apache-maven-3.3.3
Java version: 1.7.0_45, vendor: Oracle Corporation
Java home: c:\Program Files\Java\jdk1.7.0_45\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

#使用maven命令行创建java项目

1
mvn archetype:generate -DgroupId=org.linfeng -DartifactId=mavendemo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

  • 创建成功
1
2
$ cd mavendemo && ls
pom.xml src
  • pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.linfeng</groupId>
<artifactId>mavendemo</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>mavendemo</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
  • 执行maven命令

mvn test

  • 错误信息
1
2
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project mavendemo: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

#解决方案

  • 修改settings.xml,添加jdk1.7相关内容
1
2
3
4
5
6
7
8
9
10
11
12
<profile>
<id>jdk-1.7</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.7</jdk>
</activation>
<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
</properties>
</profile>

缺点:修改所有项目的jre环境

  • 修改当前项目的pom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</build>

重新执行mvn build 成功!

#问题分析
Maven官方文档有如下描述:

编译器插件用来编译项目的源文件.从3.0版本开始, 用来编译Java源文件的默认编译器是javax.tools.JavaCompiler (如果你是用的是java 1.6) . 如果你想强制性的让插件使用javac,你必须配置插件选项 forceJavacCompilerUse.
同时需要注意的是目前source选项和target 选项的默认设置都是1.5, 与运行Maven时的JDK版本无关.如果你想要改变这些默认设置, 可以参考 Setting the -source and -target of the Java Compiler中的描述来设置 source 和target 选项.

#参考资料

  • 打开.bashrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Default to human readable figures
# alias df='df -h'
# alias du='du -h'
#
# Misc
# alias less='less -r' # raw control characters
# alias whence='type -a' # where, of a sort
# alias grep='grep --color' # show differences in colour
# alias egrep='egrep --color=auto' # show differences in colour
# alias fgrep='fgrep --color=auto' # show differences in colour
#
# Some shortcuts for different directory listings
# alias ls='ls -hF --color=tty' # classify files in colour
# alias dir='ls --color=auto --format=vertical'
# alias vdir='ls --color=auto --format=long'
# alias ll='ls -l' # long list
# alias la='ls -A' # all but . and ..
# alias l='ls -CF' #
  • 而我们要做的只是去掉#,启动即可:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Default to human readable figures
alias df='df -h'
alias du='du -h'
#
# Misc
alias less='less -r' # raw control characters
alias whence='type -a' # where, of a sort
alias grep='grep --color' # show differences in colour
alias egrep='egrep --color=auto' # show differences in colour
alias fgrep='fgrep --color=auto' # show differences in colour
#
# Some shortcuts for different directory listings
alias ls='ls -hF --color=tty' # classify files in colour
alias dir='ls --color=auto --format=vertical'
alias vdir='ls --color=auto --format=long'
alias ll='ls -l' # long list
alias la='ls -A' # all but . and ..
alias l='ls -CF' #
  • 然后保存一下,再重启cygwin
    (或者直接用:source ~/.bashrc

如何搭建docker私服

##环境准备

软件包:

  • centos6.5_x86_64

  • docker-engine-1.7.0-1.el6.x86_64.rpm

docker环境搭建,请参照官方说明,本文采用的是官方的rpm包

##何谓私服

官方的image镜像站位dockerhub,因为伟大的墙的缘故,所以下载镜像是很痛苦的一件事。当然你可以采用其他科学上网或者镜像加速的方法来获取image。
docker官方也提供了一个私服镜像,大家可以通过docker search registry来查找该镜像。

1
2
3
4
5
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
registry Containerized docker registry 320 [OK]
atcol/docker-registry-ui A web UI for easy private/local Docker Reg... 55 [OK]
konradkleine/docker-registry-frontend Browse and modify your Docker registry in ... 40 [OK]
samalba/docker-registry 35

##下载官方registry镜像

  • 下载镜像

使用命令docker pull registry执行下载镜像。

  • 查看镜像

下载完毕后,通过docker images 查看该镜像。

  • 给镜像打标签

执行这个命令
docker tag registry:latest localhost:5000/registry:latest

##启动镜像

docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/tmp/registry -p 5000:5000 registry

这里有几个参数说明下:

  • 1.-e STORAGE_PATH=/tmp/registry :强制使用存储路径
  • 2.-v /opt/data/registry:/tmp/registry :绑定本地镜像存储路径
  • 3.-p 5000:5000:映射容器5000端口到本地5000端口

##查看镜像状态

docker ps

##查看私服状态

curl http://localhost:5000

显示如下信息,证明registry启动成功:

"\"docker-registry server\""

##推送本地镜像库到registry私服

###1. 第一步 给本地镜像 打tag
例如给官方的nginx镜像打tag,执行下面的命令行
docker pull nginx
docker tag nginx:latest localhost:5000/nginx:latest
查看镜像库,发现localhost:5000/nginx的镜像已经有了。

###2. 第二步 推送tag到registry私服

docker push localhost:5000/nginx:latest

###3. 第三步 查看私服镜像列表

curl http://localhost:5000/V1/search

看到类似这样的信息

1
2
{"num_results": 5, "query": "", "results": [{"description": null, "name": "correl/erlang"}, {"description": null, "name": "linfeng/cmd"}, {"description": null, "name": "library/my_nodejs_image"}, {"description": null, "name": "library/centos"}, {"description": "", "name": "library/nginx"}]}

##拉取私服镜像

docker pull 192.168.20.85:5000/library/centos:7

##结论

这只是演示如何搭建一个简单的registry私服。因为只有通过命令行方式才能查看私服信息,所以不是很便于操作。下面的博文将演示如何给registry添加web界面。

如何进行远程版本回退……

#引言

一切都要从一个蛋疼的需求开始,老板说,能给远程仓库的版本回退吗?我说为毛?他说我就是试试看git好使不,我……

#咋搞

  • 背景

gitcafe 国内知名的源码托管平台

  • 分析
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1、git checkout the_branch
2、git pull
3、git branch the_branch_backup //备份一下这个分支当前的情况
4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id
5、git push origin :the_branch //删除远程 the_branch
6、git push origin the_branch //用回滚后的本地分支重新建立远程分支
7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支
  • 删除远程分支

首先,任何一个git源码托管平台都会告诉你,别删除远程master分支,因为它是默认的分支……,请移步这里

  • 操作步骤

如果远程只有一个master分支,请你创建一个非master分支,然后推送到远程。
有人会问我为什么?打个比方,你见过上旱厕的时候,给自己脚下站着的板子抽走吗?

脚本类似下面这样

1
2
3
4
git branch the_master_backup
git push origin the_master_backup

此时你查看远程分支应该有两个:master和the_master_backup

设置默认的分支为 the_master_backup

1
2
3
4
git branch -D branch_name //删除本地master分支
git push :master //推送一个空分支,相当于删除远程master分支

然后你在the_master_backup分支上 回滚到你要回滚的commit_id,然后重建master分支并推送到远程,顺便删除the_master_backup分支(包括远程the_master_backup分支)。

1
2
3
4
5
6
7
8
9
10
11
12
git checkout the_master_backup
git reset --hard commit_id
git branch master //重新创建master分支
git push origin master //重新推送master分支
git branch -D the_master_backup //删除本地the_master_backup分支
git push origin :the_master_backup//删除远程the_master_backup分支

#遇到的问题

  1. 忘记设置默认分支为非master分支
1
2
3
4
5
6
7
8
9
10
11
12
13
14
remote: error: By default, deleting the current branch is denied, because the ne
xt
remote: error: 'git clone' won't result in any file checked out, causing confusi
on.
remote: error:
remote: error: You can set 'receive.denyDeleteCurrent' configuration variable to
remote: error: 'warn' or 'ignore' in the remote repository to allow deleting the
remote: error: current branch, with or without a warning message.
remote: error:
remote: error: To squelch this message, you can set it to 'refuse'.
...

#总结

如果你遇到的是所有提交只有master分支,那么希望我这个博文能帮到你。当然git强大的分支功能你基本也用不到了。