如何在 Rocky Linux 8 上使用 Docker 安装 Gitea 代码托管如何在 Rocky Linux 8 上使用 Docker 安装 Gitea 代码托管如何在 Rocky Linux 8 上使用 Docker 安装 Gitea 代码托管如何在 Rocky Linux 8 上使用 Docker 安装 Gitea 代码托管
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Rocky Linux 8 上使用 Docker 安装 Gitea 代码托管

在此页

  1. 先决条件
  2. 第 1 步 - 配置防火墙
  3. 第 2 步 - 安装 Docker
  4. 第 3 步 - 安装 Docker Compose
  5. 第 4 步 - 配置和安装 Gitea
    1. 配置系统时区
    2. 创建 Gitea 目录
    3. 配置 Gitea Docker 组合文件
    4. 自定义您的 Gitea 安装
    5. 安装 Gitea

    Gitea 是一种类似于 Github、Bitbucket 和 Gitlab 的自托管代码托管服务。它是用 Go 语言编写的,可以安装在多种操作系统上,包括 Linux、macOS、Windows 以及 amd64、i386、ARM 等架构。作为一个轻量级的应用程序,它可以以最低的硬件要求安装。它包括存储库文件编辑器、OpenSSH 服务器、问题跟踪、拉取请求、用户管理、通知、内置 wiki、LFS 支持、Git 挂钩等等。

    在本文中,您将学习在 Rocky Linux 8 服务器上使用 Docker 安装 Gitea。

    先决条件

    • A Server running Rocky Linux 8.5.

    • A non-root user with sudo privileges.

    • Disable SELinux.

    • Update everything.

      $ sudo dnf update
      
    • Install essential packages.

      $ sudo dnf install yum-utils nano curl
      
    • A fully qualified domain name(FQDN) pointing to the server like gitea.example.com.

    第 1 步 - 配置防火墙

    第一步是配置防火墙。 Rocky Linux 使用 Firewalld 防火墙。检查防火墙状态。

    $ sudo firewall-cmd --state
    running
    

    防火墙适用于不同的区域,公共区域是我们将使用的默认区域。列出防火墙上所有活动的服务和端口。

    $ sudo firewall-cmd --permanent --list-services
    

    它应该显示以下输出。

    cockpit dhcpv6-client ssh
    

    允许 HTTP 和 HTTPS 端口。

    $ sudo firewall-cmd --permanent --add-service=http
    $ sudo firewall-cmd --permanent --add-service=https
    

    为 SSH 打开端口 2221。

    $ sudo firewall-cmd --permanent --add-port=2221/tcp
    

    列出防火墙启用的所有服务。

    $ sudo firewall-cmd --permanent --list-all
    

    您应该会看到类似的输出。

    public
      target: default
      icmp-block-inversion: no
      interfaces:
      sources:
      services: cockpit dhcpv6-client http https ssh
      ports: 2221/tcp
      protocols:
      forward: no
      masquerade: no
      forward-ports:
      source-ports:
      icmp-blocks:
      rich rules:
    

    重新加载防火墙以启用更改。

    $ sudo firewall-cmd --reload
    

    第 2 步 - 安装 Docker

    Rocky Linux 附带旧版本的 Docker。要安装最新版本,首先,安装官方 Docker 存储库。

    $ sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    

    安装最新版本的 Docker。

    $ sudo dnf install docker-ce docker-ce-cli containerd.io
    

    启用并运行 Docker 守护进程。

    $ sudo systemctl enable docker --now
    

    验证它是否正在运行。

    ? docker.service - Docker Application Container Engine
       Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
       Active: active (running) since Sat 2022-04-02 13:26:08 UTC; 2s ago
         Docs: https://docs.docker.com
     Main PID: 21152 (dockerd)
        Tasks: 7
       Memory: 30.9M
       CGroup: /system.slice/docker.service
               ??21152 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    ...
    

    默认情况下,Docker 需要 root 权限。如果您想避免每次运行 docker 命令时都使用 sudo,请将您的用户名添加到 docker 组。

    $ sudo usermod -aG docker $(whoami)
    

    您需要注销服务器并以同一用户身份重新登录才能启用此更改。

    第 3 步 - 安装 Docker Compose

    下载 Docker Compose 的最新稳定版本。

    $ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    

    将可执行权限应用于 Docker Compose 二进制文件。

    $ sudo chmod +x /usr/local/bin/docker-compose
    

    测试安装。

    $ docker-compose --version
    docker-compose version 1.29.2, build 5becea4c
    

    安装 Docker-compose Bash Completion 脚本。

    $ sudo curl \
        -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \
        -o /etc/bash_completion.d/docker-compose
    

    重新加载您的配置文件设置以使 bash-completion 工作。

    $ source ~/.bashrc
    

    第 4 步 - 配置和安装 Gitea

    配置系统时区

    您可以通过以下命令检查系统当前时区。

    $ timedatectl
      Local time: Mon 2022-05-02 06:38:36 UTC
               Universal time: Mon 2022-05-02 06:38:36 UTC
                     RTC time: Mon 2022-05-02 06:38:36
                    Time zone: Etc/UTC (UTC, +0000)
    System clock synchronized: yes
                  NTP service: active
              RTC in local TZ: no
    

    您可以看到系统设置为 GMT 或 UTC 时区。如果您居住在具有不同时区的区域或想要更改时区,请使用以下命令来执行此操作。

    $ sudo timedatectl set-timezone Asia/Kolkata
    

    再次检查时区。

    $ timedatectl
    Local time: Mon 2022-05-02 12:09:23 IST
               Universal time: Mon 2022-05-02 06:39:23 UTC
                     RTC time: Mon 2022-05-02 06:39:22
                    Time zone: Asia/Kolkata (IST, +0530)
    System clock synchronized: yes
                  NTP service: active
              RTC in local TZ: no
    

    您可以看到时区已更新为 IST,即 GMT+5:30。

    创建 Gitea 目录

    为 Gitea 创建目录。

    $ mkdir ~/gitea-docker
    

    切换到 Gitea 目录。

    $ cd ~/gitea-docker
    

    创建用于存储 Gitea 数据和 PostgreSQL 数据库的目录。

    $ mkdir {gitea,postgres}
    

    配置 Gitea Docker 组合文件

    获取当前登录用户的 UID(用户标识符)和 GID(组标识符)值。第一个命令生成 UID,而第二个命令生成 GID。复制这两个值,因为配置 Docker 组合文件需要它们。

    $ echo $(id -u)
    1000
    $ echo $(id -g)
    1000
    

    创建并打开 Docker Compose 文件进行编辑。

    $ nano docker-compose.yml
    

    将以下代码粘贴到其中。粘贴之前生成的 UID 和 GID 值。

    version: "3"
    
    networks:
      gitea:
        external: false
    
    services:
      server:
        image: gitea/gitea:1.16.6
        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"
          - "2221: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
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    上面的 Docker Compose 文件部署了两个容器——一个用于 Gitea,一个用于 PostgreSQL。我们添加了一些环境变量来配置数据库详细信息。为了将 PostgreSQL 数据库连接到 Gitea 容器,我们在文件中将主机指定为 PostgreSQL 服务的名称。

    端口参数 \3000:3000\ 和 \2221:22\ 指定端口映射,其中左侧端口表示主机端口右边的港口表示集装箱港口。 Gitea 的 web 服务使用端口 3000,这也是我们向服务器公开的端口。对于 SSH,我们的系统已经使用端口 22 进行日志记录。因此,我们指定一个自定义端口来执行 SSH 操作。在我们的例子中,我们使用端口 2221。这个端口也需要通过防火墙打开,我们已经在本教程的第 1 步中打开了。

    Gitea 和 PostgreSQL 容器都通过名为 gitea 的通用内部 Docker 网络连接。当您开始安装 Docker 时,卷挂载将在当前文件夹中自动创建 gitea 和 postgres 目录。撰写文件中指定的用户 ID 是 Gitea 容器将用于创建 gitea 目录的用户 ID。另一方面,PostgreSQL 容器将由用户 systemd-coredump 管理,这是默认行为。您可以更改该行为,但这不是必需的。

    自定义您的 Gitea 安装

    您可以通过将 app.ini 文件添加到 ~/gitea-docker/gitea/gitea/conf 目录来自定义 Gitea 安装。安装后,可以从容器内部的 /data/gitea/conf/app.ini 位置编辑此文件。您可以使用 Giteas Github 存储库中的示例 ini 文件作为参考。

    安装 Gitea

    运行以下命令以启动 Gitea 容器。

    $ docker-compose up -d
    

    检查容器的状态以确保它们正常运行。

    $ docker ps
    CONTAINER ID   IMAGE                COMMAND                  CREATED             STATUS             PORTS                                                                              NAMES
    bd06e370c46b   gitea/gitea:1.16.6   "/usr/bin/entrypoint…"   19 minutes ago   Up 19 minutes   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp, 0.0.0.0:2221->22/tcp, :::2221->22/tcp   gitea
    3fc6c4bce810   postgres:14          "docker-entrypoint.s…"   19 minutes ago   Up 19 minutes   5432/tcp                                                                           gitea_db_1
    

    您还可以使用以下命令检查状态。

    $ docker-compose ps
       Name                 Command               State                                       Ports
    ------------------------------------------------------------------------------------------------------------------------------------
    gitea        /usr/bin/entrypoint /bin/s ...   Up      0.0.0.0:2221->22/tcp,:::2221->22/tcp, 0.0.0.0:3000->3000/tcp,:::3000->3000/tcp
    gitea_db_1   docker-entrypoint.sh postgres    Up      5432/tcp
    

    第 5 步 - 安装 SSL

    要使用 Lets Encrypt 安装 SSL 证书,我们需要安装 Certbot 工具。

    首先,您需要下载并安装 EPEL 存储库。

    $ sudo dnf install epel-release
    

    运行以下命令来安装 Certbot。

    $ sudo dnf install certbot
    

    生成 SSL 证书。

    $ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d gitea.example.com
    

    上面的命令会将证书下载到服务器上的 /etc/letsencrypt/live/gitea.example.com 目录。

    生成 Diffie-Hellman 组证书。

    $ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
    

    为 Lets Encrypt 自动更新创建一个挑战网站根目录。

    $ sudo mkdir -p /var/lib/letsencrypt
    

    创建 Cron 作业以更新 SSL。它将每天运行以检查证书并在需要时更新证书。为此,首先,创建文件 /etc/cron.daily/certbot-renew 并打开它进行编辑。

    $ sudo nano /etc/cron.daily/certbot-renew
    

    粘贴以下代码。

    #!/bin/sh
    certbot renew --cert-name gitea.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    更改任务文件的权限以使其可执行。

    $ sudo chmod +x /etc/cron.daily/certbot-renew
    

    第 6 步 - 安装 Nginx

    我们将安装最新版本的 Nginx。创建并打开文件 /etc/yum.repos.d/nginx.repo 进行编辑。

    $ sudo nano /etc/yum.repos.d/nginx.repo
    

    在其中粘贴以下行。

    [nginx-stable]
    name=nginx stable repo
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=1
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    
    [nginx-mainline]
    name=nginx mainline repo
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
    gpgcheck=1
    enabled=0
    gpgkey=https://nginx.org/keys/nginx_signing.key
    module_hotfixes=true
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    安装 Nginx。

    $ sudo dnf install nginx
    

    验证安装。

    $ nginx -v
    nginx version: nginx/1.20.2
    

    启用并启动 Nginx 服务。

    $ sudo systemctl enable nginx --now
    

    创建并打开文件 /etc/nginx/conf.d/gitea.conf 进行编辑。

    $ sudo nano /etc/nginx/conf.d/gitea.conf
    

    将以下代码粘贴到其中。

    # Redirect all non-encrypted to encrypted
    server {
        listen 80;
        listen [::]:80;
        server_name gitea.example.com;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;
        
        server_name gitea.example.com;
    
        ssl_certificate     /etc/letsencrypt/live/gitea.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/gitea.example.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/gitea.example.com/chain.pem;
        ssl_session_timeout 1d;
        ssl_session_cache shared:MozSSL:10m;
        ssl_session_tickets off;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_dhparam /etc/ssl/certs/dhparam.pem;
        
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    
        access_log /var/log/nginx/gitea.example.com.access.log main;
        error_log  /var/log/nginx/gitea.example.com.error.log;
    
        location / {
            client_max_body_size 100M;
            proxy_pass  http://localhost: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 X-Forwarded-Proto $scheme;
        }
    }
    

    完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。上面的配置允许 Nginx 作为代理服务器并绑定到 localhost 上的 3000 端口。要为 Git LFS 启用大文件上传,您可以根据需要更改 client_max_body_size 变量的值。对于我们的教程,我们使用 100 MB 作为限制。

    打开文件 /etc/nginx/nginx.conf 进行编辑。

    $ sudo nano /etc/nginx/nginx.conf
    

    在行 include /etc/nginx/conf.d/*.conf; 之前添加以下行。

    server_names_hash_bucket_size  64;
    

    通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    验证 Nginx 配置文件语法。

    $ sudo nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    

    重新启动 Nginx 服务以启用新配置。

    $ sudo systemctl restart nginx
    

    第 7 步 - 访问和设置 Gitea

    在浏览器中访问 URL https://gitea.example.com,将出现以下安装屏幕。

    大多数字段将根据 Docker 组合文件中的值预先填充。

    输入 gitea.example.com 作为服务器域,输入 https://gitea.example.com 作为 Gitea Base URL。将 SSH 服务器端口的值从 22 更改为 2221。保持其余设置不变。

    如果您想使用邮件功能,您可以添加您的 SMTP 服务器详细信息。展开页面的电子邮件设置部分并输入值,如屏幕截图所示。确保将您的 SMTP 端口包含在主机名中,如图所示。对于我们的教程,我们使用 Amazon SES 服务。您可以使用您选择的任何 SMTP 服务。

    在安装之前,您还应该检查一些设置。要更改它们,请展开页面的服务器和第三方服务设置部分。

    根据您的要求更改设置。我们启用了默认隐藏电子邮件地址选项以确保更好的隐私。如果您不希望人们注册帐户,请启用“禁用自注册”选项。

    最后但同样重要的是,设置您的管理员帐户。展开页面的 Administrator Account Settings 部分并填写所需的值。

    完成后单击 Install Gitea 按钮以完成安装。您将被重定向到 Gitea 仪表板。如果出于某种原因,您收到 502 错误,请刷新页面。

    第 8 步 - 创建第一个存储库

    让我们创建我们的第一个存储库。为此,请单击仪表板上的 + 号。

    输入存储库详细信息。从下拉菜单中选择默认问题标签。为您的存储库选择适当的许可证。

    选择存储库的默认分支。

    满意后,单击创建存储库按钮以在 Gitea 安装上创建您的第一个存储库。您将被重定向到您的存储库主页。

    第 9 步 - 设置 SSH

    让我们设置 SSH 以与我们新创建的存储库一起使用。

    对于我们的教程,我们将使用预装了 Ubuntu 的本地 PC。但是,这些命令应该可以在任何操作系统终端上运行而无需太多更改。

    在本地 PC 上创建一个新的 SSH 密钥以与 Gitea 一起使用。

    $ ssh-keygen -f ~/.ssh/gitea-demo -t rsa -b 4096 -C "HowtoForge Gitea Demo" -q -N "yourpassphrase"
    

    在上面的命令中输入强密码代替占位符。这将在 ~/.ssh/gitea-demo 位置创建一个 SSH 密钥。

    接下来,通过单击个人资料图像上的下拉菜单并选择“设置”选项,如图所示打开 Gitea 个人资料设置。

    接下来,切换到页面上的 SSH/GPG Keys 选项卡。

    为您的 SSH 密钥添加一个名称。回到本地PC的终端,运行以下命令输出Gitea的公钥。

    $ cat ~/.ssh/gitea-demo.pub
    

    复制生成的输出并将其粘贴回 Gitea 的 SSH 密钥页面上的内容框中。

    单击“添加密钥”按钮以完成添加密钥。

    返回本地 PC 并将 SSH 代理设置为保持活动状态 1 小时。

    $ eval $(ssh-agent -t 3600)b
    

    将新创建的 SSH 密钥添加到 SSH 代理。

    $ ssh-add ~/.ssh/gitea-demo
    Enter passphrase for /home/navjot/.ssh/gitea-demo:
    Identity added: /home/navjot/.ssh/gitea-demo (HowtoForge Gitea Demo)
    

    系统将提示您输入密码。

    第 10 步 - 使用 SSH 克隆存储库

    让我们使用 SSH 克隆新创建的存储库。再次访问存储库页面并在选择 SSH 选项后复制 SSH URL。

    它应该如下所示。

    ssh://:2221/navjot/howtoforge.git
    

    在本地 PC 上运行以下命令以使用 SSH 克隆存储库。

    $ git clone ssh://:2221/navjot/howtoforge.git
    Cloning into 'howtoforge'...
    The authenticity of host '[gitea.example.com]:2221 ([209.23.11.75]:2221)' can't be established.
    ECDSA key fingerprint is SHA256:sN0N4OkpChwuR00xpGZU1mGJrp7ktwHRC7uxGP7Nh08.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added '[gitea.example.com]:2221,[209.23.11.75]:2221' (ECDSA) to the list of known hosts.
    remote: Enumerating objects: 4, done.
    remote: Counting objects: 100% (4/4), done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
    Receiving objects: 100% (4/4), done.
    

    系统将提示您添加主机凭据。输入 yes 以继续克隆存储库。

    您将在系统上看到克隆的存储库。

    $ ls
    howtoforge
    

    切换到目录。

    $ cd howtoforge
    

    检查新克隆的存储库的 Git 状态。为此,您应该在本地 PC 上安装 Git。

    $ git status
    On branch master
    Your branch is up to date with 'origin/master'.
    
    nothing to commit, working tree clean
    

    这表明 SSH 运行良好。

    第 11 步 - 测试第一次提交

    现在我们已经建立了我们的第一个存储库,是时候进行一些更改并将它们提交回来了。

    让我们更新 README.md 文件。在您的本地 PC 上,打开自述文件进行编辑。

    $ nano README.md
    

    编辑文件,完成后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

    再次检查 Git 状态。

    $ git status
    On branch master
    Your branch is up to date with 'origin/master'.
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   README.md
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    这表明 Readme 文件已被编辑但未提交。添加文件以准备提交。

    $ git add README.md
    

    提交文件。

    $ git commit -m "Update the Readme file for Gitea tutorial."
    [master 5e9b039] Update the Readme file for Gitea tutorial.
     1 file changed, 3 insertions(+), 1 deletion(-)
    

    将文件推送到您的 Gitea 服务器。

    $ git push origin master
    Enumerating objects: 5, done.
    Counting objects: 100% (5/5), done.
    Delta compression using up to 4 threads
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 392 bytes | 392.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    remote: . Processing 1 references
    remote: Processed 1 references in total
    To ssh://gitea.example.com:2221/navjot/howtoforge.git
       a61dfce..5e9b039  master -> master
    

    要确认,请返回 Gitea 存储库页面。

    您可以注意到自述文件已更新,并且还显示了最新的提交消息。要查看更改,请单击提交消息,您可以查看以下页面的差异。

    这结束了我们对存储库的第一次提交。您可以开始为您的项目安装 Gitea。

    第 12 步 - 升级 Gitea

    升级 Gitea 是一个简单的过程。

    关闭并移除现有容器。由于数据保存在主机上的容器之外,因此它会被保留。

    $ cd ~/gitea-docker
    $ docker-compose down --remove-orphans
    

    打开docker-compose.yml文件,修改Gitea容器的版本。接下来,拉取新的 Gitea 镜像。

    $ docker pull
    

    启动新容器。

    $ docker-compose up -d
    

    检查状态。

    $ docker ps
    

    结论

    我们的教程到此结束,我们在 Rocky Linux 服务器上使用 Docker 安装了 Gitea 代码托管服务。我们还安装了 Nginx 服务器作为代理,并使用 SSL 通过公共 URL 公开 Gitea。如果您有任何问题,请在下面的评论中发表。

©2015-2025 艾丽卡 support@alaica.com