config | ||
Dockerfile | ||
README.md | ||
setup.sh |
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 serverVIRTUAL_PORT
: tells the front proxy on which port to contact the backend serverGOGS_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 SQLite3Domain
is set to your domainSSH Port
is set to what you specified inGITEA_SSH_PORT
(or 22 for default)Application URL
ishttps://<domain>/
(nothttp
) 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 GITEA_SSH_PORT=<ssh-port> \
-p <sshport>:<sshport> \
hasufell/alpine-gitea