Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

To run Jekyll on an Ubuntu VPS, install Ruby and the native build prerequisites, install Jekyll and Bundler in a user-local gem directory, create a project with a locked dependency set, build it with bundle exec jekyll build, and point Nginx at the resulting _site directory. Jekyll generates HTML, CSS, JavaScript, images and other static assets; your production server normally delivers those files instead of keeping Jekyll’s development server running.

This guide takes you from an empty Ubuntu server to an HTTP site and then to HTTPS. It also explains when a VPS is the wrong choice, how to keep deployments reproducible, and how to diagnose the failures that most often appear at the Ruby, build, Nginx and certificate stages.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What Jekyll on a VPS actually does

Jekyll is a Ruby static-site generator. It reads Markdown, Liquid templates, configuration and assets, then renders a complete static website. The generated files are placed in a directory named _site. Nginx, Apache or another web server can serve that directory directly.

There are two distinct processes:

  • Build time: Jekyll runs on your workstation, in a deployment job or on the VPS and converts the source tree into _site.
  • Request time: Nginx returns the already-generated files to visitors. It does not need Ruby or Jekyll for each page request.

This separation is the main operational advantage of a Jekyll VPS. Pages are assembled before visitors request them, so there is no application runtime, database or server-side template process to keep alive. You still have to maintain the Ubuntu host, Nginx configuration, DNS, certificates, backups and deployment process.

#1 Best Overall
Sale
Compressed Air Duster,130000RPM Super Power Cordless Air Duster,Rechargeable Brushless Blower,3 Gear Adjustable Blower with LED Light,Dust Remover for Computer/House/Outdoor/Car
  • Powerful Turbo Fan:CAGIWIRU Electric Air Duster have reached speed up to 130000RPM,Can efficient remove dust and debris.With LED light and Three Adjustable Speed to meet with different cleaning tasks.
  • With Attached USB C Fasting Charging cable.Charing 3 hours,Enjoy up to 240 minutes of use on the lowest setting, For third speed can use for 25mins.with four charging options to meet with your needs.
  • Wide Application:Upgraded attached 5 different nozzles,making it suitable for a variety of scenes, such as car,pet, pc, keyboards, and other electronic devices. It also serves for office and home clean duster.
  • Handy Design & Portable:Cordless air duster electric nozzle is Light weight and small size, design and comfortable to hold and space saving, convenient to carry around. You can put it in your room or inside the car without taking up space.
  • Warranty & Support: Our Electric air duster comes with 5 years warranty and 24/7 customer service. During this period, if you have any questions,pls kindly feel free to contact us.

Choose between a VPS and managed repository hosting

A VPS is appropriate when you want shell access, control of Nginx and the operating system, custom firewall rules, or the ability to run other services on the same server. It also makes you responsible for updates, hardening, monitoring and recovery.

GitHub Pages is the simpler alternative when your site can live in a repository-managed workflow. GitHub documents both branch-based deployment and custom GitHub Actions workflows for Jekyll. You trade operating-system control for a managed build and hosting environment.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Decision factor Ubuntu VPS GitHub Pages
Server administration You maintain Ubuntu, Ruby, Nginx, firewall rules, certificates and backups. The hosting platform manages the web servers and much of the deployment plumbing.
Build control You can choose the Ruby and gem environment and run your own build command. You use the platform’s supported Jekyll workflow or a custom Actions workflow.
Plugin and process freedom You control the build and can run other server-side processes, subject to your own security and capacity limits. Build and plugin behavior is constrained by the Pages environment and workflow you select.
Domain control You configure DNS and the Nginx server block yourself. You configure a custom domain through the repository-hosting service.
Operational effort Higher: patching, logs, renewals and recovery are your responsibility. Lower for the host itself, but repository and workflow configuration still require care.

When evaluating a VPS, check for SSH and sudo access, an Ubuntu image, enough CPU and storage for your source and build artifacts, backup options, IPv4 and IPv6 support, firewall controls and the provider’s support model. Current provider prices and plan limits vary and are not part of this setup guide.

Prerequisites before you install anything

Use an ordinary sudo-capable account over SSH rather than doing routine work as root. You need:

  • An Ubuntu VPS that you can reach over SSH.
  • Permission to install packages and create files under the site and Nginx directories.
  • A project source tree, either created on the VPS or checked out from version control.
  • A registered domain and DNS access if the site will be public.
  • A network path that can eventually accept HTTP on port 80 and HTTPS on port 443.

You can build on your computer and copy _site to the server, or build on the VPS from a deployment checkout. Building on the VPS is convenient for a small site; building elsewhere can reduce the software installed on the production host. In either case, keep the source, Gemfile and Gemfile.lock in a private working tree when only the generated output should be public.

Prepare Ruby and Jekyll on Ubuntu

Update packages and install build prerequisites

Jekyll’s Ubuntu installation guidance calls for Ruby, a compiler toolchain and the zlib development headers. Connect over SSH and run:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sudo apt-get update
sudo apt-get install ruby-full build-essential zlib1g-dev

ruby-full supplies Ruby and the standard development components; build-essential provides the compiler tools needed by gems with native extensions; and zlib1g-dev supplies headers required by common Ruby packages.

Keep gems out of the system Ruby path

The official Ubuntu instructions recommend configuring a user-local gem directory instead of installing application gems into the system Ruby location. The exact shell-profile block can change as the guide evolves and can differ between shells, so copy that block from the current Jekyll Ubuntu installation page, reload your shell profile, and confirm that your user-local gem bin directory is on PATH. This avoids mixing project dependencies with files owned by the operating-system package manager.

Rank #2
EVEO® Screen Cleaner Spray Kit (Streak-Free) TV Screen Cleaner for Smart TV, Lcd, LEd, Oled | Computer Screen Cleaner Spray and Wipe Microfiber Cloth - TV, Monitor, Laptop, iPad, Car - 6.7oz 1 Pack
  • Screen Cleaner is Your Screen’s New Bestfriend! - EVEO is proud to present a screen cleaner that’s perfectly suited for your TV. Meet your new screen cleaner, computer screen cleaner, laptop cleaner, iPad cleaner, Macbook,tv cleaner or any other electronic device. Our screen cleaner spray and wipe along with the included plush microfiber cloth, easily removes dust, fingerprints & other smudges on the screen’s surface. Clean effectively for a streak-free screen
  • Gentle on your Screens - Our screen cleaner spray and wipes is compatible to be used even for the most sensitive LCD, LED, CRT, and OLED screens in proper use. Be at ease knowing that this product is compatible with all the major brands: LG, SONY, Samsung, Sharp, iPad, iPhone, Android screens, Kindle, PC monitors - we’ve got you covered! Can be used as LCD screen cleaner, tv cleaner, smart tv screen cleaner, and more
  • Premium Super Soft Plush Microfiber Cloth - Included in this efficient screen cleaning kit. This screen cleaner spray and wipe has our signature plush microfiber cloth specially designed to comply with screens and monitors and leave them streak-free. Has been shown to effectively absorbs stubborn stains, zero streaks, and no fiber shedding. Always use this together with our screen cleaner for the best results
  • Easy-to-Use Screen Cleaner Kit + microfiber cleaning cloth - The EVEO Screen Cleaning Kit will easily be your new favorite tool when it comes to taking care of the things you love most, quick and easy solution for a streak-free screen. Simply screw on the sprayer gun on the screen cleaner bottle. Spray the cleaning liquid onto the microfiber cloth, then wipe the screen until desired cleanliness & shine is achieved.
  • Quality Screen Care Kit Worth Purchasing - Enjoy a convenient Screen Cleaner anytime, anywhere you need it. Your satisfaction is our top priority. We stand behind the quality of our products and that’s why, you shouldn’t be worrying at all. We manufacture the Best Screen Cleaner. and can be used for laptop cleaning kit, laptop screen cleaner, tv screen cleaner for smart tv. MacBook screen cleaner, monitor cleaner or screen cleaner spray for electronic devices with microfiber cleaning cloth

After the profile is active, install the command-line tools:

gem install jekyll bundler

Check that the commands resolve for your account:

ruby --version
jekyll --version
bundle --version

The exact version numbers depend on the Ubuntu image, Ruby packages and the date of installation. Do not assume that a command found in one shell is available to a service account or to a non-interactive deployment shell; test with the same account and environment that will perform the build.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Create a site and preview it

Generate the project skeleton

Create a new site, enter its directory, install the dependencies and start the development server:

jekyll new my-site
cd my-site
bundle install
bundle exec jekyll serve

The jekyll new command creates the initial project structure, including a Gemfile. bundle install resolves the gems and creates or updates Gemfile.lock. Running Jekyll through bundle exec makes Bundler use the versions selected for this project instead of whichever compatible gems happen to be installed globally.

By default, the development server is intended for previewing and authoring. It listens on a local interface suitable for testing, not as a permanent public production service. If you are authoring interactively and your workflow supports automatic browser refreshes, use:

bundle exec jekyll serve --livereload

When testing from another machine, treat exposing the development server as a temporary diagnostic step. Production traffic should go through Nginx and the generated files.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Understand the important files

  • _config.yml contains site-wide settings such as the site URL, base path, theme and build options.
  • _posts/ holds conventionally dated posts when you use Jekyll’s posts workflow.
  • _layouts/, _includes/ and _data/ hold reusable templates, fragments and data.
  • assets/ and other ordinary files become part of the generated site according to your configuration.
  • Gemfile declares the project’s Ruby dependencies.
  • Gemfile.lock records the resolved versions used for a reproducible installation.
  • _site/ is generated output. Do not edit it as if it were the source tree; regenerate it from source.

Make builds reproducible with Bundler

Commit both Gemfile and Gemfile.lock to version control. The Gemfile describes what the project needs; the lockfile records the concrete versions and dependency graph that Bundler selected. Keeping both files lets a later deployment reproduce the environment instead of resolving a new set of versions unexpectedly.

Use bundle exec for every project operation, including serving, building and any Jekyll plugin command. A typical deployment checkout therefore begins with:

Rank #3
BladeHawks RGB Gaming Mouse Pad Extra Large Extended 31.5x12 Inch-Black
  • 【Large size】:Measuring 800 x 300 mm/ 31. 5×12 inches, which is wider and taller than others. Large mouse pad can perfectly fit your keyboard and mouse of any size, and there is also ample space for peripherals such as phones, tablets, etc.
  • 【LED backlight mouse pad】:Blade Hawks RGB mouse pad provides 7 static modes and 7 dynamic modes will give you the options you are looking for. Power-off memory function remembers the last lighting mode you selected. The super glow fiber Chroma will give you a colorful gaming setup that you want.
  • 【Anti-slip rubber base】:Made from Natural rubber, this gaming mousepad will firmly grip your desktop, allowing you to enjoy the ultimate precision in the games you are most passionate about. It also comes with a texture that enhances this ability even further.
  • 【Smooth and waterproof surface】: Micro-textured cloth surface, for extremely precise mouse control and a smooth movement. When liquid splashes on the gaming mouse pad, it forms water droplets and slides down. Will not delay your work or gameplay.
  • 【Plug and play】: This mouse and keyboard pad is powered by USB, plug and play, no driver required. One button control light modes. Press one time to change the lighting mode, press twice to change the brightness, press and hold about 3 seconds turn ON/OFF.
bundle install

If you deploy to GitHub Pages, its documentation describes using the github-pages gem to match the production Jekyll environment used by Pages. That dependency choice belongs in the project’s Gemfile and lockfile, not in an undocumented global installation.

When a lockfile changes, review the diff and test the generated site before publishing. A successful dependency installation does not guarantee that layouts, plugins or URL settings still produce the expected output.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Build the production artifact

From the project directory, create the deployable site with:

bundle exec jekyll build

The command writes the finished website to _site. Inspect that directory before pointing a public server at it:

  • Confirm that _site/index.html exists.
  • Open representative post, page, image, CSS and JavaScript paths.
  • Check that links use the intended domain and base path.
  • Verify that files required at runtime were copied into _site.

Nginx can use the checkout’s _site directory as its document root, or you can copy or synchronize the generated contents into a separate release directory. The latter keeps source and output clearly separated and makes it easier to switch back to a previous build. Whichever layout you choose, the Nginx worker must have permission to traverse the parent directories and read the generated files.

Install Nginx and publish over HTTP

Install the web server

sudo apt install nginx

Ubuntu’s Nginx layout uses /etc/nginx/sites-available/ for server-block files and /etc/nginx/sites-enabled/ for the enabled symlinks. Create a file named for your domain, such as /etc/nginx/sites-available/example.com, and start with a simple HTTP block:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    root /srv/my-site/_site;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Replace the domain names and root path with your own values. The root must be the directory that actually contains the generated index.html, not the parent source directory unless that is where your build output lives.

Enable and validate the server block

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

nginx -t checks syntax before a reload. If Ubuntu’s default site answers for the same address, disable or remove that conflicting enabled configuration after confirming you no longer need it. A reload applies a valid configuration without unnecessarily stopping the service.

Rank #4
Sale
Vaydeer Wrist Rest for Keyboard and Mouse, Computer Ergonomic Wrist Support Pad, Soft Memory Foam Arm Cushion for Desk, Palm Hand Office Laptop Typing
  • 【Softer and More Comfortable】Vaydeer wrist rest has unique diamond pattern, which is the combination of softness and aesthetics. The materials of wrist rest are improved into higher quality memory foam and covered with silky smooth lycra. The computer wrist rest makes you as comfortable and cushiony as like rest your wrists on clouds.
  • 【Ergonomic Wrist Saver】The wrist rests for keyboard and mouse comes with a 17.32×3.15×0.83 inch keyboard wrist pad and a 5.94×3.15×0.83 inch mouse wrist support. Based on ergonomic design, the unique concave shape is the perfect fit for your wrist joints. The wrist rest pad fits most computer keyboards and laptops, improve hand and wrist posture, release your wrist and arm stress.
  • 【Non-Slip Rubber Bottom】Featuring an anti-skid silicone base on the bottom, this wrist keyboard support stays firmly in place on your desk, preventing the padding from sliding around, ensuring stable and consistent wrist support during extended computer sessions.
  • 【Better Experience & Pain Relief】Our keyboard arm rest is beneficial to alleviate the soreness caused by direct contact and friction between your arm and a hard desk surface, reducing the risk of wrist fatigue or carpal tunnel. The soft texture of memory foam can evenly distribute the pressure around your wrists and provide good support with just enough give.
  • 【Helpful in Multiple Scenarios】Whether you're working, studying, writing, typing, gaming, this keyboard and mouse rest combo is an essential accessory to add comfort and support to your hands and wrists. It’s also a great gift for men, women, family, friend, coworker, gamer, teacher, etc.

At this stage, request the domain over HTTP after DNS points to the VPS. A 404 usually means Nginx is using a different root, the requested server name does not match the enabled block, or the expected file is absent. A permission error means the Nginx worker cannot read the file or traverse one of its parent directories.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Point DNS at the VPS

Register the domain before requesting a certificate, then create DNS records that resolve the names in your Nginx server_name directive to the VPS. Use an address record for IPv4 and, if you publish IPv6, an IPv6 record as well. Make sure every name you pass to Certbot resolves to this server; including www in the certificate request requires a working DNS record for www.

DNS changes can take time to appear at different resolvers. Test resolution from outside the VPS and verify that the answer is the expected address. Do not proceed to certificate issuance while the name still points to an old server or a parking page.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Enable HTTPS with Let’s Encrypt and Certbot

Meet the HTTP-01 requirements

For a public certificate, the domain must resolve to the VPS and port 80 must be reachable from the internet for the HTTP-01 validation challenge. Check cloud firewall rules, the VPS firewall and any upstream network policy before running Certbot. A locally working Nginx site is not enough if outside traffic cannot reach port 80.

Install Certbot and request the certificate

Ubuntu recommends Let’s Encrypt for internet-facing servers. Install Certbot from the snap package and let its Nginx plugin configure the matching server block:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
sudo snap install --classic certbot
sudo certbot --nginx -d example.com -d www.example.com

Replace both names with the names you actually serve. The Nginx plugin can edit the server block and reload Nginx after successful validation. Read each prompt, especially the choice to redirect HTTP traffic to HTTPS, and inspect the resulting configuration afterward.

Let’s Encrypt certificates are valid for 90 days. Certbot installs a systemd timer that attempts renewal twice daily. Confirm that automated renewal works instead of waiting for expiry:

sudo certbot renew --dry-run

A dry run exercises the renewal path without replacing the live certificate. Continue to monitor the timer and Nginx logs, particularly after changing DNS, firewall rules or server-block files.

Best Value
Sale
Under Desk Cable Management Tray No Drill, Metal Mesh Cable Management Under Desk with Clamp Mount, 2 Hole Cable Tray with Wire Management and Cord Organizer for Home Office Standing Desk
  • 【No Drill Mounted】Cable management tray can be assembled in as little as 3 minutes or less-simply. Side clips easily clampe the edge of desk, pass through the holes on the sides, and secure excess cables with baskets. Desk cable management supports inward or outward installation to meet your needs in different scenarios, and provides you with great convenience when collecting and organizing wires.
  • 【Rubber Pad Protects Desk】Wire organizer under desk built-in soft rubber pads on the clamp protect your desk from scratches, so you will not damage your furniture or office.
  • 【Sturdy and Beautiful】Cord management under desk is made of high-quality carbon steel and holds about 15 lbs. The wire basket has 2 holes on each side of the tray to enable your cables to pass freely. Cable baskets are suitable for desk thickness use from 0.4" to 2.4".
  • 【Space Saving & Keep Organized】Desk cable management tray holds all your power cords, outlet strips, USB hubs and computer transformers hidden from your feet, and the data cables will not enter the vacuum cleaner to keep your desk clean and tidy. Desk wire organizer is also suitable for use in the kitchen and outdoors.
  • 【Reduce Safety Risks】Cable tray under desk keeps all plugs away from your kids, no more worry about tripping. Using 2 holes wire tray saves extra space, helps you easily cabling and wire protection. The mesh design is not easy to accumulate dust, but avoids safety accidents caused by messy wires.

A practical deployment routine

For a small VPS-hosted site, a deliberate release routine is safer than editing files directly in _site:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Update the source checkout from your version-control system or upload a reviewed change.
  2. Confirm that Gemfile and Gemfile.lock are present.
  3. Run bundle install when dependencies changed.
  4. Run bundle exec jekyll build.
  5. Check that _site/index.html and representative URLs were generated.
  6. Synchronize or activate the new output directory used by Nginx.
  7. Request the site over HTTPS and inspect the Nginx error log if a page fails.

Keep at least one known-good generated release or source commit so you can restore the previous site if a layout, plugin or configuration change breaks production. Back up the source checkout, lockfile, Nginx configuration and any deployment scripts; the generated output can be rebuilt when those inputs are available.

Troubleshoot the common failure points

Ruby or native-extension errors during installation

Errors while installing gems commonly indicate that the VPS Ruby version, compiler tools, zlib headers and the versions locked by the project do not agree. Confirm that the prerequisite packages are installed, run the project commands through bundle exec, and consult the current Jekyll installation and troubleshooting guidance for the specific error. Avoid applying a Ruby-version workaround copied from an unrelated project without checking the locked dependencies.

The site builds locally but production returns 404

First verify that the build actually produced _site/index.html and that Nginx’s root points to that exact directory. Then check that the enabled server block’s server_name matches the hostname in the request. Finally inspect URL settings such as the site base path and confirm that Nginx can read the files. A correct build served from the wrong root still produces a 404.

Nginx refuses to reload

Run sudo nginx -t and read the reported file and line number. Typical causes are a missing semicolon, a malformed symlink, duplicate directives or a path typo. Fix the configuration, test again, and reload only after the syntax check succeeds.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Certbot cannot validate the domain

Certificate issuance fails when DNS does not resolve to this VPS or when the validation request cannot reach port 80. Check the A and AAAA records, remove stale records if necessary, verify cloud and host firewall rules, and confirm that the HTTP server block responds for the requested name. Rerun Certbot only after external resolution and port reachability are correct.

Files exist but Nginx cannot read them

Check permissions on the generated files and every parent directory in the path. The Nginx worker needs read access to files and execute (directory traversal) access to directories. Correct ownership and modes in the deployment directory rather than granting broad write access to the web-server account.

Maintenance checklist after launch

  • Apply Ubuntu security updates through your normal maintenance window.
  • Keep SSH access limited to the accounts and keys that need it, and avoid routine root sessions.
  • Retain the Gemfile and lockfile with the source revision that produced each release.
  • Review generated output before activating it.
  • Back up source, configuration and deployment metadata, not just the current web directory.
  • Check Nginx configuration with nginx -t before every reload.
  • Run certbot renew --dry-run periodically and investigate timer or renewal failures.
  • Verify both IPv4 and IPv6 behavior if both DNS record types are published.

With this arrangement, Jekyll remains a build tool and Nginx remains the production web server: the VPS compiles a versioned source tree into _site, and visitors receive the resulting static files over a certificate-protected connection.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.