[小团队自动化] 基于Gitea打造一个属于你本身的代码托管平台

基于Gitea打造一个属于你本身的代码托管平台


写在前边php

为何要打造一个属于本身的代码托管平台呢?这个事情还要从我刚开始工做提及。mysql

我是在大三下学期的时候,大概是2017年三月份,以我的身份作过一些小项目,接收不了学校的课程无趣无心义,最后实在耐不住呆在学校的无聊和寂寞(是的,那个时候仍是条单身狗),就每天逃课出去找了个工做,算是第一份工做吧。nginx

想一想过得好快,如今已是2019年的2月了(传说中的两年工做/划水经验?)期间换了两家公司,工做方式也改变了许多。git

  • 第一家公司时期,sftp一把梭
  • 第二家公司时期,svn 版本控制,写了钩子,可以提交代码之后自动拉取
  • 第三家公司(如今),GitLab,由团队的leader来把控代码的合并

我本身的使用习惯也发生了很大变化。想我在写下基于Nginx的高可用大并发微信电子商城系统设计与实现——毕业设计的时候,仍是分别在两台服务器写了 php 脚本,经过配置 svn 的钩子来请求两个 php 脚原本同时拉取代码的。github

在熟悉了 git workflow 后,本身也慢慢习惯使用 git 来管理本身的代码。But,我相信你也和我同样在不少时候,并不但愿本身的仓库是公开的(在开始决定使用 gitea 的时候 github 私仓还难免费),毕竟有些东西是敏感的。web

让咱们来比较一下各类代码托管平台sql

  • 自建Git服务器(git init --bare test.git),一开始我确实这么干的,可是讲道理太不方便管理了
  • GitLab,资源占用比较高,放弃。
  • Gitee,码云,对于国内团队无疑是最好的,可是国际化支持不太好。
  • GitHub,花钱,我是穷鬼,跳过。
  • Gogs,资源占用低,配置方便,支持迁移,一开始用的这个,我的维护的,更新有点慢。
  • Gitea,Gogs的Fork版本,团队维护,功能更加丰富,支持代码审计,更加活跃和激进。

一开始我确实是自建Git服务器,太不方便了,后来了解了 Gogs ,开始使用 Gogs 的,再后来就是了解到 Gitea 这个 Gogs 的Fork版本,同样的特性,功能更加丰富,因而我选择了升级到 Giteadocker


部署本身的 gitea

说干就干,开始搞事情吧,接下来都是干货vim

准备工做

准备为 Gitea 使用的域名为 gittest.yiranzai.topbash

若是要将git和其它数据持久化,你须要建立一个目录来做为数据存储的地方

mkdir -p /var/lib/gitea
复制代码

编写 docker-compose.yml文件

还不了解docker-compose?点击这里了解学习配置docker-compose

咱们须要

  • nginx (使用 nginx 来作对外的服务代理,不要让 gitea 直接对外暴露web服务)
  • memcached(为 gitea 提供 Cache 服务)
  • mysql (存储 gitea 所须要存储的数据)
  • gitea (代码托管平台)
version: "3.7"
services:
 nginx:
 image: nginx:alpine
 container_name: test_nginx
 ports:
 - "80:80"
 restart: always
 networks:
 - giteanet
 mysql:
 image: mysql:5.7
 restart: always
 container_name: test_mysql
 environment:
 - MYSQL_ROOT_PASSWORD=root_password
 - MYSQL_DATABASE=gitea
 - MYSQL_USER=gitea
 - MYSQL_PASSWORD=gitea_password
 networks:
 - giteanet
 volumes:
 - /path/to/conf/my.cnf:/etc/mysql/my.cnf:rw
 - /path/to/data:/var/lib/mysql/:rw
 - /path/to/logs:/var/log/mysql/:rw
 memcache:
 image: memcached:alpine
 container_name: test_memcache
 restart: always
 networks:
 - giteanet
 gitea:
 image: gitea/gitea:latest
 restart: always
 container_name: test_gitea
 networks:
 - giteanet
 ports:
 - "22:22"			#git服务对外使用22端口会更加方便
 volumes:
 - /var/lib/gitea:/data:rw	#gitea的data数据应该作持久化,映射到宿主机磁盘上
networks:
 giteanet:
复制代码

运行服务并初始化

  1. 运行服务
$ docker-compose up -d
Creating test_memcache ... done
Creating test_nginx    ... done
Creating test_mysql    ... done
Creating test_gitea    ... done
$ docker-compose ps   
    Name                   Command               State                     Ports                   
---------------------------------------------------------------------------------------------------
test_gitea      /usr/bin/entrypoint /bin/s ...   Up      0.0.0.0:22->22/tcp, 0.0.0.0:3000->3000/tcp
test_memcache   docker-entrypoint.sh memcached   Up      11211/tcp                                 
test_mysql      docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp                       
test_nginx      nginx -g daemon off;             Up      0.0.0.0:80->80/tcp  
$ cd /var/lib/gitea
$ tree .
$ .
├── git              # git仓库存储位置
├── gitea
│   ├── conf
│   │   └── app.ini  # gitea配置文件
│   └── log          # gitea log目录
└── ssh              # ssh key目录
复制代码
  1. 编写 nginx 配置文件
server {
    listen       80;
    server_name gittest.yiranzai.top;
    location / {
        proxy_pass http://test_gitea:3000;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}
复制代码
  1. 重启 nginx 使配置生效
  2. 访问 gittest.yiranzai.top完成初始化配置

长图显示配置过程

  1. 编辑查看gitea的配置

Gitea完整配置请查看这里

$ vim /var/lib/gitea/gitea/app.ini
...
# 这里我只放出有关Cache的配置
[cache]
ADAPTER = memcache
HOST = test_memcache:11211
...
复制代码

建立仓库,开始起飞

啥?不会建立仓库?劝退劝退

友情提示,右上角的 + 能够迁移别的仓库到 gitea


END

每次到告终束,都莫名其妙的有一些成就感,大概是由于折腾出来一个新东西。

总之,终于搞好了,先慢慢随便点点,熟悉熟悉这个简单又强大的代码托管平台吧。

Happy Coding!

系列文章

相关文章
相关标签/搜索