= Install Trac on Ubuntu proxied by Nginx = [[PageOutline(2-5,Contents,pullout)]] 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 :P but a find+replace would help you a lot. Be aware you might run all of these commands with the `sudo -H` {{{#!div class="important" **important** remember to replace the `https://trac-hacks.org/svn/fullblogplugin/0.11` with [https://trac-hacks.org/wiki/FullBlogPlugin latest verion] }}} {{{#!bash 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 {{{#!bash 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 :( {{{#!bash 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 {{{#!bash chown -R UserName:GroupName /var/www/trac/ chmod -R 775 /var/www/trac/ }}} == Preparation to Enable GIT source == To enable git source browsing via Admin we need another subfolder {{{#!bash mkdir -p /var/www/trac/git }}} == Systemd startup script == #SystemD In your `/etc/systemd/system/` make this new file --> {{{#!bash nano /etc/systemd/system/tracd.service }}} {{{#!ini [Unit] Description=TrackD Daemon After=network.target [Service] ExecStart=/usr/local/bin/tracd -p 3050 --protocol=http --basic-auth="*,/var/www/trac/.htpasswd,Restricted" -s /var/www/trac Type=simple User=UserName Group=GroupName [Install] WantedBy=multi-user.target }}} == 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 {{{#!nginx-conf upstream live_trachosts_com { server 127.0.0.1:3050; } }}} 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 [[br]] `nano /etc/nginx/conf.d/site.conf` {{{#!nginx-conf server { listen 123.123.123.123:80; 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 :( {{{#!bash a2enmod python nano /etc/apache2/sites-available/trac.conf }}} {{{#!apacheconf ServerName trac.local 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 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 [[br]] `/var/www/trac` --> `/full/path/to/trac` [[br]] `adminusername` --> `YourUserName` to be used as the track admin [[br]] `UserName` --> The username for which trac daemon runs as ex. `Your login UserName` [[br]] `GroupName` --> The group name for which trac daemon runs as ex `www-data` [[br]] `trac.local` --> `full.domain.tld` [[br]] `live_trachosts_com` --> to what suits your needs [[br]] `123.123.123.123` --> 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 {{{#!bash $ 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 }}} === Which list === A complete HOWTO copy/paste guide to make Nginx running as "Front-end" of trac