On Ubuntu
$ sudo apt install python3-dev libmysqlclient-dev apache2 apache2-dev make libapache2-mod-wsgi-py3
Variables used for the Project:
- MYSQL_DATABASE=STRING
- MYSQL_HOST=STRING
- MYSQL_PASSWORD=STRING
- MYSQL_USER=STRING
- HOST=STRING
- PORT=STRING
- ORIGINS=ARRAY
- SSL_SERVER_NAME=STRING
- SSL_PORT=STRING
- SSL_CERTIFICATE=PATH
- SSL_KEY=PATH
- SSL_PEM=PATH
- RABBITMQ_USER=STRING
- RABBITMQ_PASSWORD=STRING
- RABBITMQ_HOST=STRING
- RABBITMQ_SSL_ACTIVE=STRING
- RABBITMQ_MANAGEMENT_PORT_SSL=STRING
- RABBITMQ_SERVER_PORT_SSL=STRING
- RABBITMQ_SSL_CACERT=PATH
- RABBITMQ_SSL_CRT=PATH
- RABBITMQ_SSL_KEY=PATH
$ python3 -m venv venv
$ . venv/bin/activate
$ pip install -r requirements.txt
Python
$ MYSQL_DATABASE= \
MYSQL_HOST= \
MYSQL_PASSWORD= \
MYSQL_USER= \
HOST= \
PORT= \
ORIGINS= \
SSL_SERVER_NAME= \
SSL_PORT= \
SSL_CERTIFICATE= \
SSL_KEY= \
SSL_PEM= \
RABBITMQ_USER= \
RABBITMQ_PASSWORD= \
RABBITMQ_HOST= \
RABBITMQ_SSL_ACTIVE= \
RABBITMQ_MANAGEMENT_PORT_SSL= \
RABBITMQ_SERVER_PORT_SSL= \
RABBITMQ_SSL_CACERT= \
RABBITMQ_SSL_CRT= \
RABBITMQ_SSL_KEY= \
MODE=production \
python3 server.py
MOD_WSGI
$ MYSQL_DATABASE= \
MYSQL_HOST= \
MYSQL_PASSWORD= \
MYSQL_USER= \
HOST= \
PORT= \
ORIGINS= \
SSL_SERVER_NAME= \
SSL_PORT= \
SSL_CERTIFICATE= \
SSL_KEY= \
SSL_PEM= \
RABBITMQ_USER= \
RABBITMQ_PASSWORD= \
RABBITMQ_HOST= \
RABBITMQ_SSL_ACTIVE= \
RABBITMQ_MANAGEMENT_PORT_SSL= \
RABBITMQ_SERVER_PORT_SSL= \
RABBITMQ_SSL_CACERT= \
RABBITMQ_SSL_CRT= \
RABBITMQ_SSL_KEY= \
MODE=production \
mod_wsgi-express start-server wsgi_script.py \
--user www-data \
--group www-data \
--port '${PORT}' \
--ssl-certificate-file '${SSL_CERTIFICATE}' \
--ssl-certificate-key-file '${SSL_KEY}' \
--ssl-certificate-chain-file '${SSL_PEM}' \
--https-only \
--server-name '${SSL_SERVER_NAME}' \
--https-port '${SSL_PORT}'
Build deku-cloud development docker image
$ docker build --target development -t deku-cloud .
Build deku-cloud production docker image
$ docker build --target production -t deku-cloud .
Run deku-cloud development docker image. Fill in all the neccessary environment variables
$ docker run -d -p 9000:9000 \
--name deku-cloud \
--env 'MYSQL_DATABASE=' \
--env 'MYSQL_HOST=' \
--env 'MYSQL_PASSWORD=' \
--env 'MYSQL_USER=' \
--env 'HOST=' \
--env 'PORT=' \
--env 'ORIGINS=' \
--env 'RABBITMQ_USER=' \
--env 'RABBITMQ_PASSWORD=' \
--env 'RABBITMQ_HOST=' \
deku-cloud
Run deku-cloud production docker image. Fill in all the neccessary environment variables
$ docker run -d -p 9000:9000 \
--name deku-cloud \
--env 'MYSQL_DATABASE=' \
--env 'MYSQL_HOST=' \
--env 'MYSQL_PASSWORD=' \
--env 'MYSQL_USER=' \
--env 'HOST=' \
--env 'PORT=' \
--env 'ORIGINS=' \
--env 'SSL_SERVER_NAME=' \
--env 'SSL_PORT=' \
--env 'SSL_CERTIFICATE=' \
--env 'SSL_KEY=' \
--env 'SSL_PEM=' \
--env 'RABBITMQ_USER=' \
--env 'RABBITMQ_PASSWORD=' \
--env 'RABBITMQ_HOST=' \
--env 'RABBITMQ_SSL_ACTIVE=' \
--env 'RABBITMQ_MANAGEMENT_PORT_SSL=' \
--env 'RABBITMQ_SERVER_PORT_SSL=' \
deku-cloud
Read in a file of environment variables with
--env-file
command e.g.docker run -d -p 9000:9000 --name deku-cloud --env-file myenv.txt deku-cloud
Mount path to SSL files with volume
-v
command e.g.docker run -v /host/path/to/certs:/container/path/to/certs -d -p 9000:9000 --name deku-cloud --env-file myenv.txt deku-cloud
$ python3 server.py --logs=debug
Container logs
$ docker logs deku-cloud