From cbb5dcdef9b6df6ae4bc0bc72722c1e87bf2e53f Mon Sep 17 00:00:00 2001 From: Timothy Hobbs Date: Thu, 12 Oct 2023 21:28:03 +0200 Subject: [PATCH] Document standalone install --- README.rst | 27 ++--- docs/install.rst | 4 + docs/standalone.rst | 108 ++++++++++++++++++ .../helpdesk/img/django-logo-positive.png | Bin 0 -> 16735 bytes helpdesk/static/helpdesk/img/icon.svg | 75 ++++++++++++ helpdesk/static/helpdesk/img/icon512.png | Bin 0 -> 21655 bytes helpdesk/static/helpdesk/img/icon64.png | Bin 0 -> 2643 bytes requirements-dev.txt | 1 + standalone/README.md | 57 +-------- 9 files changed, 200 insertions(+), 72 deletions(-) create mode 100644 docs/standalone.rst create mode 100644 helpdesk/static/helpdesk/img/django-logo-positive.png create mode 100644 helpdesk/static/helpdesk/img/icon.svg create mode 100644 helpdesk/static/helpdesk/img/icon512.png create mode 100644 helpdesk/static/helpdesk/img/icon64.png diff --git a/README.rst b/README.rst index 49bcab6e..caa1d400 100644 --- a/README.rst +++ b/README.rst @@ -19,6 +19,7 @@ contributors reaching far beyond Jutda. Complete documentation is available in the docs/ directory, or online at http://django-helpdesk.readthedocs.org/. + Demo Quickstart --------------- @@ -54,25 +55,19 @@ to alert you to this shortcoming. There is no way around it, sorry. Installation ------------ -`django-helpdesk` requires: +* |standalone_icon| For **standalone** installation, refer to `standalone documentation <./docs/standalone.rst>`_. -* Python 3.8+ -* Django 3.2 LTS or Django 4.* +* |django_icon| To **integrate** with an existing Django application, follow the guidelines in `installation documentation <./docs/install.rst>`_ and `configuration documentation <./docs/configuration.rst>`_. -You can quickly install the latest stable version of `django-helpdesk` -app via `pip`:: +.. |standalone_icon| image:: helpdesk/static/helpdesk/img/icon512.png + :height: 24px + :width: 24px + :align: middle - pip install django-helpdesk - -You may also check out the `master` branch on GitHub, and install manually:: - - python setup.py install - -Either way, you will need to add `django-helpdesk` to an existing -Django project. - -For further installation information see `docs/install.html` -and `docs/configuration.html` +.. |django_icon| image:: helpdesk/static/helpdesk/img/django-logo-positive.png + :height: 24px + :width: 60px + :align: middle Developer Environment --------------------- diff --git a/docs/install.rst b/docs/install.rst index 249645d8..9522c7f0 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -1,6 +1,10 @@ Installation ============ +.. note:: + + For standalone installation, refer to the :doc:`standalone installation docs `. + ``django-helpdesk`` installation isn't difficult, but it requires you have a bit of existing know-how about Django. diff --git a/docs/standalone.rst b/docs/standalone.rst new file mode 100644 index 00000000..138e931b --- /dev/null +++ b/docs/standalone.rst @@ -0,0 +1,108 @@ +============================== +Django-Helpdesk Standalone Installation +============================== + +Installation +------------ + +1. Clone the django-helpdesk repository: + + .. code-block:: bash + + git clone git@github.com:django-helpdesk/django-helpdesk.git + +2. Go to the standalone helpdesk installation directory: + + .. code-block:: bash + + cd django-helpdesk/standalone + +3. Execute the installation script: + + .. code-block:: bash + + ./setup.sh + +4. Start the services: + + .. code-block:: bash + + docker-compose up + +Creating an Admin User +---------------------- + +1. List the running containers: + + .. code-block:: bash + + docker ps + +2. Execute into the `standalone-django-helpdesk-1` container: + + .. code-block:: bash + + docker exec -it standalone-django-helpdesk-1 bash + +3. Change directory to the application's root: + + .. code-block:: bash + + cd /opt/django-helpdesk/standalone + +4. Create a superuser: + + .. code-block:: bash + + python3 manage.py createsuperuser + +5. Visit `localhost:80` in your browser to access the server. Navigate to the `/admin` URL to set up new users. Ensure to configure the "Site" in the admin section for ticket email URLs to function correctly. + +Configuration for Production Use +-------------------------------- + +1. Update the `Caddyfile` to replace the `localhost` URL with your desired production URL. + +2. Modify the `docker-compose` file to adjust the paths. By default, files are stored in `/tmp`. + +3. For custom configurations, bindmount a `local_settings.py` into `/opt/django-helpdesk/standalone/config/local_settings.py`. + +4. To customize the logo in the top-left corner of the helpdesk: + + .. code-block:: html + + + +AWS SES Email Configuration +--------------------------- + +An example `local_settings` configuration for utilizing AWS SES for email: + +.. code-block:: python + + import os + + DEFAULT_FROM_EMAIL = "support@bitswan.space" + SERVER_EMAIL = "support@bitswan.space" + AWS_ACCESS_KEY_ID = os.environ.get("AWS_ACCESS_KEY_ID") + EMAIL_BACKEND = "django_ses.SESBackend" + AWS_SES_REGION_NAME = "eu-west-1" + AWS_SES_REGION_ENDPOINT = "email.eu-west-1.amazonaws.com" + AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY") + +To integrate `django-ses`, bindmount a file to `/opt/extra-dependencies.txt` containing: + +.. code-block:: text + + django-ses + +Ensure to update the `docker.env` file with your necessary secrets. diff --git a/helpdesk/static/helpdesk/img/django-logo-positive.png b/helpdesk/static/helpdesk/img/django-logo-positive.png new file mode 100644 index 0000000000000000000000000000000000000000..7196dce5a16c9da61d51eb2667084d2c77cd6b6b GIT binary patch literal 16735 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 S5C3BVL{U~vrb_DdhyMp`I?zr4 literal 0 HcmV?d00001 diff --git a/helpdesk/static/helpdesk/img/icon.svg b/helpdesk/static/helpdesk/img/icon.svg new file mode 100644 index 00000000..f3084b2e --- /dev/null +++ b/helpdesk/static/helpdesk/img/icon.svg @@ -0,0 +1,75 @@ + + + + + + d + ? + + diff --git a/helpdesk/static/helpdesk/img/icon512.png b/helpdesk/static/helpdesk/img/icon512.png new file mode 100644 index 0000000000000000000000000000000000000000..79c493060883b78996408dbb071a417a4d8fd8d0 GIT binary patch literal 21655 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 B*@^%F literal 0 HcmV?d00001 diff --git a/requirements-dev.txt b/requirements-dev.txt index 2501f30c..b26ca6de 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,3 +3,4 @@ autopep8 flake8 pycodestyle isort +freezegun diff --git a/standalone/README.md b/standalone/README.md index 785eb61f..7b68fbe7 100644 --- a/standalone/README.md +++ b/standalone/README.md @@ -3,60 +3,5 @@ Django-helpdesk standalone This is a standalone installation of Django-helpdesk allowing you to run django-helpdesk as a production standalone application in docker. -To install run `setup.sh` and then `docker-compose up` in this directory. +For installation instructions see [the documentation](../docs/standalone.rst) - -To create an admin user exec into the newly created container - - docker ps - docker exec -it standalone-django-helpdesk-1 bash - -In the container cd to `/opt/django-helpdesk/standalone` and run - - python3 manage.py createsuperuser - -You should now be able to log in to the server by visiting `localhost:80`. You will also need to access the `/admin` url to set up new users. You also need to set the Site in the admin so that URLs in ticket emails will work. - -Configuration for production use --------------------------------------- - -For production use you will need to change the URL from `localhost` in the `Caddyfile`. You will also need to update the `docker-compose` file to fix paths. By default all files are stored in `/tmp`. - -You should be able to set custom settings by bindmounting a `local_settings.py` file into `/opt/django-helpdesk/standalone/config/local_settings.py` - -You can change the logo at the top left of the helpdesk by bindmounting a file into `/opt/django-helpdesk/helpdesk/templates/helpdesk/custom_navigation_header.html` with contents like: - -``` - -``` - -Here is an example `local_settings` file for using AWS SES for sending emails: - -``` -import os - -DEFAULT_FROM_EMAIL = "support@bitswan.space" -SERVER_EMAIL = "support@bitswan.space" -AWS_ACCESS_KEY_ID = os.environ.get("AWS_ACCESS_KEY_ID") -EMAIL_BACKEND = "django_ses.SESBackend" -AWS_SES_REGION_NAME = "eu-west-1" -AWS_SES_REGION_ENDPOINT = "email.eu-west-1.amazonaws.com" -AWS_SECRET_ACCESS_KEY = os.environ.get("AWS_SECRET_ACCESS_KEY") -``` - -In this case you'll also have to bindmout a file to `/opt/extra-dependencies.txt` with the contents: - -``` -django-ses -``` - -You would of course also have to edit docker.env to add your secrets.