Как установить Gitea Code Hosting с помощью Docker на Rocky Linux 8
На этой странице
- Предпосылки
- Шаг 1. Настройка брандмауэра
- Шаг 2. Установите Docker
- Шаг 3. Установите Docker Compose
- Шаг 4. Настройка и установка Gitea
- Настройка системного часового пояса
- Создание каталогов Gitea
- Настройка файла Gitea Docker Compose
- Настройте свою установку Gitea
- Установить Gitea
Gitea — это служба самостоятельного размещения кода, похожая на Github, Bitbucket и Gitlab. Он написан на языке Go и может быть установлен в нескольких операционных системах, включая Linux, macOS, Windows, и таких архитектурах, как amd64, i386, ARM и других. Будучи легким приложением, его можно установить с минимальными требованиями к оборудованию. Он включает в себя редактор файлов репозитория, сервер OpenSSH, отслеживание проблем, запросы на вытягивание, управление пользователями, уведомления, встроенную вики, поддержку LFS, перехватчики Git и многое другое.
В этой статье вы научитесь устанавливать Gitea с помощью Docker на сервер Rocky Linux 8.
Предпосылки
-
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 Firewall. Проверьте состояние брандмауэров.
$ 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
Откройте порт 2221 для SSH.
$ 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 — Установите Докер
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. Если вы хотите избежать использования
sudo
при каждом запуске командыdocker
, добавьте свое имя пользователя в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
Установите скрипт завершения Bash для создания Docker.
$ 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.
$ 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 использует порт 3000 для своего веб-сервиса, который мы также предоставили серверу. Для SSH наша система уже использует порт 22 для ведения журнала. Поэтому мы указываем собственный порт для выполнения операций SSH. В нашем случае мы используем порт 2221. Этот порт также необходимо открыть через брандмауэр, что мы уже сделали на шаге 1 этого руководства.Контейнеры Gitea и PostgreSQL подключены через общую внутреннюю сеть Docker с именем
gitea
. При монтировании тома автоматически создаются каталогиgitea
иpostgres
в текущей папке при запуске установки Docker. Идентификатор пользователя, указанный в файле компоновки, — это то, что контейнер Gitea будет использовать для создания каталогаgitea
. С другой стороны, контейнер PostgreSQL будет управляться пользователемsystemd-coredump
, что является поведением по умолчанию. Вы можете изменить это поведение, но это не обязательно.Настройте свою установку Gitea
Вы можете настроить установку Gitea, добавив файл app.ini в каталог
~/gitea-docker/gitea/gitea/conf
. После установки этот файл можно редактировать внутри контейнера из расположения/data/gitea/conf/app.ini
. Вы можете использовать образец ini-файла из репозитория Giteas Github для справки.Установить Гитею
Выполните следующую команду, чтобы запустить контейнеры 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
Чтобы установить SSL-сертификат с помощью Lets Encrypt, нам нужно установить инструмент 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
на вашем сервере.Создайте групповой сертификат Диффи-Хеллмана.
$ 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 при появлении запроса.
Установите Нгинкс.
$ 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 действовать как прокси-сервер и привязываться к порту 3000 на локальном хосте. Чтобы включить загрузку больших файлов для Git LFS, вы можете изменить значение переменной
client_max_body_size
в соответствии с требованиями. Для нашего руководства мы используем 100 МБ в качестве ограничения.Откройте файл
/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
в качестве базового URL-адреса Gitea. Измените значение порта SSH-сервера с 22 на 2221. Остальные настройки оставьте без изменений.Если вы хотите использовать почтовые функции, вы можете добавить данные своего SMTP-сервера. Разверните раздел «Настройки электронной почты» на странице и введите значения, как показано на снимке экрана. Обязательно укажите свой SMTP-порт с именем хоста, как показано. В нашем руководстве мы используем сервис Amazon SES. Вы можете использовать любую службу SMTP по вашему выбору.
Есть еще несколько настроек, которые вы должны проверить перед установкой. Чтобы изменить их, разверните раздел «Настройки сервера и сторонних служб» на странице.
Измените настройки в соответствии с вашими требованиями. Мы включили параметр «Скрыть адреса электронной почты по умолчанию», чтобы обеспечить большую конфиденциальность. Если вы не хотите, чтобы люди регистрировали учетную запись, включите параметр «Отключить самостоятельную регистрацию».
И последнее, но не менее важное: настройте учетную запись администратора. Разверните раздел «Параметры учетной записи администратора» на странице и введите необходимые значения.
Нажмите кнопку «Установить Gitea», когда закончите, чтобы завершить установку. Вы будете перенаправлены на панель инструментов Gitea. Если по какой-то причине вы получаете ошибку 502, обновите страницу.
Шаг 8 — Создайте первый репозиторий
Давайте создадим наш первый репозиторий. Для этого нажмите значок + на панели инструментов.
Введите данные репозитория. Выберите метку «Выпуск по умолчанию», выбрав из раскрывающегося меню. Выберите подходящую лицензию для вашего репозитория.
Выберите ветку по умолчанию для вашего репозитория.
Когда все будет готово, нажмите кнопку «Создать репозиторий», чтобы создать свой первый репозиторий в вашей установке Gitea. Вы будете перенаправлены на главную страницу вашего репозитория.
Шаг 9 — Настройте SSH
Давайте настроим SSH для использования с нашим недавно созданным репозиторием.
Для нашего руководства мы будем использовать локальный ПК с предустановленной Ubuntu. Однако команды должны работать на любом терминале ОС без особых изменений.
Создайте новый ключ SSH для использования с Gitea на локальном ПК.
$ ssh-keygen -f ~/.ssh/gitea-demo -t rsa -b 4096 -C "HowtoForge Gitea Demo" -q -N "yourpassphrase"
Введите надежный пароль вместо заполнителя в приведенной выше команде. Это создаст ключ SSH в расположении
~/.ssh/gitea-demo
.Затем откройте настройки своего профиля Gitea, как показано, щелкнув раскрывающееся меню на изображении вашего профиля и выбрав параметр «Настройки».
Затем перейдите на вкладку Ключи SSH/GPG на странице.
Добавьте имя для вашего ключа SSH. Вернитесь к терминалу на локальном ПК и выполните следующую команду, чтобы вывести открытый ключ для Gitea.
$ cat ~/.ssh/gitea-demo.pub
Скопируйте полученный результат и вставьте его обратно в поле «Содержимое» на странице ключей SSH в Gitea.
Нажмите кнопку «Добавить ключ», чтобы завершить добавление ключа.
Вернитесь к своему локальному ПК и настройте агент 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. Снова посетите страницу репозитория и скопируйте URL-адрес SSH после выбора параметра SSH.
Это должно выглядеть следующим образом.
ssh://:2221/navjot/howtoforge.git
Выполните следующую команду на локальном ПК, чтобы клонировать репозиторий с помощью 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 только что клонированного репозитория. Для этого у вас должен быть установлен 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
. На локальном компьютере откройте файл readme для редактирования.$ 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.
Вы можете заметить, что файл Readme был обновлен, а также показано последнее сообщение фиксации. Чтобы просмотреть изменения, щелкните сообщение фиксации, и вы сможете просмотреть следующую страницу с различиями.
На этом мы завершаем нашу первую фиксацию для нашего репозитория. Вы можете начать работу над установкой 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
Заключение
На этом мы завершаем наше руководство, в котором мы установили службу хостинга Gitea Code с помощью Docker на сервере Rocky Linux. Мы также установили сервер Nginx в качестве прокси-сервера и представили Gitea через общедоступный URL-адрес с использованием SSL. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.