CentOS7使用Gogs 搭建个人git仓库和项目自动部署

mysql 中创建 gogs 数据库 和gogs用户

连接本地数据库,建立gogs数据库,并把权限赋予gogs用户

[root@localhost ~]# mysql -uroot -p

Enter password:

mysql> CREATE DATABASE gogs CHARACTER SET utf8 COLLATE utf8_bin;

mysql> GRANT ALL ON gogs.* TO 'gogs'@'localhost' IDENTIFIED BY 'YourPassword';

mysql> FLUSH PRIVILEGES;

mysql> exit;

[root@localhost ~]# useradd git

[root@localhost ~]# passwd git


下载Gogs并解压

解压之后会多出来一个 gogs 目录

[root@localhost ~]# cd /usr/local/src

[root@localhost src]# wget https://dl.gogs.io/0.11.4/linux_amd64.zip

[root@localhost src]# unzip linux_amd64.zip

配置与运行Gogs

编辑配置文件

[root@localhost src]# vim /usr/local/src/gogs/scripts/init/debian/gogs

PATH=/sbin:/usr/sbin:/bin:/usr/bin

DESC="Gogs"

NAME=gogs

SERVICEVERBOSE=yes

PIDFILE=/var/run/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

WORKINGDIR=/usr/local/src/gogs  #仓库 自行更改

DAEMON=$WORKINGDIR/$NAME

DAEMON_ARGS="web"

USER=git

#如果运行gogs不是用的这个用户,修改对应用户

#1.如果是创建的git用户 则目录修改为/usr/local/src/gogs.对应的USER修改为git

#2.如果是在root用户下安装在/usr/local/gogs/下 则对应的目录为:/usr/local/gogs/gogs.对应的USER修改为root

我们可以启动 gogs 服务器啦!它的启动十分简单,在 gogs 目录下运行如下命令即可:

[root@localhost src]# ./gogs/gogs web

看到有日志信息刷出,说明 gogs 服务器启动成功!

gogs 服务器默认监听 3000 端口,我们在浏览器中输入http://远程主机IP:3000或者http://域名:3000便可以打开 gogs 的 web 界面。

后台运行 gogs

使用 nohup 可以后台运行 gogs ,这样即使关掉 ssh 连接也不会影响 gogs 的运行,运行如下命令:

[root@localhost src]# nohup ./gogs/gogs web > /dev/null 2>&1 &

[1] 2893

nginx 反向代理至二级域名

浏览器中输入http://远程主机IP:3000或者http://域名:3000便可以打开 gogs页面,这样url很丑,我们利用nginx的反向代理实现美化url,设立二级域名 gogs,访问http://gogs.summer.com便能跳转到 gogs web 页面。

配置nginx的反向代理,在配置conf文件下建立conf.d,用来存放各配置,nginx.conf需要重写下

[root@localhost src]# mkdir /usr/local/nginx/conf/conf.d

[root@localhost src]# vim /usr/local/nginx/conf/nginx.conf

下面是nginx.conf配置, ‘ include /usr/local/nginx/conf/conf.d/*.conf ’这句将加载conf.d下的多server配置

#user nginx;

worker_processes  1;

error_log  /var/log/nginx/error.log warn;

#pid        /var/run/nginx.pid;

events {

    worker_connections  1024;

}

http {

    include      mime.types;

    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

                      '$status $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"'

                      '\t "$request_body"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;

    #tcp_nopush    on;

    keepalive_timeout  65;

    #gzip  on;

    include /usr/local/nginx/conf/conf.d/*.conf;

}

按wq退出,新建gogs.conf进行编辑

[root@localhost src]# vim /usr/local/nginx/conf/conf.d/gogs.conf

#输入以下信息

upstream gogs {

    server 127.0.0.1:3000;

}

server {

    listen      80;

    server_name  gogs.summer.com;

  # root /home/php/test;

    charset utf-8;

    access_log  /var/log/nginx/gogs.access.log  main;

    error_log /var/log/nginx/gogs.error.log  error;

    location / {

        try_files /_not_exists_ @backend;

    }

    location @backend {

                proxy_pass http://gogs;

                proxy_set_header X-Real-IP $remote_addr;

                proxy_set_header Host $host;

                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

                proxy_http_version 1.1;

                proxy_read_timeout  360000s;

                proxy_set_header Upgrade $http_upgrade;

                proxy_set_header Connection "upgrade";

        }

}

然后重启nginx,添加hosts文件指向远程主机IP   gogs.summer.com,访问gogs.summer.com就可以见到


建议仓库根目录位置与安装gogs位置一致(我的位置是 /usr/local/src/gogs/gogs-repositories)

域名、应用 URL改成相应的

如果 报运行系统用户非当前用户:git -> root 执行

[root@s132-148-242-150 src]# su git -c "/usr/local/src/gogs/gogs web  2>&1 &"

使用git账号启动gogs。

配置了ssh后,gogs无法启动,错误信息是:Fail to start SSH server: listen tcp 0.0.0.0:22: bind: permission denied这个错误是用于服务器使用了端口22,所以要更改服务器gogs的端口号:

[root@localhost src]# vim /usr/local/src/gogs/custom/conf/app.ini

SSH_PORT = 1111

gogs开机自启

[root@s132-148-242-150 src]# cp /usr/local/src/gogs/scripts/systemd/gogs.service /etc/systemd/system/gogs.service

[root@s132-148-242-150 src]# systemctl enable gogs

[root@s132-148-242-150 src]# systemctl start gogs

项目自动部署

访问gogs.summer.com进入用户设置,把SSH秘钥加上(怎么生成公钥和秘钥在这就不说了),就可以通过git命令上传文件啦

上传文件保存在仓库的根目录/usr/local/src/gogs/gogs-repositories/用户名/项目名.git 文件夹下。

例如:SSH :root@localhost:coen/12buy.git 这个项目地址 用户coen是管理者 12buy是项目名称 上传的文件则在/usr/local/src/gogs/gogs-repositories/coen/12buy.git 下。

项目自动部署需要用到钩子(hook)

进入仓库设置-》管理Git钩子(管理者才有权限),编辑post-receive,push成功会自动触发这个钩子,完成git仓库到站点的克隆,完成自动部署


写入下面内容(target_branch是克隆那个分支 working_tree 是站点位置)

#!/bin/bash

target_branch="master"

working_tree="/home/www/12buy"

while read oldrev newrev refname

do

    branch=$(git rev-parse --symbolic --abbrev-ref $refname)

    if [ -n "$branch" ] && [ "$target_branch" == "$branch" ]; then

      GIT_WORK_TREE=$working_tree git checkout $target_branch -f

      NOW=$(date +"%Y%m%d%H%M%S")

      git tag release_$NOW $target_branch

      echo "  /==============================="

      echo "  | DEPLOYMENT COMPLETED"

      echo "  | Target branch: $target_branch"

      echo "  | Target folder: $working_tree"

      echo "  | Tag name    : release_$NOW"

      echo "  \=============================="

fi

done



保存,服务器上位置在/usr/local/src/gogs/gogs-repositories/custom_hooks下有个post-receive文件。可以了,push一下,/home/www/12buy目录下已经有了文件

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容