One place for hosting & domains


      How to Set up Curbside Pickup and Delivery Through Your Website

      COVID-19 has had severe ramifications, not only from a health standpoint but economically as well. With most people staying home and practicing social distancing, businesses that rely on in-person transactions are moving online.

      We’ve already outlined how to pivot your business model, update your website, and lead a team remotely during the coronavirus outbreak. But there’s something else small business owners will want to consider as part of their crisis management plan: offering curbside pickup and delivery options for customers.

      By enabling shoppers to place orders online and receive their items with minimal contact, you can do your part to keep your community safe, while also continuing to bring in revenue.

      In this post, we’ll take a look at some alternative shopping options for local businesses. Then we’ll show you how to set up either curbside pickup or a delivery option for your customers using WooCommerce. Let’s go!

      Alternative Shopping Methods During the COVID-19 Pandemic

      In response to the COVID-19 pandemic, the United States Center for Disease Control (CDC) issued several public health guidelines to prevent the spread of the coronavirus. These suggestions include:

      • Stay home as much as possible.
      • Keep six feet between yourself and others.
      • Avoid gathering in groups of 10 or more.

      Unfortunately, these guidelines make it difficult for small local businesses to welcome customers and conduct sales normally. To maintain even a limited revenue stream, most retailers and restaurants have had to develop alternative methods for serving customers.

      Curbside pickup is one of the best and most popular ways of doing that. It enables customers to purchase products online, and then visit your store to receive their items. Rather than having them go into your building, you or one of your employees brings the customer’s things out to their car. Think of it like takeout.

      With local delivery, your customers stay home while you bring their orders to their doors. Both methods go a long way towards minimizing contact between people since shoppers won’t be gathering in your store.

      However, you can take further precautions as well, such as:

      • Wearing gloves when packing customers’ orders.
      • Requiring online payments to avoid contact with customers when exchanging cash.
      • Place pickup orders directly in customers’ trunks.
      • Leaving delivery orders at customers’ doors, and calling or texting them to let them know their packages have arrived.
      • Providing face masks and hand sanitizer to employees involved in pickup and delivery orders.

      Fortunately, the risk of transferring or contracting COVID-19 via an object is very low. By setting up curbside pickup and delivery and minimizing contact between your employees and customers, you can significantly reduce the health risks for all involved.

      How to Set Up Curbside Pickup and Delivery Through Your Website (In 4 Steps)

      Below, we’ve outlined steps for setting up both curbside and local delivery options for your small business. Note that these instructions assume you already have WooCommerce installed and configured on your store’s website. If that’s not the case, please check out our tutorial on getting started with WooCommerce, and then you’ll be ready to get rolling!

      Trust Us, You Can Build a Website

      Whether you want to start a blog or run a small business, DreamHost makes it easy to begin your online journey. Our shared hosting plans give you everything you need to thrive online at an affordable price.

      Step 1: Configure a Local Shipping Zone

      The first thing you’ll need to do is pick a WooCommerce shipping zone for your local area. This will prevent a shopper who is outside your service area from placing an order for pickup or delivery.

      In your WordPress dashboard, navigate to WooCommerce > Settings > Shipping.

      Accessing WooCommerce’s shipping settings.

      Click on Add Shipping Zone.

      Adding a shipping zone in WooCommerce.

      Add a descriptive name for the shipping zone and then select your region.

      Alt-text: Adding a name and region for a new WooCommerce shipping zone.

      Click on Limit to specific ZIP/postcodes to narrow your pickup and delivery range.

      Specifying local ZIP codes for a new WooCommerce shipping zone.

      Remember to save your changes when you’re done.

      Step 2: Enable Local Pickup as a Shipping Option

      Next, while still on your local shipping zone page, select Add shipping method.

      Adding a shipping method to a WooCommerce shipping zone.

      WooCommerce includes a local pickup option out of the box. Select it from the drop-down menu, then click on the Add shipping method button.

      Selecting local pickup as the shipping method.

      That’s all you have to do to enable curbside pickup for your local business.

      However, if you would like to refine this option, you can purchase and install the Local Pickup Plus WooCommerce extension. This optional add-on enables you to specify a pickup location, set hours, offer discounts to customers who select curbside pickup, and more.

      Step 3: Add a Flat Rate Shipping Option

      WooCommerce no longer offers a “local delivery” shipping option. However, you can still configure one without the need for an additional plugin.

      On your local shipping zone page, add a second shipping option and select Flat rate. Then click on the Edit option for that shipping method.

      Selecting the edit option for a flat rate shipping method.

      Change the Method title to “Local Delivery” (or however you want to present this option to your customers at checkout). If you want, you can also add a flat rate delivery fee.

      Renaming the flat rate shipping method to “Local Delivery” and adding a delivery fee.

      Finally, click on Save changes. Your local pickup and delivery options will now both appear on your site’s checkout page, where customers can select their preferred methods.

      Curbside pickup and local delivery options on the checkout page.

      At this point, you’re ready to start offering curbside pickup and delivery to your customers. However, you may want to take a few extra steps to make managing your orders easier.

      Step 4: Install Order Delivery Date for WooCommerce to Manage Requests

      While you can technically set up curbside pickup and delivery for your business using WooCommerce alone, its native features don’t enable you to manage or schedule orders. This could lead to problems if you have multiple customers placing pickup and delivery orders at the same time.

      One way to solve this issue to enable customers to schedule their pickups and deliveries. Order Delivery Date for WooCommerce can help with this.

      The Order Delivery Date for WooCommerce plugin.

      After you install and activate this plugin, navigate to Order Delivery Date in your WordPress dashboard.

      The Order Delivery Date for WooCommerce settings page.

      Then configure the following settings:

      • Select the checkbox next to Enable Delivery Date capture on the checkout page.
      • Choose which days you’re available for delivery.
      • Set the minimum number of hours you need to prepare an order for delivery.
      • Specify how many days in advance customers can schedule an order.
      • Select the checkbox next to Selection of the delivery date on the checkout page will become mandatory.
      • Set the maximum number of deliveries you can handle per day.
      • Select the checkbox next to Enable default sorting of orders (in descending order) by Delivery Date on WooCommerce > Orders page.

      You may also wish to make additional adjustments in the Appearance and Holidays tabs. Remember to save your changes when you’re done.

      Now, when customers reach your checkout page, they’ll have to choose a delivery date.

      A calendar delivery date selector on the checkout page.

      Once the maximum number of orders for any particular day has been reached, that date will become unavailable in the calendar. This will prevent you from receiving more orders than you can physically manage at one time.

      On your WooCommerce Orders page, you’ll be able to see the customer’s specified delivery/pickup date listed for each order.

      The Delivery Date column in the WooCommerce Orders list.

      Note that you’ll still need to contact customers to inform them what time their orders will be ready (especially for curbside pickup).

      Looking for Remote Work Tips?

      Whether you want to stay focused at home or increase team engagement, we can help! Subscribe to the DreamHost Digest so you never miss an article.

      Curbside Takeout or Home Delivery?

      Curbside pickup and delivery options enable your customers to purchase their favorite products from you with minimal contact. This could help your business survive the COVID-19 pandemic and its economic side effects and is a valuable strategy for building customer loyalty.

      Fortunately, you can enable both local pickup and delivery using WooCommerce in just four steps:

      1. Configure a local shipping zone.
      2. Enable local pickup as a shipping option.
      3. Add a flat rate shipping option.
      4. Install Order Delivery Date for WooCommerce to manage requests.

      The foundation of any successful e-commerce site is a reliable hosting plan. At DreamHost, we provide quality shared hosting services for small businesses at affordable prices. Check out our plans today!

      Source link

      11 Things Website Owners Should Update During a Crisis

      Ever since the coronavirus crisis hit, it can sometimes feel like it has affected every area of our lives. Anyone who is now homeschooling kids or suddenly spending way too much time over a hot stove can vouch for that! Of course, that includes business too, and if you’re a business owner, there’s a good chance you’ve really felt that impact.

      “In my 13 years as a marketing agency owner, I never dreamed of this time, when my team and I are assisting hundreds of struggling small businesses to understand how best to market and communicate now to save their businesses,” says Wendy O’Donovan Phillips, CEO of Big Buzz.

      “Re-evaluate your vision statement to focus the team’s efforts through this time,” she advises. “Revisit your SWOT (strengths, weaknesses, opportunities, threats) analysis with a particular focus on opportunities. Your clients and community have different needs now than they did even a month ago and will have different needs in another month. This approach will help you more readily hit your revenue and profit projections. Take the right action, and you will survive!”

      It’s time to create a crisis management plan. One of the most crucial things you’ll need to tackle as a small business owner is updating your website and social media channels.

      To keep your small business on the up and up, we’ve identified 11 things website owners should update during a crisis. Let’s dive in.

      How to Update Your Website During a Crisis

      1. Create a new landing page.

      When people visit your website, your homepage is likely the first thing they’ll see. That’s why keeping it fresh is always crucial, but with things in flux during a crisis, that’s even more important.

      To show that your business is on the ball and staying up to date, you’ll want to create a landing page for crisis-related content. Make sure to change the page often, especially when new information is released or policies evolve. If those affect your business, outline how you’ll be implementing anything new and how that will impact customers. Every time you update it, you can spread the word on social media by sharing a link.

      Another reason to continue refreshing your landing page is that search engines will recognize it’s a key page on your site for the crisis, which will boost SEO.

      2. Update your FAQ page.

      If you don’t have a FAQ section on your business website yet, it’s time to add one! The COVID-19 crisis is changing every day, so a FAQ section is a great place to address that and share your updates. Local businesses especially need to answer common questions about their crisis management and how your company is adapting because of restrictions due to COVID-19.

      To ensure that clients are aware of your FAQ section, you can spotlight a link to it on your homepage. Continue to add relevant information to your FAQ page, such as how you’re keeping employees safe, who comes into contact with your products, and policy changes, for instance.

      The FAQ section is also an opportunity to share any changes in your supply chain, offerings or any potential product fulfillment delays.

      “Always ensure you have the right resources to deploy readily available,” says Bob Minhas, Founder and Lead Trainer for eSchool for Entrepreneurs. “Whether documents or videos, walk through your customer journey and understand what they might need to know to complete a transaction with you online and have the right FAQ ready for them.”

      3. Change your menu/navigation.

      To make it easy to find your crisis content, it’s a good idea to add a link in your main navigation or an alert bar that sits above the navigation to your crisis landing page. Be sure to keep the title of the new navigation item short.

      Plus, regardless of the status of a crisis situation, it’s always a good idea to update your navigation to keep it timely and relevant, which should be part of a best practices strategy for your website.

      4. Review your product descriptions.

      Have your offerings changed in any way since the crisis started? Then you’ll want your website to reflect that. Change the text accordingly and add item availability information to postings.

      “A lot of small businesses that we work with are looking to add new services or products that are complimentary and interesting to the audiences they have built both online and in previous customers,” says Chris Sica, Chief Revenue Officer, The Ronin Society. “We encourage business owners to step into their customers’ shoes, think about the new buying journeys they are going to be on, what new pain points they will be experiencing and attempt to solve those using the resources they already have available to them.”

      5. Check your events page.

      If your business hosts events of any kind, you’ll want to give updates on how the schedule has changed, including if they’ve been cancelled, postponed or are going virtual.

      To avoid confusion, continue to list the original event date so that clients can confirm the event. For events that have been changed from in-person to digital, be sure to link to the virtual location for easy access.

      6. Make a homepage hero.

      In the midst of a crisis, everyone could use some good news. If you’ve realigned your business to help in any way, make it easy for customers to find out by updating your homepage. For example, if you’re now doing carryout or delivery, be sure to spread the word.

      “A delivery option is absolutely essential now,” Sica says. “Lots of customers still want to get out of the house and curbside pickup gives them a bit of a break from being at home. [Another element to expand is] payment options to make it easy to afford your product or service.”

      7. Utilize pop-ups or banners.

      One of the easiest ways to catch your clients’ attention and update them is to add a pop-up or banner. It’s an easy way to spread the word about reduced hours, limited inventory, shipping delays or changes in service availability. Make sure that it visually grabs people’s attention.

      8. Refresh local listings.

      If your hours have changed, the world needs to know. Be sure to update your website. Additionally, you’ll need to adjust hours and temporary closures on platforms where customers go to find your hours, such as Google My Business, Facebook and Yelp.

      9. Update your scheduled messaging.

      If you regularly send out pre-scheduled emails or social media updates, be sure to adjust them to fit the current situation. Otherwise, if you send out the same old communication, it can make you appear tone-deaf and not up to speed.

      “Customers are used to coming by your shop, seeing your advertisements, or whatever your traction channel is,” Sica says. “Their entire user experience with your brand has been removed or changed. Their fears and pain points have been altered. As a result, you need to make sure that you stay top of mind in a useful way. The easiest solution is by creating or updating your newsletters. We’ve also seen businesses create how-to videos for clients based on in-store or online products they like, and we’ve also seen customer happy hours.”

      10. Change your social media accounts.

      At the minimum, ensure that your business hours, closures, and product availability information remains updated for the duration of the coronavirus outbreak.

      Just to be on the safe side, it’s best to post more than once on your regular social media channels about any business changes, since we all know how quickly a Tweet can disappear to the bottom of a Twitter feed. This increases the odds that customers will see the news.

      11. Increase crisis communication.

      Ensure everyone is up to speed by sending updates via email, texts or blog posts — communicate with your customers in the way that is best for them.

      “It is important to stay in touch with customers,” says Jaryd P. Kase, Principal at Kase Consulting, LLC. “First off, if you are open, your customers might not know and they should know you are open. Second, your customers are dealing with the same crisis as you. By communicating how you are working to mitigate risk factors in the pandemic or working hard to continue bringing them a great product or service (or pick up where you left off if you are closed), it helps put the customer at ease that their favorite store or an important supplier isn’t going out of business.”

      However, there is a fine line between communicating too much and too little. “Communication with customers should be tempered,” says Deborah S. Sweeney, CEO of “It is important to not over-communicate or be too sales-y. Share information cautiously. Share content and information, but don’t try to sell. Inform and educate.”

      Looking for Remote Work Tips?

      Whether you want to stay focused at home or increase team engagement, we can help! Subscribe to the DreamHost Digest so you never miss an article.

      Your Crisis Management Team

      The coronavirus pandemic — and the resulting economic downturn —  is making things tough for small business owners. At DreamHost, we’ve provided digital homes for small businesses for more than two decades. In that time, we’ve learned that entrepreneurs are scrappy, smart, and savvy. We believe in you and your business and are here to help.

      Source link

      Hosten einer Website mit Caddy unter Ubuntu 18.04

      Der Autor wählte den Free and Open Source Fund, um eine Spende im Rahmen des Programms Write for DOnations zu erhalten.


      Caddy ist ein auf Einfachheit und Sicherheit ausgelegter Webserver, der mit einer Reihe von Funktionen ausgestattet ist, die für das Hosting von Websites nützlich sind. Beispielsweise kann er automatisch TLS-Zertifikate von Let’s Encrypt beziehen und verwalten, um HTTPS zu aktivieren, und er bietet Unterstützung für HTTP/2. HTTPS ist ein System zur Sicherung des Datenverkehrs zwischen Ihren Benutzern und Ihrem Server und entwickelte sich schnell zu einer grundlegenden Erwartung für jede Website, die in Produktion ausgeführt wird – ohne HTTPS warnen Chrome und Firefox, dass Ihre Website „Nicht sicher“ ist, wenn Benutzer versuchen, Anmeldeinformationen einzugeben.

      Früher wurde als Methode zur Installation von Caddy empfohlen, vorgefertigte Binärdateien von der Caddy-Projekt-Website herunterzuladen. Änderungen in der Lizenzierungsweise von Caddy bedeuten jedoch, dass Sie diese vorgefertigten Binärdateien nicht mehr für kommerzielle Zwecke verwenden dürfen, es sei denn, Sie zahlen eine Lizenzgebühr, auch wenn Sie Caddy nur intern innerhalb eines Unternehmens verwenden. Glücklicherweise ist der Quellcode von Caddy immer noch vollständig Open-Source und Sie können Caddy selbst erstellen, um Lizenzprobleme zu vermeiden.

      In diesem Tutorial erstellen Sie Caddy aus dem Quellcode und verwenden ihn zum Hosten einer mit HTTPS gesicherten Website. Dazu müssen Sie ihn kompilieren, mit einer Caddyfile konfigurieren und Plugins installieren. Am Ende lernen Sie, wie Sie Ihre Installation aktualisieren, wenn eine neue Version verfügbar ist.


      Schritt 1 – Erstellen von Caddy

      In diesem Schritt erstellen Sie den Caddy aus dem Quellcode mit der Möglichkeit, später Plugins hinzuzufügen, ohne den Quellcode von Caddy zu ändern.

      Für die Zwecke dieses Tutorials werden Sie den Quellcode unter ~/caddy speichern. Erstellen Sie das Verzeichnis durch Ausführen des folgenden Befehls:

      Navigieren Sie dorthin:

      Speichern Sie den Quellcode zur Ausführung und Anpassung von Caddy in einer Datei namens caddy.go. Erstellen Sie diese mit dem folgenden Befehl:

      Fügen Sie die folgenden Zeilen hinzu:


      package main
      import (
      func main() {
          // caddymain.EnableTelemetry = false

      Dieser Code importiert Caddy direkt von Github (mit Git) und startet ihn von der Eingangsfunktion main. Wenn Sie die Telemetrie aktivieren möchten, entkommentieren Sie die Zeile caddymain.EnableTelemetry und setzen den Wert auf true. Wenn Sie fertig sind, speichern und schließen Sie die Datei.

      Damit caddy.go die importierten Abhängigkeiten verwenden kann, müssen Sie es als Modul initialisieren:


      go: creating new go.mod: module caddy

      An diesem Punkt sind Sie bereit, die Stock-Version von Caddy aus dem obigen Quellcode zu erstellen, indem Sie Folgendes ausführen:

      Es werden zahlreiche Ausgaben erscheinen, die detailliert aufführen, welche Bibliotheken von Go als Abhängigkeiten heruntergeladen werden, die zum Kompilieren notwendig sind. Die resultierende ausführbare Datei wird unter $GOPATH/bin gespeichert, wie in den Voraussetzungen erklärt.

      Führen Sie Caddy nach Abschluss aus:

      Sie werden eine Ausgabe ähnlich der folgenden sehen:


      Activating privacy features... done. Serving HTTP on port 2015 http://:2015 WARNING: File descriptor limit 1024 is too low for production servers. At least 8192 is recommended. Fix with `ulimit -n 8192`.

      Dies bedeutet, dass Caddy erfolgreich gestartet wurde und auf dem Port 2015 verfügbar ist. Sie können die Warnmeldung ignorieren, da diese Grenze in späteren Schritten ohne Ihr Zutun angepasst wird. Drücken Sie zum Beenden STRG + C.

      Sie haben Caddy nun erstellt und ausgeführt. Im nächsten Schritt installieren Sie Caddy als Dienst, damit er automatisch beim Booten startet, und passen dann seine Eigentums- und Berechtigungseinstellungen an, um die Sicherheit des Servers zu gewährleisten.

      Schritt 2 – Installieren von Caddy

      Nachdem Sie nun bestätigt haben, dass Sie Caddy erstellen und ausführen können, ist es an der Zeit, einen systemd-Dienst zu konfigurieren, damit Caddy automatisch beim Systemstart gestartet werden kann. Um mehr über systemd zu erfahren, besuchen Sie unser Tutorial Systemd-Grundlagen.

      Verschieben Sie zunächst die Caddy-Binärdatei nach /usr/local/bin, den Standardspeicherort für Binärdateien, die nicht vom Ubuntu-Paketmanager verwaltet werden und für den Systembetrieb nicht entscheidend sind:

      • sudo mv $GOPATH/bin/caddy /usr/local/bin/

      Übertragen Sie anschließend die Eigentümerschaft der Caddy-Binärdatei an den root user:

      • sudo chown root:root /usr/local/bin/caddy

      Dadurch wird verhindert, dass andere Konten die ausführbare Datei modifizieren. Aber selbst wenn der root user Eigentümer von Caddy ist, ist es ratsam, ihn nur mit anderen, Nicht-Root-Konten auszuführen, die auf dem System vorhanden sind. Dadurch wird sichergestellt, dass im Falle einer Kompromittierung von Caddy (oder eines anderen Programms) der Angreifer nicht in der Lage sein wird, die Binärdatei zu verändern oder Befehle als root auszuführen.

      Legen Sie anschließend die Berechtigungen der Binärdatei auf 755 fest – dies gibt root volle Lese-/Schreib-/Ausführungsberechtigungen für die Datei, während andere Benutzer nur in der Lage sind, sie zu lesen und auszuführen:

      • sudo chmod 755 /usr/local/bin/caddy

      Da der Caddy-Prozess nicht als root ausgeführt wird, verhindert Linux, dass er an die Ports 80 und 443 (die Standardports für HTTP bzw. HTTPS) gebunden wird, da es sich hierbei um mit Berechtigungen versehene Operationen handelt. Um in Ihrer Domäne leicht zugänglich zu sein, muss Caddy abhängig vom Protokoll an einen dieser Ports gebunden werden. Andernfalls müssten Sie der Domain-URL in Ihrem Browser eine bestimmte Port-Nummer hinzufügen, um die Inhalte anzuzeigen, die er bereitstellen wird.

      Damit Caddy an niedrige Ports gebunden werden kann, ohne als root ausgeführt zu werden, führen Sie den folgenden Befehl aus:

      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      Das Dienstprogramm setcap legt die Dateifähigkeiten fest. In diesem Befehl weist es der Caddy-Binärdatei die Fähigkeit CAP_NET_BIND_SERVICE zu, die es einer ausführbaren Datei ermöglicht, sich an einen niedrigeren Port als 1024 zu binden.

      Sie haben nun die Einrichtung der Caddy-Binärdatei abgeschlossen und können mit dem Schreiben der Caddy-Konfiguration beginnen. Erstellen Sie ein Verzeichnis, in dem Sie die Konfigurationsdateien von Caddy speichern, indem Sie den folgenden Befehl ausführen:

      Legen Sie dann die richtigen Benutzer- und Gruppenberechtigungen dafür fest:

      • sudo chown -R root:www-data /etc/caddy

      Die Einstellung des Benutzers als root und der Gruppe als www-data stellt sicher, dass Caddy Lese- und Schreibzugriff auf den Ordner hat (über die Gruppe www-data) und dass nur das Superuser-Konto die gleichen Rechte zum Lesen und Ändern hat. www-data ist der Standardbenutzer und die Standardgruppe für Webserver unter Ubuntu.

      In einem späteren Schritt werden Sie die automatische TLS-Zertifikatsbereitstellung von Let’s Encrypt aktivieren. Erstellen Sie in Vorbereitung darauf ein Verzeichnis, in dem alle TLS-Zertifikate gespeichert werden, die Caddy erhalten wird, und geben ihm die gleichen Eigentumsregeln wie das Verzeichnis /etc/caddy:

      • sudo mkdir /etc/ssl/caddy
      • sudo chown -R root:www-data /etc/ssl/caddy

      Caddy muss Zertifikate in dieses Verzeichnis schreiben und aus diesem Verzeichnis lesen können, um Anfragen zu verschlüsseln.  Aus diesem Grund sollten Sie die Berechtigungen für das Verzeichnis /etc/ssl/caddy so ändern, dass es nur für root und www-data zugänglich ist:

      • sudo chmod 0770 /etc/ssl/caddy

      Erstellen Sie anschließend ein Verzeichnis, um die Dateien zu speichern, die Caddy hosten wird:

      Setzten Sie dann den Eigentümer und die Gruppe des Verzeichnisses auf www-data:

      • sudo chown www-data:www-data /var/www

      Caddy liest seine Konfiguration aus einer Datei namens Caddyfile, die unter /etc/caddy gespeichert ist. Erstellen Sie die Datei auf der Festplatte, indem Sie Folgendes ausführen:

      • sudo touch /etc/caddy/Caddyfile

      Um den Caddy-Dienst zu installieren, laden Sie die Unit-Datei systemd aus dem Caddy Github-Repository in /etc/systemd/system herunter, indem Sie Folgendes ausführen:

      • sudo sh -c 'curl > /etc/systemd/system/caddy.service'

      Ändern Sie die Berechtigungen der Dienstdatei, damit sie nur durch ihren Eigentümer root geändert werden kann:

      • sudo chmod 644 /etc/systemd/system/caddy.service

      Dann laden Sie systemd neu, um den Caddy-Dienst zu erkennen:

      • sudo systemctl daemon-reload

      Prüfen Sie, ob systemd den Caddy-Dienst erkannt hat, durch Ausführen von systemctl status:

      • sudo systemctl status caddy

      Sie sehen einen Output, der so ähnlich wie der nachfolgende aussieht:


      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: e Active: inactive (dead) Docs:

      Wenn Sie die gleiche Ausgabe sehen, wurde der neue Dienst korrekt von systemd erkannt.

      Als Teil der anfänglichen Server-Einrichtungsvoraussetzung haben Sie ufw, die unkomplizierte Firewall, aktiviert und SSH-Verbindungen zugelassen. Damit Caddy HTTP- und HTTPS-Verkehr von Ihrem Server aus bereitstellen kann, müssen Sie diese in ufw zulassen, indem Sie den folgenden Befehl ausführen:

      • sudo ufw allow proto tcp from any to any port 80,443

      Der Output sieht wie folgt aus:


      Rule added Rule added (v6)

      Überprüfen Sie mit ufw status, ob Ihre Änderungen funktioniert haben:

      Sie sehen die folgende Ausgabe:


      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80,443/tcp ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80,443/tcp (v6) ALLOW Anywhere (v6)

      Ihre Installation von Caddy ist nun abgeschlossen, aber noch nicht konfiguriert, um etwas bereitzustellen. Im nächsten Schritt konfigurieren Sie Caddy, um Dateien aus dem Verzeichnis /var/www bereitzustellen.

      Schritt 3 – Konfigurieren von Caddy

      In diesem Abschnitt schreiben Sie die grundlegende Caddy-Konfiguration für die Bereitstellung von statischen Dateien von Ihrem Server aus.

      Beginnen Sie mit der Erstellung einer grundlegenden HTML-Datei in /var/www namens index.html:

      • sudo nano /var/www/index.html

      Fügen Sie die folgenden Zeilen hinzu:


      <!DOCTYPE html>
        <title>Hello from Caddy!</title>
        <h1 style="font-family: sans-serif">This page is being served via Caddy</h1>

      Wenn sie in einem Webbrowser angezeigt wird, zeigt sie eine Kopfzeile mit dem Text This page is being served via Caddy. Speichern und schließen Sie die Datei.

      Öffnen Sie die zuvor erstellte Konfigurationsdatei Caddyfile für die Bearbeitung:

      • sudo nano /etc/caddy/Caddyfile

      Fügen Sie die folgenden Zeilen hinzu:


      :80 {
        root /var/www

      Hierbei handelt es sich um eine grundlegende Caddy-Konfiguration, die besagt, dass der Port 80 Ihres Servers mit Dateien aus /var/www bedient und mit gzip komprimiert werden soll, um die Seitenladezeiten auf der Client-Seite zu reduzieren.

      In den meisten Fällen können Sie die Konfigurationsanweisungen mit Caddy weiter anpassen. Beispielsweise können Sie die gzip-Komprimierung auf HTML- und PHP-Dateien beschränken und die Komprimierungsstufe auf 6 setzen (1 ist die niedrigste und 9 die höchste Komprimierungsstufe), indem Sie die Anweisung mit geschweiften Klammern erweitern und Unteranweisungen darunter auflisten:


      :80 {
        root /var/www
        gzip {
            ext .html .htm .php
            level 6

      Wenn Sie fertig sind, speichern und schließen Sie die Datei.

      Caddy verfügt über eine große Anzahl verschiedener Richtlinien für viele Anwendungsfälle. Beispielsweise könnte die Anweisung fastcgi für das Aktivieren von PHP nützlich sein. Die Anweisung markdown könnte verwendet werden, um Markdown-Dateien vor der Bereitstellung automatisch in HTML zu konvertieren, was für die Erstellung eines einfachen Blogs nützlich sein könnte.

      Um zu testen, ob alles korrekt funktioniert, starten Sie den Caddy-Dienst:

      • sudo systemctl start caddy

      Führen Sie als Nächstes systemctl status aus, um Informationen über den Status des Caddy-Dienstes zu erhalten:

      • sudo systemctl status caddy

      Sie sehen dann Folgendes:


      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2020-03-12 11:17:49 UTC; 11s ago Docs: Main PID: 3893 (caddy) Tasks: 7 (limit: 1152) CGroup: /system.slice/caddy.service └─3893 /usr/local/bin/caddy -log stdout -log-timestamps=false -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp Mar 12 11:17:49 caddy-article-update systemd[1]: Started Caddy HTTP/2 web server. Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO] Caddy version: v1.0.5 Mar 12 11:17:49 caddy-article-update caddy[3893]: Activating privacy features... done. Mar 12 11:17:49 caddy-article-update caddy[3893]: Serving HTTP on port 80 Mar 12 11:17:49 caddy-article-update caddy[3893]: http:// Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO] Serving http:// Mar 12 11:17:49 caddy-article-update caddy[3893]: [INFO][cache:0xc00007a7d0] Started certificate maintenance routine Mar 12 11:17:49 caddy-article-update caddy[3893]: [WARNING] Sending telemetry (attempt 1): Post " Mar 12 11:17:57 caddy-article-update caddy[3893]: [WARNING] Sending telemetry (attempt 2): Post " ...

      Sie können nun in einem Webbrowser zu der IP Ihres Servers browsen. Ihre Beispiel-Webseite zeigt an:

      Nachricht von Caddy

      Sie haben Caddy nun konfiguriert, um statische Dateien von Ihrem Server aus bereitzustellen. Im nächsten Schritt erweitern Sie die Funktionalität von Caddy durch die Verwendung von Plugins.

      Schritt 4 — Verwenden von Plugins

      Plugins bieten eine Möglichkeit, das Verhalten von Caddy zu ändern und zu erweitern. Sie bieten allgemein mehr Konfigurationsanweisungen, die Sie je nach Anwendungsfall verwenden können. In diesem Abschnitt fügen Sie Plugins hinzu und verwenden sie durch die Installation des Plugin minify, das überschüssige Leerzeichen entfernt und den Code, der an den Client gesendet wird, aufräumt, wodurch der Platzbedarf und die Ladezeiten weiter reduziert werden.

      Das GitHub-Repository des Plugins minify ist hacdias/caddy-minify.

      Navigieren Sie zum Verzeichnis mit dem Quellcode, den Sie in Schritt Eins erstellt haben:

      Um Caddy ein Plugin hinzuzufügen, müssen Sie es in die Datei caddy.go importieren, die Sie zum Erstellen von Caddy verwendet haben. Öffnen Sie caddy.go zum Bearbeiten:

      Importieren Sie das Plugin minify, indem Sie die hervorgehobene Zeile hinzufügen, wie hier beschrieben:


      package main
      import (
          _ ""
      func main() {
          // caddymain.EnableTelemetry = false

      Speichern und schließen Sie die Datei.

      Einige Plugins erfordern möglicherweise einige geringfügige Konfigurationsanpassungen, lesen Sie also unbedingt die Dokumentation des Plugins, das Sie installieren. Eine Liste beliebter Plugins finden Sie im linken Fenster der Caddy-Dokumentation unter Plugins.

      Sie müssen Caddy bei jedem Hinzufügen eines neuen Plugins neu erstellen. Das liegt daran, dass Go eine kompilierte Programmiersprache ist, d. h. der Quellcode wird vor der Ausführung in Computercode umgewandelt.  Ihre Änderung an der Importdeklaration hat den Quellcode verändert, wirkt sich aber erst nach der Kompilierung auf die Binärdatei aus.

      Verwenden Sie den Befehl go install, um Caddy zu kompilieren:

      Verschieben Sie nach dem Abschluss die erzeugte Binärdatei nach /usr/local/bin und richten Sie Berechtigungen für die Binärdatei ein, wie Sie es zuvor getan haben. Sie müssen diese Schritte bei jeder Neuerstellung von Caddy durchführen, um dessen Funktionalität und Sicherheit zu gewährleisten:

      • sudo mv $GOPATH/bin/caddy /usr/local/bin/
      • sudo chown root:root /usr/local/bin/caddy
      • sudo chmod 755 /usr/local/bin/caddy
      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      Um das Plugin minify zu verwenden, müssen Sie die Anweisung minify zu Ihrer Caddyfile hinzufügen. Öffnen Sie sie zum Bearbeiten:

      • sudo nano /etc/caddy/Caddyfile

      Aktivieren Sie das Plugin, indem Sie die folgende Zeile zum Konfigurationsblock hinzufügen:


      :80 {
        root /var/www

      Starten Sie nun Ihren Server mit systemctl neu:

      • sudo systemctl restart caddy

      Caddy wird nun ausgeführt und wird alle bereitgestellten Daten, einschließlich der zuvor erstellten Datei index.html, „minifizieren“. Sie können die „Minifizierung“ bei der Arbeit beobachten, indem Sie den Inhalt Ihrer Domäne mit curl abrufen:

      Sie werden die folgende Ausgabe sehen: Beachten Sie, dass alle unnötigen Leerzeichen entfernt wurden, was zeigt, dass das Plugin minify funktioniert.


      <!doctype html><title>Hello from Caddy!</title><h1 style=font-family:sans-serif>This page is being served via Caddy</h1>

      In diesem Schritt haben Sie gelernt, wie Sie Caddy mit Plugins erweitern können. Als Nächstes aktivieren Sie HTTPS, indem Sie das Plugin tls.dns.digitalocean installieren.

      Schritt 5 — Aktivieren von automatischem TLS mit Let’s Encrypt

      In diesem Abschnitt aktivieren Sie die automatische Bereitstellung und Erneuerung von Zertifikaten durch Let’s Encrypt, wobei TXT-DNS-Datensätze zur Verifizierung verwendet werden.

      Um die Verwendung von TXT-DNS-Datensätzen zu verifizieren, installieren Sie mit der DigitalOcean-API namens tls.dns.digitalocean ein Plugin für die Schnittstelle. Das Verfahren zur Installation dieses Plugins ist fast identisch mit der Installation des Plugins minify im vorherigen Schritt. Öffnen Sie zunächst caddy.go:

      Fügen Sie das Repository des Plugins zu imports hinzu:


      package main
      import (
          _ ""
          _ ""
      func main() {
          // caddymain.EnableTelemetry = false

      Kompilieren Sie es durch Ausführen von:

      Stellen Sie sicher, dass Caddy über systemctl angehalten wird, und beenden Sie dann die Installation des Plugins, indem Sie die neu erstellte Caddy-Binärdatei kopieren und noch einmal die Eigentümerschaft und die Berechtigungen festlegen:

      • sudo systemctl stop caddy
      • sudo mv $GOPATH/bin/caddy /usr/local/bin/
      • sudo chown root:root /usr/local/bin/caddy
      • sudo chmod 755 /usr/local/bin/caddy
      • sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

      Konfigurieren Sie anschließend Caddy, um mit der API von DigitalOcean zum Festlegen von DNS-Einträgen zu arbeiten. Caddy muss auf dieses Token als Umgebungsvariable zugreifen, um den DNS von DigitalOcean zu konfigurieren, damit Sie die Unit-Datei systemd bearbeiten können:

      • sudo nano /etc/systemd/system/caddy.service

      Suchen Sie die Zeile, die mit Environment= beginnt, im Abschnitt [Service]. Diese Zeile definiert die Umgebungsvariablen, die an den Caddy-Prozess übergeben werden sollen. Fügen Sie am Ende dieser Zeile ein Leerzeichen ein, fügen Sie dann eine Variable DO_AUTH_TOKEN hinzu, gefolgt von dem Token, das Sie gerade generiert haben:


      ; User and group the process will run as.
      ; Letsencrypt-issued certificates will be written to this directory.
      Environment=CADDYPATH=/etc/ssl/caddy DO_AUTH_TOKEN=your_token_here

      Speichern und schließen Sie diese Datei und laden Sie dann den Daemon systemd wie zuvor neu, um sicherzustellen, dass die Konfiguration aktualisiert wird:

      • sudo systemctl daemon-reload

      Führen Sie systemctl status aus, um zu überprüfen, ob Ihre Konfigurationsänderungen in Ordnung sind:

      • sudo systemctl status caddy

      Die Ausgabe sollte wie folgt aussehen:


      ● caddy.service - Caddy HTTP/2 web server Loaded: loaded (/etc/systemd/system/caddy.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: ...

      Sie müssen einige geringfügige Änderungen an Ihrer Caddyfile vornehmen, also öffnen Sie diese zur Bearbeitung:

      • sudo nano /etc/caddy/Caddyfile

      Fügen Sie die hervorgehobenen Zeilen in die Caddyfile ein. Achten Sie darauf, dass Sie dabei your_domain durch Ihre Domäne ersetzen (statt nur Port :80) und gzip kommentieren:


      your_domain {
        root /var/www
        tls {
            dns digitalocean

      Die Verwendung einer Domäne statt nur eines Ports für den Hostnamen führt dazu, dass Caddy Anfragen über HTTP bedient. Die Anweisung tls konfiguriert das Verhalten von Caddy bei Verwendung von TLS, und die Unteranweisung dns gibt an, dass Caddy das DNS-01-System anstelle des HTTP-01 verwenden soll.

      Damit ist Ihre Website für die Bereitstellung bereit. Starten Sie Caddy mit systemctl und aktivieren Sie es dann mit enable, damit es beim Starten ausgeführt wird.

      • sudo systemctl start caddy
      • sudo systemctl enable caddy

      Wenn Sie zu Ihrer Domäne browsen, werden Sie automatisch zu HTTPS umgeleitet, wobei dieselbe Meldung angezeigt wird.

      Ihre Installation von Caddy ist nun abgeschlossen und gesichert und Sie können je nach Anwendungsfall weitere Anpassungen vornehmen.

      Wenn Sie Caddy aktualisieren möchten, wenn eine neue Version verfügbar ist, müssen Sie die Datei go.mod (im gleichen Verzeichnis gespeichert) aktualisieren, die wie folgt aussieht:


      module caddy
      go 1.14
      require (

      Der hervorgehobene Bereich ist die von Ihnen verwendete Version von Caddy. Wenn eine neue Version auf Github veröffentlicht wird (siehe die Seite mit den Versions-Tags), können Sie die bestehende Version in go.mod durch diese ersetzen und Caddy entsprechend der ersten beiden Schritte kompilieren. Sie können dasselbe für alle importierten Plugins tun.


      Sie haben Caddy nun auf Ihrem Server installiert und konfiguriert, sodass statische Seiten auf Ihrer gewünschten Domäne bereitgestellt werden, die mit kostenlosen Let’s Encrypt TLS-Zertifikaten gesichert sind.

      Ein guter nächster Schritt wäre, einen Weg für die Benachrichtigung zu finden, wenn neue Versionen von Caddy veröffentlicht werden. Sie können beispielsweise den Atom-Feed für Caddy-Veröffentlichungen oder den dedizierten Dienst verwenden.

      Weitere Informationen zur Konfiguration von Caddy finden Sie in der Dokumentation von Caddy.

      Source link