寫在前邊php
爲何要打造一個屬於本身的代碼託管平臺呢?這個事情還要從我剛開始工做提及。mysql
我是在大三下學期的時候,大概是2017年三月份,以我的身份作過一些小項目,接收不了學校的課程無趣無心義,最後實在耐不住呆在學校的無聊和寂寞(是的,那個時候仍是條單身狗),就每天逃課出去找了個工做,算是第一份工做吧。nginx
想一想過得好快,如今已是2019年的2月了(傳說中的兩年工做/划水經驗?)期間換了兩家公司,工做方式也改變了許多。git
我本身的使用習慣也發生了很大變化。想我在寫下基於Nginx的高可用大併發微信電子商城系統設計與實現——畢業設計的時候,仍是分別在兩臺服務器寫了 php
腳本,經過配置 svn
的鉤子來請求兩個 php
腳原本同時拉取代碼的。github
在熟悉了 git workflow
後,本身也慢慢習慣使用 git
來管理本身的代碼。But,我相信你也和我同樣在不少時候,並不但願本身的倉庫是公開的(在開始決定使用 gitea
的時候 github
私倉還難免費),畢竟有些東西是敏感的。web
讓咱們來比較一下各類代碼託管平臺sql
git init --bare test.git
),一開始我確實這麼幹的,可是講道理太不方便管理了一開始我確實是自建Git服務器,太不方便了,後來瞭解了 Gogs
,開始使用 Gogs
的,再後來就是了解到 Gitea
這個 Gogs
的Fork版本,同樣的特性,功能更加豐富,因而我選擇了升級到 Gitea
docker
gitea
說幹就幹,開始搞事情吧,接下來都是乾貨vim
準備爲
Gitea
使用的域名爲gittest.yiranzai.top
bash
若是要將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:
複製代碼
$ 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目錄
複製代碼
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;
}
}
複製代碼
nginx
使配置生效gittest.yiranzai.top
完成初始化配置長圖顯示配置過程
$ vim /var/lib/gitea/gitea/app.ini
...
# 這裏我只放出有關Cache的配置
[cache]
ADAPTER = memcache
HOST = test_memcache:11211
...
複製代碼
啥?不會建立倉庫?勸退勸退
友情提示,右上角的
+
能夠遷移別的倉庫到gitea
每次到告終束,都莫名其妙的有一些成就感,大概是由於折騰出來一個新東西。
總之,終於搞好了,先慢慢隨便點點,熟悉熟悉這個簡單又強大的代碼託管平臺吧。
Happy Coding!