Go to file
Julian Ospald 1e4b4a9d9a
2018-06-06 20:08:44 +02:00
config Fix 2018-06-06 20:08:44 +02:00
Dockerfile Fix 2018-06-06 20:08:44 +02:00
README.md Fix 2018-06-06 20:08:44 +02:00
setup.sh Fix 2018-06-06 20:08:44 +02:00


Gitea via Docker


  • 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


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)


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 \

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

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