Setting Up Gitea on a Custom Server with Docker Compose and Nginx
Prerequisites
Before we begin, ensure you have the following:
A server running Ubuntu with Docker and Docker Compose installed.
A domain name pointing to your server's IP address.
Basic understanding of Docker, Docker Compose, and Nginx configuration.
Step 1: Docker Compose Configuration
Create a docker-compose.yml
file with the following contents:
version: "3"
networks:
gitea:
external: false
services:
server:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- DB_TYPE=mysql
- DB_HOST=db:3306
- DB_NAME=gitea
- DB_USER=gitea
- DB_PASSWD=gitea
restart: always
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: mysql:5.7
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
- MYSQL_DATABASE=gitea
networks:
- gitea
volumes:
- ./mysql:/var/lib/mysql
This configuration defines two services: server
for Gitea and db
for MySQL.
Step 2: Nginx Configuration
Next, configure Nginx as a reverse proxy for Gitea. Replace the contents of your Nginx configuration file (usually located at /etc/nginx/sites-available/default
) with the following:
server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://localhost:3000;
}
}
Replace your_
domain.com
with your actual domain name.
Step 3: Bringing Up Gitea
Navigate to the directory containing your docker-compose.yml
file and run the following command to start Gitea:
docker-compose up -d
This command will start the Gitea and MySQL containers in detached mode.
Step 4: Testing Gitea
Open your web browser and navigate to your domain (e.g., https://your_domain.com
). You should see the Gitea login page. Follow the prompts to set up your admin account and start using Gitea to manage your Git repositories.
Step 5: Configuring Auto-Start
To ensure Gitea starts automatically when your server boots up, you can use systemd to create a service unit. Follow these steps:
Create a systemd service unit file for Gitea:
sudo nano /etc/systemd/system/gitea.service
Paste the following configuration into the file:
[Unit] Description=Gitea (Git with a cup of tea) After=syslog.target After=network.target After=mysql.service # Make sure Gitea starts after MySQL [Service] RestartSec=2s Type=simple User=root WorkingDirectory=/path/to/your/gitea/directory ExecStart=/usr/local/bin/docker-compose up -d ExecStop=/usr/local/bin/docker-compose down [Install] WantedBy=multi-user.target
Replace
/path/to/your/gitea/directory
with the absolute path to the directory containing yourdocker-compose.yml
file.Save the file and exit the text editor.
Reload systemd to load the new service unit:
sudo systemctl daemon-reload
Enable the Gitea service to start on boot:
sudo systemctl enable gitea.service
Now, Gitea will start automatically when your server boots up. You can control the service using systemd commands like
start
,stop
,restart
, andstatus
.That's it! Gitea is now set up to start automatically with your server.
Subscribe to my newsletter
Read articles from Tarik Omercehajic directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by