# 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 :/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= \ -e VIRTUAL_PORT=3000 \ -e GITEA_SSH_PORT= \ -p : \ 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:///` (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= \ -e VIRTUAL_PORT=3000 \ -e SSH_PORT= \ -p : \ hasufell/alpine-gitea ```