In this tutorial, I’ll show you how to install gitea using docker-compose and jrc/letsencrypt-nginx-proxy-companion for https.
Setup the containers for let’s encrypt
The best docker-compose I have found to easily use let’s encrypt with my containers is https://hub.docker.com/r/jrcs/letsencrypt-nginx-proxy-companion/.
Here is the docker-compose.yml file needed to get you up and running:
version: '3' services: proxy: build: ./proxy restart: always ports: - 80:80 - 443:443 labels: com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true" volumes: - certs:/etc/nginx/certs:ro - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/tmp/docker.sock:ro networks: - proxy-tier letsencrypt-companion: image: jrcs/letsencrypt-nginx-proxy-companion restart: always volumes: - certs:/etc/nginx/certs - vhost.d:/etc/nginx/vhost.d - html:/usr/share/nginx/html - /var/run/docker.sock:/var/run/docker.sock:ro networks: - proxy-tier depends_on: - proxy volumes: certs: vhost.d: html: networks: proxy-tier:
Create a folder named “proxy”:
mkdir proxy
Create two files:
touch Dockerfile uploadsize.conf
In Dockerfile, add:
FROM jwilder/nginx-proxy:alpine COPY uploadsize.conf /etc/nginx/conf.d/uploadsize.conf
In uploadsize.conf, add:
client_max_body_size 10G; proxy_request_buffering off;
Start the containers:
docker-compose up -d
Setup gitea
To begin with, you’ll need a valid domain name. For this example, I’ll use git.toto.com.
Create a folder named gitea:
mkdir gitea
Go in your newly created folder:
cd gitea
In your terminal, type docker network ls
and note the name of the network finishing in “proxy-tier”. In my example, it would be docker_letsencrypt_proxy-tier
We will then create a file that will store variables which will be used by docker-compose. In your terminal, type:
touch .env
In .env
, add the following (change URL with your domain name, NETWORK with the output of the last command and DB_PASSWD with a strong password). In my example, the file would look like:
URL=git.toto.com
NETWORK=docker_letsencrypt_proxy-tier
DB_PASSWD=[choose a password]
Create a docker-compose.yml
file:
touch docker-compose.yml
Paste the following:
version: "2"
volumes:
gitea-db:
driver: local
services:
server:
image: gitea/gitea:1
environment:
- USER_UID=1000
- USER_GID=1000
- DB_TYPE=postgres
- DB_HOST=db:5432
- DB_NAME=gitea
- DB_USER=gitea
- DB_PASSWD=${DB_PASSWD}
- DOMAIN=${URL}
- SSH_DOMAIN=${URL}
- DISABLE_REGISTRATION=true
- VIRTUAL_HOST=${URL}
- VIRTUAL_PORT=3000
- LETSENCRYPT_HOST=${URL}
- LETSENCRYPT_EMAIL=rkouere@gmaim.com
restart: always
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "2222:22"
depends_on:
- db
expose:
- 3000
db:
image: postgres:9.6
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=${DB_PASSWD}
- POSTGRES_DB=gitea
volumes:
- gitea-db:/var/lib/postgresql/data
networks:
default:
external:
name: ${NETWORK}
When you see the log ending up in Starting new server: tcp:0.0.0.0:3000 on PID: 15
, press Ctrl-C
Modify gitea/gitea/conf/app.ini
with the following:
ROOT_URL = https://git.toto.com REDIRECT_OTHER_PORT = true ; Port the redirection service should listen on PORT_TO_REDIRECT = 463
Restart the container, wait for about 1 minute (the time it should take for the let’s encrypt to generate the certificate) and try to log on your gitea website.
Use SSH to clone/pull a repo
As you may have noticed, the port of the host that we have bound for ssh is 2222. It means that the git client will have to use this port and not the default 22 in order to interact with the server. Luckily, this is very easy to setup by adding, on the client’s machine, the following line to ~/.ssh.config
:
Host git.toto.com
Port 2222