前言
在前一篇博文(什么是 Gitea?)中,我们详细介绍了gitea的功能特性,以及其与其它git服务器之间的特性多维度对比。
在本文中,我们将详细介绍gitea的快捷安装部署,docker方式!
1. 特殊环境变量介绍
- USER:git:容器内运行Gitea的用户的用户名。
- USER_UID:1000:在容器内运行 Gitea 的用户的 UID(Unix 用户 ID)。如果使用主机卷,则将其与卷所有者的 UID 匹配/data(命名卷则不需要)。
- USER_GID:1000:在容器内运行 Gitea 的用户的 GID(Unix 组 ID)。如果使用主机卷,则将其与卷所有者的 GID 匹配/data(命名卷则不需要)。
2. 最简化安装,数据库基于SQLite3
最简单的设置只是创建一个卷和一个网络,然后将映像gitea/gitea:latest 作为服务启动。由于没有可用的数据库,可以使用 SQLite3 进行初始化。创建一个目录,如 ,gitea并将以下内容粘贴到名为 的文件中docker-compose.yml。请注意,卷应由配置文件中指定的 UID/GID 的用户/组拥有。如果您没有为卷提供正确的权限,容器可能无法启动。对于稳定版本,您可以使用:latest,:1或指定某个版本,如:@version@,但如果您想使用 Gitea 的最新开发版本,那么您可以使用 标签:nightly。如果您想从发布分支运行最新的提交,您可以使用 标签:1.x-nightly,其中 x 是 Gitea 的次要版本。(例如:1.16-nightly)
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:@version@
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
3. 基于MySQL数据存储docker部署
要与 MySQL 数据库结合启动 Gitea,请将这些更改应用到 docker-compose.yml上面创建的文件。
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:@version@
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
+ - GITEA__database__DB_TYPE=mysql
+ - GITEA__database__HOST=db:3306
+ - GITEA__database__NAME=gitea
+ - GITEA__database__USER=gitea
+ - GITEA__database__PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222: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
4. 基于PostgreSQL数据存储docker部署
要与 PostgreSQL 数据库结合启动 Gitea,请将这些更改应用到docker-compose.yml上面创建的文件。
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:@version@
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
+ - GITEA__database__DB_TYPE=postgres
+ - GITEA__database__HOST=db:5432
+ - GITEA__database__NAME=gitea
+ - GITEA__database__USER=gitea
+ - GITEA__database__PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
+ depends_on:
+ - db
+
+ db:
+ image: postgres:14
+ restart: always
+ environment:
+ - POSTGRES_USER=gitea
+ - POSTGRES_PASSWORD=gitea
+ - POSTGRES_DB=gitea
+ networks:
+ - gitea
+ volumes:
+ - ./postgres:/var/lib/postgresql/data
5. 基于docker脚本部署,非docker-compose
本安装方式以postgresql为例进行介绍
5.1 创建一个私有子网
# 创建一个私有子网
docker network create compEnvInner;
5.2 初始化pg数据库
# 初始化pg数据库
docker run \
--restart=always \
--privileged=true \
--network=host \
--shm-size 4G \
--net compEnvInner \
-p 5432:5432 \
-e POSTGRES_DB=postgres \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD="password" \
-e PGDATA=/data/data \
-e PGPORT=5432 \
-e TZ=Asia/Shanghai \
--volume /data/docker-containers/postgres/data:/data/data \
--name postgres-comp \
-d postgres:16.3
5.3 初始化gitea
这一步尤为关键的是用到docker–link属性,将上一步创建postgresql容器互联在一起!是其在同一个docker网络下能互通!
# –link 容器互联,其他容器名映射为内部容器名称,使用内部容器名称就可以访问外部容器
# --link container_a:alias_name
# container_a是已存在的容器名称。alias_name是可选的别名,如果未指定,则默认为container_a的容器名。
docker run -it --name gitea --restart always --privileged=true \
--network=compEnvInner \
-e USER_UID=1000 \
-e USER_GID=1000 \
-e GITEA__database__DB_TYPE=postgres \
-e GITEA__database__HOST=postgres:5432 \
-e GITEA__database__NAME=gitea \
-e GITEA__database__USER=postgres \
-e GITEA__database__PASSWD="password" \
-v /data/docker-containers/gitea:/data \
-v /etc/timezone:/etc/timezone:ro \
-v /etc/localtime:/etc/localtime:ro \
-p 3000:3000 \
-p 222:22 \
--link postgres-comp:postgres \
-d registry.cn-hangzhou.aliyuncs.com/sinhy/gitea:latest
6.0 总结
以上重点介绍了四种关于gitea的docker安装部署方法,分别是基于docker-compose方式部署的默认的基于SQLite3、基于MySQL安装、基于PostgreSQL安装和最后介绍的纯docker脚本(非docker-compose)部署。