架设私人git托管服务器

记录git服务搭建以及配置过程,顺便加上了node + mongodb + react 部署过程。由于之前对linux不熟,只能一步步参考网络上教程一步步来,持续更新中。。
git
2021-01-24 01:01 2021-03-13 12:00

一、服务器端相关工具安装

1. 安装git

  • 1.1 下载安装(git不同版本)

    # 下载git源码
    wget -O /tmp/git-2.9.5.tar.gz https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
    # 解压 -z:有zip属性的 -x:解压 -v:显示所有过程 -f:必须参数,后面接文件名
    tar -zxvf /tmp/git-2.9.5.tar.gz -C /tmp/
    # 安装依赖
    yum install -y zlib-devel perl-ExtUtils-MakeMaker
    # 进入解压后目录,检验相关依赖,设置安装路径
    cd /tmp/git-2.9.5
    ./configure --prefix=/usr/local/git
    # 编译安装
    make && make install
    # 配置全局路径
    # echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/profile
    # source /etc/profile
    # 测试是否安装成功
    git --version
    注:上面# 配置全局路径这一步,在后续通过nvm安装nodejs出现冲突,会覆盖/etc/profile.d/*.sh导出的PATH,导致nvm下node路径无效。
    建议改为新建/etc/profile.d/git.sh文件,内容为export PATH=$PATH:/usr/local/git/bin
  • 1.2 git基础配置

    git config --global user.name test
    git config --global user.email test@163.com

2. 安装nvm

  • 2.1 下载($HOME改为目标目录,如/usr/local/nvm),参考官方教程-github
    export NVM_DIR="$HOME/.nvm" && (
    git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR"
    cd "$NVM_DIR"
    git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1)`
    ) && \. "$NVM_DIR/nvm.sh"
  • 2.2 配置环境变量
    touch /etc/profile.d/nvm.sh
    // 里面输入以下内容,保存
    export NVM_DIR="$HOME/.nvm"
    [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
  • 2.3 测试
    nvm -v

3. nvm安装nodejs

  • 3.1 如果当前用户没有权限,优先授权(sudo chown -R currentUser /usr/local/nvm
    nvm install node
    # 查看node版本
    node -v
    # use the installed version
    # nvm use node
  • 3.2 配置shell使用node(不进行这一步下次进入就无法执行node命令,应该是PATH没配置)(这一步骤不再需要执行,出现问题是由于上面一步设置错误导致)
    vim /etc/profile.d/nvm.sh
    在后面加入以下命令,保存
    # 用户进来使用的node版本,这里node可换为任意已安装版本,如15.7.0
    nvm use node
  • 3.3 npm配置以及安装一些全局工具
    npm install pm2 webpack -g
    这里全局默认安装位置为/usr/local/nvm/versions/node/v15.7.0/lib,也可以修改默认配置
    # default
    npm config get prefix # /usr/local/nvm/versions/node/v15.7.0
    npm config get cache  # /root/.npm
    npm config get registry # https://registry.npmjs.org/
    npm config set prefix otherPath/node_global
    npm config set cache otherPath/node_cache
    npm config set registry https://registry.npm.taobao.org

4. 安装mongodb

官网,参考Linux Centos 7安装MongoDB(简单!详细!)

由于官方文档网址打不开,这里保存了一份纯HTML版简略教程-Install MongoDB Community Edition on Red Hat or CentOS,可用于参考(通过curl -o ~/t.html https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/获取,存于2021年1月28日)
简略操作如下:

  • 4.1 新建.repo文件

    sudo vim /etc/yum.repos.d/mongodb-org-4.4.repo

    存入以下内容:

    [mongodb-org-4.4]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
  • 4.2 安装

    sudo yum install mongodb-org
    # test
    mongo --version
  • 4.3 启动

    sudo systemctl start mongod
    # 以下命令可以验证服务是否已启用
    systemctl -l | grep mongod
    netstat -natp | grep 27017 # 端口是否已开启
    ps -aux | grep mongod # 查看数据库的进程是否存在
    # 加入开机启动
    sudo chkconfig mongod on
  • 4.4 配置远程访问
    修改配置文件mongodb.conf

    sudo vim /etc/mongod.conf
    # 1. 将bindIp:127.0.0.1 改为0.0.0.0
    # 2. 保存后重启服务
    sudo service mongod restart
    # 3. 开放对外端口
    # (本人配置了腾讯云服务器安全组,添加了27017端口开放,未做下面这条配置,没发现问题)
    # iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 27017 -j ACCEPT
    # 4. 创建数据库用户,首先执行mongo进入repl(交互界面)
    use admin
    db.createUser({ user:"root", pwd:"123456", roles:["root"] })
    # 
    use test
    db.createUser({ user:"admin", pwd:"123456", roles:["readWrite", "dbAdmin"] })
    # 5. exit退出交互界面后,启用身份验证
    # 修改/etc/mongod.conf 里面security:那行
    # security:
    #   authorization: "enabled" # disable or enabled
    # 保存退出并重启服务
    sudo service mongod restart

    本地idea访问成功

5. 安装nginx

  • 5.1 安装依赖以及下载源码(安装包各种版本

    # 安装依赖(-y, --assumeyes       answer yes for all questions)
    yum install -y gcc pcre pcre-devel openssl openssl-devel gd gd-devel
    # 下载 -O:下载文件到对应目录,并且修改文件名称 (注意是大写O)
    wget -O /tmp/nginx-1.19.6.tar.gz http://nginx.org/download/nginx-1.19.6.tar.gz
    # 解压
    tar -zxvf /tmp/nginx-1.19.6.tar.gz -C /tmp/
    # 校验依赖,注意使用--prefix参数指定安装路径
    cd /tmp/nginx-1.19.6
    ./configure --prefix=/usr/local/nginx
    # 编译安装
    # 这一步可能报错 mkdir: cannot create directory ‘/usr/local/nginx’: Permission denied
    # 提前创建文件夹/usr/local/nginx,
    # 并设置当前用户具有权限(sudo mkdir /usr/local/nginx && sudo chown -R username:usergroup /usr/local/nginx),
    # 再用下面命令就行
    make && make install
  • 5.2 nginx配置

    配置PATH路径:

    # 新建文件/etc/profile.d/nginx.sh
    sudo touch /etc/profile.d/nginx.sh
    # 输入配置
    # 有管理员权限的用:echo "export PATH=$PATH:/usr/local/nginx/sbin" >> /etc/profile.d/nginx.sh
    sudo vim /etc/profile.d/nginx.sh
    # 然后手动输入export PATH=$PATH:/usr/local/nginx/sbin,保存退出
    # 更新配置
    source /etc/profile.d/nginx.sh

    配置端口:
    修改nginx默认端口vim /usr/local/nginx/conf/nginx.conf
    修改http -> server -> listen 80; 将80改为8080(或你自己想开发的端口)
    #pid logs/nginx.pid这行前面的#号删掉
    保存然后启动nginx

    nginx
    # 停止服务nginx -s stop

    如果用的云服务器,记得在安全组里面放开端口

    然后就可以访问了(http://serevice-ip:8080/)

    配置域名:
    修改/usr/local/nginx/conf/nginx.conf文件中server_name->server_name localhost test.com(注意:配置访问域名,域名可以有多个,用空格隔开)
    然后访问http://www.test.com:8080基本ok(注意先配置你的域名解析到服务器ip

二、在服务器上搭建 Git

1. 放置裸仓库到服务器

前提是能通过SSH连接到服务器(这个比较简单,就是把本地公钥复制到服务器 ~/.ssh/authorized_keys文件中就行,然后本地shell连接:ssh username@服务器ip,一般端口默认22不用设置)

  • 1.1 新建/srv/git目录,并设置权限当前登录用户权限:
    # 新建目录
    sudo mkdir /srv/git
    # 配置目录owner group
    chown user:userGroup /srv/git
  • 1.2 放置裸仓库
    cd /srv/git
    # 生成新仓库,my-project-项目名
    git init --bare my-project.git
    如果是需要根据现有git项目生成:
    # 提取.git目录,先进到项目根目录的上层目录
    # 如d:/projects/my-mroject,在d:/projects目录执行下面这句,完了会生成d:/projects/my-project.git目录,要的就是这个
    # 跟 cp -Rf my_project/.git my_project.git 效果是一样的
    git clone --bare my-project my-project.git
    # 将本地my-project.git上传至服务器/srv/git目录下 (git.example.com - 服务器ip地址)
    scp -r my-project.git user@git.example.com:/srv/git
  • 1.3 然后本地就可以克隆你的仓库了
    git clone user@git.example.com:/srv/git/my-project.git

2. 配置post-receive(hook)进行持续集成

post-receive 挂钩在整个过程完结以后运行,可以用来更新其他系统服务或者通知用户git文档

  • 首先进入/srv/git/blog.git/hooks,创建post-receive文件:touch ./post-receive
  • 修改post-receive文件内容为:
    #!bin/bash
    echo "post-receive start"
    

x. 服务器端ssh配置

三、其他