2017-11-26 14:44:32 -07:00
---
date: "2017-06-19T12:00:00+02:00"
title: "Installation from binary"
slug: "install-from-binary"
weight: 10
toc: true
draft: false
menu:
sidebar:
parent: "installation"
name: "From binary"
weight: 20
identifier: "install-from-binary"
---
# Installation from binary
2018-01-08 15:48:42 -07:00
All downloads come with SQLite, MySQL and PostgreSQL support, and are built with
embedded assets. This can be different for older releases. Choose the file matching
2019-01-28 08:53:16 -07:00
the destination platform from the [downloads page ](https://dl.gitea.io/gitea/ ), copy
2018-01-08 15:48:42 -07:00
the URL and replace the URL within the commands below:
2017-11-26 14:44:32 -07:00
2018-06-04 20:02:04 -06:00
```sh
2019-01-28 08:53:16 -07:00
wget -O gitea https://dl.gitea.io/gitea/1.7.0/gitea-1.7.0-linux-amd64
2017-11-26 14:44:32 -07:00
chmod +x gitea
```
2018-07-05 19:36:55 -06:00
## Verify GPG signature
2019-03-09 14:15:45 -07:00
Gitea signs all binaries with a [GPG key ](https://pgp.mit.edu/pks/lookup?op=vindex&fingerprint=on&search=0x2D9AE806EC1592E2 ) 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.
2018-07-05 19:36:55 -06:00
```sh
2018-10-17 22:15:02 -06:00
gpg --keyserver pgp.mit.edu --recv 7C9E68152594688862D62AF62D9AE806EC1592E2
2019-01-28 08:53:16 -07:00
gpg --verify gitea-1.7.0-linux-amd64.asc gitea-1.7.0-linux-amd64
2018-07-05 19:36:55 -06:00
```
2017-11-26 14:44:32 -07:00
## Test
2018-01-08 15:48:42 -07:00
After getting a binary, it can be tested with `./gitea web` or moved to a permanent
location. When launched manually, Gitea can be killed using `Ctrl+C` .
2017-11-26 14:44:32 -07:00
```
./gitea web
```
2018-06-04 20:02:04 -06:00
## Recommended server configuration
2019-02-28 05:09:47 -07:00
**NOTE:** Many of the following directories can be configured using [Environment Variables ]({{< relref "doc/advanced/specific-variables.en-us.md" >}} ) as well!
Of note, configuring `GITEA_WORK_DIR` will tell Gitea where to base its working directory, as well as ease installation.
2018-06-04 20:02:04 -06:00
### Prepare environment
2019-03-09 14:15:45 -07:00
Check that Git is installed on the server. If it is not, install it first.
2018-06-04 20:02:04 -06:00
```sh
git --version
```
2019-03-09 14:15:45 -07:00
Create user to run Gitea (ex. `git` )
2018-06-04 20:02:04 -06:00
```sh
adduser \
--system \
--shell /bin/bash \
--gecos 'Git Version Control' \
--group \
--disabled-password \
--home /home/git \
git
```
### Create required directory structure
```sh
2019-02-28 05:09:47 -07:00
mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
2018-06-04 20:02:04 -06:00
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea
```
2019-03-09 14:15:45 -07:00
**NOTE:** `/etc/gitea` is temporary set with write rights for user `git` so that Web installer could write configuration file. After installation is done, it is recommended to set rights to read-only using:
2018-06-04 20:02:04 -06:00
```
chmod 750 /etc/gitea
chmod 644 /etc/gitea/app.ini
```
2019-04-04 08:21:54 -06:00
If you don't want the web installer to be able to write the config file at all, it is also possible to make the config file read-only for the gitea user (owner/group `root:root` , mode `0660` ), and set `INSTALL_LOCK = true` . In that case all database configuration details must be set beforehand in the config file, as well as the `SECRET_KEY` and `INTERNAL_TOKEN` values. See the [command line documentation ]({{< relref "doc/usage/command-line.en-us.md" >}} ) for information on using `gitea generate secret INTERNAL_TOKEN` .
2018-06-04 20:02:04 -06:00
2019-02-28 05:09:47 -07:00
### 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.
```
export GITEA_WORK_DIR=/var/lib/gitea/
```
2019-03-09 14:15:45 -07:00
### Copy Gitea binary to global location
2018-06-04 20:02:04 -06:00
```
cp gitea /usr/local/bin/gitea
```
2019-02-28 05:09:47 -07:00
## Running Gitea
After the above steps, two options to run Gitea are:
### 1. Creating a service file to start Gitea automatically (recommended)
2018-06-04 20:02:04 -06:00
See how to create [Linux service ]({{< relref "run-as-service-in-ubuntu.en-us.md" >}} )
2019-02-28 05:09:47 -07:00
### 2. Running from command-line/terminal
```
GITEA_WORK_DIR=/var/lib/gitea/ /usr/local/bin/gitea web -c /etc/gitea/app.ini
```
2018-07-30 09:35:05 -06:00
## Updating to a new version
2019-03-09 14:15:45 -07:00
You can update to a new version of Gitea by stopping Gitea, replacing the binary at `/usr/local/bin/gitea` and restarting the instance.
2018-07-30 09:35:05 -06:00
The binary file name should not be changed during the update to avoid problems
in existing repositories.
It is recommended you do a [backup ]({{< relref "doc/usage/backup-and-restore.en-us.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.
See below for troubleshooting instructions to repair broken repositories after
2019-03-09 14:15:45 -07:00
an update of your Gitea version.
2018-07-30 09:35:05 -06:00
2017-11-26 14:44:32 -07:00
## Troubleshooting
### Old glibc versions
2018-01-08 15:48:42 -07:00
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.io. In this situation, it is usually
possible to [install from source ]({{< relref "from-source.en-us.md" >}} ) without sqlite
support.
2017-11-26 14:44:32 -07:00
2019-03-09 14:15:45 -07:00
### Running Gitea on another port
2017-11-26 14:44:32 -07:00
2018-01-08 15:48:42 -07:00
For errors like `702 runWeb()] [E] Failed to start server: listen tcp 0.0.0.0:3000:
2019-03-09 14:15:45 -07:00
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
2018-01-08 15:48:42 -07:00
is already running.
2018-07-30 09:35:05 -06:00
2019-03-09 14:15:45 -07:00
### Git error after updating to a new version of Gitea
2018-07-30 09:35:05 -06:00
2019-03-09 14:15:45 -07:00
If the binary file name has been changed during the update to a new version of Gitea,
2018-07-30 09:35:05 -06:00
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
```
2019-03-09 14:15:45 -07:00
The `[...]` part of the error message will contain the path to your previous Gitea
2018-07-30 09:35:05 -06:00
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 overwrite all git hooks including ones
with customizations made.
2019-03-09 14:15:45 -07:00
If you aren't using the built-in to Gitea SSH server you will also need to re-write
2018-07-30 09:35:05 -06:00
the authorized key file by running the `Update the '.ssh/authorized_keys' file with
Gitea SSH keys.` task in the admin options.