Ancestry for Free: A Quest for Family History

Welcome to the first installment of our two-part series on preserving your family history with web-based genealogy tools. In this part, we’ll dive into the challenges my dad faced when using and how we found a solution to securely store and continue his family tree research. We think you should be able to preserve your ancestry for free. Stick around to the end, where I’ll provide step-by-step instructions for setting up a free web-based genealogy program. Setting up a family tree is easy and fun. Don’t worry if you can’t wait for Part 2; we’ve got you covered with the essentials right here.Ancestry for FreeI want to be objective because I know many people use the most popular genealogy provider online,, but I have a bit of a bone to pick with them. I will get right to it, then we can dissect it, and I will tell you my solution and how it might help someone else.

Just take me to the How-To!

This story all starts with a conversation I was having with my dad. My father is elderly, on a meager fixed income on social security, a history buff, and an overall good citizen. In my dad’s later years, he has become highly nostalgic. He always talks about his childhood, our Irish heritage, and how he wants to pass down our family history to his children and grandchildren. I have often asked my dad to please write a book, something to pass on these beautiful stories! Instead of writing a book, my father wanted to track and capture our heritage in a family tree and signed up for free trial.

According to my father, he found matches that were accurate right away. He also discovered photos, birth certificates, and other documents from Ancestry’s incredible search engines and databases. He could also find and connect with family members we had never met. He quickly passed the free trial time and could not bear to stop and decided to stay on their monthly plan. Unfortunately, after a few months, he ran out of what appeared to be leads to grow his tree further. However, Ancestry had another option, DNA. So my dad got the DNA kit and waited for his results.

Shortly after, my father’s results returned, connecting even more dots for him. He was very excited, and I remember he would tell me about matches and cousins he found and how he was making connections. I did not know much about the program or what it entailed except commercials I heard, but I was happy he was happy. Eventually, though, the matches went stale again. Also, financially, the monthly costs caught up with him, eating into his fixed income and showing an impact on his one credit card.

My dad would share that he did not feel that there was much he could do. He felt trapped because all of his information was there, and by canceling it, he would lose it. He is not technical, and even the lowest tier option was too expensive for him, and the couple of years he was putting this on his credit card had reached a tipping point.

Finally, my dad came to me for help. He told me he could not afford the service and would be distraught if he lost all the time he had put into the family tree. So, we faced a dilemma. How could we download the family tree? What about all of the media? Let’s put it in a safe location where he can easily open it in a program and continue his work, preferably for free; can we?

This is where I became upset with Ancestry. They know this would happen to people, and I also think that my dad’s feeling toward family history is a typical shift in older age. There is no easy way to retain all the incredible database information. You can download the GEDCOM file, but much of the data is not easily parsed by other programs; there is a ton of cleanup from proprietary data sources linked in the data file. Also, if you did not add all the text-based hints, they don’t download. Additionally, you can’t access the links to the documents you find in your searches once you cancel, and the images don’t download; they belong to Ancestory’s repositories. OH… and also, if you want ancestry to hold on to your info, which they use to help other subscriber tree searches, they have a minimum monthly payment for that.

We figured out a way, and it is 100% free. To support ancestry for free, we self-hosted a virtual environment in Oracle, installed docker, a SWAG server, installed an open-source web-based genealogy program, created a domain name through [](, and started uploading the GEDCOM files and SNIPs of the images he found on Ancestry, before disconnecting the service. This may have sounded all foreign to you: SWAG, Docker, etc… but it is all straightforward and really not hard for someone willing to dive into a bit of the command line and copy-paste commands. My goal is to provide you with some background and easy copy paste commands to do this yourself.

Setting Up The Resources to Prepare for WebTrees!

Setting up Your Free Tier Oracle Cloud Account and Virtual Machine

Follow these steps to set up a free Oracle Cloud account and virtual machine for hosting a web-based genealogy program and storing family tree data. This allows you to retain all your data even if you decide to cancel your subscription to a genealogy provider like This virtual environment will allow you to host your ancestry for free.ancestry for free

Setting up Your Free Tier Oracle Cloud Account:

  1. Go to Oracle Cloud Free Tier.
  2. Enter basic account information and complete the registration process.
  3. Solve the captcha, verify your email, and input a valid credit card (no charges will be incurred).
  4. After account creation, sign in and select your interests.
  5. You’ll be taken to your cloud dashboard, and free tier services will be indicated.

Creating a Virtual Machine (VM):

  1. On the cloud dashboard, click “Compute” and select “Launch a VM instance.”
  2. Name your instance and click “Edit” under “Image and Shape.” -I named mine “genealogy server”
  3. Change the image to Ubuntu and select the desired shape (e.g., Ampere processor with 2 OCPUs and 2GB of memory). – this is what I selected and runs great.
  4. Ensure you stay within the free account tier limits mentioned in the guide.

Setting up SSH Keys:

  1. Download Putty from (if you don’t have it already).
  2. Open PuttyGen and generate an SSH key pair. Save both the public and private key files.
  3. Copy the generated public key and paste it into the “Add SSH Keys” section.
  4. Leave other options as default and click “Create.”
Key GEN PuttyAccessing Your VM via Putty:
  1. Oracle Cloud will create your VM, and when it’s ready, it will display the public IP address.
  2. Open Putty (not PuttyGen) and enter the provided username and IP address in the “Host” field (e.g., [email protected]).
  3. Under the SSH section, click on “Auth” and browse to upload your private key file.
  4. To save this configuration, go to the “Session” category, enter a session name, and click “Save.”
  5. Click “Open” to launch the session. Accept the security alert, and you’ll be logged into your VM.

Ancestry for Free

putty 2Ancestry for free Putty Sec AlertUpdating Your VM:

In the terminal, run the following commands one at a time to ensure your OS is up to date:

sudo apt update
sudo apt upgrade -y
  1. Your VM is now fully functional and ready for your tasks, such as testing apps or installing Docker containers.

For more detailed instructions than those provided here, please refer to my comprehensive guide on creating and deploying Oracle Virtual Machines, which can be found on this earlier blog.

Install Docker and Docker Compose

Docker Image showing ancestry for freeDocker is a tool that allows you to create, run, and manage applications in containers. A container is like a lightweight virtual machine that includes everything needed to run the application, such as code, libraries, and dependencies. Docker makes it easy to create and deploy applications in a consistent and portable way, meaning you can run the same application on different computers without any issues.

In layman’s terms, Docker and Docker Compose help users create and run applications in a way that is consistent and easy to manage. They allow you to build and deploy your applications quickly and efficiently, without worrying about compatibility issues or complex infrastructure. We will use docker so that I know the SWAG and Database instance we use will work on your VM like it does on mine!

Steps to Install Docker and Docker Compose

Step 1: Update Package Repository:

sudo apt update

Step 2: Install Prerequisites:

sudo apt install -y curl wget git

Step 3: Install Docker – via the Docker installation script:

curl -fsSL -o

Run the install script:

sudo sh

Start the Docker service and enable it to start on boot:

sudo systemctl start docker
sudo systemctl enable docker

Add your user to the “docker” group to run Docker commands without sudo:

sudo usermod -aG docker $USER

Step 4: Verify Docker Installation

docker --version

You should see the Docker version displayed.

Step 5: Verify Docker Compose Installation

docker compose version

You should see the Docker Compose version displayed. – note that the script will install docker compose v2 as well as docker. This is perfect for our situation here.

Creating a Domain with DuckDNS

DuckDNS LogoWhile purchasing a domain name is one way to go, there’s a free and convenient alternative – DuckDNS. DuckDNS is a dynamic DNS service that allows you to create your own custom domain for free.

Step 1: Create a DuckDNS account

To get started, open your web browser and navigate to the DuckDNS website. You can reach their website by typing the following URL into your browser’s address bar:

Step 2: Sign Up for an Account

Upon arriving at the DuckDNS website, you’ll need to sign up for an account. Creating an account is quick and straightforward. Look for a “Sign Up” or “Create Account” button, and click on it.

Step 3: Create your Domain

DuckDNS provides clear and easy-to-follow instructions to create your custom domain. You will need to provide the Public Static IP of your Oracle VM you set up earlier. you will be able to see your Public IP shown on your instance page.

Step 3.1: Choose a Domain Name

You’ll have the opportunity to pick a custom domain name for your website or application. This name will become the prefix of your DuckDNS domain. For example, if you choose “mysite,” your DuckDNS domain will be “”

That is it for this part! You now have your very own custom domain with DuckDNS. You will be able to access your family tree website using the domain name you’ve set up, followed by “”

Your DuckDNS domain is now ready to use and we will add this to the docker-compose.yml file we will be creating later to work towards setting up Webtrees; which is the open source site that hosts your ancestry for free.

Opening Up Firewall Ports on your Oracle VM

Firewall imageOpening up ports will allow you to navigate to your webserver. Oracle keeps all the ports locked down to keep your VM’s safe, so will will need to open up specific ports to get to your web server.

  • Steps to Open Ports:
    • Log In to Oracle Cloud Console:
    • Go to the Oracle Cloud Console and log in to your Oracle Cloud account
  • Access Instance Details:
    • Click on the “Compute” tab and choose “Instances.”
    • Select the instance for which you want to open ports.
  • Navigate to Security Lists:
    • Under the “Instance Information” tab, scroll down to find the “Primary VNIC” section and click on the subnet link associated with your instance.
  • Access the Default Security List:
    • In the “Subnet Details” section, locate the “Security Lists” section and click on the link for the “Default Security List” related to your instance (there should be only one).
  • Add an Ingress Rule:
    • Within the “Default Security List” page, click on the “Add Ingress Rule” button.
  • Configure Ingress Rule:
    • In the “Source Type” section, keep it as “CIDR” and input “” in the “Source CIDR.”
    • For “Source Port,” set it to “All,” and in the “Destination Port Range,” input “80,443.”
    • The TCP protocol should already be selected.
    • Click on the “Create” button.
  • Provide a Description (Optional):
    • If desired, type a description in the “Description” box.

What It Does:

By following these steps, you’ve successfully opened ports 80 and 443 on your Oracle EC2 cloud instance. This allows http and https network traffic to reach your VM hosting your family tree application.

How to Install the Docker Version of Secure Web Application Gateway (SWAG)

This section provides step-by-step instructions for installing the Docker version of SWAG, a tool that simplifies the process of setting up a secure web server with HTTPS support, automated certificate management, and security measures to protect against intrusions.

“Secure Web Application Gateway” (SWAG) is a tool that helps make it easier to set up a website that is secure and can be accessed using HTTPS. It does this by setting up a web server called Nginx, which can handle web traffic and requests. It also includes a tool called Certbot that helps with automatically generating and renewing SSL/TLS certificates, which are needed for secure HTTPS connections.

Other tools included in SWAG are fail2ban, which helps protect against unauthorized access to the server, and for Dynamic DNS, which is useful for websites hosted on dynamic IP addresses. LDAP authentication can be used for user authentication and access control. Configuration files are used to define how Nginx should serve websites and reverse proxy requests to other services.

Overall, the SWAG tool simplifies the process of setting up a secure web server with HTTPS support, automated certificate management, and security measures to protect against intrusions. It’s useful for hosting websites and web applications securely on a server. We will be running our family tree application from here!

Setting Up a Web Server with SWAG on Your Ubuntu VM

Let’s get started with the following steps:

Step 1: Access Your Ubuntu VM

Make sure you’re connected to your Ubuntu VM instance in Oracle Cloud via Putty SSH.

Step 2: Create a New Directory

We’ll create a dedicated directory for our web server configuration.

sudo mkdir /opt/webserver_swag

Step 3: Set Permissions

Set appropriate permissions for the new directory. NOTE: your default username should be ubuntu, but if it is something else on the terminal screen update the below with the appropriate username. you can see in the screenshots I provide below, my username is “sean” as I am running this in a a custom container for testing and documenting.

sudo chown ubuntu:ubuntu /opt/webserver_swag/

Step 4: Navigate to the Working Directory

Navigate to the directory where we’ll be working.

cd /opt/webserver_swag/

Step 5: Create Docker Compose File

Create a Docker Compose file using your preferred text editor. In this example, we’ll use nano.

sudo nano /opt/webserver_swag/docker-compose.yml

If nano is not installed, you can install it with:

sudo apt install nano

Step 6: Paste Configuration

Paste (by right clicking your mouse – after you have copied the below code) the following configuration into the Docker Compose file. This configuration includes services for MariaDB and SWAG, which is the core component for securing your web applications.

You are also going to need additional information. Find your PUID and PGID by typing “id” in the terminal of your server (you should be ssh’d in via putty).

example for IDFor this section you will also need your duckdns URL that you created earlier.

version: "2"

    image: linuxserver/mariadb
    container_name: mariadb
      - PUID=1001
      - PGID=1001
      - MYSQL_ROOT_PASSWORD=mariadbpassword
      - TZ=America/Denver # Replace with your timezone
      - MYSQL_DATABASE=WP_database
      - MYSQL_USER=WP_dbuser
      - MYSQL_PASSWORD=WP_dbpassword
      - /opt/webserver_swag/config/mariadb:/config # Mapping to the local directory we created earlier
    restart: unless-stopped

    image: linuxserver/swag
    container_name: swag
      - NET_ADMIN
      - PUID=1001 # Validate your ID for both PUID and PGID
      - PGID=1001
      - TZ=America/Denver
      - # Replace with your domain
      - VALIDATION=http
      - /opt/webserver_swag/config:/config # This will save your config in the directory we created earlier
      - 443:443
      - 80:80 # Optional
      - mariadb
    restart: unless-stopped

Note: you will want to update this configuration file to adjust for your domain, your PUID, PGID, and time zone. You also want to update your PASSWORD section above, cause you want that extra security.

Step 7: Save and Exit

Save the changes to the Docker Compose file , press Ctrl + X then Y, then Enter.

I really wanted this post to be quick and simple to follow, but the educator in me wants you to understand what the docker-compose file is.. if you know, scroll on, but if your curious what is going on then let me share.

The Docker Compose file is like a recipe or a set of instructions that tells your computer how to run and manage two special programs, MariaDB and SWAG, which help you set up and secure your family tree website.

Imagine you’re cooking a meal, and you have two dishes to prepare – let’s say spaghetti and garlic bread. Each dish has its own ingredients and steps to follow, right? The Docker Compose file is like a list of ingredients and cooking instructions for these two dishes.

In this case:

1. MariaDB: This is like a special kitchen where you store important information for your website, like usernames and passwords. The Docker Compose file tells your computer how to set up this kitchen, what ingredients (or configurations) to use, and where to keep all the secret recipes (data).

2. SWAG (Secure Web Application Gateway): This is like a security guard for your website. It helps protect your website and make sure it’s accessible over the internet in a secure way, like having a locked front door with a security code. The Docker Compose file gives instructions on setting up this security guard, what rules to follow, and how to ensure your website is safe.

So, think of the Docker Compose file as your cooking recipe for setting up these two important parts of your website – the kitchen (MariaDB) and the security guard (SWAG). Following the recipe makes sure everything is set up correctly and your website runs smoothly and securely.

Now it is time to spin up your containers and validate we can reach your new web server!

Make sure that you are still logged into your Oracle Instance of your Ubuntu Virtual Machine and that you are also in the working directory of /opt/webserver_swag (where we saved your yml file); we will run the following command:

sudo docker compose up -d

Note: if you are a docker compose wiz, notice we are not using the command: docker-compose. v2 of Docker Compose allows us to enter the command without the “-”

Your terminal will light up with action now! you will see it pulling images and creating containers .. then … it will be back to a prompt … signifying it is done. Before getting too excited, let’s check and make sure our containers are running. Remember, we will have 2: Our Spaghetti and our side of Garlic Bread 🙂. In your terminal prompt run: sudo docker ps it should look like the following image:

Docker Example

So, in simple terms, this image above shows you that there are two containers running on your computer. One is responsible for web security (SWAG), and the other is a secure storage space (MariaDB). They’ve been working for about 2 hours, and their doors (ports) are open for communication with your computer. Everything seems to be running smoothly!

Now let us try and navigate to our new web server! It is finally time to open a browser and navigate to domain name you created on duckDNS. Go ahead and try that now. IF you are successful, you should be greeted with the following image:

Part 1 Wrap Up

This is a good sign. This means that now we are ready to install our Webtrees site!

As we wrap up Part 1 of this series, I hope you’ve found inspiration in my Dad’s journey and our solution to preserving his family history. We are posting both series at the same time, but we had to break up this post because of the length.

In Part 2, we’ll delve into the nitty-gritty details of installing, configuring, and setting up a family tree using the web-based genealogy program Webtrees. Until then, start preparing your Oracle Cloud account and get ready to take the next steps in our family history adventure … setting up your site to host your ancestry for free!

2 thoughts on “Ancestry for Free: A Quest for Family History

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.