{"id":18289886,"url":"https://github.com/tiredofit/docker-discourse","last_synced_at":"2025-04-05T09:31:50.074Z","repository":{"id":64847201,"uuid":"101118061","full_name":"tiredofit/docker-discourse","owner":"tiredofit","description":"Dockerized web based forum software","archived":false,"fork":false,"pushed_at":"2025-02-24T16:54:48.000Z","size":58,"stargazers_count":28,"open_issues_count":10,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-03-21T02:22:05.564Z","etag":null,"topics":["debian","discourse"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tiredofit.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["tiredofit"]}},"created_at":"2017-08-23T00:01:32.000Z","updated_at":"2025-03-20T02:48:51.000Z","dependencies_parsed_at":"2024-12-30T02:32:57.076Z","dependency_job_id":"2893472b-d835-4e6a-b0ef-c62b4f463f30","html_url":"https://github.com/tiredofit/docker-discourse","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiredofit%2Fdocker-discourse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiredofit%2Fdocker-discourse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiredofit%2Fdocker-discourse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tiredofit%2Fdocker-discourse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tiredofit","download_url":"https://codeload.github.com/tiredofit/docker-discourse/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247318315,"owners_count":20919457,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["debian","discourse"],"created_at":"2024-11-05T14:08:41.902Z","updated_at":"2025-04-05T09:31:50.062Z","avatar_url":"https://github.com/tiredofit.png","language":"Dockerfile","funding_links":["https://github.com/sponsors/tiredofit","https://www.paypal.me/tiredofit"],"categories":[],"sub_categories":[],"readme":"# github.com/tiredofit/docker-discourse\n\n[![GitHub release](https://img.shields.io/github/v/tag/tiredofit/docker-discourse?style=flat-square)](https://github.com/tiredofit/docker-discourse/releases/latest)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/tiredofit/docker-discourse/main.yml?branch=main\u0026style=flat-square)](https://github.com/tiredofit/docker-discourse/actions)\n[![Docker Stars](https://img.shields.io/docker/stars/tiredofit/discourse.svg?style=flat-square\u0026logo=docker)](https://hub.docker.com/r/tiredofit/discourse/)\n[![Docker Pulls](https://img.shields.io/docker/pulls/tiredofit/discourse.svg?style=flat-square\u0026logo=docker)](https://hub.docker.com/r/tiredofit/discourse/)\n[![Become a sponsor](https://img.shields.io/badge/sponsor-tiredofit-181717.svg?logo=github\u0026style=flat-square)](https://github.com/sponsors/tiredofit)\n[![Paypal Donate](https://img.shields.io/badge/donate-paypal-00457c.svg?logo=paypal\u0026style=flat-square)](https://www.paypal.me/tiredofit)\n\n* * *\n## About\n\nThis will build a Docker Image for [Discourse](https://www.discourse.org/) - A web based discussion forum.\n\n* Unlike the official Discourse image, this is meant to be self contained without requiring a base image or use the `launcher`\n* Additional Plugins installed\n* Flexible Volatile Storage\n\n\n[Changelog](CHANGELOG.md)\n\n## Maintainer\n\n- [Dave Conroy](http://github/tiredofit/)\n\n## Table of Contents\n\n- [About](#about)\n- [Maintainer](#maintainer)\n- [Table of Contents](#table-of-contents)\n- [Prerequisites and Assumptions](#prerequisites-and-assumptions)\n- [Installation](#installation)\n  - [Build from Source](#build-from-source)\n  - [Prebuilt Images](#prebuilt-images)\n- [Configuration](#configuration)\n  - [Quick Start](#quick-start)\n  - [Persistent Storage](#persistent-storage)\n    - [Base Images used](#base-images-used)\n    - [Container Options](#container-options)\n    - [Admin Options](#admin-options)\n    - [Log Options](#log-options)\n    - [Performance Options](#performance-options)\n    - [Database Options](#database-options)\n      - [Postgresql](#postgresql)\n      - [Redis](#redis)\n    - [SMTP Options](#smtp-options)\n    - [Plugins](#plugins)\n  - [Networking](#networking)\n- [Maintenance](#maintenance)\n  - [Shell Access](#shell-access)\n- [Support](#support)\n  - [Usage](#usage)\n  - [Bugfixes](#bugfixes)\n  - [Feature Requests](#feature-requests)\n  - [Updates](#updates)\n- [License](#license)\n\n## Prerequisites and Assumptions\n*  Assumes you are using some sort of SSL terminating reverse proxy such as:\n   *  [Traefik](https://github.com/tiredofit/docker-traefik)\n   *  [Nginx](https://github.com/jc21/nginx-proxy-manager)\n   *  [Caddy](https://github.com/caddyserver/caddy)\n*  Requires access to a Postgres Server\n*  Requires access to a Redis Server\n\n## Installation\n\n### Build from Source\nClone this repository and build the image with `docker build -t (imagename) .`\n\n### Prebuilt Images\nBuilds of the image are available on [Docker Hub](https://hub.docker.com/r/tiredofit/discourse)\n\n```bash\ndocker pull docker.io/tiredofit/discourse:(imagetag)\n```\n\nBuilds of the image are also available on the [Github Container Registry](https://github.com/tiredofit/docker-discourse/pkgs/container/docker-discourse)\n\n```\ndocker pull ghcr.io/tiredofit/docker-discourse:(imagetag)\n```\n\nThe following image tags are available along with their tagged release based on what's written in the [Changelog](CHANGELOG.md):\n\n| Container OS | Tag       |\n| ------------ | --------- |\n| Debian       | `:latest` |\n\n## Configuration\n\n### Quick Start\n\n- The quickest way to get started is using [docker-compose](https://docs.docker.com/compose/). See the examples folder for a working [docker-compose.yml](examples/compose.yml) that can be modified for development or production use.\n\n- Set various [environment variables](#environment-variables) to understand the capabilities of this image.\n- Map [persistent storage](#data-volumes) for access to configuration and data files for backup.\n- Make [networking ports](#networking) available for public access if necessary\n\n**The first boot can take from 2 minutes - 5 minutes depending on your CPU to setup the proper schemas and precompile assets**\n\n\n### Persistent Storage\n\nThe container operates heavily from the `/app` folder, however there are a few folders that should be persistently mapped to ensure data persistence. The following directories are used for configuration and can be mapped for persistent storage.\n\n| Directory       | Description       |\n| --------------- | ----------------- |\n| `/data/logs`    | Logfiles          |\n| `/data/uploads` | Uploads Directory |\n| `/data/backups` | Backups Directory |\n| `/data/plugins` | Plugins Driectory |\n\n#### Base Images used\n\nThis image relies on a [Debian Linux](https://hub.docker.com/r/tiredofit/debian) base image that relies on an [init system](https://github.com/just-containers/s6-overlay) for added capabilities. Outgoing SMTP capabilities are handlded via `msmtp`. Individual container performance monitoring is performed by [zabbix-agent](https://zabbix.org). Additional tools include: `bash`,`curl`,`less`,`logrotate`,`nano`.\n\nBe sure to view the following repositories to understand all the customizable options:\n\n| Image                                                  | Description                            |\n| ------------------------------------------------------ | -------------------------------------- |\n| [OS Base](https://github.com/tiredofit/docker-debian/) | Customized Image based on Debian Linux |\n| [Nginx](https://github.com/tiredofit/docker-nginx/)    | Nginx webserver                        |\n\n\n#### Container Options\n| Parameter                  | Description                                                        | Default                |\n| -------------------------- | ------------------------------------------------------------------ | ---------------------- |\n| `BACKUP_PATH`              | Place to store in app backups                                      | `{DATA_PATH}/backups/` |\n| `DELIVER_SECURE_ASSETS`    | Enable serving of HTTPS assets                                     | `FALSE`                |\n| `ENABLE_DB_MIGRATE`        | Enable DB Migrations on startup                                    | `TRUE`                 |\n| `ENABLE_MINIPROFILER`      | Enable Mini Profiler                                               | `FALSE`                |\n| `ENABLE_PRECOMPILE_ASSETS` | Enable Precompiling Assets on statup                               | `TRUE`                 |\n| `SETUP_MODE`               | Automatically generate config based on these environment variables | `AUTO`                 |\n| `ENABLE_CORS`              | Enable CORS                                                        | `FALSE`                |\n| `CORS_ORIGIN`              | CORS Origin                                                        | ``                     |\n| `UPLOADS_PATH`             | Path to store Uploads                                              | `{DATA_PATH}/uploads/` |\n\n#### Admin Options\n\n\u003e\u003e Only used on first boot\n\n| Parameter     | Description                                 | Default               |\n| ------------- | ------------------------------------------- | --------------------- |\n| `ADMIN_USER`  | Username for admin                          | `admin`               |\n| `ADMIN_EMAIL` | Admin email address                         | `admin@example.com`   |\n| `ADMIN_PASS`  | Admin password - Must be over 10 characters | `tiredofit-discourse` |\n| `ADMIN_NAME`  | Admin Name (First and Last)                 | `Admin User`          |\n\n#### Log Options\n| Parameter                | Description            | Default             |\n| ------------------------ | ---------------------- | ------------------- |\n| `LOG_FILE`               | Discourse Log File     | `discourse.log`     |\n| `LOG_LEVEL`              | Discourse Log Level    | `info`              |\n| `LOG_PATH`               | Path to store logfiles | `{DATA_PATH}/logs/` |\n| `UNICORN_LOG_FILE`       | Unicorn Log            | `unicorn.log`       |\n| `UNICORN_LOG_ERROR_FILE` | Unicorn Error Log      | `unicorn_error.log` |\n| `SIDEKIQ_LOG_FILE`       | SideKiq Log            | `sidekiq.log`       |\n\n#### Performance Options\n| Parameter         | Description         | Default |\n| ----------------- | ------------------- | ------- |\n| `UNICORN_WORKERS` | How many Workers    | `8`     |\n| `SIDEKIQ_THREADS` | Sidekiq Concurrency | `25`    |\n\n\n#### Database Options\n\n##### Postgresql\n| Parameter            | Description                                   | Default |\n| -------------------- | --------------------------------------------- | ------- |\n| `DB_POOL`            | How many Database connections                 | `8`     |\n| `DB_PORT`            | Database Port                                 | `5432`  |\n| `DB_TIMEOUT`         | Timeout for established connection in seconds | `5000`  |\n| `DB_TIMEOUT_CONNECT` | Connection Timeout in Seconds                 | `5`     |\n| `DB_USER`            | Username of Database                          |         |\n| `DB_NAME`            | Database name                                 |         |\n| `DB_PASS`            | Database Password                             |         |\n| `DB_HOST`            | Hostname of Database Server                   |         |\n\n##### Redis\n| Parameter                    | Description                                 | Default |\n| ---------------------------- | ------------------------------------------- | ------- |\n| `REDIS_DB`                   | Redis Database Number                       | `0`     |\n| `REDIS_ENABLE_TLS`           | Enable TLS when communication to REDIS_HOST | `FALSE` |\n| `REDIS_PORT`                 | Redis Host Listening Port                   | `6379`  |\n| `REDIS_SKIP_CLIENT_COMMANDS` | Skip client commands if unsupported         | `FALSE` |\n\n#### SMTP Options\n| Parameter             | Description                              | Default         |\n| --------------------- | ---------------------------------------- | --------------- |\n| `SMTP_AUTHENTICATION` | SMTP Authentication type `plain` `login` | `plain`         |\n| `SMTP_DOMAIN`         | HELO Domain for remote SMTP Host         | `example.com`   |\n| `SMTP_HOST`           | SMTP Hostname                            | `postfix-relay` |\n| `SMTP_USER`           | SMTP Username                            |                 |\n| `SMTP_PASS`           | SMTP Username                            |                 |\n| `SMTP_PORT`           | SMTP Port                                | `25`            |\n| `SMTP_START_TLS`      | Enable STARTTLS on connection            | `TRUE`          |\n| `SMTP_TLS_FORCE`      | Force TLS on connection                  | `FALSE`         |\n| `SMTP_TLS_VERIFY`     | TLS Certificate verification             | `none`          |\n\n#### Plugins\n| Parameter                          | Description                   | Default                |\n| ---------------------------------- | ----------------------------- | ---------------------- |\n| `PLUGIN_PATH`                      | Path where plugins are stored | `{DATA_PATH}/plugins/` |\n| `PLUGIN_ENABLE_AUTOMATION`         |                               | `FALSE`                |\n| `PLUGIN_ENABLE_ASSIGN`             |                               | `FALSE`                |\n| `PLUGIN_ENABLE_CHAT_INTEGRATION`   |                               | `FALSE`                |\n| `PLUGIN_ENABLE_CHECKLIST`          |                               | `FALSE`                |\n| `PLUGIN_ENABLE_DETAILS`            |                               | `TRUE`                 |\n| `PLUGIN_ENABLE_EVENTS`             |                               | `FALSE`                |\n| `PLUGIN_ENABLE_FOOTNOTES`          |                               | `FALSE`                |\n| `PLUGIN_ENABLE_FORMATTING_TOOLBAR` |                               | `FALSE`                |\n| `PLUGIN_ENABLE_LAZY_VIDEOS`        |                               | `TRUE`                 |\n| `PLUGIN_ENABLE_LOCAL_DATES`        |                               | `TRUE`                 |\n| `PLUGIN_ENABLE_MERMAID`            |                               | `TRUE`                 |\n| `PLUGIN_ENABLE_NARRATIVE_BOT`      |                               | `TRUE`                 |\n| `PLUGIN_ENABLE_POLLS`              |                               | `TRUE`                 |\n| `PLUGIN_ENABLE_POST_VOTING`        |                               | `FALSE`                |\n| `PLUGIN_ENABLE_PRESENCE`           |                               | `TRUE`                 |\n| `PLUGIN_ENABLE_PUSH_NOTIFICATIONS` |                               | `FALSE`                |\n| `PLUGIN_ENABLE_SAME_ORIGIN`        |                               | `FALSE`                |\n| `PLUGIN_ENABLE_SOLVED`             |                               | `FALSE`                |\n| `PLUGIN_ENABLE_SPOILER_ALERT`      |                               | `FALSE`                |\n| `PLUGIN_ENABLE_STYLEGUIDE`         |                               | `TRUE`                 |\n| `PLUGIN_ENABLE_VOTING`             |                               | `FALSE`                |\n\n### Networking\n\nThe following ports are exposed.\n\n| Port   | Description |\n| ------ | ----------- |\n| `3000` | Unicorn     |\n\n* * *\n## Maintenance\n\n### Shell Access\n\nFor debugging and maintenance purposes you may want access the containers shell.\n\n``bash\ndocker exec -it (whatever your container name is) bash\n``\n\nTry using the command `rake --tasks`\n\n## Support\n\nThese images were built to serve a specific need in a production environment and gradually have had more functionality added based on requests from the community.\n### Usage\n- The [Discussions board](../../discussions) is a great place for working with the community on tips and tricks of using this image.\n- [Sponsor me](https://tiredofit.ca/sponsor) for personalized support\n### Bugfixes\n- Please, submit a [Bug Report](issues/new) if something isn't working as expected. I'll do my best to issue a fix in short order.\n\n### Feature Requests\n- Feel free to submit a feature request, however there is no guarantee that it will be added, or at what timeline.\n- [Sponsor me](https://tiredofit.ca/sponsor) regarding development of features.\n\n### Updates\n- Best effort to track upstream changes, More priority if I am actively using the image in a production environment.\n- [Sponsor me](https://tiredofit.ca/sponsor) for up to date releases.\n\n## License\nMIT. See [LICENSE](LICENSE) for more details.\n# References\n\n* https://www.discourse.org\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiredofit%2Fdocker-discourse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftiredofit%2Fdocker-discourse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiredofit%2Fdocker-discourse/lists"}