Skip to content

Add installation using Docker Compose and many other improvements for implementation in Docker. #614

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

Keonik1
Copy link

@Keonik1 Keonik1 commented Aug 9, 2025

Hi, when I decided to set up a chatmail server for personal use, I was frustrated to discover that there was no Docker installation, so I created a preliminary implementation.

Brief description of changes

  • Add installation via docker compose (MVP 1)
  • Add markdown tabs blocks
  • Fix Issue 604
  • Add --skip-dns-check argument to cmdeploy run command
  • Add --force argument to cmdeploy init command
  • Add startup for fcgiwrap.service
  • Add extended check when installing unbound.service
  • Add configuration parameters (is_development_instance, use_foreign_cert_manager, acme_email, change_kernel_settings, fs_inotify_max_user_instances_and_watchers)

Full description of changes

The main thing that was done was to add support for running in Docker, but in addition to that, the problems that made this method of running impossible were also solved.

I think the advantages of running in Docker are obvious:

  • faster deployment from scratch
  • greater repeatability of runs
  • easier migration
  • better isolation
  • more comfortable management

This is only the first implementation of installation using Docker, but it works and seems to be stable (at least I haven't found any anomalies), but in the future it will need to be brought to a more adequate state (with the abandonment of using systemd inside and the division of everything into several containers or 1 container, but without systemd management, but that's just a thought for the future).

The modifications were made with a focus on full compatibility with the current installation and are additional optional parameters.

In addition, some QoL features and instance documentation unification were added so that administrators would not have to create separate pages for different language groups of users.

Some errors that I encountered during deployment have also been fixed (and to be honest, I don't understand why some of them didn't occur for others -_-), namely:

  • Issue 604 with a non-working --ssh_host argument
  • Manual launch of the fcgiwrap.service service, which does not download or start when rolled out using the current method
  • Use of a third-party certificate manager
  • Error when installing unbound.service, when it is installed but does not show that it occupies port 53

All changes are described in detail in the changelog.md.


I hope my improvements meet your requirements and you accept the PR, because I really believe that this is a very important part of the project's development — installation using Docker is easier, which means that many more people will be able to install it and thus popularize it.

- Add markdown tabs blocks
- Fix [Issue 604](chatmail#604)
- Add `--skip-dns-check` argument to `cmdeploy run` command
- Add `--force` argument to `cmdeploy init` command
- Add startup for `fcgiwrap.service`
- Add extended check when installing `unbound.service`
- Add configuration parameters (`is_development_instance`, `use_foreign_cert_manager`, `acme_email`, `change_kernel_settings`, `fs_inotify_max_user_instances_and_watchers`)
@hpk42
Copy link
Contributor

hpk42 commented Aug 11, 2025

great work and offer of contribution, @Keonik1 -- the silence since friday is more accidental but several people are excited about this PR and want to try it out and feedback. Not doing that myself right now but wanted to let you know :)

@cliffmccarthy
Copy link
Contributor

I am very interested in deploying with containers as well. In particular, I would like to decouple from systemd and the host operating system, so that the software content of the components can be managed independently. Doing that will require an understanding of what all the components are, and toward that end, I created #615 to document what I know so far.

I like the re-use here of the pyinfra-based script to populate the container; I think sharing the process as much as possible between containers and host-based deploys is a good idea. I think with some revisions the process could use pyinfra's @local functionality, which would be beneficial with or without containers. Thanks for getting things started on the path towards container-based deploys!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

--ssh-host does not actually change the ssh host
3 participants