How to setup a webtrees server on a Debian 9 Proxmox container

From steamWiki
Jump to: navigation, search

webtrees is a pretty cool opensource genealogy web server. It allows you to setup a website to display your family history. You can use webtrees to create your family tree or import a family tree from popular services like Ancestry.com and MyHeritage.com.

This article describes how I setup a webtrees server on a Debian 9 based Linux Container (LXC) under Proxmox and made the page available on the internet using an Apache2 Reverse Proxy

Setup the Container

  1. Using the Proxmox web interface, create a new Container using the Debian 9 template.
  2. Log into the container, with the root account, using the Proxmox web console
  3. Update, Upgrade, and Install a few packages by running
    apt update
    apt upgrade
    apt install sudo unzip
  4. Update the timezone by running
    timedatectl set-timezone America/New_York
    • change America/New_York to a location relevant to your physical location using the "TZ database name" in this table
  5. Add a user and give them sudo access by running
    useradd admin
    usermod -aG sudo admin
  6. Exit the web console and ssh in as the admin user
    ssh admin@CONTAINERNAME

Setup a MariaDB Database

  1. install the necessary packages, secure the installation, and log into the mysql database by running
    sudo apt install mariadb-server mariadb-client
    sudo mysql_secure_installation
    • The current root password is blank
    • Create a new root password
    • Answer Yes to all questions
  2. Log into the mysql database as root by running
    sudo mysql
  3. Create a database and user for webtrees by running
    CREATE DATABASE webtreesDB;
    GRANT ALL PRIVILEGES ON webtreesDB.* TO 'webtrees'@'localhost' IDENTIFIED BY 'WEBtreesPASSWORD';
    FLUSH PRIVILEGES;
    exit

Setup an Apache2 Web Server

  1. Install Apache 2 by running
    sudo apt install apache2
  2. visit http://CONTAINERNAME/ in a browser and you should see the default Apache2 server page

Setup PHP7

  1. Install necessary PHP packages by running
    sudo apt install php libapache2-mod-php php-mysql php-apcu php-xml php-gd
  2. Edit the php.ini file by running
    sudo nano /etc/php/7.0/apache2/php.ini
    and configuring upload_max_filesize
    upload_max_filesize = 20M
    to ensure that you can upload reasonably sized GEDCOM files from the web interface
  3. Restart Apache2 by running
    systemctl restart apache2
  4. Ensure that PHP is running with the following
    sudo nano /var/www/html/info.php
    fill it in with the following
    <?php
    phpinfo();
    ?>
    save and exit by hitting Ctrl+C and Y Then go to http://CONTAINERNAME/info.php and you should see the default PHP info page
  5. Delete this page by running
    sudo rm /var/www/html/info.php

Setup webtrees

  1. Change directories to the web root by running
    cd /var/www/html
  2. Download the latest copy of webtrees by running
    sudo wget https://github.com/fisharebest/webtrees/releases/download/1.7.13/webtrees-1.7.13.zip
  3. Uncompress the files by running
    sudo unzip webtrees-1.7.13.zip
  4. Delete the compressed file by running
    sudo rm webtrees-1.7.13.zip
  5. visit http://containername/webtrees/ to finish the setup
    1. fix any server configuration or server capacity problems (there shouldn't be any if the above packages were installed)
    2. for the database login info enter webtrees as the user and WEBtreesPASSWORD as the password
    3. for the database name enter webtreesDB
    4. you can leave the table prefix name <blank> since this is a container and you probably shouldn't be sharing the database with other webtrees installations
    5. Enter your name, select a username, select a password, and select an email for the next sections.
    6. Sign in to Webtrees using the username and password you just picked out
    7. Create a new family tree named something like Conan the Barbarian Family Tree
    8. Give it a short name like conan
    9. Under Website preferences
      1. Select America/New_York (or whatever your location is) for the timezone
      2. Make sure Show list of family trees is set to yes if you think you'll ever have more than one family tree on your page.
    10. Under Sign-in and registration
      1. Set Welcome text on sign-in page to Predefined text that states that only family members can request a user account (or whatever you want)
      2. Set Show acceptable use agreement on "Request a new user account" page to no (or whatever you want)
    11. Under Languages
      1. uncheck any languages you don't want to support
      2. check any extra languages you do want to support

Setup the Reverse Proxy

  1. On your webtrees container modify line 173 of /var/www/html/webtrees/includes/sessions.php by running
    sudo nano /var/www/html/includes/sessions.php
    and changing
    define('WT_BASE_URL', $base_uri);
    to
    define('WT_BASE_URL', 'https://mypublicdomain.com/webtrees/');
  2. Log into your Reverse Proxy machine/container (assumed to be on Debian 9 with permanent redirects from http to https)
  3. If you want to put an htpasswd based password on the front of the site then create an htpasswd file by running
    sudo htpasswd -c /etc/apache2/.webtrees_htpasswd username
  4. Add a redirect (from HTTP to HTTPS) to Apache by running
    sudo nano /etc/apache2/sites-enabled/000-default.conf
    and adding the following under the <VirtualHost *:80> tag
    Redirect permanent /webtrees https://steamforge.net/webtrees
  5. Add the Proxy calls to Apache by running the following
    sudo nano /etc/apache2/sites-enabled/000-default-ssl.conf
    and adding the following under the <VirtualHost _default_:443> tag
    #webtrees
    <Location /webtrees>
        AuthType Basic
        AuthName "Enter username/password to access webtrees"
        AuthBasicProvider file
        AuthUserFile "/etc/apache2/.webtrees_htpasswd"
        Require valid-user
    
        ProxyPreserveHost On
        ProxyPass http://containername/webtrees
        ProxyPassReverse http://containername/webtrees
    </Location>
    • leave off the first block about Authentication if you didn't create .webtrees_htpasswd