[小團隊自動化] 基於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!

系列文章

相關文章
相關標籤/搜索