mirror of
https://gitea.com/gitea/docs.git
synced 2026-11-09 03:20:34 +00:00
Five documentation fixes that do not depend on anything upstream. **PostgreSQL version in the docker guide** (closes #224) The compose example pinned `postgres:14`, the oldest version Gitea still tests against, and PostgreSQL does not upgrade its data directory on its own, so every new deployment that copies the example is one major upgrade behind from day one. The example now uses `postgres:18`, with a note about why the major version is pinned and a pointer to the supported range. **SELinux** (closes #211) `setcap 'cap_net_bind_service=+ep'` is what the docs suggest for binding to a port below 1024, but it is denied under SELinux depending on the label of the binary, and it is lost on every upgrade because the capability lives in an extended attribute of the file. A new page describes granting the capability through the systemd unit instead (`AmbientCapabilities`, plus `PrivateUsers=false` when the sandboxing gets in the way), the `semanage fcontext` / `restorecon` labels for the binary and the data directory, and how to read the denials with `ausearch` and `audit2allow`. It is linked from the binary and source installation pages and from the `gitea web` notes. **OAuth2 and OpenID Connect** (closes #106) The authentication page documented LDAP, PAM, SMTP, FreeIPA, SPNEGO and the reverse proxy, but not that Gitea can log users in against an external OAuth2 or OpenID Connect provider, which made it look like the only OAuth2 support is Gitea acting as the provider. The new section covers the fields of the authentication source, the callback URL to register at the provider, the group and claim mappings, and the `[oauth2_client]` settings, and separates it from the older OpenID 2.0 sign-in. **IIS reverse proxy** (closes #39) Application Request Routing rewrites the host of the `Location` header back to the internal one while "Reverse rewrite host in response headers" is on, which sends the browser to `127.0.0.1:3000` after a sign-in. The IIS section now says to turn it off and where the setting lives. **ACME in containers** (closes #292) `ACME_DIRECTORY` defaults to the relative path `https`, which is resolved against the working directory of the process. In the official image that is `/app/gitea`, outside the `/data` volume, so a recreated container asks the CA for a new certificate and runs into the Let's Encrypt limit of 5 certificates per week for the same domains. The HTTPS page now warns about it and shows an absolute path inside the volume; the cheat sheet entry points at the warning. The default itself is being changed in https://github.com/go-gitea/gitea/pull/35851, the note stays useful for every released version. Only `docs/` is touched, the released versions keep their content. <!-- cloudflare-preview --> Preview: https://pr-513.docs-gitea-com.pages.dev Reviewed-on: https://gitea.com/gitea/docs/pulls/513 Reviewed-by: bircni <[email protected]> Co-authored-by: Lunny Xiao <[email protected]>
264 lines
10 KiB
Markdown
264 lines
10 KiB
Markdown
---
|
|
date: "2017-06-19T12:00:00+02:00"
|
|
slug: "install-from-binary"
|
|
sidebar_position: 15
|
|
aliases:
|
|
- /en-us/install-from-binary
|
|
---
|
|
|
|
# Installation from binary
|
|
|
|
All downloads come with SQLite, MySQL and PostgreSQL support, and are built with
|
|
embedded assets. This can be different from Gogs.
|
|
|
|
## Download
|
|
|
|
You can find the file matching your platform from the [downloads page](https://dl.gitea.com/gitea/) after navigating to the version you want to download.
|
|
|
|
### Choosing the right file
|
|
|
|
**For Linux**, you will likely want `linux-amd64`. It's for 64-bit Intel/AMD platforms, but there are other platforms available, including `arm64` (e.g. Raspberry PI 4), `386` (i.e. 32-bit), `arm-5`, and `arm-6`.
|
|
|
|
**For Windows**, you will likely want `windows-4.0-amd64`. It's for all modern versions of Windows, but there is also a `386` platform available designed for older, 32-bit versions of Windows.
|
|
|
|
:::info
|
|
There is also a `gogit-windows` file available that was created to help with some [performance problems](https://github.com/go-gitea/gitea/pull/15482) reported by some Windows users on older systems/versions. You should consider using this file if you're experiencing performance issues, and let us know if it improves performance.
|
|
:::
|
|
|
|
**For macOS**, you should choose `darwin-arm64` if your hardware uses Apple Silicon, or `darwin-amd64` for Intel.
|
|
|
|
**For FreeBSD**, you should choose `freebsd12-amd64` for 64-bit Intel/AMD platforms.
|
|
|
|
### Downloading with wget
|
|
|
|
Copy the commands below and replace the URL within the one you wish to download.
|
|
|
|
```shell
|
|
wget -O gitea https://dl.gitea.com/gitea/@version@/gitea-@version@-linux-amd64
|
|
chmod +x gitea
|
|
```
|
|
|
|
Note that the above command will download Gitea @version@ for 64-bit Linux.
|
|
|
|
## Verify signature
|
|
|
|
### Sigstore
|
|
|
|
Starting with v1.27 Gitea signs all binaries using [sigstore](https://sigstore.dev/) to prevent against unwanted modification of binaries.
|
|
To validate the binary, download the bundle file which ends in `sigstore.json` for the binary you downloaded and use the [cosign](https://docs.sigstore.dev/cosign/system_config/installation/) command line tool.
|
|
|
|
```sh
|
|
cosign verify-blob gitea-@version@-linux-amd64 --bundle gitea-@[email protected] --certificate-oidc-issuer=https://token.actions.githubusercontent.com --certificate-identity-regexp="https://github.com/go-gitea/gitea/.github/workflows/release-.*"
|
|
```
|
|
|
|
If the command outputs `Verified OK`, binary was not modified.
|
|
|
|
:::note
|
|
The above command will match any release workflow. You may choose to restrict the identity further by requiring a specific branch or workflow to be matched. For example this url will match only nightly builds made on main branch: `https://github.com/go-gitea/gitea/.github/workflows/release-nightly.yml@refs/heads/main`
|
|
:::
|
|
|
|
### GPG
|
|
|
|
Gitea signs all binaries with a [GPG key](https://keys.openpgp.org/search?q=teabot%40gitea.io) to prevent against unwanted modification of binaries.
|
|
To validate the binary, download the signature file which ends in `.asc` for the binary you downloaded and use the GPG command line tool.
|
|
|
|
```sh
|
|
gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
|
|
gpg --verify gitea-@[email protected] gitea-@version@-linux-amd64
|
|
```
|
|
|
|
Look for the text `Good signature from "Teabot <[email protected]>"` to assert a good binary,
|
|
despite warnings like `This key is not certified with a trusted signature!`.
|
|
|
|
|
|
## Recommended server configuration
|
|
|
|
:::note
|
|
Many of the following directories can be configured using [Environment Variables](../administration/environment-variables.md) as well!
|
|
Of note, configuring `GITEA_WORK_DIR` will tell Gitea where to base its working directory, as well as ease installation.
|
|
:::
|
|
|
|
### Prepare environment
|
|
|
|
Check that Git is installed on the server. If it is not, install it first. Gitea requires Git version >= 2.0.
|
|
|
|
```sh
|
|
git --version
|
|
```
|
|
|
|
Create a user to run Gitea (e.g. `git`)
|
|
|
|
```sh
|
|
# On Ubuntu/Debian:
|
|
adduser \
|
|
--system \
|
|
--shell /bin/bash \
|
|
--gecos 'Git Version Control' \
|
|
--group \
|
|
--disabled-password \
|
|
--home /home/git \
|
|
git
|
|
|
|
# On Fedora/RHEL/CentOS:
|
|
groupadd --system git
|
|
adduser \
|
|
--system \
|
|
--shell /bin/bash \
|
|
--comment 'Git Version Control' \
|
|
--gid git \
|
|
--home-dir /home/git \
|
|
--create-home \
|
|
git
|
|
```
|
|
|
|
### Create required directory structure
|
|
|
|
```sh
|
|
mkdir -p /var/lib/gitea/{custom,data,log}
|
|
chown -R git:git /var/lib/gitea/
|
|
chmod -R 750 /var/lib/gitea/
|
|
mkdir /etc/gitea
|
|
chown root:git /etc/gitea
|
|
chmod 770 /etc/gitea
|
|
```
|
|
|
|
:::note
|
|
> `/etc/gitea` is temporarily set with write permissions for user `git` so that the web installer can write the configuration file. After the installation is finished, it is recommended to set permissions to read-only using:
|
|
:::
|
|
|
|
>
|
|
> ```sh
|
|
> chmod 750 /etc/gitea
|
|
> chmod 640 /etc/gitea/app.ini
|
|
> ```
|
|
|
|
If you don't want the web installer to be able to write to the config file, it is possible to make the config file read-only for the Gitea user (owner/group `root:git`, mode `0640`) however you will need to edit your config file manually to:
|
|
|
|
* Set `INSTALL_LOCK= true`,
|
|
* Ensure all database configuration details are set correctly
|
|
* Ensure that the `SECRET_KEY` and `INTERNAL_TOKEN` values are set. (You may want to use the `gitea generate secret` to generate these secret keys.)
|
|
* Ensure that any other secret keys you need are set.
|
|
|
|
See the [command line documentation](../administration/command-line.md) for information on using `gitea generate secret`.
|
|
|
|
### Configure Gitea's working directory
|
|
|
|
:::note
|
|
If you plan on running Gitea as a Linux service, you can skip this step, as the service file allows you to set `WorkingDirectory`. Otherwise, consider setting this environment variable (semi-)permanently so that Gitea consistently uses the correct working directory.
|
|
:::
|
|
|
|
```sh
|
|
export GITEA_WORK_DIR=/var/lib/gitea/
|
|
```
|
|
|
|
### Copy the Gitea binary to a global location
|
|
|
|
```sh
|
|
cp gitea /usr/local/bin/gitea
|
|
```
|
|
|
|
|
|
### Adding shell autocompletion (from 1.25)
|
|
|
|
Shell completion can be generated directly from binary with:
|
|
```sh
|
|
gitea completion <shell>
|
|
```
|
|
|
|
Supported values for `<shell>` are `bash`, `fish`, `pwsh` and `zsh`. Details on how to load the completion for your shell can be found in the completion command help.
|
|
|
|
## Running Gitea
|
|
|
|
After you complete the above steps, you can run Gitea two ways:
|
|
|
|
:::note
|
|
On a distribution with SELinux in enforcing mode (Fedora, RHEL, CentOS Stream,
|
|
Rocky Linux, AlmaLinux and others), the binary and the data directory need
|
|
labels the default policy does not give them, and binding to a port below 1024
|
|
takes an extra step. See [running Gitea with SELinux](selinux.md).
|
|
:::
|
|
|
|
### 1. Creating a service file to start Gitea automatically (recommended)
|
|
|
|
See how to create [Linux service](installation/run-as-service-in-ubuntu.md)
|
|
|
|
### 2. Running from command-line/terminal
|
|
|
|
```sh
|
|
GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini
|
|
```
|
|
|
|
## Updating to a new version
|
|
|
|
You can update to a new version of Gitea by stopping Gitea, replacing the binary at `/usr/local/bin/gitea` and restarting the instance.
|
|
The binary file name should not be changed during the update to avoid problems in existing repositories.
|
|
|
|
It is recommended that you make a [backup](../administration/backup-and-restore.md) before updating your installation.
|
|
|
|
If you have carried out the installation steps as described above, the binary should
|
|
have the generic name `gitea`. Do not change this, i.e. to include the version number.
|
|
|
|
### 1. Restarting Gitea with systemd (recommended)
|
|
|
|
As we explained before, we recommend to use systemd as the service manager. In this case, `systemctl restart gitea` should be fine.
|
|
|
|
### 2. Restarting Gitea without systemd
|
|
|
|
To restart your Gitea instance, we recommend to use SIGHUP signal. If you know your Gitea PID, use `kill -1 $GITEA_PID`, otherwise you can use `killall -1 gitea`.
|
|
|
|
To gracefully stop the Gitea instance, a simple `kill $GITEA_PID` or `killall gitea` is enough.
|
|
|
|
:::note
|
|
We don't recommend to use the SIGKILL signal (`-9`); you may be forcefully stopping some of Gitea's internal tasks, and it will not gracefully stop (tasks in queues, indexers, etc.)
|
|
:::
|
|
|
|
See below for troubleshooting instructions to repair broken repositories after
|
|
an update of your Gitea version.
|
|
|
|
## Troubleshooting
|
|
|
|
### Old glibc versions
|
|
|
|
Older Linux distributions (such as Debian 7 and CentOS 6) may not be able to load the
|
|
Gitea binary, usually producing an error such as `./gitea: /lib/x86_64-linux-gnu/libc.so.6:
|
|
version 'GLIBC\_2.14' not found (required by ./gitea)`. This is due to the integrated
|
|
SQLite support in the binaries provided by dl.gitea.com. In this situation, it is usually
|
|
possible to [install from source](installation/from-source.md), without including
|
|
SQLite support.
|
|
|
|
### Running Gitea on another port
|
|
|
|
For errors like `702 runWeb()] [E] Failed to start server: listen tcp 0.0.0.0:3000:
|
|
bind: address already in use`, Gitea needs to be started on another free port. This
|
|
is possible using `./gitea web -p $PORT`. It's possible another instance of Gitea
|
|
is already running.
|
|
|
|
### Running Gitea on Raspbian
|
|
|
|
As of v1.8, there is a problem with the arm7 version of Gitea, and it doesn't run on Raspberry Pis and similar devices.
|
|
|
|
It is recommended to switch to the arm6 version, which has been tested and shown to work on Raspberry Pis and similar devices.
|
|
|
|
{/* please remove after fixing the arm7 bug */}
|
|
### Git error after updating to a new version of Gitea
|
|
|
|
If during the update, the binary file name has been changed to a new version of Gitea,
|
|
Git Hooks in existing repositories will not work any more. In that case, a Git
|
|
error will be displayed when pushing to the repository.
|
|
|
|
```
|
|
remote: ./hooks/pre-receive.d/gitea: line 2: [...]: No such file or directory
|
|
```
|
|
|
|
The `[...]` part of the error message will contain the path to your previous Gitea
|
|
binary.
|
|
|
|
To solve this, go to the admin options and run the task `Resynchronize pre-receive,
|
|
update and post-receive hooks of all repositories` to update all hooks to contain
|
|
the new binary path. Please note that this overwrites all Git Hooks, including ones
|
|
with customizations made.
|
|
|
|
If you aren't using the Gitea built-in SSH server, you will also need to re-write
|
|
the authorized key file by running the `Update the '.ssh/authorized_keys' file with
|
|
Gitea SSH keys.` task in the admin options.
|