108 lines
3.0 KiB
Markdown
108 lines
3.0 KiB
Markdown
# Gitea via Docker
|
|
|
|
## Concept
|
|
|
|
* nginx reverse proxy (in docker container), automatically configured (except for the ssl certificates)
|
|
* backend gitea instance (in docker container)
|
|
|
|
## Getting the images
|
|
|
|
Just pull them:
|
|
```sh
|
|
docker pull hasufell/alpine-gitea
|
|
docker pull hasufell/alpine-nginx-proxy
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Gogs is configured via the web interface once the instance has started.
|
|
|
|
In addition, the following environment variables can be passed via `-e` to
|
|
`docker run`:
|
|
* `VIRTUAL_HOST`: sets the hostname for connecting to the gitea backend server
|
|
* `VIRTUAL_PORT`: tells the front proxy on which port to contact the backend server
|
|
* `GOGS_SSH_PORT`: this only changes the port of the sshd service, you will still have to adjust it in the web configuration interface (optional, default 22)
|
|
|
|
### Certificates
|
|
|
|
We need certificates which are named according to the hostname
|
|
of the gitea instance (e.g. if you will access gitea via
|
|
`https://gitea.foo.com`, then you name your certificates files
|
|
`gitea.foo.crt` and `gitea.foo.key`).
|
|
|
|
Just drop these in a directory. We will mount this directory into the
|
|
container later.
|
|
|
|
## Running for the first time
|
|
|
|
Create the volumes. This will create a persistent data volume container.
|
|
You should not remove it (keep in mind that this container is not running).
|
|
```sh
|
|
docker run \
|
|
--name=gitea-volumes \
|
|
-v /data \
|
|
hasufell/alpine-gitea \
|
|
echo gitea-volumes
|
|
```
|
|
|
|
Now we start the front proxy.
|
|
```sh
|
|
docker run -ti -d \
|
|
-v /var/run/docker.sock:/tmp/docker.sock:ro \
|
|
-v <full-path-to-nginx-certs>:/etc/nginx/certs \
|
|
-p 80:80 \
|
|
-p 443:443 \
|
|
hasufell/alpine-nginx-proxy
|
|
```
|
|
|
|
Now we can start the gitea instance.
|
|
|
|
```sh
|
|
docker run -ti -d \
|
|
--volumes-from gitea-volumes \
|
|
--name=gitea \
|
|
-e VIRTUAL_HOST=<hostname> \
|
|
-e VIRTUAL_PORT=3000 \
|
|
-e GITEA_SSH_PORT=<ssh-port> \
|
|
-p <sshport>:<sshport> \
|
|
hasufell/alpine-gitea
|
|
```
|
|
|
|
Note that `VIRTUAL_HOST` and `VIRTUAL_PORT` are __strictly__ necessary,
|
|
because they are used by the front proxy to update its configuration
|
|
automatically.
|
|
|
|
When using a MySQL database, do something like:
|
|
|
|
```sh
|
|
docker exec -ti \
|
|
gitea-mysql \
|
|
/bin/bash -c "echo \"CREATE DATABASE gitea DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER gitea@'%' IDENTIFIED WITH mysql_native_password BY 'wurst'; GRANT ALL PRIVILEGES ON gitea.* TO gitea@'%';\" | mysql -u root -p"
|
|
```
|
|
|
|
Note that the initial mysql must be run with
|
|
`--default-authentication-plugin=mysql_native_password --default-storage-engine=InnoDB`
|
|
|
|
## Initial web configuration
|
|
|
|
Make sure:
|
|
* `Database Type` is SQLite3
|
|
* `Domain` is set to your domain
|
|
* `SSH Port` is set to what you specified in `SSH_PORT` (or 22 for default)
|
|
* `Application URL` is `https://<domain>/` (not `http`) _without_ the Port 3000
|
|
|
|
## Update procedure
|
|
```sh
|
|
docker stop gitea
|
|
docker rm gitea
|
|
docker pull hasufell/alpine-gitea
|
|
docker run -ti -d \
|
|
--volumes-from gitea-volumes \
|
|
--name=gitea \
|
|
-e VIRTUAL_HOST=<hostname> \
|
|
-e VIRTUAL_PORT=3000 \
|
|
-e SSH_PORT=<ssh-port> \
|
|
-p <sshport>:<sshport> \
|
|
hasufell/alpine-gitea
|
|
```
|