alpine-gitea/README.md

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
```