Install Gitea on Nginx and Secure it with Let’s Encrypt

Gitea is a free-software clone of Github, which is lightweight and released under MIT license.

I assume you are running Debian 9 and have already installed nginx.

0. Connect to the server using ssh

0.1 $ ssh myusername@ip.address.of.server

1. Create the gitea user account.

To have a clean directory, we create a separate gitea user account.

1.1 $ sudo adduser --disabled-login gitea #it is advised to disable direct login, because we do not need it.
1.2 $ sudo --login --user gitea
1.3 $ cd /home/gitea

2. Download and run gitea

Download the latest release of Gitea, from this address,, it is 1.6 at the time of writing.

2.1 $ wget -O gitea
2.2 $ chmod +x gitea #give execution permission
2.3 $ ./gitea web

3. Install and use MariaDB

3.1 $ sudo apt install mariadb-server
3.2 $ sudo mariadb
Now, create a database using the following commands, replace localhost and your-password-here.

MariaDB [(none)]> CREATE DATABASE `gitea` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_general_ci`;
MariaDB [(none)]> CREATE USER `giteauser`@'localhost' IDENTIFIED BY 'your-password-here';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON `gitea`.* TO `giteauser`@`localhost`;
MariaDB [(none)]> \q

4. Install and setup Let’s Encrypt

I assume here that the domain is

4.1 $ sudo apt install certbot python-certbot-nginx
4.2 $ sudo service nginx stop #be careful, we stop the server here.
4.3 $ sudo certbot certonly --standalone -d
4.4 $ sudo service nginx start

5. Setup a subdomain with Nginx

5.1 $ sudo nano /etc/nginx/sites-available/

server {  
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/;
    ssl_certificate_key /etc/letsencrypt/live/;

    location / {
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_pass http://localhost:3000;

# Redirect HTTP requests to HTTPS
server {  
    listen 80;
    return 301 https://$host$request_uri;

5.2 $ sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/
5.3 $ sudo service nginx restart

6. Install git

6.1 $ sudo apt install git

7. Run gitea and follow the setup

7.1 $ nohup ./gitea web
7.2 visit,

Build Emacs on Debian 9

# install git
$ sudo apt install git

# install build dependencies of emacs 25 (the current version in Debian repo)
$ sudo apt build-dep emacs25

# clone the master branch of repo (current bleeding-edge version is 25)
# download size approx. 235 MiB
$ git clone -b master git://

# or alternatively, you can download the current stable release of emacs
# download size approx. 55 MiB
# Switzerland mirror
# change directory
$ cd emacs

# generate configure script
$ ./ all

# configure your build
$ ./configure --with-mailutils

# build emacs
$ make

# run emacs (the binary file is in src/emacs directory)
$ src/emacs

# (optional) move the binary files to the system directory to be available globally
$ sudo make install

# (optional) uninstall the newly installed emacs
# change to the emacs source directory
$ cd emacs
$ sudo make uninstall

Fix Font Rendering in Debian

The default font rendering in Debian 8 or Debian 9 sucks. To solve it you can copy the content below,
<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
 <match target="font">
  <edit mode="assign" name="rgba">
 <match target="font">
  <edit mode="assign" name="hinting">
 <match target="font">
  <edit mode="assign" name="hintstyle">
 <match target="font">
  <edit mode="assign" name="antialias">
  <match target="font">
    <edit mode="assign" name="lcdfilter">
to the following file:
Or alternatively, you can use the following command to do the aforementioned task automatically. Do not blindly trust the files you find on the Internet. After checking my git repo here, run the following command in terminal.
$ bash <(curl -s

Change Default Media Folder in WordPress to Download Repository on Tuxfamily

  1. Install wordpress
  2. Install WP Original Media Path plugin on WordPress
  3. Create a directory in download repository, <your-sub-dir>
  4. Go to Settings > WP Original Media Path
    1. check Activate that if you are aware of what you are doing.
    2. Change Store uploads in this folder to /data/repository/<your-project>/<your-sub-dir>
    3. Change Full URL path to files to<your-project>/<your-sub-dir>


My project on Tuxfamily is called smohaorg and I created a subdirectory in download section which is named wordpressmedia, so I have to use the following:
  • /data/repository/smohaorg/wordpressmedia