<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: corusm</title>
    <description>The latest articles on DEV Community by corusm (@corusm).</description>
    <link>https://dev.to/corusm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F112973%2F60fc4331-107c-416b-99d5-cfafd4b6a5f8.jpg</url>
      <title>DEV Community: corusm</title>
      <link>https://dev.to/corusm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/corusm"/>
    <language>en</language>
    <item>
      <title>Coffee Setup</title>
      <dc:creator>corusm</dc:creator>
      <pubDate>Mon, 26 Jun 2023 13:49:21 +0000</pubDate>
      <link>https://dev.to/corusm/coffee-setup-4i5e</link>
      <guid>https://dev.to/corusm/coffee-setup-4i5e</guid>
      <description>&lt;h2&gt;
  
  
  Shopping List
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://www.saturn.de/de/product/_delonghi-ec-685-m-dedica-style-2232116.html"&gt;DeLonghi Dedica EC685.M&lt;/a&gt; (~100€)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.de/gp/product/B00K49GMMW/ref=ppx_yo_dt_b_asin_title_o06_s00?ie=UTF8&amp;amp;psc=1"&gt;Steam Wand&lt;/a&gt; (29,49€)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.de/gp/product/B09LD6XNHF/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&amp;amp;psc=1"&gt;Portafilter&lt;/a&gt; (46,99€)&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.comandantegrinder.com/index.html#dealer"&gt;Comandante C40 Mk4 (Virginia Walnut)&lt;/a&gt; (249€)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.amazon.de/gp/product/B09WQPFF71/ref=ppx_yo_dt_b_asin_title_o09_s00?ie=UTF8&amp;amp;th=1"&gt;WDT Tool&lt;/a&gt; (11,99€)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.amazon.de/gp/product/B086WFXN8S/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&amp;amp;psc=1"&gt;Tamper&lt;/a&gt; (29,90€)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.amazon.de/gp/product/B06ZY74XWQ/ref=ppx_yo_dt_b_asin_title_o07_s01?ie=UTF8&amp;amp;psc=1"&gt;Milk Frothing Pitcher&lt;/a&gt; (9,34€)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.amazon.de/gp/product/B08K3DSW6Z/ref=ppx_yo_dt_b_asin_title_o07_s01?ie=UTF8&amp;amp;psc=1"&gt;Knock-Box&lt;/a&gt; (22,95€)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.coffeefriend.de/p/cafe-latte-tasse-untertasse-loveramics-egg-ice-blue-300-ml/?gad=1&amp;amp;gclid=Cj0KCQjw7uSkBhDGARIsAMCZNJuE8E_HuGvAGgYNIwL5p80uqUH_Ww9W6hEDr20ajKjDykAzwYP4NewaAnoOEALw_wcB"&gt;Loveramics Cup Egg Ice Blue&lt;/a&gt; (11,90€ per Cup)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Upgrading DeLonghi Dedica
&lt;/h2&gt;

&lt;p&gt;The Steam Wand and the standard Portafilter of the DeLonghi Dedica a pretty limited in their capabilities. Since the portafilter contains pressurized baskets, this leads to a worse quality in coffee. Additionally in my opinion, the new wooden portafilter has a better astetics and is easier to clean, because parts can be taken apart.&lt;/p&gt;

&lt;h3&gt;
  
  
  Upgrading the Steam Wand
&lt;/h3&gt;

&lt;p&gt;The steam original steam wand is bad to clean and makes it more difficult to get good results in latte art. As the upgrade of the portafilter is rather trivial, the upgrade of the steam wand requires taking the whole machine apart.&lt;/p&gt;

&lt;p&gt;There are several tutorials online on how to exchange this. I’ve taken the first one for the installment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=aQqeI2kJZJ4"&gt;https://www.youtube.com/watch?v=aQqeI2kJZJ4&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/_Ae1Uda2br4?t=777"&gt;https://youtu.be/_Ae1Uda2br4?t=777&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Known Issues
&lt;/h3&gt;

&lt;p&gt;During replacement of the steam wand I wasn’t that careful and overstretched the connecting rubber tube. There are dealers online having replacement parts on this, if this rubber band might fall off due to the pressure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ersatzteildirect.de/product_reviews_write.php?products_id=12091&amp;amp;altk=Mjg4NjkyfG5pa2xhcy5sZWluekBtZS5jb20&amp;amp;mid=63404d13b51b7"&gt;replacement part&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrading the Comandante Grinder
&lt;/h2&gt;

&lt;p&gt;When doing espresso, some types of coffee require fine adjustments in the stages of grinding. The Commandante Red-Clix double the amount of stages in the grinder, what allows better results in brewing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test your machine
&lt;/h2&gt;

&lt;p&gt;My personal favourite coffee right now is the &lt;a href="https://www.roastmarket.de/supremo-volcano-bio-espresso.html?s=2395&amp;amp;gclid=Cj0KCQjw7uSkBhDGARIsAMCZNJvpbzfAisjIvJqBUlxtSKZFBYDPm_fRjfT1wf7xrjuDTzvwqUrpXYgaAlr4EALw_wcB"&gt;supremo vulcano&lt;/a&gt;. I recommend XXX clix on the commandante and 30 seconds of brew time on the Dedica.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorials on steaming
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=oaKRBBpA4fw"&gt;https://www.youtube.com/watch?v=oaKRBBpA4fw&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Last words
&lt;/h2&gt;

&lt;p&gt;In total the whole setup has cost me ~500€ what is definitely not cheap but resulting in a great experience of enjoying good coffee. There are definitly retailers that enable some cost saving, but the grinder is pushing the price with 250€ the total setup price highen than with a budget solution. I’m kinda unhappy with the knock-box, but maybe there are some better alternatives on the market, that I can try out.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Run Raspbian VM (ARM) in Docker container</title>
      <dc:creator>corusm</dc:creator>
      <pubDate>Mon, 26 Jun 2023 13:41:03 +0000</pubDate>
      <link>https://dev.to/corusm/run-raspbian-vm-arm-in-docker-container-35eo</link>
      <guid>https://dev.to/corusm/run-raspbian-vm-arm-in-docker-container-35eo</guid>
      <description>&lt;h1&gt;
  
  
  Install Docker
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Arch
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S docker docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ubuntu
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Start &amp;amp; Enable Docker service
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start docker
sudo sysyemctl enable docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Docker Compose
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '3.7'
        services:
           raspbian-vm:
               image: hannseman/raspbian
               container_name: raspbian-vm
               privileged: true
               ports:
                 - "2222:2222"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Run Docker-Compose
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start Service
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Stop Service
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker-compose down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Alternativly run via Docker Command
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker run -it -p 2222:2222 --privileged hannseman/raspbian
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Connect to Server via SSH
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh pi@servername.de -p 2222
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>KVM/QEMU Raspberry Pi ARM VM</title>
      <dc:creator>corusm</dc:creator>
      <pubDate>Mon, 26 Jun 2023 13:38:54 +0000</pubDate>
      <link>https://dev.to/corusm/kvmqemu-raspberry-pi-arm-vm-520</link>
      <guid>https://dev.to/corusm/kvmqemu-raspberry-pi-arm-vm-520</guid>
      <description>&lt;p&gt;This project contains a fully configured &lt;code&gt;Raspbian Jessie&lt;/code&gt;VM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install QEMU
&lt;/h2&gt;

&lt;p&gt;For the setup you need the &lt;code&gt;qemu-system-arm&lt;/code&gt; package. &lt;strong&gt;Arch&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pacman -S qemu-arch-extra
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Ubuntu&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install -y qemu-system-arm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Download Content
&lt;/h2&gt;

&lt;p&gt;Download all following content in one Folder. *&lt;em&gt;Create *&lt;/em&gt;&lt;code&gt;start.sh&lt;/code&gt; file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/bash
sudo qemu-system-arm \
-kernel ./kernel-qemu-4.4.34-jessie \
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
-hda raspbian-jessie.qcow \
-vga std \
-cpu arm1176 -m 256 \
-M versatilepb \
-no-reboot \
-serial stdio \
-net nic \
-net user,hostfwd=::1234-:22 \
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*&lt;em&gt;Download *&lt;/em&gt;&lt;code&gt;Rasbian Jessie 2017-07-05&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-07-05/2017-07-05-raspbian-jessie.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*&lt;em&gt;Download *&lt;/em&gt;&lt;code&gt;Qemu Kernel Jessie&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.4.34-jessie
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Convert iso-image to qcow-image
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
Create &lt;code&gt;QCOW&lt;/code&gt; image from &lt;code&gt;ISO&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Resize the &lt;code&gt;QCOW&lt;/code&gt; image.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;qemu-img convert -f raw -O qcow2 2017-07-05-raspbian-jessie.img raspbian-jessie.qcow
qemu-img resize raspbian-jessie.qcow +6G
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Start VM
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./start.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SSH into VM
&lt;/h2&gt;

&lt;p&gt;For Using SSH you first need to enable ssh in the &lt;code&gt;raspi-config&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
Open the raspberry pi vm&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;sudo raspi-config&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Goto: &lt;code&gt;Interfacing Options &amp;gt; SSH &amp;gt; YES&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh pi@localhost -p 1234
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Default Login
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User: pi
        Password: raspbian
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Host Sharelatex in Docker (HTTPS)</title>
      <dc:creator>corusm</dc:creator>
      <pubDate>Mon, 26 Jun 2023 13:37:11 +0000</pubDate>
      <link>https://dev.to/corusm/host-sharelatex-in-docker-https-293f</link>
      <guid>https://dev.to/corusm/host-sharelatex-in-docker-https-293f</guid>
      <description>&lt;p&gt;This guide is about setting up Sharelatex in a Docker container with https connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install Docker
&lt;/h2&gt;

&lt;p&gt;Here two examples of installing the Docker deamon. The required Packages are docker and docker-compose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arch Linux
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S docker docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Debian / Ubuntu
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Enable Service
&lt;/h2&gt;

&lt;p&gt;To enable the service as background task simply run&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl enable docker
sudo systemctl start docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Setup Sharelatex
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
Create Virtual Docker Network&lt;/li&gt;
&lt;li&gt;Configure Docker-Compose File&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the Docker-Compose File you must change several values to your custom needs.&lt;/p&gt;

&lt;p&gt;The specific lines to change are commented:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.7"&lt;/span&gt;
&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;external&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;proxy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik:v2.2"&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;reverse-proxy&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--api=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--api.insecure=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--ping&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--providers.docker=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--providers.docker.network=main&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--providers.docker.exposedbydefault=false&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--entrypoints.web.address=:80&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--entrypoints.web-secure.address=:443&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--certificatesresolvers.myhttpchallenge.acme.httpchallenge=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--certificatesresolvers.myhttpchallenge.acme.httpchallenge.entrypoint=web&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--certificatesresolvers.myhttpchallenge.acme.caserver=https://acme-v02.api.letsencrypt.org/directory&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--certificatesresolvers.myhttpchallenge.acme.email=postmaster@test.com&lt;/span&gt; &lt;span class="c1"&gt;# Enter E-Mail Adress&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--certificatesresolvers.myhttpchallenge.acme.storage=/letsencrypt/acme.json&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;--entrypoints.mongo.address=:27017&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;
      &lt;span class="c1"&gt;# - "27017:27017" # Attention!: just open Port if needed!&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;main"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./letsencrypt:/letsencrypt&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/var/run/docker.sock:/var/run/docker.sock:ro&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./config.toml:/etc/traefik/traefik.config.toml:ro&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./certs:/etc/certs:ro&lt;/span&gt;
    &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.enable=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.proxy-https.rule=Host(`proxy.example.com`)"&lt;/span&gt; &lt;span class="c1"&gt;# change example.com with your domain&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.proxy-https.entrypoints=web-secure"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.proxy-https.tls=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.proxy-https.service=api@internal"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.proxy-https.middlewares=traefik-auth"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.middlewares.traefik-auth.basicauth.users=test:$$apr1$$.LOx3R4y$$/OjdUK3pSGiT/flYY42uS1"&lt;/span&gt; &lt;span class="c1"&gt;# enter new generated Hash&lt;/span&gt;
      &lt;span class="c1"&gt;# echo $(htpasswd -nb username password) | sed -e s/\\$/\\$\\$/g&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.proxy-http.rule=Host(`proxy.example.com`)"&lt;/span&gt; &lt;span class="c1"&gt;# change exmample.com with your domain&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.proxy-http.entrypoints=web"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.proxy-http.middlewares=https_redirect"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.middlewares.https_redirect.redirectscheme.scheme=https"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.middlewares.https_redirect.redirectscheme.permanent=true"&lt;/span&gt;

  &lt;span class="na"&gt;sharelatex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="c1"&gt;# Server Pro users:&lt;/span&gt;
    &lt;span class="c1"&gt;# image: quay.io/sharelatex/sharelatex-pro&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sharelatex/sharelatex&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sharelatex&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;mongo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;service_healthy&lt;/span&gt;
      &lt;span class="na"&gt;redis&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;service_started&lt;/span&gt;
    &lt;span class="na"&gt;links&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;mongo&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;redis&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;4555:80&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;main"&lt;/span&gt;
    &lt;span class="na"&gt;expose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;~/sharelatex_data:/var/lib/sharelatex&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;~/sharelatex_packages:/usr/local/texlive&lt;/span&gt;
      &lt;span class="c1"&gt;########################################################################&lt;/span&gt;
      &lt;span class="c1"&gt;####  Server Pro: Un-comment the following line to mount the docker ####&lt;/span&gt;
      &lt;span class="c1"&gt;####             socket, required for Sibling Containers to work    ####&lt;/span&gt;
      &lt;span class="c1"&gt;########################################################################&lt;/span&gt;
      &lt;span class="c1"&gt;# - /var/run/docker.sock:/var/run/docker.sock&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;SHARELATEX_APP_NAME&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Overleaf Workspace&lt;/span&gt; &lt;span class="c1"&gt;# change to custom name&lt;/span&gt;

      &lt;span class="na"&gt;SHARELATEX_MONGO_URL&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mongodb://mongo/sharelatex&lt;/span&gt;

      &lt;span class="c1"&gt;# Same property, unfortunately with different names in&lt;/span&gt;
      &lt;span class="c1"&gt;# different locations&lt;/span&gt;
      &lt;span class="na"&gt;SHARELATEX_REDIS_HOST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redis&lt;/span&gt;
      &lt;span class="na"&gt;REDIS_HOST&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redis&lt;/span&gt;

      &lt;span class="na"&gt;ENABLED_LINKED_FILE_TYPES&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url,project_file"&lt;/span&gt;

      &lt;span class="c1"&gt;# Enables Thumbnail generation using ImageMagick&lt;/span&gt;
      &lt;span class="na"&gt;ENABLE_CONVERSIONS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true"&lt;/span&gt;

      &lt;span class="c1"&gt;# Disables email confirmation requirement&lt;/span&gt;
      &lt;span class="na"&gt;EMAIL_CONFIRMATION_DISABLED&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true"&lt;/span&gt;

      &lt;span class="c1"&gt;# temporary fix for LuaLaTex compiles&lt;/span&gt;
      &lt;span class="c1"&gt;# see https://github.com/overleaf/overleaf/issues/695&lt;/span&gt;
      &lt;span class="na"&gt;TEXMFVAR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/var/lib/sharelatex/tmp/texmf-var&lt;/span&gt;

      &lt;span class="na"&gt;SHARELATEX_EMAIL_FROM_ADDRESS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;postmaster@test.com"&lt;/span&gt; &lt;span class="c1"&gt;# change email&lt;/span&gt;

    &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.enable=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.tex.rule=Host(`tex.example.com`)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.tex.entrypoints=web&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.tex.middlewares=redirect-to-https@docker&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.tex-secured.rule=Host(`tex.example.com`)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.tex-secured.tls=true&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.tex-secured.tls.certresolver=myhttpchallenge&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;traefik.http.routers.tex-secured.entrypoints=web-secure&lt;/span&gt;

  &lt;span class="na"&gt;mongo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mongo&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mongo&lt;/span&gt;
    &lt;span class="na"&gt;expose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="m"&gt;27017&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;main"&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;~/mongo_data:/data/db&lt;/span&gt;
    &lt;span class="na"&gt;healthcheck&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;echo 'db.stats().ok' | mongo localhost:27017/test --quiet&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10s&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10s&lt;/span&gt;
      &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
    &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.enable=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.tcp.routers.mongodb.rule=HostSNI(`*`)"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.tcp.services.mongodb.loadbalancer.server.port=27017"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.tcp.routers.mongodb.tls=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.tcp.routers.mongodb.entrypoints=mongo"&lt;/span&gt;

  &lt;span class="na"&gt;redis&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redis:5&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;redis&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;main"&lt;/span&gt;
    &lt;span class="na"&gt;expose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="m"&gt;6379&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;~/redis_data:/data&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
Set Password for Proxy page&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You need to pase the output in line 43 of the Docker-Compose file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo $(htpasswd -nb username password) | sed -e s/\\$/\\$\\$/g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Example:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- "traefik.http.middlewares.traefik-auth.basicauth.users=test:$$apr1$$.LOxTF4y$$/OjdUK3pSGiT/flYY42uS1"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install Latex Packages
&lt;/h3&gt;

&lt;p&gt;First of all, the package manager must be installed including all Latex Packages. The package manager of Latex is called tlmgr.&lt;/p&gt;

&lt;h4&gt;
  
  
  Start Docker-Container:
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Create User:
&lt;/h4&gt;

&lt;p&gt;Enter your own E-Mail address to this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec sharelatex /bin/bash -c "cd /var/www/sharelatex; grunt user:create-admin --email=max@test.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Install Packages:
&lt;/h4&gt;

&lt;p&gt;If the Sharelatex Container is running enter following commands&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker exec sharelatex wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
    sudo docker exec sharelatex tar xvfz install-tl-unx.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open the Bash Console of the container with the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker exec -ti sharelatex /bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
Change directory: &lt;code&gt;cd install-tl-XXX&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Change rights: &lt;code&gt;chmod u+x install-tl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;./install-tl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Wait until everything is installed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;exit&lt;/code&gt; the Bash Shell of the container&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Update Packages:
&lt;/h4&gt;

&lt;p&gt;Now check the tlmgr (Latex Package Manager) for updates&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker exec sharelatex tlmgr update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Important Docker Commands:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start Container:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run without &lt;code&gt;-d&lt;/code&gt; if you want to see the console output.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stop Container:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker-compose down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Reload Docker-Compose File:
&lt;/h3&gt;

&lt;p&gt;When Container Stopped&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo dokcer-compose up --force-recreate -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Host Mailcow with Traefik reverse Proxy</title>
      <dc:creator>corusm</dc:creator>
      <pubDate>Mon, 26 Jun 2023 13:18:46 +0000</pubDate>
      <link>https://dev.to/corusm/host-mailcow-with-traefik-reverse-proxy-51bn</link>
      <guid>https://dev.to/corusm/host-mailcow-with-traefik-reverse-proxy-51bn</guid>
      <description>&lt;h2&gt;
  
  
  Traefik
&lt;/h2&gt;

&lt;p&gt;Traefik is a reverse proxy for docker container that organises the network trafic und updates the https certificates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scope of this Tutorial
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Install Docker&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Download Mailcow&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setup &lt;code&gt;docker-compose.override.yml&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Launch Mailcow&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add DNS Entrys&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Install Docker &amp;amp; Git
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Arch
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

yay &lt;span class="nt"&gt;-S&lt;/span&gt; docker docker-compose git


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Ubuntu
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
sudo apt-get install git


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Start &amp;amp; Enable Docker service
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;sysyemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Download Mailcow
&lt;/h3&gt;

&lt;p&gt;In the next step we’ll clone the Mailcow git Repository&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

git clone https://github.com/mailcow/mailcow-dockerized /opt


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Change directory to &lt;code&gt;/opt/mailcow-dockerized&lt;/code&gt;
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

cd /opt/mailcow-dockerized


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Generate config
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

./generate_config.sh


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Remove exposed ports from Mailcow Docker-Compose File
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

nginx-mailcow:
...
      #ports:
        #- "${HTTPS_BIND:-0.0.0.0}:${HTTPS_PORT:-443}:${HTTPS_PORT:-443}"
        #- "${HTTP_BIND:-0.0.0.0}:${HTTP_PORT:-80}:${HTTP_PORT:-80}"


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Create Docker-Compose Override
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2.1"&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;nginx-mailcow&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.enable=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.nginx-mailcow.entrypoints=web"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.nginx-mailcow.rule=HostRegexp(`{host:(autodiscover|autoconfig|webmail|mail|email).+}`)"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.middlewares.nginx-mailcow-https-redirect.redirectscheme.scheme=https"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.nginx-mailcow.middlewares=nginx-mailcow-https-redirect"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.nginx-mailcow-secure.entrypoints=web-secure"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.nginx-mailcow-secure.rule=Host(`mail.example.de`)"&lt;/span&gt; &lt;span class="c1"&gt;# YOUR EMAIL SUBDMAIN&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.nginx-mailcow-secure.tls=true"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.registry-secured.tls.certresolver=myCertResolver"&lt;/span&gt; &lt;span class="c1"&gt;# ADD your Certresolver here&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.routers.nginx-mailcow-secure.service=nginx-mailcow"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.http.services.nginx-mailcow.loadbalancer.server.port=80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;traefik.docker.network=main"&lt;/span&gt;
    &lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;certdumper&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;humenius/traefik-certs-dumper&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;traefik_certdumper&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;network_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;none&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;--restart-containers mailcowdockerized_postfix-mailcow_1,mailcowdockerized_dovecot-mailcow_1&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="c1"&gt;# mount the folder which contains Traefik's `acme.json' file&lt;/span&gt;
      &lt;span class="c1"&gt;#   in this case Traefik is started from its own docker-compose in ../traefik&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/home/niklas/letsencrypt:/traefik:ro&lt;/span&gt;
      &lt;span class="c1"&gt;# mount mailcow's SSL folder&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/var/run/docker.sock:/var/run/docker.sock:ro&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./data/assets/ssl:/output:rw&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DOMAIN=mail.example.de&lt;/span&gt; &lt;span class="c1"&gt;# YOUR EMAIL SUBDOMAIN HERE&lt;/span&gt;
&lt;span class="na"&gt;networks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;main&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# YOUR TRAEFIK NETWORK HERE&lt;/span&gt;
    &lt;span class="na"&gt;external&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;span class="err"&gt;```&lt;/span&gt;

&lt;span class="c1"&gt;### Download `docker-compose.override`&lt;/span&gt;

&lt;span class="err"&gt;```&lt;/span&gt;
&lt;span class="s"&gt;wget https://gist.githubusercontent.com/corusm/063de56d133aa688f9d36a82bd78e607/raw/cdb03c2c5ef8b2ee62808a04b3aff935ab1e02e7/docker-compose.override.yml&lt;/span&gt;
&lt;span class="err"&gt;```&lt;/span&gt;

&lt;span class="c1"&gt;### Edit File&lt;/span&gt;

&lt;span class="s"&gt;Now edit the File in line `12, 33, 35` as in the comments explained.&lt;/span&gt;

&lt;span class="c1"&gt;### Edit `Mailcow.conf`&lt;/span&gt;

&lt;span class="s"&gt;1.&lt;/span&gt; 
   &lt;span class="s"&gt;Change `SKIP_LETS_ENCRYPT=n` to `SKIP_LETS_ENCRYPT=y`&lt;/span&gt;
&lt;span class="s"&gt;2. Change `SKIP_CLAMD=n` to `SKIP_CLAMD=y`&lt;/span&gt;

&lt;span class="c1"&gt;### Run Docker-Compose - Start Mailcow&lt;/span&gt;

&lt;span class="err"&gt;```&lt;/span&gt;
&lt;span class="s"&gt;sudo docker-compose up&lt;/span&gt;
&lt;span class="err"&gt;```&lt;/span&gt;

&lt;span class="s"&gt;If you are done with this tutorial, you can add the `-d`flag to run docker compose in the background.&lt;/span&gt;

&lt;span class="c1"&gt;### Open `mail.example.com`&lt;/span&gt;

&lt;span class="s"&gt;Start configuring your Mailcow Server!&lt;/span&gt;

&lt;span class="kt"&gt;![](https://dev-to-uploads.s3.amazonaws.com/i/37ppi0kz8x3rq3d9tuuw.png)&lt;/span&gt;

&lt;span class="c1"&gt;### Configure Mailcow&lt;/span&gt;

&lt;span class="s"&gt;Goto `Configuration &amp;gt; Mail Setup`&lt;/span&gt;

&lt;span class="c1"&gt;### Add Domain&lt;/span&gt;

&lt;span class="s"&gt;Goto `Configuration &amp;gt; Mail Setup &amp;gt; Domains`&lt;/span&gt;

&lt;span class="kt"&gt;![](https://dev-to-uploads.s3.amazonaws.com/i/fdg9v0q5mv0b0eus1ei2.png)&lt;/span&gt;

&lt;span class="c1"&gt;### Add Mailbox (E-Mail Adress)&lt;/span&gt;

&lt;span class="s"&gt;Goto `Configuration &amp;gt; Mail Setup &amp;gt; Mailbox`&lt;/span&gt;

&lt;span class="kt"&gt;![](https://dev-to-uploads.s3.amazonaws.com/i/upqxn526f30neyobuiuv.png)&lt;/span&gt;

&lt;span class="c1"&gt;### Open Webmail&lt;/span&gt;

&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="s"&gt;https://mail.example.com/SOGo`&lt;/span&gt;

&lt;span class="c1"&gt;### Login&lt;/span&gt;

&lt;span class="err"&gt;```&lt;/span&gt;
&lt;span class="na"&gt;User&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;user@domain.com&lt;/span&gt;
&lt;span class="err"&gt;```&lt;/span&gt;

&lt;span class="kt"&gt;![](https://dev-to-uploads.s3.amazonaws.com/i/mkv1z22n07ab50ic5k4e.png)&lt;/span&gt;

&lt;span class="c1"&gt;### Add DNS Config&lt;/span&gt;

&lt;span class="c1"&gt;### Add DMARC Entry&lt;/span&gt;

&lt;span class="err"&gt;```&lt;/span&gt;
&lt;span class="s"&gt;_dmarc.domain.com. TXT 3600 "v=DMARC1;p=none;rua=mailto:postmaster@domain.com;ruf=mailto:postmaster@domain.com"&lt;/span&gt;
&lt;span class="err"&gt;```&lt;/span&gt;

&lt;span class="c1"&gt;### Add MX Entry&lt;/span&gt;

&lt;span class="err"&gt;```&lt;/span&gt;
&lt;span class="s"&gt;domain.de MX 3600 10 mail.example.com&lt;/span&gt;
&lt;span class="err"&gt;```&lt;/span&gt;

&lt;span class="c1"&gt;### Add DKIM Entry&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; 
  &lt;span class="s"&gt;Goto `Configuration &amp;gt; ARC/DKIM-Keys`&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="s"&gt;Add ARC/DKIM key`&lt;/span&gt;

&lt;span class="kt"&gt;![](https://dev-to-uploads.s3.amazonaws.com/i/vl32lvpfmb1eqvgfm2ph.png)&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; 
  &lt;span class="s"&gt;Copy Private Key to DNS Server&lt;/span&gt;

&lt;span class="kt"&gt;![](https://dev-to-uploads.s3.amazonaws.com/i/9p3x9mghsrh9nox496zn.png)&lt;/span&gt;

&lt;span class="c1"&gt;### INFO&lt;/span&gt;

&lt;span class="s"&gt;It takes some time for the DNS Servers to spread the information. Give this process some time!&lt;/span&gt;

&lt;span class="c1"&gt;### Check the Spammyness of your email&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;https&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;//www.mail-tester.com/&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;&lt;span class="s"&gt;(https://www.mail-tester.com/)&lt;/span&gt;

&lt;span class="s"&gt;1.&lt;/span&gt; 
   &lt;span class="s"&gt;Open the Website&lt;/span&gt;
&lt;span class="s"&gt;2. Send E-Mail to this address&lt;/span&gt;
&lt;span class="s"&gt;3. Get the review!&lt;/span&gt;

&lt;span class="kt"&gt;![](https://dev-to-uploads.s3.amazonaws.com/i/p3irqhkr8vlhx2iizqgh.png)&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Host Mailcow with Traefik reverse Proxy</title>
      <dc:creator>corusm</dc:creator>
      <pubDate>Fri, 05 Feb 2021 14:13:19 +0000</pubDate>
      <link>https://dev.to/corusm/host-mailcow-with-traefik-reverse-proxy-1c6n</link>
      <guid>https://dev.to/corusm/host-mailcow-with-traefik-reverse-proxy-1c6n</guid>
      <description>&lt;p&gt;How do I host securely my Mailcow Server in Docker?&lt;/p&gt;

&lt;h1&gt;
  
  
  Traefik
&lt;/h1&gt;

&lt;p&gt;Traefik is a reverse proxy for docker container that organises the network trafic und updates the https certificates.&lt;/p&gt;

&lt;h1&gt;
  
  
  Scope of this Tutorial
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Install Docker&lt;/li&gt;
&lt;li&gt;Download Mailcow&lt;/li&gt;
&lt;li&gt;Setup &lt;code&gt;docker-compose.override&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Launch Mailcow&lt;/li&gt;
&lt;li&gt;Add DNS Entrys&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Install Docker &amp;amp; Git
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Arch
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

yay -S docker docker-compose git


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Ubuntu
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
sudo apt-get install git


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Start &amp;amp; Enable Docker service
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo systemctl start docker
sudo sysyemctl enable docker


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h1&gt;
  
  
  Download Mailcow
&lt;/h1&gt;

&lt;p&gt;In the next step we'll clone the Mailcow git Repoisitory.&lt;/p&gt;
&lt;h2&gt;
  
  
  Clone Git Repoisitory
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

git clone https://github.com/mailcow/mailcow-dockerized /opt


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Change directory to &lt;code&gt;/opt/mailcow-dockerized&lt;/code&gt;
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

cd /opt/mailcow-dockerized


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Generate config
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

./generate_config.sh


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Remove exposed ports from Mailcow Docker-Compose File
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

nginx-mailcow:
...
      #ports:
        #- "${HTTPS_BIND:-0.0.0.0}:${HTTPS_PORT:-443}:${HTTPS_PORT:-443}"
        #- "${HTTP_BIND:-0.0.0.0}:${HTTP_PORT:-80}:${HTTP_PORT:-80}"



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Create Docker-Compose Override
&lt;/h2&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;h3&gt;
  
  
  Download &lt;code&gt;Docker-Compose.Override&lt;/code&gt;
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

wget https://gist.githubusercontent.com/corusm/063de56d133aa688f9d36a82bd78e607/raw/cdb03c2c5ef8b2ee62808a04b3aff935ab1e02e7/docker-compose.override.yml


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Edit File
&lt;/h3&gt;

&lt;p&gt;Now edit the File in line &lt;code&gt;12, 33, 35&lt;/code&gt; as in the comments explained.&lt;/p&gt;
&lt;h1&gt;
  
  
  Edit &lt;code&gt;Mailcow.conf&lt;/code&gt;
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Change &lt;code&gt;SKIP_LETS_ENCRYPT=n&lt;/code&gt; to &lt;code&gt;SKIP_LETS_ENCRYPT=y&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Change &lt;code&gt;SKIP_CLAMD=n&lt;/code&gt; to &lt;code&gt;SKIP_CLAMD=y&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;
  
  
  Add your subdomain &lt;code&gt;mail.example.com&lt;/code&gt; to the certs file
&lt;/h1&gt;

&lt;p&gt;Therefore we must run a test docker-compose.yml file, because I haven't got a different solution yet to create the certs for the new domain.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Make directory &lt;code&gt;newcerts&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Download this git in the directory 
&lt;code&gt;wget

https://gist.githubusercontent.com/corusm/f36fc12022668ee1972f004fd46385f6/raw/9da0364cd40deb4ebac50a173cedae0c636f218c/docker-compose.yml

&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Change &lt;code&gt;Commented&lt;/code&gt; Values to your &lt;code&gt;mail.example.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run Docker-Compose &lt;code&gt;sudo docker-compose up --force-recreate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Wait until container is running&lt;/li&gt;
&lt;li&gt;Stop Docker-Compose &lt;code&gt;ctrl + c&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Now run the Mailcow Server
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Go back to the Mailcow Directory &lt;code&gt;/opt/mailcow-dockerized&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Run Docker-Compose
&lt;/h2&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo docker-compose up


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you are done with this tutorial you can add the &lt;code&gt;-d&lt;/code&gt; flag to run docker compose in the background.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open &lt;code&gt;mail.example.com&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Start configuring your Mailcow Server!&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F37ppi0kz8x3rq3d9tuuw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F37ppi0kz8x3rq3d9tuuw.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Mailcow
&lt;/h2&gt;

&lt;p&gt;Goto &lt;code&gt;Configuration &amp;gt; Mail Setup&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Add Domain
&lt;/h3&gt;

&lt;p&gt;Goto &lt;code&gt;Configuration &amp;gt; Mail Setup &amp;gt; Domains&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffdg9v0q5mv0b0eus1ei2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffdg9v0q5mv0b0eus1ei2.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Add Mailbox (E-Mail Adress)
&lt;/h3&gt;

&lt;p&gt;Goto &lt;code&gt;Configuration &amp;gt; Mail Setup &amp;gt; Mailbox&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fupqxn526f30neyobuiuv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fupqxn526f30neyobuiuv.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Open Webmail
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;https://mail.example.com/SOGo&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Login
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

User: user@domain.com


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmkv1z22n07ab50ic5k4e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fmkv1z22n07ab50ic5k4e.png" alt="alt text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Add DNS Config
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Add DMARC Entry
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;_dmarc.domain.com. TXT 3600 "v=DMARC1;p=none;rua=mailto:&lt;a href="mailto:postmaster@domain.com"&gt;postmaster@domain.com&lt;/a&gt;;ruf=mailto:&lt;a href="mailto:postmaster@domain.com"&gt;postmaster@domain.com&lt;/a&gt;"&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Add MX Entry&lt;br&gt;
&lt;/h2&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;domain.de MX 3600 10 mail.example.com&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Add DKIM Entry&lt;br&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Goto &lt;code&gt;Configuration &amp;gt; ARC/DKIM-Keys&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Add ARC/DKIM key&lt;/code&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fvl32lvpfmb1eqvgfm2ph.png" alt="alt text"&gt;
&lt;/li&gt;
&lt;li&gt;Copy Private Key to DNS Server
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9p3x9mghsrh9nox496zn.png" alt="alt text"&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;dkim._domainkey.corusm.de. TXT 3600 YOUR_DKIM_KEY&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  INFO&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;It takes some time for the DNS Servers to spread the information. Give this process some time!&lt;/p&gt;

&lt;h1&gt;
  
  
  Check the Spammyness of your email
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://www.mail-tester.com/" rel="noopener noreferrer"&gt;https://www.mail-tester.com/&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the Website&lt;/li&gt;
&lt;li&gt;Send E-Mail to this address&lt;/li&gt;
&lt;li&gt;Get the review!
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fp3irqhkr8vlhx2iizqgh.png" alt="alt text"&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  YOU'RE DONE!
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Run Raspbian VM (ARM) in Docker container</title>
      <dc:creator>corusm</dc:creator>
      <pubDate>Fri, 05 Feb 2021 10:46:25 +0000</pubDate>
      <link>https://dev.to/corusm/run-raspbian-arm-in-docker-container-19m6</link>
      <guid>https://dev.to/corusm/run-raspbian-arm-in-docker-container-19m6</guid>
      <description>&lt;p&gt;Quick tutorial how to run Raspbian in a Docker Container.&lt;/p&gt;

&lt;h1&gt;
  
  
  Install Docker
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Arch
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S docker docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ubuntu
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Start &amp;amp; Enable Docker service
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo systemctl start docker
sudo sysyemctl enable docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Docker Compose
&lt;/h1&gt;

&lt;p&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;version: '3.7'
services:
   raspbian-vm:
       image: hannseman/raspbian
       container_name: raspbian-vm
       privileged: true
       ports:
         - "2222:2222"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Run Docker-Compose
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Start Service
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Stop Service
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker-compose down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Alternativly run via Docker Command
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker run -it -p 2222:2222 --privileged hannseman/raspbian
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Connect to Server via SSH
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh pi@servername.de -p 2222
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>KVM/QEMU Raspberry Pi ARM VM</title>
      <dc:creator>corusm</dc:creator>
      <pubDate>Thu, 04 Feb 2021 19:35:19 +0000</pubDate>
      <link>https://dev.to/corusm/kvm-qemu-raspberry-pi-arm-vm-7l2</link>
      <guid>https://dev.to/corusm/kvm-qemu-raspberry-pi-arm-vm-7l2</guid>
      <description>&lt;p&gt;This project contains a fully configured &lt;code&gt;Raspbian Jessie&lt;/code&gt; VM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install QEMU
&lt;/h2&gt;

&lt;p&gt;For the setup you need the &lt;code&gt;qemu-system-arm&lt;/code&gt; package.&lt;br&gt;
&lt;strong&gt;Arch&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pacman -S qemu-arch-extra
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Ubuntu&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install -y qemu-system-arm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Download Content
&lt;/h2&gt;

&lt;p&gt;Download all following content in one Folder.&lt;br&gt;
&lt;strong&gt;Create &lt;code&gt;start.sh&lt;/code&gt; file&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Download &lt;code&gt;Rasbian Jessie 2017-07-05&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget https://downloads.raspberrypi.org/raspbian/images/raspbian-2017-07-05/2017-07-05-raspbian-jessie.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Download &lt;code&gt;Qemu Kernel Jessie&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget https://github.com/dhruvvyas90/qemu-rpi-kernel/raw/master/kernel-qemu-4.4.34-jessie
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Convert iso-image to qcow-image
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create &lt;code&gt;QCOW&lt;/code&gt; image from &lt;code&gt;ISO&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Resize the &lt;code&gt;QCOW&lt;/code&gt; image.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;qemu-img convert -f raw -O qcow2 2017-07-05-raspbian-jessie.img raspbian-jessie.qcow
qemu-img resize raspbian-jessie.qcow +6G
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Start VM
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./start.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  SSH into VM
&lt;/h2&gt;

&lt;p&gt;For Using SSH you first need to enable ssh in the &lt;code&gt;raspi-config&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the raspberry pi vm &lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;sudo raspi-config&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Goto: &lt;code&gt;Interfacing Options &amp;gt; SSH &amp;gt; YES&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ssh pi@localhost -p 1234
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Default Login
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User: pi
Password: raspberry
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Host Sharelatex in Docker (with HTTPS)</title>
      <dc:creator>corusm</dc:creator>
      <pubDate>Thu, 03 Dec 2020 23:17:26 +0000</pubDate>
      <link>https://dev.to/corusm/host-sharelatex-in-docker-with-https-5cn</link>
      <guid>https://dev.to/corusm/host-sharelatex-in-docker-with-https-5cn</guid>
      <description>&lt;p&gt;This guide is about setting up Sharelatex in a Docker container with https connection.&lt;/p&gt;

&lt;h1&gt;
  
  
  Install Docker
&lt;/h1&gt;

&lt;p&gt;Here two examples of installing the Docker deamon. The required Packages are docker and docker-compose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arch Linux
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yay &lt;span class="nt"&gt;-S&lt;/span&gt; docker docker-compose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Debian / Ubuntu
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.docker.com &lt;span class="nt"&gt;-o&lt;/span&gt; get-docker.sh
sh get-docker.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  Enable Service
&lt;/h1&gt;

&lt;p&gt;To enable the service as background task simply run&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;docker
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start docker
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h1&gt;
  
  
  Setup Sharelatex Container
&lt;/h1&gt;
&lt;h2&gt;
  
  
  1. Create Virtual Docker Network
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker network create main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  2. Configure Docker-Compose File
&lt;/h2&gt;

&lt;p&gt;In the Docker-Compose File you must change several values to your custom needs.&lt;br&gt;
The specific lines to change are commented.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Set Password for Proxy Page
&lt;/h2&gt;

&lt;p&gt;You need to paste the output in line 43 of the Docker compose file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;htpasswd &lt;span class="nt"&gt;-nb&lt;/span&gt; username password&lt;span class="si"&gt;)&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; s/&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="nv"&gt;$/&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="nv"&gt;$\&lt;/span&gt;&lt;span class="se"&gt;\$&lt;/span&gt;/g
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- "traefik.http.middlewares.traefik-auth.basicauth.users=test:$$apr1$$.LOxTF4y$$/OjdUK3pSGiT/flYY42uS1"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Install Latex Packages
&lt;/h3&gt;

&lt;p&gt;First of all, the package manager must be installed including all Latex Packages. The package manager of Latex is called tlmgr.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run Docker Container:&lt;/strong&gt;&lt;br&gt;
To run the Sharelatex Server enter&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker-compose up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create User:&lt;/strong&gt;&lt;br&gt;
Enter your own E-Mail address to this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker exec sharelatex /bin/bash -c "cd /var/www/sharelatex; grunt user:create-admin --email=max@test.com"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Install Packages:&lt;/strong&gt;&lt;br&gt;
If the Sharelatex Container is running enter following commands&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;docker &lt;span class="nb"&gt;exec &lt;/span&gt;sharelatex wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
&lt;span class="nb"&gt;sudo &lt;/span&gt;docker &lt;span class="nb"&gt;exec &lt;/span&gt;sharelatex &lt;span class="nb"&gt;tar &lt;/span&gt;xvfz install-tl-unx.tar.gz
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open the Bash Console of the container&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-ti&lt;/span&gt; sharelatex /bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Change directory: &lt;code&gt;cd install-tl-XXX&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Change rights: &lt;code&gt;chmod u+x install-tl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;./install-tl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Wait until everything is installed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;exit&lt;/code&gt; the Bash Shell of the container&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Update Packages:&lt;/strong&gt;&lt;br&gt;
Now check the tlmgr (Latex Package Manager) for updates&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec &lt;/span&gt;sharelatex tlmgr update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Important Docker Commands
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Start Container
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker-compose up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run without &lt;code&gt;-d&lt;/code&gt; if you want to see the console output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop Container
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo docker-compose down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Reload Docker-Compose File
&lt;/h2&gt;

&lt;p&gt;When Container Stopped&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo dokcer-compose up --force-recreate -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  You're done! ❤️
&lt;/h1&gt;

</description>
      <category>docker</category>
      <category>traefik</category>
      <category>sharelatex</category>
      <category>latex</category>
    </item>
  </channel>
</rss>
