Do you find yourself getting tired of referring folks to LinkedIn whenever you need to showcase your professional skillset and accomplishments? Are you bored and looking for a new self-hosted, open source software-based challenged just because? Or maybe you just want something a little more visually appealing without the social aspect? Whatever the case may be, here is quick guide on how you can spin up a containerized CV in short order.

Assumptions: This quickstart guide will cover standing up the container using Podman, so the assumption will be that you have a host capable of running Podman and a reasonable understanding of containers. Things should be pretty similar should you choose to use Docker.

Outside of that, domain and DNS management will be assumed knowledge, but you can refer to my Blog Creation Series Part 1 for a bit of a primer and one way to approach things should you need it. The current scope of this article is to get the container running so that you can begin to customize the CV content. The public hosting strategy will be up to you.

Software Used

Execution

1. Persistent Storage

First off, you will need a directory to contain your Jekyll site. This guide will reference /containers/online-cv for the local persistent storage and can be created via:

# mkdir /containers/online-cv

Note: You can modify this location at will, just be sure to change the references to /containers/online-cv moving forward.

2. Pull Down online-cv Theme

Clone the online-cv git repository from GitHub to your newly created directory:

# git clone https://github.com/sharu725/online-cv.git /containers/online-cv

Change directory/file ownership to Jekyll container UID/GID (1000 by default).

# chown -R 1000:1000 /containers/online-cv

3. Bring Up the Container

Option 1: Use podman-compose

Install podman-compose if not already installed. For example, on Fedora:

# dnf install podman-compose

Add the following contents to an existing or new podman-compose.yml file:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    jekyll-cv:
      image: docker.io/jekyll/jekyll:latest
        container_name: online-cv
        hostname: example.com
        command: jekyll server --watch --drafts
        restart: always
        ports:
          - 3000:4000
        volumes:
          - /containers/online-cv:/srv/jekyll:z
        environment:
          - JEKYLL_ROOTLESS=1
          - JEKYLL_ENV=production
    

Note: We are exposing port 3000 for access. You should ultimately want to serve this up on port 443 (https) with a trusted certificate via a manual process or more ideally a reverse proxy, like Traefik. I will plan to create a post soon outlining using Traefik with Podman.

Bring the Container Up

To build and serve everything, run the following :

# podman-compose -f /path/to/podman-compose.yml up online-cv

Option 2: Use a Bash Script

Here’s the same thing, but in bash script form:

1
2
3
4
5
6
7
8
#!/bin/bash

/usr/bin/podman run -d -ti --rm --name online-cv --hostname example.com \
        -e JEKYLL_ROOTLESS=1 \
        -e JEKYLL_ENV=production \
        -p 3000:4000 \
        -v /containers/online-cv:/srv/jekyll:z \
        docker.io/jekyll/jekyll jekyll serve --watch --drafts

You can drop the above contents into a file named something like start_online-cv.sh and run it.

4. Test

The last step is to pull up a terminal or browser that can access your host and see if you can access your shiny new [generic] CV. In a browser, head to http://<your_host>:3000 and for curl, run:

$ curl http://<your_host>:3000

And you should see something like the following if successful:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 19472  100 19472    0     0  2<!DOCTYPE html>--:-- --:--:-- --:--:--     0
64<!--[if IE 8]> <html lang="en" class="ie8"> <![endif]-->
2k<!--[if IE 9]> <html lang="en" class="ie9"> <![endif]-->
 <!--[if !IE]><!--> <html lang="en"> <!--<![endif]-->
 <head>
    <title>My Resume</title>

 0  <!-- Meta -->
 -  <meta charset="utf-8">
-
:-  <meta http-equiv="X-UA-Compatible" content="IE=edge">
-:  <meta name="viewport" content="width=device-width, initial-scale=1.0">
--  <meta name="description" content="A beautiful Jekyll theme for creating resume">

  <!-- Favicon -->
  <link rel="shortcut icon" href="favicon.ico">
-
-  <!-- Global CSS -->
:  <link rel="stylesheet" href="/assets/plugins/bootstrap/css/bootstrap.min.css">
...

Wrap-Up

Pretty simple, eh? From here, you can start hacking away on files within your persistent storage volume to make it your own. The two files you will mainly want to focus on are _config.yml and _data/data.yml. For further theme details, head on over to the author’s github repo.