mirror of
https://github.com/mediacms-io/mediacms.git
synced 2024-11-25 09:44:32 +01:00
54 lines
4.1 KiB
Markdown
54 lines
4.1 KiB
Markdown
# MediaCMS on Docker
|
|
|
|
The mediacms image is built to use supervisord as the main process, which manages one or more services required to run mediacms. We can toggle which services are run in a given container by setting the environment variables below to `yes` or `no`:
|
|
|
|
* ENABLE_UWSGI
|
|
* ENABLE_NGINX
|
|
* ENABLE_CELERY_BEAT
|
|
* ENABLE_CELERY_SHORT
|
|
* ENABLE_CELERY_LONG
|
|
* ENABLE_MIGRATIONS
|
|
|
|
By default, all these services are enabled, but in order to create a scaleable deployment, some of them can be disabled, splitting the service up into smaller services.
|
|
|
|
Also see the `Dockerfile` for other environment variables which you may wish to override. Application settings, eg. `FRONTEND_HOST` can also be overridden by updating the `deploy/docker/local_settings.py` file.
|
|
|
|
See example deployments in the sections below. These example deployments have been tested on `docker-compose version 1.27.4` running on `Docker version 19.03.13`
|
|
|
|
To run, update the configs above if necessary, build the image by running `docker-compose build`, then run `docker-compose run`
|
|
|
|
# Simple Deployment, accessed as http://localhost
|
|
|
|
The main container runs migrations, mediacms_web, celery_beat, celery_workers (celery_short and celery_long services), exposed on port 80 supported by redis and postgres database.
|
|
|
|
The FRONTEND_HOST in `deploy/docker/local_settings.py` is configured as http://localhost, on the docker host machine.
|
|
|
|
# Server with ssl certificate through letsencrypt service, accessed as https://my_domain.com
|
|
Before trying this out make sure the ip points to my_domain.com.
|
|
|
|
With this method [this deployment](../docker-compose-letsencrypt.yaml) is used.
|
|
|
|
Edit this file and set `VIRTUAL_HOST` as my_domain.com, `LETSENCRYPT_HOST` as my_domain.com, and your email on `LETSENCRYPT_EMAIL`
|
|
|
|
Edit `deploy/docker/local_settings.py` and set https://my_domain.com as `FRONTEND_HOST`
|
|
|
|
Now run docker-compose -f docker-compose-letsencrypt.yaml up, when installation finishes you will be able to access https://my_domain.com using a valid Letsencrypt certificate!
|
|
|
|
# Advanced Deployment, accessed as http://localhost:8000
|
|
|
|
Here we can run 1 mediacms_web instance, with the FRONTEND_HOST in `deploy/docker/local_settings.py` configured as http://localhost:8000. This is bootstrapped by a single migrations instance and supported by a single celery_beat instance and 1 or more celery_worker instances. Redis and postgres containers are also used for persistence. Clients can access the service on http://localhost:8000, on the docker host machine. This is similar to [this deployment](../docker-compose.yaml), with a `port` defined in FRONTEND_HOST.
|
|
|
|
# Advanced Deployment, with reverse proxy, accessed as http://mediacms.io
|
|
|
|
Here we can use `jwilder/nginx-proxy` to reverse proxy to 1 or more instances of mediacms_web supported by other services as mentioned in the previous deployment. The FRONTEND_HOST in `deploy/docker/local_settings.py` is configured as http://mediacms.io, nginx-proxy has port 80 exposed. Clients can access the service on http://mediacms.io (Assuming DNS or the hosts file is setup correctly to point to the IP of the nginx-proxy instance). This is similar to [this deployment](../docker-compose-http-proxy.yaml).
|
|
|
|
# Advanced Deployment, with reverse proxy, accessed as https://localhost
|
|
|
|
The reverse proxy (`jwilder/nginx-proxy`) can be configured to provide SSL termination using self-signed certificates, letsencrypt or CA signed certificates (see: https://hub.docker.com/r/jwilder/nginx-proxy or [LetsEncrypt Example](https://www.singularaspect.com/use-nginx-proxy-and-letsencrypt-companion-to-host-multiple-websites/) ). In this case the FRONTEND_HOST should be set to https://mediacms.io. This is similar to [this deployment](../docker-compose-http-proxy.yaml).
|
|
|
|
# A Scaleable Deployment Architecture (Docker, Swarm, Kubernetes)
|
|
|
|
The architecture below generalises all the deployment scenarios above, and provides a conceptual design for other deployments based on kubernetes and docker swarm. It allows for horizontal scaleability through the use of multiple mediacms_web instances and celery_workers. For large deployments, managed postgres, redis and storage may be adopted.
|
|
|
|
![MediaCMS](images/architecture.png)
|