ubuntu20使用docker-compose搭建gitea

官方文档地址

https://docs.gitea.io/zh-cn/install-with-docker/

注意系统要使用ubuntu20

因为后续使用ssh,需要通过authorized_keys把宿主机的git的ssh请求转发给宿主机的2222端口从而转发给容器,
本人测试使用centos7则无法将宿主机的git用户ssh使用authorized_keys转发到容器(也可能是我姿势不对)
格式类似如下

command="/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDUWcDg1ObhpMDdsPk4xZH6HUt8LrluIvvt1+JIOBaxxbWgNWM+zAceIZvLbYDswubFhsusuj6k+TjzthlB9dDOxql6zvadfasdfasdfasdfasdfQOnTXkoRenOGi5eBJPapaxmEcNyDL1aiJ3UGq+FFBIBEoXqnV1ojqq/VKskvojqWsl7QpIqNAll71GTpF3i5QKZug5xsP5ygSbxzo7rCKKP6lBi/adfasdfasdfep9ykFRlfeDfMEL4x4XoqmwPCGhSKYITOViEYiiruDRo+U5+swMS5mqBiFl+5WmySJzfd0Bs1eaYeFEENTp/OefJvea+EzjGHUAxI6o0UL5XjIQZDkew5TGhYSDpALZA8x3OvTsZvNqjU31V5MiMQi3YU8LsarOk487cGxvRPVJSlsI0Q4KL3n7XERmVAFYx23bmbYik4QydhbHfPfu+XQ6+rTCQeIOu9aU3MVvl2cPwE1/QQKy2h/b6kxKcTlPJUWbUz0IK/hT/STmBG1ZLU7PPb13O2tTjfNuYKWilcViEc2AtSkQ== valsong@foo.com

安装docker和docker-compose

sudo apt install docker.io -y
sudo apt install docker-compose -y

先创建git用户

adduser git

创建完毕后查看git用户的id

id git
uid=1001(git) gid=1001(git) groups=1001(git)

得到uid是1001和gid是1001
下面的docker-compose.yml记得修改USER_UID和USER_GID

创建并进入文件夹/home/git/gitea

mkdir -p /home/git/gitea
cd /home/git/gitea

创建my.cnf 如果是arm平台无法安装arm版本的mysql可以考虑使用mariadb代替

mkdir -p /home/git/gitea/mysql/config
vim /home/git/gitea/mysql/config/my.cnf

mysql my.cnf

[mysqld]
## 设置server_id,一般设置为IP,注意要唯一,server-id必须为数字,不要搞骚操作
server-id=1
## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
binlog-ignore-db=mysql  
## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
log-bin=mysql-bin  
## 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M  
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=row   

## row模式的binlog记录sql
# binlog_rows_query_log_events =1

## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062

## 设置事务隔离级别为RC
transaction-isolation=READ-COMMITTED

#default-time_zone = '+8:00'

## 开启gtid
gtid-mode=on
enforce-gtid-consistency=on

# 支持时间0000-00-00 00:00:00.000000
# sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

mariadb my.cnf

# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/

#
# This group is read both by the client and the server
# use it for options that affect everything
#
[client-server]
# Port or socket location where to connect
# port = 3306
socket = /run/mysqld/mysqld.sock

# Import all .cnf files from configuration directory
[mariadbd]
skip-host-cache
skip-name-resolve

!includedir /etc/mysql/mariadb.conf.d/
!includedir /etc/mysql/conf.d/

## 设置事务隔离级别为RC
transaction-isolation=READ-COMMITTED

## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=row   

## row模式的binlog记录sql
# binlog_rows_query_log_events =1

## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=7  

创建docker-compose.yml

vim docker-compose.yml

mysql版本

version: "3"

networks:
  gitea:
    external: false

services:
  gitea:
    image: gitea/gitea:1.17
    container_name: gitea
    environment:
      - USER_UID=1001
      - USER_GID=1001
    restart: always
    privileged: true
    networks:
      - gitea
    volumes:
      - /home/git/.ssh/:/data/git/.ssh
      - /home/git/gitea/data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:22"
    depends_on:
      - mysql  

  mysql:
    platform: linux/x86_64
    image: mysql:5.7
    container_name: mysql5.7
    #privileged: true
    environment:
      - MYSQL_ROOT_PASSWORD=123456
      - "MYSQL_DATABASE=gitea"
      - TZ=Asia/Shanghai
    restart: always  
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /home/git/gitea/mysql/config/my.cnf:/etc/mysql/my.cnf
      - /home/git/gitea/mysql/lib/mysql:/var/lib/mysql/
      - /home/git/gitea/mysql/lib/mysql-files:/var/lib/mysql-files/
    ports:
      - 3306:3306

mariadb版本

version: "3"

networks:
  gitea:
    external: false

services:
  gitea:
    image: gitea/gitea:1.17
    container_name: gitea
    environment:
      - USER_UID=1001
      - USER_GID=1001
    restart: always
    privileged: true
    networks:
      - gitea
    volumes:
      - /home/git/.ssh/:/data/git/.ssh
      - /home/git/gitea/data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:22"
    depends_on:
      - mariadb  

  mariadb:
    image: mariadb:10.9
    container_name: mariadb10.9
    #privileged: true
    environment:
      - MARIADB_ROOT_PASSWORD=123456
      - MARIADB_DATABASE=gitea
      - TZ=Asia/Shanghai
    restart: always  
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /home/git/gitea/mysql/config/my.cnf:/etc/mysql/my.cnf
      - /home/git/gitea/mysql/lib/mysql:/var/lib/mysql/
      - /home/git/gitea/mysql/lib/mysql-files:/var/lib/mysql-files/
    ports:
      - 3306:3306

切换到git用户将sshkey添加到/home/git/.ssh/authorized_keys

su git
ssh-keygen -t ed25519 -b 4096 -C "Gitea Host Key"
echo "$(cat /home/git/.ssh/id_ed25519.pub)" >> /home/git/.ssh/authorized_keys
eval "$(ssh-agent -s)"

切换到root用户创建/usr/local/bin/gitea

su root
vim /usr/local/bin/gitea  

注意这里和官网教程不一样,这个地方是对旧的rsa算法进行支持,具体issue见
https://github.com/go-gitea/gitea/issues/17798

ssh -p 2222 -o PubkeyAcceptedAlgorithms=+ssh-rsa git@127.0.0.1 "SSH_ORIGINAL_COMMAND=\"$SSH_ORIGINAL_COMMAND\" $0 $@"

授权给git用户

chown -R git /usr/local/bin/gitea
su git
chmod 700 /usr/local/bin/gitea

启动容器

docker-compose up -d

管理台页面是宿主机的3000端口

有啥不明白的接下来参考官网教程吧

https://docs.gitea.io/zh-cn/install-with-docker/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351