= Install Trac on Ubuntu proxied by Nginx =

How to install and run a single hosted Trac project from https://trac.edgewall.org

This guide should apply for the following debian variations:

* Debian 9
* Ubuntu 16.04
* Ubuntu 16.10
* LinuxMint 18.1
* LinuxMint 18.2

Here is a somewhat basic copy paste #bash script for this, however, there will be some manual labor for you πŸ˜› but a find+replace would help you a lot. Be aware you might run all of these commands with the `sudo -H`

**important** remember to replace the `https://trac-hacks.org/svn/fullblogplugin/0.11` with [https://trac-hacks.org/wiki/FullBlogPlugin latest verion]
apt-get install subversion libapache2-mod-python pypy python python-babel trac python-pip -y
pip install --upgrade pip
pip install --upgrade Babel
pip install --upgrade Trac
pip install --upgrade pillow
pip install dnspython
pip install spambayes
pip install oauth2
pip install httplib2
pip install TracTags
pip install TracSpamFilter 
pip install TracVote
easy_install --always-unzip https://trac-hacks.org/svn/fullblogplugin/0.11
mkdir -p /var/www/trac/

trac-admin /var/www/trac initenv

Follow the trac-admin guide…

Now lets test the trac before we do more

tracd --port 8000 /var/www/trac
lynx localhost:8000/trac

Great it’s working, then it’s time to setup a admin user and password for the admin account. Bad luck if it doesn’t as that is beyond this wiki and you’ll need to go https://duckduckgo.com to find a solution πŸ™

htpasswd -c /var/www/trac/.htpasswd adminusername
trac-admin /var/www/trac/ permission add adminusername TRAC_ADMIN

Replace `adminusername` with your desired username

Next we set the propper user and group permissions on the Trac folder to allow the Nginx/Apache/Trac server to access it

chown -R UserName:GroupName /var/www/trac/
chmod -R 775 /var/www/trac/

== Enable GIT source ==
To enable git source brosing we need another subfolder

mkdir -p /var/www/trac/git

== Systemd startup script == #SystemD

In your `/etc/systemd/system/` make this new file –>

nano /etc/systemd/system/tracd.service
Description=TrackD Daemon

ExecStart=/usr/local/bin/tracd -p 3050 --protocol=http --basic-auth="*,/var/www/trac/.htpasswd,Restricted" -s /var/www/trac


== Nginx configs ==
Now it’s time to do the NginX configureations πŸ™‚

First we have to make a reverse proxy to the Trac daemon we have made in [#SystemD Systemd startup script]

In the `/etc/nginx/nginx.conf` we’ll have to add a upstream for our reverse_proxy to Trac

  upstream live_trachosts_com {

Now make the site.conf file in your preferred location, which by default would be `/etc/nginx/conf.d/` for other it would be in `/etc/nginx/sites-available` but we go whit the default
`nano /etc/nginx/conf.d/site.conf`

server {
  server_name  trac.local;
  charset utf8;
  access_log  /var/log/nginx/trac.access.log;
  error_log  /var/log/nginx/trac.debug.log;

  location / {
    proxy_pass  http://live_trachosts_com;
    proxy_set_header Host $host;
  # redirect server error pages to the static page /50x.html
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
      root   /usr/share/nginx/html;

  # deny access to .htaccess files, if Apache's document root
  # concurs with nginx's one
  location ~ /\.ht {
      deny  all;

== Apache ==
And since you properly anyway use apache πŸ™ well here is that piece of code πŸ™

a2enmod python
nano /etc/apache2/sites-available/trac.conf
 ServerName trac.local
 <Location />
 SetHandler mod_python
 PythonInterpreter main_interpreter
 PythonHandler trac.web.modpython_frontend
 PythonOption TracEnv /var/www/trac
 PythonOption TracEnvParentDir /var/www/trac
 PythonOption TracUriRoot /
 PythonOption TracEnv /var/www/trac
 # PythonOption TracEnvIndexTemplate /var/www/trac/templates/index-template.html
 PythonOption TracLocale en_US.UTF8
 PythonOption PYTHON_EGG_CACHE /tmp
 Order allow,deny
 Allow from all
 <Location /login>
 AuthType Basic
 AuthName "myproject"
 AuthUserFile /var/www/trac/.htpasswd
 Require valid-user

To enable the trac site run `a2ensite trac.conf`

== Find/Replace ==
The following paths is to be replaced with your preferences
`/var/www/trac` –> `/full/path/to/trac`
`adminusername` –> `YourUserName` to be used as the track admin
`UserName` –> The username for which trac daemon runs as ex. `Your login UserName`
`GroupName` –> The group name for which trac daemon runs as ex `www-data`
`trac.local` –> `full.domain.tld`
`live_trachosts_com` –> to what suits your needs
`` –> if you are running both NginX and Apache on port 80/443 you’ll need to set the IP, but if you only runs Nginx or Apache you can delete the ip to listen on all address

== Versions ==
In this tutorial I have used the following software versions

$ uname -a
Linux hostname 4.11.0-14-generic #20~16.04.1-Ubuntu SMP Wed Aug 9 09:06:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
$ tracd --version
tracd 1.2.2
$ nginx -v
nginx version: nginx/1.13.6