code.gitea.io/gitea@v1.22.3/docs/content/installation/with-docker-rootless.zh-cn.md (about) 1 --- 2 date: "2020-02-09T20:00:00+02:00" 3 title: "使用 Docker 安装 (rootless)" 4 slug: "install-with-docker-rootless" 5 sidebar_position: 60 6 toc: false 7 draft: false 8 aliases: 9 - /zh-cn/install-with-docker-rootless 10 menu: 11 sidebar: 12 parent: "installation" 13 name: "使用 Docker 安装 (rootless)" 14 sidebar_position: 60 15 identifier: "install-with-docker-rootless" 16 --- 17 18 # 使用 Docker 安装 19 20 Gitea 在其 Docker Hub 组织中提供自动更新的 Docker 镜像。您可以始终使用最新的稳定标签,或使用其他处理 Docker 镜像更新的服务。 21 22 rootless 镜像使用 Gitea 内部 SSH 功能来提供 Git 协议,但不支持 OpenSSH。 23 24 本参考设置指南将用户引导通过基于 `docker-compose` 的设置。但是,`docker-compose` 的安装超出了本文档的范围。要安装`docker-compose` 本身, 请按照官方的 [安装说明](https://docs.docker.com/compose/install/)进行操作。 25 26 ## 基础设置 27 28 最简单的设置只需创建一个卷和一个网络,并将 `gitea/gitea:latest-rootless` 镜像作为服务启动。由于没有可用的数据库,可以使用 SQLite3 来初始化一个。 29 30 创建一个名为 `data` 和 `config`: 31 32 ```sh 33 mkdir -p gitea/{data,config} 34 cd gitea 35 touch docker-compose.yml 36 ``` 37 38 然后将以下内容粘贴到名为 `docker-compose.yml` 的文件中: 39 40 ```yaml 41 version: "2" 42 43 services: 44 server: 45 image: gitea/gitea:@version@-rootless 46 restart: always 47 volumes: 48 - ./data:/var/lib/gitea 49 - ./config:/etc/gitea 50 - /etc/timezone:/etc/timezone:ro 51 - /etc/localtime:/etc/localtime:ro 52 ports: 53 - "3000:3000" 54 - "2222:2222" 55 ``` 56 57 请注意,卷应由在配置文件中指定的UID/GID的用户/组所有。默认情况下,Docker中的Gitea将使用uid:1000 gid:1000。如果需要,您可以使用以下命令设置这些文件夹的所有权: 58 59 ```sh 60 sudo chown 1000:1000 config/ data/ 61 ``` 62 63 > 如果未为卷设置正确的权限,容器可能无法启动。 64 65 对于稳定版本,您可以使用 `:latest-rootless`、`:1-rootless`,或指定特定的版本,如: `@version@-rootless`。如果您想使用最新的开发版本,则可以使用 `:dev-rootless` 标签。如果您想运行发布分支的最新提交,可以使用 `:1.x-dev-rootless` 标签,其中 x是 Gitea 的次要版本号(例如:`1.16-dev-rootless`)。 66 67 ## 自定义端口 68 69 要将集成的SSH和Web服务器绑定到不同的端口,请调整端口部分。通常只需更改主机端口并保持容器内的端口不变。 70 71 ```diff 72 version: "2" 73 74 services: 75 server: 76 image: gitea/gitea:@version@-rootless 77 restart: always 78 volumes: 79 - ./data:/var/lib/gitea 80 - ./config:/etc/gitea 81 - /etc/timezone:/etc/timezone:ro 82 - /etc/localtime:/etc/localtime:ro 83 ports: 84 - - "3000:3000" 85 - - "2222:2222" 86 + - "80:3000" 87 + - "22:2222" 88 ``` 89 90 ## MySQL 数据库 91 92 要将 Gitea 与 MySQL 数据库结合使用,请对上面创建的 `docker-compose.yml` 文件进行以下更改。 93 94 ```diff 95 version: "2" 96 97 services: 98 server: 99 image: gitea/gitea:@version@-rootless 100 + environment: 101 + - GITEA__database__DB_TYPE=mysql 102 + - GITEA__database__HOST=db:3306 103 + - GITEA__database__NAME=gitea 104 + - GITEA__database__USER=gitea 105 + - GITEA__database__PASSWD=gitea 106 restart: always 107 volumes: 108 - ./data:/var/lib/gitea 109 - ./config:/etc/gitea 110 - /etc/timezone:/etc/timezone:ro 111 - /etc/localtime:/etc/localtime:ro 112 ports: 113 - "3000:3000" 114 - "222:22" 115 + depends_on: 116 + - db 117 + 118 + db: 119 + image: mysql:8 120 + restart: always 121 + environment: 122 + - MYSQL_ROOT_PASSWORD=gitea 123 + - MYSQL_USER=gitea 124 + - MYSQL_PASSWORD=gitea 125 + - MYSQL_DATABASE=gitea 126 + volumes: 127 + - ./mysql:/var/lib/mysql 128 ``` 129 130 ## PostgreSQL 数据库 131 132 要将 Gitea 与 PostgreSQL 数据库结合使用,请对上面创建的 `docker-compose.yml` 文件进行以下更改。 133 134 ```diff 135 version: "2" 136 137 services: 138 server: 139 image: gitea/gitea:@version@-rootless 140 environment: 141 + - GITEA__database__DB_TYPE=postgres 142 + - GITEA__database__HOST=db:5432 143 + - GITEA__database__NAME=gitea 144 + - GITEA__database__USER=gitea 145 + - GITEA__database__PASSWD=gitea 146 restart: always 147 volumes: 148 - ./data:/var/lib/gitea 149 - ./config:/etc/gitea 150 - /etc/timezone:/etc/timezone:ro 151 - /etc/localtime:/etc/localtime:ro 152 ports: 153 - "3000:3000" 154 - "2222:2222" 155 + depends_on: 156 + - db 157 + 158 + db: 159 + image: postgres:14 160 + restart: always 161 + environment: 162 + - POSTGRES_USER=gitea 163 + - POSTGRES_PASSWORD=gitea 164 + - POSTGRES_DB=gitea 165 + volumes: 166 + - ./postgres:/var/lib/postgresql/data 167 ``` 168 169 ## 命名卷 (Named Volumes) 170 171 要使用命名卷 (Named Volumes) 而不是主机卷 (Host Volumes),请在 `docker-compose.yml` 配置中定义和使用命名卷。这样的更改将自动创建所需的卷。您不需要担心权限问题,Docker 会自动处理。 172 173 ```diff 174 version: "2" 175 176 +volumes: 177 + gitea-data: 178 + driver: local 179 + gitea-config: 180 + driver: local 181 + 182 services: 183 server: 184 image: gitea/gitea:@version@-rootless 185 restart: always 186 volumes: 187 - - ./data:/var/lib/gitea 188 + - gitea-data:/var/lib/gitea 189 - - ./config:/etc/gitea 190 + - gitea-config:/etc/gitea 191 - /etc/timezone:/etc/timezone:ro 192 - /etc/localtime:/etc/localtime:ro 193 ports: 194 - "3000:3000" 195 - "2222:2222" 196 ``` 197 198 MySQL 或 PostgreSQL 容器需要单独创建。 199 200 ## 自定义用户 201 202 你可以选择使用自定义用户 (遵循 --user 标志定义 https://docs.docker.com/engine/reference/run/#user)。 203 例如,要克隆主机用户 `git` 的定义,请使用命令 `id -u git` 并将其添加到 `docker-compose.yml` 文件中: 204 请确用户对保挂载的文件夹具有写权限。 205 206 ```diff 207 version: "2" 208 209 services: 210 server: 211 image: gitea/gitea:@version@-rootless 212 restart: always 213 + user: 1001 214 volumes: 215 - ./data:/var/lib/gitea 216 - ./config:/etc/gitea 217 - /etc/timezone:/etc/timezone:ro 218 - /etc/localtime:/etc/localtime:ro 219 ports: 220 - "3000:3000" 221 - "2222:2222" 222 ``` 223 224 ## 启动 225 226 要启动基于 `docker-compose` 的这个设置,请执行 `docker-compose up -d`,以在后台启动 Gitea。使用 `docker-compose ps` 命令可以查看 Gitea 是否正确启动。可以使用 `docker-compose logs` 命令查看日志。 227 228 要关闭设置,请执行 `docker-compose down` 命令。这将停止和终止容器,但卷仍将存在。 229 230 注意:如果在 HTTP 上使用的是非 3000 端口,请将 app.ini 更改为匹配 `LOCAL_ROOT_URL = http://localhost:3000/`。 231 232 ## 安装 233 234 在通过 `docker-compose` 启动 Docker 设置后,可以使用喜爱的浏览器访问 Gitea,完成安装过程。访问 `http://<服务器-IP>:3000` 并按照安装向导进行操作。如果数据库是使用上述文档中的 `docker-compose` 设置启动的,请注意必须使用 `db` 作为数据库主机名。 235 236 # 自定义 237 238 自定义文件的位置位于 `/var/lib/gitea/custom` 目录中,可以在这里找到有关自定义的文件说明。如果使用主机卷(host volumes),很容易访问这些文件;如果使用命名卷(named volumes),则可以通过另一个容器或直接访问 `/var/lib/docker/volumes/gitea_gitea/_/var_lib_gitea` 来进行访问。在安装后,配置文件将保存在 `/etc/gitea/app.ini` 中。 239 240 # 升级 241 242 :exclamation::exclamation: **确保您已将数据卷迁移到 Docker 容器之外的其他位置** :exclamation::exclamation: 243 244 要将安装升级到最新版本,请按照以下步骤操作: 245 246 ``` 247 # 如果在 docker-compose.yml 中指定了版本,请编辑该文件以更新版本 248 # 拉取新的镜像 249 docker-compose pull 250 # 启动一个新的容器,自动移除旧的容器 251 docker-compose up -d 252 ``` 253 254 # 从标准镜像升级 255 256 - 备份您的设置 257 - 将卷挂载点从 `/data` 更改为 `/var/lib/gitea` 258 - 如果使用了自定义的 `app.ini`,请将其移动到新的挂载到 `/etc/gitea` 的卷中 259 - 将卷中的文件夹(gitea)重命名为 custom 260 - 如果需要,编辑 `app.ini` 261 - 设置 `START_SSH_SERVER = true` 262 - 使用镜像 `gitea/gitea:@version@-rootless` 263 264 ## 使用环境变量管理部署 265 266 除了上述的环境变量外,`app.ini` 中的任何设置都可以通过形式为 `GITEA__SECTION_NAME__KEY_NAME` 的环境变量进行设置或覆盖。这些设置在每次 Docker 容器启动时都会生效。完整信息请参考[这里](https://github.com/go-gitea/gitea/tree/main/contrib/environment-to-ini). 267 268 这些环境变量可以在 `docker-compose.yml` 中传递给 Docker 容器。以下示例将启用 SMTP 邮件服务器,如果主机上设置了所需的环境变量 GITEA__mailer__FROM、GITEA__mailer__HOST、GITEA__mailer__PASSWD,或者在与 `docker-compose.yml` 相同目录中的 `.env` 文件中设置了这些环境变量: 269 270 ```bash 271 ... 272 services: 273 server: 274 environment: 275 - GITEA__mailer__ENABLED=true 276 - GITEA__mailer__FROM=${GITEA__mailer__FROM:?GITEA__mailer__FROM not set} 277 - GITEA__mailer__PROTOCOL=smtp 278 - GITEA__mailer__HOST=${GITEA__mailer__HOST:?GITEA__mailer__HOST not set} 279 - GITEA__mailer__IS_TLS_ENABLED=true 280 - GITEA__mailer__USER=${GITEA__mailer__USER:-apikey} 281 - GITEA__mailer__PASSWD="""${GITEA__mailer__PASSWD:?GITEA__mailer__PASSWD not set}""" 282 ``` 283 284 要设置所需的 TOKEN 和 SECRET 值,可以使用 Gitea 的内置[生成使用函数](administration/command-line.md#generate). 285 286 # SSH 容器透传 287 288 由于 SSH 在容器内运行,如果需要 SSH 支持,需要将 SSH 从主机透传到容器。一种选择是在容器内运行 SSH,并使用非标准端口(或将主机端口移动到非标准端口)。另一种可能更直接的选择是将主机上的 SSH 命令转发到容器。下面解释了这种设置。 289 290 本指南假设您已在主机上创建了一个名为 `git` 的用户,并具有运行 `docker exec` 的权限,并且 Gitea 容器的名称为 `gitea`。您需要修改该用户的 shell,以将命令转发到容器内的 `sh` 可执行文件,使用 `docker exec`。 291 292 首先,在主机上创建文件 `/usr/local/bin/gitea-shell`,并填入以下内容: 293 294 ```bash 295 #!/bin/sh 296 /usr/bin/docker exec -i --env SSH_ORIGINAL_COMMAND="$SSH_ORIGINAL_COMMAND" gitea sh "$@" 297 ``` 298 299 注意上述 docker 命令中的 `gitea` 是容器的名称。如果您的容器名称不同,请记得更改。 300 301 还应确保正确设置了 shell 包装器的权限: 302 303 ```bash 304 sudo chmod +x /usr/local/bin/gitea-shell 305 ``` 306 307 一旦包装器就位,您可以将其设置为 `git` 用户的 shell: 308 309 ```bash 310 sudo usermod -s /usr/local/bin/gitea-shell git 311 ``` 312 313 现在,所有的 SSH 命令都会被转发到容器,您需要在主机上设置 SSH 认证。这可以通过利用 [SSH AuthorizedKeysCommand](administration/command-line.md#keys) 来匹配 Gitea 接受的密钥。在主机的 `/etc/ssh/sshd_config` 文件中添加以下代码块: 314 315 ```bash 316 Match User git 317 AuthorizedKeysCommandUser git 318 AuthorizedKeysCommand /usr/bin/docker exec -i gitea /usr/local/bin/gitea keys -c /etc/gitea/app.ini -e git -u %u -t %t -k %k 319 ``` 320 321 (从 1.16.0 开始,您将不需要设置 `-c /etc/gitea/app.ini` 选项。) 322 323 剩下的就是重新启动 SSH 服务器: 324 325 ```bash 326 sudo systemctl restart sshd 327 ``` 328 329 **注意** 330 331 这实际上并没有使用 Docker 的 SSH,而是仅仅使用了围绕它的命令。 332 从理论上讲,您可以不运行内部的 SSH 服务器。