No Description
docker
Julian Ospald 1e4b4a9d9a
Fix
1 year ago
config Fix 1 year ago
Dockerfile Fix 1 year ago
README.md Fix 1 year ago
setup.sh Fix 1 year ago

README.md

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:

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).

docker run \
	--name=gitea-volumes \
	-v /data \
	hasufell/alpine-gitea \
	echo gitea-volumes

Now we start the front proxy.

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.

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:

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

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