gitlab社区版:是一个开源的git管理服务器。对于团队内部项目,不想往码云和github上传时,可以考虑使用这个。
docker:在现有软硬件基础之上,虚拟操作系统;通过镜像构建容器,各个容器内部有独立的操作系统,同时共享所有硬件资源。比vmware之类的虚拟机虚拟化一整个虚拟物理机要节省资源,且性能更高。
反向代理:一个服务器上可能运行多个向外提供http接口或页面的服务,而80端口只有一个,为了让实际访问时可以根据域名不同而自动映射到不同端口,所以此处要配置反向代理,以实现浏览器访问时输入的地址不用对应实际端口号,只要使用默认80即可。
拉取gitlab的docker镜像
docker pull gitlab/gitlab-ce
启动gitlab
– hostname 配置docker指定的主机名称,我这里直接使用公司域名映射一个二级域名;
– publish 配置外部端口与内部端口的映射。因为docker内部gitlab默认使用80端口开启,但是我们的服务器80端口并不能被gitlab直接占用,所以此处配置物理机器开放的81端口映射docker内的80端口映射,同理,物理机器开放的23端口映射docker内的22端口映射
– restart 重启机制,此处设置为always
– volume 存储配置。因为docker本身内部不能做持久化存储,所以需要映射到屋里机器上的位置
sudo docker run --detach \
--hostname git.xxxxxxxx.com \
--publish 81:80 --publish 23:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
调试
读取容器日志:
sudo docker logs gitlab
进入docker调试
sudo docker exec -it gitlab /bin/bash
这就使当前操作的上下文在docker内部,和通过ssh连接到远程主机的效果一样。
升级
如果要升级gitlab,那么先按以下命令停止当前实例的docker容器并将其删除,然后再按最初的步骤重新拉取并启动即可。由于启动时指定的直接是物理磁盘的路径,所以只要启动的时候数据存储位置的配置没有改动,数据就不会丢失。
sudo docker stop gitlab
sudo docker rm gitlab
配置nginx反向代理
这样配置的好处就在于,多个程序的访问地址公用80端口,根据域名做区分;下面的git.xxxxxxxx.com可以换成自己设定的域名,此配置不仅针对当前程序,这个是通用的。
server {
listen 80;
server_name git.xxxxxxxx.com
set $node_port 81;
location / {
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_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://127.0.0.1:$node_port$request_uri;
proxy_redirect off;
}
}