DEMO: https://git.eallion.com/
Gitea 有多种安装方式,本文是介绍 Docker 安装 Gitea 时的一些关键信息备忘笔记。
Gitea 采用 Go 开发,对系统资源的需求不高,甚至在树莓派上都可以运行。
我个人也在配置极低的软路由上使用过一段时间。
计划自建 Gitea 时,默认您具有一定的Docker
、Nginx
、Mysql
基础。
Request:
- Docker
- Docker compose
- Nginx
- Mysql(非必需)
- 域名(非必需)
Docker 安装 Gitea
镜像名: gitea/gitea:latest
个人使用的数据库是宿主机的 Mysql,所以没有拉取db
镜像。
docker-compose.yml
内容:
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:1.14.5
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
# - DB_TYPE=mysql
# - DB_HOST=db:3306
# - DB_NAME=gitea
# - DB_USER=gitea
# - DB_PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- /data:/var/www/gitea/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "22222:22"
# depends_on:
# - db
#
# db:
# image: mysql:8
# restart: always
# environment:
# - MYSQL_ROOT_PASSWORD=gitea
# - MYSQL_USER=gitea
# - MYSQL_PASSWORD=gitea
# - MYSQL_DATABASE=gitea
# networks:
# - gitea
# volumes:
# - ./mysql:/var/lib/mysql
数据持久化:
volumes:
- /data:/var/www/gitea/test
需要把 Gitea 文件持久化存储在本地,不然 Docker 重启,就会丢失数据。
本实例数据映射到宿主机目录:/var/www/gitea/test
。
更新:更新一个宝塔面板添加 Gitea 容器的截图:
题外话:个人不建议在生产环境使用任何面板包括宝塔面板。
Nginx 反代
如果需要域名访问 Gitea,可选 Nginx 绑定域名。
绑定过程就省略了。
在docker-compose.yml
里映射的端口为3000
。
ports:
- "3000:3000"
所以需要利用 Nginx 反代实现域名访问 Gitea,不然需要添加端口号才能访问,如:https://git.eallion.com:3000
,这样的带有端口号的 URL 不美观。
反代配置:
官方文档: https://docs.gitea.io/zh-cn/reverse-proxies/
server
{
listen 80;
listen 443 ssl http2;
server_name git.eallion.com;
# ......
# 其他配置
# ......
# 反代 Gitea 配置
location /
{
proxy_pass http://127.0.0.1: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;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
}
# ......
}
数据库
如果是个人使用,预计 Gitea 的使用量会很小的话,可以使用 Sqlite3 数据库。
我这台 VPS 宿主机有 Mysql 环境,所以我的docker-compose.yml
没有拉取db
镜像,而是直接使用了宿主机的 Mysql。(实际上使用 Docker compose 拉取数据库会更简单。)
但是 Docker 的默认网络设置,访问 localhost
并不能访问到宿主机的 Mysql,所以需要在宿主机的 Mysql 里面授权 Gitea 的 IP 访问。
查看 Gitea 容器的 ID:(多余的步骤)
docker ps --format "table {{.ID}}\t{{.Names}}"
显示结果:
CONTAINER ID IMAGE
7f888888884e gitea/gitea:latest
查看 Gitea 容器的 IP:(假设容器 ID 为:7f888888884e
)
docker exec -it 7f888888884e /bin/sh
进入容器后:
ifconfig
显示结果:
eth0 Link encap:Ethernet HWaddr RA:ND:OM:MA:CA:DD
inet addr:172.17.0.3 Bcast:172.17.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15 errors:0 dropped:0 overruns:0 frame:0
TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1244 (1.2 KiB) TX bytes:718 (718.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
记录下inet addr
显示的 IP,如:172.17.0.3
。
在宿主机终端设置:
mysql -uroot -p
mysql>GRANT ALL PRIVILEGES ON showx.* TO 'showx'@'172.17.0.3' IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql>flush privileges;
如果 Gitea 容器的 IP 变动,需要重新授权新 IP。
更新:数据库管理面板中,数据库可能也需要授权一下 Docker 的 IP。
安装 Gitea
完成上面这些步骤后,在浏览器中输入绑定的域名,如: https://git.eallion.com按提示安装即可。如果是本例的架构方式,在填写数据库信息的时候,Mysql host 不要填写localhost
,而要填写ifconfig
显示的 IP,如本例的:172.17.0.1
。
安装预览: