Love.Law.Robots. by Ang Hou Fu

docassemble

Feature image

I spent several nights and trips on aeroplanes thinking about how to innovate the contracting process in my company. Though I did do a lot of reading online and offline, it was a lonely journey. I had to separate the puff from the substance and the wheat from the chuff from what I was reading and planning. When I got to action, I realised that having ideas was the easy part; making them work is really tough. Some of that work showed its fruits, but much of it was still unfinished.

Why I would use Excel for my Contract Management SystemHow do I get on this legal technology wave? Where do I even start? A “contract management system” or a “document management system” (“CMS”) is a good place. Business operations are not affected, but the legal department can get their hands dirty and show results for it. If you wouldLove.Law.Robots.HoufuAn early effort. I have mixed views about this post 2 years later.

A tiny book review

At first, I was sceptical about reading another book on the process. Sign Here: The enterprise guide to closing contracts quickly “ by Alex Hamilton proved to be different. Alex Hamilton is a founder of Radiant Law, a law firm in the UK that focuses solely on the commercial contract process. They use technology and process improvement to deliver legal services differently. They've been doing it for ten years too, so they are here to stay. I was quite sure I would learn something different from this book.

Unfortunately, the book didn't teach me anything new. Instead, it validated many of my instincts and the conclusion I had reached after pondering the issue for years. That might sound like a nice ending, but I would rather read this from a book than cracking it from some stone and not being sure whether what I had was a real insight or baloney.

So, in short, I recommend the book. It put words to what my instinct and experience were telling me, and I am glad I read it. This is the real deal, in an accessible and practical format that anyone can read.

Sign Here: The enterprise guide to closing contracts quickly : Hamilton, Alex: Amazon.sg: BooksSign Here: The enterprise guide to closing contracts quickly : Hamilton, Alex: Amazon.sg: BooksAlex HamiltonI earn a commission from purchases made through this affiliate link.

Let's Pick Five

If you are not convinced yet, here are five lessons from the book. I think they're wise and spoke to my practical experience.

Thing 1: Speed matters when you're making contracts

Image by Free-Photos from Pixabay

The legal department is usually viewed as a roadblock. We stop others from making bad mistakes. We are the ones who are going to review the contract you just received from the counterparty. These points are valid, but there's a substantial cost in not acting fast. “Sign Here” raises lost revenue, postponed or even lost value and may even undermine relationships as the cost of delay in the contracting process. “Relationships are indeed being created and grown [as a result of the contract process], but successful relationships are often despite rather than because of the agreement.”

So speed really makes a difference. In my view, there's a customer relationship factor. Your internal customers like to hear a response from you. They can also tell our external customers that they care when they respond quickly.

Thing 2: There is no silver bullet

Photo by Cody Wingfield on Unsplash

“Sign Here” proclaims that despite vendors' claims, no single solution would solve all problems in the contracting process. I've always felt sceptical about silver bullet claims. I also felt unsure whether any completely new platform would succeed given its high costs.

There are two facets of real life that make any “silver bullet” difficult:

  • You don't live in a vacuum. I found several guerilla systems for contracting in the wild in my company. Expecting messy people to fit into your system would probably be a hard task, and I was not sure I was spending my capital effectively forcing people to like my favourite solution.
  • Resources are limited. It's simple. I have no budget, and I am still expected to do my regular work properly. Any innovation used to be nice to have. The amount of work it takes to put in a “silver bullet” solution (if there was such a thing) would have been extremely risky.

So no single solution works. You really have to go in there and figure out a good fit.

Thing 3: Change is a long series of steps

Image by wendy CORNIQUET from Pixabay

Related to the “silver bullet” fascination above is the belief that one solution solves all problems at once. It just doesn't work like that. Even if you had infinite resources and a highly motivated core of customers ready to do your bidding, the solution you have just implemented is not likely to be perfect now or in the future. The time horizon “Sign Here” suggests isn't months or years — it's weeks and then improved again later.

For myself, having users and putting solutions into production meant I had to fix bugs, answer questions and listen to suggestions. With some humility, I realised that these fixes and suggestions made the solution better. It also meant, sadly, that I had to get back to the drawing board.

Corollary to the fact that you will have to revisit your work repeatedly, it also means that you have to learn new things all the time continually. 😰😫

Thing 4: Be Clear and Reasonable

Photo by Timothy Meinberg on Unsplash

Consistent with the aim that contracts are relational rather than transactional, “Sign Here” recommends that terms aim first to be reasonable rather than extract maximum advantage, which is whittled down by mano-a-mano negotiations to something you can live with.

Related to the speed of contracting, clear and reasonable terms means that parties aren't sapped by the energy it takes to reach an agreement. I found internal customers are happy when they aren't fighting pointless battles, and when they don't have to explain to the counterparty or their legal department why our terms are so unfair. It also turns out that business folks aren't blind, and they like to discuss strategic matters that really matter to the deal. That starts with shunting out the stuff that doesn't matter.

Thing 5: Some technologies are more important than others

Image by Michael Schwarzenberger from Pixabay

I found the hardest issue with implementing change in contracting is what to prioritize. When you have limited time, resources and leadership capital, the changes you emphasize appears to be very significant. Document automation and AI contract review sound cool, while other less glorious things like storage systems and helpdesks also seem important.

One of the best parts about “Sign Here” is that it sets out a list of technologies you should focus on and why. Conversely, it also highlights technologies that you might hear about, but also their not-so-discussed limitations. It's one of the most fun parts of the book, so I won't spoil it for you.

Instead, I'd highlight the most important technologies that I thought were. It broadly matches the insights from the book.

  • Document template automation (Docassemble)
  • e-Signature (we just implemented DocuSign)
  • Intake system (I'm working on it)
  • Knowledge system (Probably try and perfect the SharePoint site we now have)

docassemble – Love.Law.Robots.Love.Law.Robots.Some of my posts on this blog on docassemble.

Conclusion

Buy the book!

#BookReview #LegalTech #Contracts #ContractManagementSystem #docassemble #E-signature #Law

Author Portrait Love.Law.Robots. – A blog by Ang Hou Fu

Feature image

I really like Notion

I have a confession to make. I really like Notion. Notion, at its most basic, is a note-taking application. It allows you to create pages that contain various content, like web links, markdown, checklists, embedded content and so on. I am not alone too in liking Notion — look for the #notion hashtag on Twitter, and you'd find people rabidly professing their love. They aren't celebrities trying to sell something, but normal and authentic people who love a product.

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases.A new tool that blends your everyday work apps into one. It’s the all-in-one workspace for you and your team.Notion

My wife, who is a bit flabbergasted that I recommend Notion for everything , told me frankly, “Isn't this like Todoist? Or some journal app? There are dozens of such programs out there on the Internet. Free or paid.”

It's true. You can find dozens of apps that can provide you with a Kanban. It's a crowded field.

But Notion is special.

To me, it's a content management system that is very user friendly, yet very powerful at the same time. Like my wife says, the kanban, the markdown, the images, whatever, all those features aren't very interesting. However, you can dive straight into the app and create any of them in Notion. There isn't much to configure or install. You don't get to code it. To be frank, your interaction with Notion doesn't go further than typing text on a keyboard or enabling some option on a pop-up toolbar.

Is “no-code” for lawyers... or losers?

This brings me to the concept of “no-code” or “low code”. Apparently, lawyers are highly allergic to coding anything, so the idea that you don't have to do any coding is a feature. Among the front runners of this feature is Documate. It is a document assembly service built on docassemble but turns all that “programming” into buildable boxes so you don't have to do any coding. Another non-legal example is Scratch, an MIT project that teaches children how to program using blocks.

Document Automation Software – DocumateLegal document automation software to create powerful workflows that push data into your templates and forms.Documate

I haven't used Documate before, so I can't tell you whether it's good. Judging by its community though, it looks great. If you are attracted to its “no-code” premise and terrified of having to learn YAML and Jinga/Python in order to use docassemble, you should definitely give it a go.

As I can code, the idea of “no-code” turns me off though. Being able to tinker with a product is the fun part to me. Telling me I can't code means I cannot fully utilise the product. Once you become familiar with the capabilities of the product, your inability to code starts to look like the true barrier to achieving something. Suddenly, it's your fault, and that feeling really sucks.

It doesn't have to be this way. The opposite of “no-code” or “low code” isn't to code everything. To put it in another way, a product that asks you to do everything yourself is terrible. Ultimately a product has to provide features that you can use to achieve your aims. A particular set of features might be so limiting that it can do only one thing (and maybe do that one thing well). However, a different set of features could be so intriguing that you can use it for everything.

Think of “no-code” or “low code” this way:

  • You hardly ever need to code in Microsoft Word. Yet you can create any kind of document you want. No code ftw!
  • It ain't obvious, but you do some coding when you input a formula in Microsoft Excel. However, this “low code” environment allows you to perform calculations and filters and then use the output to visualize data. Excel is a prototypical database, a custom program and a report generator. Oops, sorry, Excel is a spreadsheet program.

Why I would use Excel for my Contract Management SystemHow do I get on this legal technology wave? Where do I even start? A “contract management system” or a “document management system” (“CMS”) is a good place. Business operations are not affected, but the legal department can get their hands dirty and show results for it. If you wouldLove.Law.Robots.HoufuSome good advice: consider using stuff you have already installed for innovation rather than inventing the wheel.

It's important to note that these Microsoft Office programs don't advertise themselves as “no-code”. They're still easy to use and accessible to all types of users.

Using Notion to improve my wife's website

So if you've been following so far, I think Notion is a great product that is equal parts friendly and powerful. It's also improving with a killer feature — an API. So a great product is now available to be integrated with others, making it even more powerful.

Notion APIConnect Notion pages and databases to the tools you use every day, creating powerful workflows.Notion API

My use case shows how you can use Notion to make small, impactful improvements to your projects.

Problem Statement

My wife is diligently developing her illustrator side hustle on her website, which I developed in roughly a week using NextJS. As an illustrator, a gallery is an important showcase of her work. Even though I had no qualms about doing it, being able to manage the content on the gallery herself would be a good feature. Content gets on the website quicker, and she'd get full autonomy on how to present it.

How the end product is going to look like – The Gallery page features categories where illustrations are organised. The pages for individual galleries feature a gallery of illustrations for the selected categories. Individual images feature some metadata.

My wife is not a coder, so choosing a data format for her was going to be challenging. It has to work with the website and work in her workflow too. A full-fledged content management system like WordPress would surely be overkill. However, explaining to her the intricacies of JSON, YAML or TOML would probably turn her off as well.

To turn you off, here's how the original YAML file looked like:

—- – caption: Travel sketches dateupdated: '2021-03-02' id: 3 location: travels title: Adventures and travels images: – caption: '' source: travels1.jpg thumbnailCaption: '' – caption: '' source: travels2.jpg thumbnailCaption: '' – caption: '' source: travels3.jpg thumbnailCaption: '' – caption: '' source: travels_4.jpg thumbnailCaption: '' portrait: true

I'd call this “code lite” like docassemble since she only has to edit one text file. But this will become problematic very fast:

  • What does “travels_1.jpg” mean? How do I write a caption for something which I don't even know what it is?
  • This is a text file, so the actual images are missing. It turns out that she still has to send the file to me, and then I have to rename it, and errm... a bunch of other manual steps before it gets on the website.
  • It's not difficult for an ordinary user to commit errors on YAML. For example, the indents are significant. Any typo on the source file names is sufficient to break the system as well.

Notion Everywhere!

Enter Notion. It does all of the above and it does it even better. The YAML text file is now replaced with a screen that looks like this:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b366764b-cef6-4c06-8821-93d0a26c7c7d/Untitled.png

Each box is clickable, and it leads you to the illustration's own page.

Deceptively, it looks like a gallery, but its underlying structure is a database. So I can view all my pictures in a user-friendly gallery, which allows for searching and filtering. Furthermore, the gallery packs an interface for me to upload new illustrations. It's not obvious from the screenshot, but you can even create new categories of illustrations.

Editing the metadata of an individual illustration is also straightforward:

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d0737aaf-1ec4-4118-a480-26ee662b240b/Untitled.png

The gallery also allows my wife to attach her illustration to the individual item, so I am able to get everything I need to create the gallery from Notion.

Finally, using Notion API, the NextJS website generator grabs all the information from Notion to create the gallery you now see on the website. (NB: As of writing the Notion API does not support images, so that step is still manual at this time.)

Once you have decided on the scheme of your data, you can directly translate it into a user-friendly Notion page. My wife doesn't need to touch any code, but she still gets to plan her gallery in the way she wants. (Now she just has to scan some illustrations. 😝)

Conclusion

I hope this demonstration gets you to question what we really want from “no-code” or “low code”. It's sexy to claim that lawyers don't get to touch any code, or that they can automate their workflows by dragging and dropping some boxes. However, we can be more discerning than that. What exactly are the features of this product? What can I do with it? Does it make me pull my hair out at the limitations it imposes on me? Or does it offer to sacrifice me on the altar of my crappy computer skills? In the end, designing a good product is a lot more difficult than having an effect that doesn't need you to code. Even a product made for general use (like Word or Notion) might be more relevant than a product that is labelled “legal tech”.

And if you ask me, a good barometer of a great product is the fans who are willing to say nice things about it.

#Programming #tech #docassemble #blog #MicrosoftOffice #Notion #LegalTech

Author Portrait Love.Law.Robots. – A blog by Ang Hou Fu

I run a docassemble server at work, ostensibly introducing co-workers to a different way of using templates to generate their agreements. It's been pretty useful, so much so that I use it myself for my work. However, due to the pandemic, it's not been easy to go and sell it. Maybe I am going to have better luck soon.

In the meantime, I decided to move the server from AWS to DigitalOcean.

Why move?

I liked the wide variety of features available on AWS, such as CodeCommit, Lambda and SES. DigitalOcean is not comparable in that regard. If I wanted to create a whole suite of services for my application, I would probably find something on AWS's glorious one-page filled with services.

However, with great functions come great complexity. I had a headache trying to exploit them. I was not going to be able to make full use of their ecosystem. (I shall never scoff at AWS certification anymore.)

On the other hand, I was more familiar with DigitalOcean and liked their straightforward pricing. So, if I wanted to move my pet project somewhere, I would have liked it to be in my backyard.

Let's get moving!

Lesson 1: Respect the shutdown

The docassemble docs expressly ask you to shut down your docassemble server gracefully. This is not the usual docker stop <container> command but with a timeout flag. It isn't fatal to forget the timeout flag in many simple use cases, so you would never actually notice it.

However, there's another way to kill your server in the cloud — flip the switch on your cloud instance on the management console. It doesn't feel like that when you click the red button, but it has the same effect. The cloud instance is sent straight to heaven, and there is nothing you can do about it.

The shutdown is important because docassemble does quite a lot of work when it shuts down. It dumps the database records in your storage. If the storage is located in the cloud (like AWS's S3 or DigitalOcean's Spaces), there is some lag when sending all the files there. If the shutdown is not respected, the server's state is not saved, and you might not be able to restore it when you start the container.

So with my AWS container gone in a cloud of dust, I found my files in my S3 storage were not updated. The last copy was over several months ago — the last time I had shut down my container normally. This meant that several months of work was gone! 😲

Lesson 2: Restore from backup

This blog could have ended on that sad note. Luckily for CloudOps newbies like me, docassemble automatically stores backups of the server state. These are stored in the backup folder of your storage and are arranged by date.

If you, like me, borked your docassemble server and set it back to August 2020, you can grab your latest backup and replace the main directory files (outside backup). The process is described in the docassemble docs here. Instead of having no users back in August 2020, I managed to retrieve all my users in the Postgres database stored in the backups. Phew!

Lesson 3: Check your config.yml file

After this exercise, I decided to go with a DigitalOcean Droplet and AWS S3. Given that I was already on S3 and the costs of S3 are actually fairly negligible, this seems like a cost-effective combo. DigitalOcean spaces cost $5 no matter how big they are, whereas my S3 usage rarely comes up to more than a dollar.

Before giving your new docassemble server a spin, do check your config.yml file. You can specify environment variables when you start a container, but once the server is running free, it uses the config.yml file found in the storage. If the configuration file was specially set for AWS, your server might not be able to run properly on DigitalOcean. This means you have to download the config.yml file on the storage (I used the web interface of S3 to do this) and edit it manually to fit your new server.

In my setup, my original configuration file was set up for an AWS environment. This meant that my EC2 instance used security policies to access the S3. At the time, it simplified the set-up of the server. However, my Droplet cannot use these features. Generate an access key and secret key, and input these details and more in your updated config.yml file. Oh, and turn off ec2.

If you are going to use Spaces, you will transfer the files in your old S3 to Spaces (I used s4cmd) and fill in the details of your S3 in the configuration file.

Conclusion

To be honest, the migration was essentially painless. The design of the docassemble server allows it to be restored from a single source of truth — the storage method you choose. Except for the problems that come from hand-editing your old config.yml (I had to type my SecretKey a few times 😢), you probably don't need to enter the docker and read initialize error logs. Given my positive experience, I will be well prepared to move back to AWS again! (Just kidding for now.)

#tech #docassemble #AWS #DigitalOcean #docker #OpenSource #tutorial #CloudComputing

Author Portrait Love.Law.Robots. – A blog by Ang Hou Fu

Feature image

Things you can only do during a lockdown – install a new server. As I mentioned previously, I got round to installing the latest Ubuntu LTS on my home server. Instead of using apt get for new software, I would run my server services through Docker instead. First up, I got Pi-Hole working and blocking ads. I's been sweet.

Let’s Play with: Pi-HoleI try to install Pi-Hole Server to block all ads and tracking websites at home.Love.Law.Robots.Houfu

My conviction to use containers started with docassemble. You can use docassemble to generate contracts from answering questions. It's relevant to my work and I am trying to get more of my (non-legal) colleagues to try it. Unlike other software I have tried, docassemble recommends just using docker. With one command, docker run -d jhpyle/docassemble, I would get a fully-featured server. My mind was blown.

DocassembleA free, open-source expert system for guided interviews and document assembly, based on Python, YAML, and Markdown.Docassemble

However, as I became more familiar with how to get docker to do what I want, the limitations of that simple command began to restrict me. Docassemble uses several ports. Many other applications share the same port, especially for a web server: 80 and 443. If docker and docassemble took these ports, no one else was going to get them. I wasn't sure if I wanted my home server to be just a docassemble server.

Furthermore, using secure ports (HTTPS) became a serious problem. I wanted to use my home server's docassemble installation as a development base, so it should be accessible to the outside world. For some reason, docassemble wouldn't accept my wildcard certs. If I planned to use it for anything serious, having an unsecured website was impossible.

It got so frustrating that I gave up.

Enter the Reverse-Proxy: Traefik

The short answer to my problems was to use a reverse proxy. A reverse proxy is a kind of server that gets information from another server for a client. Or in this case, a traefik server receives a request and figures out which docker container it should go to. A traefik server can also do other things, such as providing end to end security for your communications by obtaining free SSL certificates from Let's Encrypt.

TraefikTraefik Documentationlogo

I was convinced to go for this because it claimed that it would make “publishing your services a fun and easy experience”. When I read that, I let a tear go. Is it actually possible for this program to automatically detect the right configuration for your services? Even for something as big as docassemble?

I'll let you be the judge of that at the end of this article.

Step 1: Set up Traefik

Of course, you would need to have docker set up and good to go.

There are a bunch of ways to get Traefik going, but I would be using a docker-compose.yml file like in the QuickStart.

The documentation for docassemble does not mention anything about docker compose. It is a shame because I found it to be a more user-friendly tool than the docker command-line interface. So instead of writing a bash script just to shorten my long docker run command, I would write out the blueprint of my setup in the docker-compose.yml. After that, I can run docker-compose up -d and the services in the file will start altogether.

This is very important in my setup, because there are other services in my home server like plex or grocy (another lockdown project) too. For the sake of convenience, I decided to include all these like projects in the same docker-compose.yml file. This is the blueprint of my home server!

Back to Traefik, this is the section of my docker-compose.yml file setting out the reverse proxy server:

services: reverse-proxy: # The official v2 Traefik docker image image: traefik:v2.2 containername: traefik # Enables the web UI and tells Traefik to listen to docker command: —api.insecure=true —providers.docker ports: # The HTTP/HTTPS port – “80:80” – “443:443” # The Web UI (enabled by —api.insecure=true) – “8080:8080” volumes: # So that Traefik can listen to the Docker events – /var/run/docker.sock:/var/run/docker.sock – /home/houfu/traefik/:/etc/traefik/ environment: DOAUTH_TOKEN: XXX restart: unless-stopped

Just a few notes:

  • This line /home/houfu/traefik/:/etc/traefik/ under volumes allows me to have access to the configuration file used by traefik.
  • This line DO_AUTH_TOKEN: XXX under environment is to generate SSL certificates using my personal domain, which is managed by DigitalOcean.

Step 2: Prepare Traefik to generate SSL Certificates

Instead of having docassemble obtain the SSL certificates to use HTTPS, I decided to get Traefik to do it instead. Reverse proxies do this job much better, and I wouldn't need to “enter” the docassemble container to hunt down why SSL is not working.

Besides, my other services on my home server were already getting their certificates through Traefik, so getting docassemble to do the same would be straightforward right?

For this step, you would need to define a certificate resolver for Traefik to use. Please read the documentation as it is quite informative. For my set-up, I decided to use DigitalOcean as I was already using it for my DNS.

In the configuration file (traefik.toml), add a section to define the certificate resolver.

[certificatesResolvers.docassembleResolver.acme] email = “[email protected]” storage = “acme.json”

[certificatesResolvers.docassembleResolver.acme.dnsChallenge] # used during the challenge provider = “digitalocean”

The final step, especially if you have chosen DigitalOcean as a provider, is to get an API key and provide it to Traefik so that the process of getting a certificate can be automated. This was the DO_AUTH_TOKEN in the docker-compose.yml file referred to in the first step.

Step 3: Provide a blueprint for the Docassemble service

Once we have the reverse proxy set up, it’s time to get docassemble to run. This is the final form of the docker-compose.yml file for the docassemble service.

docassemble: image: “jhpyle/docassemble:latest” hostname: docassemble containername: docassemble stopgrace_period: 1m30s environment: – CONTAINERROLE=all – DBPREFIX=postgresql+psycopg2:// – DBNAME=docassemble – DBUSER=docassemble – DBPASSWORD=abc123 – DBHOST=localhost – USEHTTPS=false – DAHOSTNAME=docassemble.example.com – USELETSENCRYPT=false – S3ENABLE=true – S3ACCESSKEY=ABCDEFGH – S3SECRETACCESSKEY=1234567 – S3BUCKET=docassemble – S3ENDPOINTURL=https://xxxx.sgp1.digitaloceanspaces.com – TIMEZONE=Asia/Singapore – DAPYTHONVERSION=3 labels: – traefik.backend=docassemble – traefik.http.routers.docassemble.rule=Host(docassemble.example.com) – traefik.http.services.docassemble.loadbalancer.server.port=80 – traefik.http.routers.docassemble.tls=true – traefik.http.routers.docassemble.tls.certresolver=docassembleResolver – traefik.http.middlewares.docassemble-redirect.redirectscheme.scheme=https – traefik.http.middlewares.docassemble-redirect.redirectscheme.permanent=true – traefik.http.routers.docassemble.middlewares=docassemble-redirect

One of the most important aspects of setting up your own docassemble server is figuring out the environment variables. The docassemble documentation recommends that we use an env.list file or pass a list of configuration values to the docker run command. For our docker-compose file, we pass them as a dictionary to the environment section of the service blueprint. Feel free to add or modify these options as you need. For example, you can see that I am using DigitalOcean Spaces as my S3 compatible storage.

So where does the magic of Trafik’s automatic configuration come in? Innocuously under the label section of the blueprint. Let’s split this up for easy explanation.

labels: – traefik.backend=docassemble – traefik.http.routers.docassemble.rule=Host(docassemble.example.com) – traefik.http.services.docassemble.loadbalancer.server.port=80

In the first block of labels, we define the name and the host of the docassemble server. Traefik now knows what to call this server, and to direct queries from “docassemble.example.com” to this server. As docassemble exposes several ports, we also help prod traefik to use the correct port to access the server.

labels: – traefik.http.routers.docassemble.tls=true – traefik.http.routers.docassemble.tls.certresolver=docassembleResolver

In this block of labels, we tell Traefik to use HTTPS and to use the certificate provider we defined earlier to get these certificates.

labels: – traefik.http.middlewares.docassemble-redirect.redirectscheme.scheme=https – traefik.http.middlewares.docassemble-redirect.redirectscheme.permanent=true – traefik.http.routers.docassemble.middlewares=docassemble-redirect

Finally we tell traefik to use a middleware here — a redirect. The redirect middleware ensures that uses will use HTTPS to communicate with the server.

Note that in our environment variables for the docassemble server, we tell docassemble not to use https (“USEHTTPS=false”). This is because traefik is already taking care of it. We don’t need docassemble to bother with it.

It works!

Docassemble servers take a bit of time to set up. But once you get it up, you will see my favourite screen in the entire application.

docassemble server is working.I would like to thank my...

Notice the grey padlock in the address bar of my Firefox browser? That’s right, HTTPS baby!!

Final Thoughts

I am glad I learnt a lot about docker from docassemble, and its documentation is top-notch for what it is. However, running one is not easy. Using docker-compose helped iron out some of the pain. In any case, I am glad I got over this. It’s time to get developing! What should I work on next?

#blog #docassemble #docker #tutorial #tech #Traefik #HTTPS

Author Portrait Love.Law.Robots. – A blog by Ang Hou Fu