前言
最近打算将一些私有仓库转移到自己服务器上, 以备不时之需, 目前免费开源的Git
仓库框架有Gitlab
和Gitea
, 考虑到资源消耗问题, 果断选择了Gitea
接下来分享我个人使用Docker
快速搭建Gitea
的过程
步骤如下
安装gitea
搜索
gitea
镜像1
docker search gitea
拉取
gitea
镜像1
docker pull gitea/gitea
创建并运行容器
1
2
3
4
5
6
7
8
9docker run -id \
--privileged=true \
--restart=always \
--name=c_gitea \
-p 10022:22 \
-p 13000:3000 \
-v /root/app/gitea:/data \
-h c_gitea \
gitea/gitea:latest参数详解:
- privileged: 是否授予容器
root
权限 - restart : docker启动是是否自动启动容器
- name: 表示容器别名
-p 10022:22
: 容器暴露了22
和3000
端口-v /root/app/gitea:/data
: 容器的data
目录挂载到/root/app/gitea
- privileged: 是否授予容器
浏览器访问
gitea
配置页面1
http://服务器ip:13000
这里主要需要配置数据库以及域名 其他的保持默认即可
首先数据库的话 这里有多种数据库可选, 考虑到资源消耗和移植方便 我选择
sqlite3
那么在进行配置之前 我们需要先安装
sqlite3
来创建数据库文件依然使用
docker
快速安装:
安装sqlite3
拉取镜像
1
docker pull nouchka/sqlite3
创建并运行容器
1
2
3
4
5
6
7docker run -id \
--restart=always \
--name=c_sqlite \
-p 1433:1433 \
-v /root/app/gitea/sqlite:/root/db \
-h c_sqlite \
nouchka/sqlite3:latest进入容器
1
docker exec -it c_sqlite bash
进入容器后运行指令创建数据库
1
sqlite3 数据库名.db
运行创建数据库指令时
sqlite3
默认会在当前目录生成db
文件, 所以执行前要确保当前目录为挂载目录,也就是/root/db
执行`sqlite3`进入`SQL`状态, 此时我们输入`.database`可以查看并刷新已经创建的数据库文件 这一步关键 否则宿主挂载目录文件不更新
退出数据库
1
.quit
此时我们在宿主的`/root/app/gitea/sqlite`可以查看到刚刚生成的数据库
数据库关联
我们需要明白的是, 在docker
中gitea
容器是个独立的系统, 在配置页面中填写的路径皆为gitea
容器内部路径, 而非宿主路径
由于gitea
容器的/data
目录映射到了宿主的/root/app/gitea
目录, 因此 我们需要将生成的sqlite
数据库文件放置在宿主的/root/app/gitea
目录下, 这样gitea
容器才能访问到数据库文件
这一点 我在sqlite
容器创建时已经考虑到了, 所以将sqlite
挂载目录设为了/root/app/gitea/sqlite
, 从而免去了数据库文件的迁移
此时 我只需在配置页面数据库路径一项填入/data/sqlite/gitea.db
即可:
如果后期需要修改配置可以进入
/root/app/gitea/gitea/conf/app.ini
进行修改, 每次修改后记得需要重启gitea
容器才能生效
配置完毕后 点击安装
紧接着自动跳转到登录页面, 此时我们注册一个新账号然后登录:
至此 我们的私有仓库就搭建完毕了, 如果需要节省资源, 可以将sqlite
容器停止, 它的存在只是为了创建数据库 以及必要的时候进行数据自定义处理, 暂时不需要它保持运行状态
外部仓库同步
gitea
支持从外部仓库导入 支持以下常见厂商:
如果从github
导入 首先需要去github
中申请一个access token
当然我们也可以直接使用clone
的形式进行迁移 无需token
:
后面的就不多介绍了
自定义域名
正常情况下我们可以通过地址http://服务器公网IP:13000
来访问服务器, 如果需要配置自定义域名, 那么需要修改一些配置:
首先域名端, 也就是域名解析需要指向服务器IP, 这点不做过多介绍 大家都明白
另外就是服务端
由于我使用了Nginx
进行反向代理, 并且给docker
配置了桥接网络, 所以在nginx.conf
文件中配置如下:
1 | http{ |
通过桥接网络 我们可以直接使用容器别名实现容器间的相互通信, 减少端口暴露的风险
gitea目录结构
数据库主要用于存放用户和仓库相关的配置数据
而我们的代码主要是放在了本地磁盘的/root/app/gitea/git
目录下:
1 | . |
本文为作者原创转载时请注明出处 谢谢