
Deploying a website can be a daunting task, but with the right tools and a little bit of know-how, it's a breeze. In this post, we'll be walking through the process of deploying a Jekyll website written in markdown to [Cloudflare Pages](https://pages.cloudflare.com) using [GitLab CI](https://docs.gitlab.com/ee/ci/). So grab your favorite beverage, sit back, and let's get started.

## What the heck is Jekyll anyways?

[Jekyll](https://jekyllrb.com) is a static site generator that allows you to create and manage your website using simple text files, such as Markdown and Liquid. It's built with simplicity in mind, and it's perfect for blogs, portfolios, and documentation sites. One of the biggest advantages of using Jekyll is that it's fast, secure, and easy to maintain. Since Jekyll sites are static, they don't require any database or server-side processing, which means they can handle high traffic without any issues.

Additionally, Jekyll is built on top of Ruby, which means it has a vast community of developers who constantly create and update plugins and themes to enhance the functionality of your website. With Jekyll, you can focus on creating content and leave the technicalities to the software, it's a great tool for developers and non-developers alike.

Oh, and by the way, this website is made using Jekyll!

## Step 1: Install rbenv

`rbenv` is a tool that helps you manage multiple Ruby environments. It allows you to easily switch between different versions of Ruby and makes sure that your dependencies are isolated from one another. To install rbenv, you'll need to run the following command:

```bash
brew install rbenv ruby-build
```

Once that's done, run `rbenv init` to initialize rbenv. This will add some initialization code to your shell configuration file (e.g .bashrc, .zshrc) that loads rbenv automatically whenever you open a new terminal window.

## Step 2: Set environment variables

Next, we'll need to set some environment variables to ensure that rbenv and the gems you install are properly configured. Run the following commands:

```bash
export GEM_HOME="$HOME/.gem"
export PATH="$HOME/.gem/ruby/2.6.0/bin:$PATH"
```

## Step 3: Install Ruby

Now that rbenv is set up and configured, we can install the latest version of Ruby by running:

```bash
rbenv install 3.1.2
```

This will take a few minutes, depending on your internet connection. Once the installation is complete, make sure to close and reopen your console to make sure the changes take effect.

## Step 4: Install Jekyll and Bundler

With Ruby installed, we can now use it to install Jekyll and Bundler, two essential tools for building and deploying Jekyll websites. Run the following command:

```bash
gem install jekyll bundler --user-install
```

If you're using an M1 Mac, you'll also need to install `ffi`:

```bash
gem install --user-install ffi -- --enable-libffi-alloc
```

## Step 5: Create a GitLab repository

With Jekyll and Bundler installed, it's time to create a new GitLab repository for your website. Log into your GitLab account, create a new repository, and clone it to your computer.

## Step 6: Create a new Jekyll website

Once the repository is cloned, navigate to the directory and run the following command:

```bash
jekyll new pycvalade-website
```

This will create a new directory called `pycvalade-website` that contains the basic structure of a Jekyll website.

## Step 7: Configure the website

Navigate into the pycvalade-website directory and run:

```bash
echo ".DS_Store" >> .gitignore
```

This will add a `.DS_Store` file to the `.gitignore` file. This is an important step as it prevents your local MacOS files from being uploaded to the repository.

Open the `_config.yml` file and make any necessary changes. This file contains the configuration settings for your website, such as the title, author, and other meta information.

## Step 8: Build and Deploy the website

Once you've made the necessary changes, navigate back to the parent directory and run:

```bash
mv pycvalade-website/* .
mv pycvalade-website/.gitignore .
```

This will move all the files and folders from the `pycvalade-website` directory to the parent directory, effectively merging the two directories.

Run `bundle` to install the dependencies defined in the Gemfile, and `jekyll build` to build your website.

```bash
bundle
jekyll build
```

Add, commit, and push your changes to the GitLab repository:

```bash
git add .
git commit -m "base jekyll website"
git push origin main
```

## Step 9: Link Cloudflare and GitLab

Now that your website is pushed to the repository, it's time to link your Cloudflare account with GitLab. This will allow Cloudflare to automatically deploy your website whenever you push changes to the repository.

In your Cloudflare account, go to the "Pages" section and click on "Connect to a GitLab repository". Select the repository you just created, choose "Jekyll" as the type, and leave the defaults as they are. Hit "Deploy" and wait for the process to complete.

## Step 10: Enjoy your live website!

Congratulations! Your website is now live on pages.dev. You can access it by visiting `<username>.pages.dev` in your browser.

Deploying a website can seem like a daunting task, but with the help of GitLab, Cloudflare, Jekyll, and a little bit of know-how, it's easier than you think. Happy deploying!
