From 27d1a12929203c934252fd286130629af108172b Mon Sep 17 00:00:00 2001 From: Vladimir Mikhalev <10498744+heyvaldemar@users.noreply.github.com> Date: Mon, 6 Jan 2025 13:43:16 -0500 Subject: [PATCH] Ollama with Let's Encrypt Using Docker Compose --- .env | 7 +- .github/dependabot.yml | 11 ++ .../workflows/00-deployment-verification.yml | 74 +++++++----- README.md | 107 +++++++++++++----- ollama-traefik-letsencrypt-docker-compose.yml | 105 +++++++++-------- 5 files changed, 194 insertions(+), 110 deletions(-) create mode 100644 .github/dependabot.yml diff --git a/.env b/.env index 103a4e4..efb7ee3 100644 --- a/.env +++ b/.env @@ -1,7 +1,10 @@ # Traefik Variables -TRAEFIK_IMAGE_TAG=traefik:2.9 +TRAEFIK_IMAGE_TAG=traefik:3.2 +# Set the log level (DEBUG, INFO, WARN, ERROR) TRAEFIK_LOG_LEVEL=WARN -TRAEFIK_ACME_EMAIL=callvaldemar@gmail.com +# The email address used by Let's Encrypt for renewal notices +TRAEFIK_ACME_EMAIL=admin@example.com +# The hostname used to access the Traefik dashboard and to configure domain-specific rules TRAEFIK_HOSTNAME=traefik.ollama.heyvaldemar.net # Basic Authentication for Traefik Dashboard # Username: traefikadmin diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..90e05c4 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "github-actions" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/.github/workflows/00-deployment-verification.yml b/.github/workflows/00-deployment-verification.yml index 8171b03..2c94b91 100644 --- a/.github/workflows/00-deployment-verification.yml +++ b/.github/workflows/00-deployment-verification.yml @@ -12,39 +12,59 @@ jobs: deploy-and-test: runs-on: ubuntu-latest + env: + NETWORK_ONE: ollama-network + NETWORK_TWO: traefik-network + DOCKER_COMPOSE_FILE: ollama-traefik-letsencrypt-docker-compose.yml + APP_HOSTNAME: ollama.heyvaldemar.net + APP_TRAEFIK_HOSTNAME: traefik.ollama.heyvaldemar.net + COMPOSE_PROJECT_NAME: ollama + steps: - - name: Checkout repository - uses: actions/checkout@v4 + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Create necessary Docker networks + run: | + docker network create $NETWORK_ONE || true + docker network create $NETWORK_TWO || true - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 + - name: Start up services using Docker Compose + run: docker compose -f $DOCKER_COMPOSE_FILE -p $COMPOSE_PROJECT_NAME up -d - - name: Create necessary Docker networks - run: | - docker network create ollama-network || true - docker network create traefik-network || true + - name: Modify /etc/hosts for internal routing + run: | + echo "127.0.0.1 $APP_HOSTNAME" | sudo tee -a /etc/hosts + echo "127.0.0.1 $APP_TRAEFIK_HOSTNAME" | sudo tee -a /etc/hosts - - name: Start up services using Docker Compose - run: docker compose -f ollama-traefik-letsencrypt-docker-compose.yml up -d + - name: Print Docker Compose services status + run: docker ps - - name: Modify /etc/hosts for internal routing - run: | - echo "127.0.0.1 ollama.heyvaldemar.net" | sudo tee -a /etc/hosts - echo "127.0.0.1 traefik.ollama.heyvaldemar.net" | sudo tee -a /etc/hosts + - name: Wait for the application to be ready via Traefik + run: | + echo "Checking the routing and availability of the application via Traefik..." + timeout 5m bash -c 'while ! curl -fsSLk "https://$APP_HOSTNAME"; do \ + echo "Waiting for the application to be ready..."; \ + sleep 10; \ + done' - - name: Print Docker Compose services status - run: docker ps + - name: Wait for the Traefik dashboard to be ready + run: | + echo "Checking the routing and availability of the Traefik dashboard..." + timeout 5m bash -c 'while ! curl -fsSLk --write-out "%{http_code}" --output /dev/null "https://$APP_TRAEFIK_HOSTNAME" | grep -E "200|401"; do \ + echo "Waiting for the application to be ready..."; \ + sleep 10; \ + done' - - name: Wait for the application to be ready via Traefik - run: | - echo "Checking the routing and availability of application via Traefik..." - timeout 5m bash -c 'while ! curl -fsSLk "https://ollama.heyvaldemar.net"; do echo "Waiting for the application to be ready..."; sleep 10; done' + - name: Inspect Network Configuration + run: | + docker network inspect $NETWORK_ONE + docker network inspect $NETWORK_TWO - - name: Inspect Network Configuration - run: | - docker network inspect ollama-network - docker network inspect traefik-network + - name: Show container logs on failure + if: failure() + run: docker compose -f $DOCKER_COMPOSE_FILE -p $COMPOSE_PROJECT_NAME logs - - name: Shutdown Docker Compose services - if: always() - run: docker compose -f ollama-traefik-letsencrypt-docker-compose.yml down + - name: Shutdown Docker Compose services + if: always() + run: docker compose -f $DOCKER_COMPOSE_FILE -p $COMPOSE_PROJECT_NAME down diff --git a/README.md b/README.md index 53227c9..062af53 100644 --- a/README.md +++ b/README.md @@ -22,31 +22,82 @@ Deploy Ollama using Docker Compose: `docker compose -f ollama-traefik-letsencrypt-docker-compose.yml -p ollama up -d` -# Author - -Iβm Vladimir Mikhalev, the [Docker Captain](https://www.docker.com/captains/vladimir-mikhalev/), but my friends can call me Valdemar. - -π My [website](https://www.heyvaldemar.com/) with detailed IT guides\ -π¬ Follow me on [YouTube](https://www.youtube.com/channel/UCf85kQ0u1sYTTTyKVpxrlyQ?sub_confirmation=1)\ -π¦ Follow me on [Twitter](https://twitter.com/heyValdemar)\ -π¨ Follow me on [Instagram](https://www.instagram.com/heyvaldemar/)\ -𧡠Follow me on [Threads](https://www.threads.net/@heyvaldemar)\ -π Follow me on [Mastodon](https://mastodon.social/@heyvaldemar)\ -π§ Follow me on [Bluesky](https://bsky.app/profile/heyvaldemar.bsky.social)\ -πΈ Follow me on [Facebook](https://www.facebook.com/heyValdemarFB/)\ -π₯ Follow me on [TikTok](https://www.tiktok.com/@heyvaldemar)\ -π» Follow me on [LinkedIn](https://www.linkedin.com/in/heyvaldemar/)\ -π Follow me on [GitHub](https://github.com/heyvaldemar) - -# Communication - -πΎ Chat with IT pros on [Discord](https://discord.gg/AJQGCCBcqf)\ -π§ Reach me at ask@sre.gg - -# Give Thanks - -π Support on [GitHub](https://github.com/sponsors/heyValdemar)\ -π Support on [Patreon](https://www.patreon.com/heyValdemar)\ -π₯€ Support on [BuyMeaCoffee](https://www.buymeacoffee.com/heyValdemar)\ -πͺ Support on [Ko-fi](https://ko-fi.com/heyValdemar)\ -π Support on [PayPal](https://www.paypal.com/paypalme/heyValdemarCOM) +## Author + +hey everyone, + +πΎ Iβve been in the IT game for over 20 years, cutting my teeth with some big names like [IBM](https://www.linkedin.com/in/heyvaldemar/), [Thales](https://www.linkedin.com/in/heyvaldemar/), and [Amazon](https://www.linkedin.com/in/heyvaldemar/). These days, I wear the hat of a DevOps Consultant and Team Lead, but what really gets me going is Docker and container technology - Iβm kind of obsessed! + +π I have my own IT [blog](https://www.heyvaldemar.com/), where Iβve built a [community](https://discord.gg/AJQGCCBcqf) of DevOps enthusiasts who share my love for all things Docker, containers, and IT technologies in general. And to make sure everyone can jump on this awesome DevOps train, I write super detailed guides (seriously, theyβre foolproof!) that help even newbies deploy and manage complex IT solutions. + +π My dream is to empower every single person in the DevOps community to squeeze every last drop of potential out of Docker and container tech. + +π³ As a [Docker Captain](https://www.docker.com/captains/vladimir-mikhalev/), Iβm stoked to share my knowledge, experiences, and a good dose of passion for the tech. My aim is to encourage learning, innovation, and growth, and to inspire the next generation of IT whizz-kids to push Docker and container tech to its limits. + +Letβs do this together! + +## My 2D Portfolio + +πΉοΈ Click into [sre.gg](https://www.sre.gg/) β my virtual space is a 2D pixel-art portfolio inviting you to interact with elements that encapsulate the milestones of my DevOps career. + +## My Courses + +π Dive into my [comprehensive IT courses](https://www.heyvaldemar.com/courses/) designed for enthusiasts and professionals alike. Whether you're looking to master Docker, conquer Kubernetes, or advance your DevOps skills, my courses provide a structured pathway to enhancing your technical prowess. + +π [Each course](https://www.udemy.com/user/heyvaldemar/) is built from the ground up with real-world scenarios in mind, ensuring that you gain practical knowledge and hands-on experience. From beginners to seasoned professionals, there's something here for everyone to elevate their IT skills. + +## My Services + +πΌ Take a look at my [service catalog](https://www.heyvaldemar.com/services/) and find out how we can make your technological life better. Whether it's increasing the efficiency of your IT infrastructure, advancing your career, or expanding your technological horizons β I'm here to help you achieve your goals. From DevOps transformations to building gaming computers β let's make your technology unparalleled! + +## Patreon Exclusives + +π Join my [Patreon](https://www.patreon.com/heyvaldemar) and dive deep into the world of Docker and DevOps with exclusive content tailored for IT enthusiasts and professionals. As your experienced guide, I offer a range of membership tiers designed to suit everyone from newbies to IT experts. + +## My Recommendations + +π Check out my collection of [essential DevOps books](https://kit.co/heyvaldemar/essential-devops-books)\ +π₯οΈ Check out my [studio streaming and recording kit](https://kit.co/heyvaldemar/my-studio-streaming-and-recording-kit)\ +π‘ Check out my [streaming starter kit](https://kit.co/heyvaldemar/streaming-starter-kit) + +## Follow Me + +π¬ [YouTube](https://www.youtube.com/channel/UCf85kQ0u1sYTTTyKVpxrlyQ?sub_confirmation=1)\ +π¦ [X / Twitter](https://twitter.com/heyvaldemar)\ +π¨ [Instagram](https://www.instagram.com/heyvaldemar/)\ +π [Mastodon](https://mastodon.social/@heyvaldemar)\ +𧡠[Threads](https://www.threads.net/@heyvaldemar)\ +πΈ [Facebook](https://www.facebook.com/heyvaldemarFB/)\ +π§ [Bluesky](https://bsky.app/profile/heyvaldemar.bsky.social)\ +π₯ [TikTok](https://www.tiktok.com/@heyvaldemar)\ +π» [LinkedIn](https://www.linkedin.com/in/heyvaldemar/)\ +π£ [daily.dev Squad](https://app.daily.dev/squads/devopscompass)\ +𧩠[LeetCode](https://leetcode.com/u/heyvaldemar/)\ +π [GitHub](https://github.com/heyvaldemar) + +## Community of IT Experts + +πΎ [Discord](https://discord.gg/AJQGCCBcqf) + +## Refill My Coffee Supplies + +π [PayPal](https://www.paypal.com/paypalme/heyvaldemarCOM)\ +π [Patreon](https://www.patreon.com/heyvaldemar)\ +π [GitHub](https://github.com/sponsors/heyvaldemar)\ +π₯€ [BuyMeaCoffee](https://www.buymeacoffee.com/heyvaldemar)\ +πͺ [Ko-fi](https://ko-fi.com/heyvaldemar) + +π **Bitcoin (BTC):** bc1q2fq0k2lvdythdrj4ep20metjwnjuf7wccpckxc\ +πΉ **Ethereum (ETH):** 0x76C936F9366Fad39769CA5285b0Af1d975adacB8\ +πͺ **Binance Coin (BNB):** bnb1xnn6gg63lr2dgufngfr0lkq39kz8qltjt2v2g6\ +π **Litecoin (LTC):** LMGrhx8Jsx73h1pWY9FE8GB46nBytjvz8g + +