gerrit 基于docker容器的部署:

命令行启动
1.  启动mysql容器
	sudo docker run --name mysql -d -v /gerrit_mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123qwezxc -e MYSQL_DATABASE=reviewdb -e MYSQL_USER=gerrit2 -e MYSQL_PASSWORD=gerrit mysql


2. 启动gerrit容器	
	sudo docker run --name gerrit2 --link mysql:db -d -p 8080:8080 -p 29418:29418 -v /gerrit_volume:/var/gerrit/review_site -e DATABASE_TYPE=mysql -e WEBURL=https://9.186.89.219 -e DB_ENV_MYSQL_DB=reviewdb  -e HTTPD_LISTENURL=proxy-https://*:8080/ openfrontier/gerrit

3. 启动nginx_ssl_gerrit,此镜像是根据官方nginx镜像生成,对应的Dockerfile配置如下:
	a. mkdir nginx_ssl_gerrit && cd nginx_ssl_gerrit
	b. cat > Dockerfile <<EOF
			FROM nginx
			COPY ./nginx/ /etc/nginx/conf.d/
	   EOF
	c. nignx的目录结构如下:
		nginx_ssl_gerrit/
		├── Dockerfile
		└── nginx
		    ├── default.conf  #ssl的相关配置
		    ├── gerrit.crt    #自签证书公钥
		    └── gerrit.key 	  #自签证书私钥

	d. default.conf 配置如下:
		cat > default.conf <<EOF
			server {
			    listen 443;
			    server_name 127.0.0.1;

			    ssl  on;
			    ssl_certificate      conf.d/gerrit.crt;
			    ssl_certificate_key  conf.d/gerrit.key;

			    location / {
			        proxy_pass              http://gerrit:8080;
			        proxy_set_header        X-Forwarded-For $remote_addr;
			        proxy_set_header        Host $host;
			    }

			    location /login/ {
			        proxy_pass              http://gerrit:8080;
			        proxy_set_header        X-Forwarded-For $remote_addr;
			        proxy_set_header        Host $host;
			    }
			}
		EOF
	
	e. 自签公私钥证书的生成
		openssl req -x509 -days 3650 -subj "/CN=9.186.89.219/" -nodes -newkey rsa:4096 -sha256 -keyout gerrit.key -out gerrit.crt


总结:
	安装过程中可能遇到的问题:
		1. Missing project All-Projects
		解决方法:
			进入msyql容器,先删除reviewdb数据库,然后重新创建reviewdb数据库,最后重启启动gerrit容器即可

		2. 由于采用的认证方式是OPEID,可能遇到第一个账户登录后,没有管理员权限(gerrit默认第一个登录的用户为管理员账户)
		解决方法:
			a. 删除reviewdb,然后重新创建;
			b. 删除gerrit启动时生成的所有文件,即/gerrit_volume:/var/gerrit/review_site中的所有文件

		3. 使用 ssh -p 29418 docker_lab@localhost gerrit gsql, 报错:fatal: docker_lab does not have "Access Database" capability.
		解决方法:
			http://jingyan.baidu.com/article/046a7b3ea8122ef9c27fa919.html

为了方便管理,可以使用docker-compose来管理多个容器:
1. docker-compose.yml配置文件如下:
	a. mkdir gerrit-deploy && cd gerrit-deploy
	cat > docker-compose.yml <<EOF
		nginx:
	    p_w_picpath: nginx_ssl_gerrit
	    restart: always
	    links: 
	        - gerrit2:gerrit
	    ports:
	        - 443:443

		gerrit2:
		    p_w_picpath: openfrontier/gerrit
		    restart: always
		    links:
		        - mysql:db
		    ports:
		        - 8080:8080
		        - 29418:29418
		    volumes:
		        - /gerrit_volume:/var/gerrit/review_site
		    environment:
		        - DATABASE_TYPE=mysql
		        - DB_ENV_MYSQL_DB=reviewdb
		        - WEBURL=https://9.186.89.219
		        - HTTPD_LISTENURL=proxy-https://*:8080/

		mysql:
		    p_w_picpath: mysql
		    restart: always
		    volumes:
		        - /gerrit_mysql_data:/var/lib/mysql
		    environment:
		        - MYSQL_ROOT_PASSWORD=123qwezxc
		        - MYSQL_DATABASE=reviewdb
		        - MYSQL_USER=gerrit2
		        - MYSQL_PASSWORD=gerrit
	EOF

2. 启动容器:
	sudo docker-compose up -d 

3. 查看是否启动:
	sudo docker-compose ps