在2016年-2019年,SkywenCode技术团队使用码云Gitee 作为线上代码库管理,基于敏捷开发和持续构建的思路,我们整体基础建设以Drone / Jenkins + Docker 的方式构建和部署整个基础建设体系。

在接下来的时间里,SkywenCode技术团队基础建设系列会基于每一步的进展和采坑推出相应的教程,用于团队的经验总结回顾,以及分享和开放给有需要的团队或个人参考。

本篇主要介绍01 Gitea Docker 安装部署。

01

安装教程

Docker 安装部署

这里推荐用Daocloud 平台做镜像加速,或者其他加速平台,Docker 安装不做教程说明,默认以docker和docker composer安装好开始下一步。

Gitea Docker Compose 配置文件注释和说明

从gitea官方文档,docker安装途径copy而来。

version: "2"

networks: 
  gitea://自定义网络 基于bridge驱动    
    external: false //禁止使用外部同名网络
services:  
  server:
    image: 
      gitea/gitea:latest    
    environment:     
      - USER_UID=1000     
      - USER_GID=1000 //设置容器内部运行用户pid    
      - DB_TYPE=mysql    
      - DB_HOST=db:3306  //这里的服务指下面创建的db容器  
      - DB_NAME=gitea //相关的数据库名和密码无需修改,把这个db作为giteea专属数据库   
      - DB_USER=gitea    
      - DB_PASSWD=gitea    
    restart: always //重启策略   
    networks:    
      - gitea      
    volumes:      
      - ./gitea:/data //映射相关文件到容器的/data中
      - /etc/timezone:/etc/timezone:ro    
      - /etc/localtime:/etc/localtime:ro   
    ports:    
      - "3000:3000" //映射3000端口 用于web访问    
      - "222:22" //映射外部222端口到容器22端口,用于ssh连接   
    depends_on:     
      - db //依赖db服务  

db:    
  image: mysql:5.7     
  restart: always    
  environment:      
      - MYSQL_ROOT_PASSWORD=gitea     
      - MYSQL_USER=gitea     
      - MYSQL_PASSWORD=gitea    
      - MYSQL_DATABASE=gitea    
  networks:     
      - gitea   
  volumes:    
      - ./mysql:/var/lib/mysql

Docker Gitea部署步骤

1、在合适的位置创建文件夹,将其作为网站部署【本教程安装测试于windows环境下】

具体,如下截图:

当前部署的根目录为gitea.hiwilliam.cn,目录下仅有docker-compose.yml,内容为上面的compose文件配置。

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台

2、

$ docker-compose up -d  //-d: 不显示部署过程的信息 done:说明部署完成
$ docker-compose ps //检查服务是否启动 up说明运行中  如果非up状态说明服务有问题,
//使用docker-compose up 命令输出过程信息来查看启动过程中出现的问题

dockers会自动根据compose 文件拉去所需要的镜像,例如本次教程的gitea本体镜像和依赖的mysql镜像。

【如果要停止拉取,快捷键ctrl+c】

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台

部署完成:

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台

docker-compose ps  检查服务运行状态:

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台

docker-compose stop [container_name] //停止全部或者指定的服务
docker-compose rm [container_name]  //删除全部或指定服务 *服务exit状态下

3、确认服务处于up状态下,浏览器访问 host:3000,或者配置好的域名,出现如下页面,说明gitea本地部署已完成,服务器部署过程相同。

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台

02

相关配置

Gitea 初始配置

1、点击登录、注册或者探索皆可,跳转到初始配置表单页面。

配置表单的数据库配置因为我们在compose 文件中都已设置好初始变量,所以这里不用做任何更改。尤其数据库的类型和主机因为docker 启动容器服务绑定的,改为其他值反而会出错。

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台

2、下面的一般设置主要是关于gitea仓库的站点相关信息。

a. 站点名称根据自己喜好设置,而仓库根目录,LFS根目录,以用户名运行请保持默认不要改动。原因和数据库类型一样在服务部署时就已绑定。

b. ssh服务域名如果本地构建就保持默认,如果线上服务器则改为服务器公网ip地址,ssh服务端口请和compose文件中保持一致,

c. http服务端口也和compose文件保持一致。基本url如果本地默认或者设置好并绑定的虚拟域名,线上填写解析过的一个域名。

d. 总结:所有端口和目录相关配置请保持默认。

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台
**

Gitea 可选配置

**

电子邮箱配置

主要是设置用gitea仓库内容邮箱发送的基础配置,如若不用,可忽略。

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台

服务设置

主要是针对gitea仓库站点的相关设置,如访问限制等。

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台

管理员账号设置

为gitea仓库添加一个管理,不设置的话则默认第一个注册的账号为管理员账号。

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台

至此,gitea相关配置完成,点击立即安装,即可完成安装。

Gitea 更多配置说明

除了安装过程的表单设置,我们还可以修改gitea的配置文件来修改gitea服务。具体地址:

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台

gitea根目录/gitea/gitea/conf/app.ini

1、进入上面的路径的conf文件,复制app.ini文件,做好备份,万一玩崩了还能回来。至于可配置依旧是那个原则,凡是【目录和端口】的配置修改都要谨慎,尽量不要修改!这里贴出部分常用配置:

[server]
APP_DATA_PATH    = /data/gitea
SSH_DOMAIN       = localhost   ssh连接ip地址
HTTP_PORT        = 3000 
ROOT_URL         = http://localhost:3000/   仓库代码基础url
DISABLE_SSH      = false   禁止ssh访问,默认false
SSH_PORT         = 22
SSH_LISTEN_PORT  = 22
LFS_START_SERVER = true
LFS_CONTENT_PATH = /data/git/lfs
DOMAIN           = localhost  
LFS_JWT_SECRET   = 4DmrnAN3fY7mR_HaLtm6x7WIXP3JWvAOs2rZFWEel7U
OFFLINE_MODE     = false  

# 注意数据库设置前,注意数据的备份 
[database]  
PATH     = /data/gitea/gitea.db
DB_TYPE  = mysql
# db指compose文件中db服务即mysql
HOST     = db:3306
NAME     = gitea
USER     = gitea
PASSWD   = gitea
SSL_MODE = disable
CHARSET  = utf8

2、执行docker-compose restart 重启服务
这里注意:有时dockerc-compose构建目录有环境变量【.env文件】,所以最好是在项目的根目录执行docker-compose命令 ,例如本次部署gitea.hiwilliam.cn为根目录。当然本次过程没有使用变量所以就无所谓了,只要不跳出根目录。

03

教程总结

gitea的docker部署方式非常便捷,官方文档说明也非常详细,选择很多样,只要对docker的有基本的认知和了解都可以轻易上手。如果在部署途中失败或者其他问题,可以通过以下命令来解决。

docker-compose ps  //查看服务运行状态
docker-compose up  //部署服务并输出过程信息
docker-compose logs container_name // 打印指定容器运行日志

当然,仅仅简单如此部署是不适合生产的。尤其数据的存放,不仅仅是gitea容器映射的数据卷,还有gitea服务依赖的db服务-MySQL,为此可以考虑使用定时备份gitea映射的数据卷到oss,以及将本地依赖的db服务改为RDS。

除此之外如何将代码从旧的git仓库迁移到新部署的gitea仓库也是需要我们考虑实现的。

作者 / HiWilliam
排版 / 大野鱼头

2019.12.16 - 安装案例丨01 Gitea Docker 安装部署 - 【SkywenCode】技术团队基础建设2020系列-天问信息博客平台