Public | Automated Build

Last pushed: 24 days ago
Short Description
Docker container for DreamFactory. This is an automated build repo.
Full Description

df-docker

Docker container for DreamFactory 2.4.2 using Ubuntu 16.04, PHP 7.1 and NGINX. This container includes following PHP extensions.

calendar    cassandra   Core
couchbase   ctype       curl
date        dom         exif
fileinfo    filter      ftp
gettext     hash        iconv
json        ldap        libxml
mbstring    mcrypt      mongodb
mysqli      mysqlnd     openssl
pcntl       pcre        pcs
PDO         pdo_dblib   pdo_mysql
pdo_pgsql   pdo_sqlite  pgsql
Phar        posix       readline
Reflection  session     shmop   
SimpleXML   soap        sockets
SPL         sqlite3     standard    
sysvmsg     sysvsem     sysvshm
tokenizer   v8js        wddx
xml         xmlreader   xmlwriter
xsl         zip         Zend OPcache
zlib

Prerequisites

Get Docker

Get Docker Compose (optional)

Environment options

Configuration method 1 (use Docker Hub Image)

1) Pull DreamFactory image

docker pull dreamfactorysoftware/df-docker

2) Ensure that the database container is created and running

docker run -d --name df-mysql -e "MYSQL_ROOT_PASSWORD=root" -e "MYSQL_DATABASE=dreamfactory" -e "MYSQL_USER=df_admin" -e "MYSQL_PASSWORD=df_admin" mysql

3) Ensure that the redis container is created and running

docker run -d --name df-redis redis

4) Start the dreamfactorysoftware/df-docker container with linked MySQL and Redis server

If your database and redis runs inside another container you can simply link it under the name db and rd respectively.

docker run -d --name df-web -p 127.0.0.1:80:80 -e "DB_HOST=db" -e "DB_USERNAME=df_admin" -e "DB_PASSWORD=df_admin" -e "DB_DATABASE=dreamfactory" -e "REDIS_HOST=rd" -e "REDIS_DATABASE=0" -e "REDIS_PORT=6379" --link df-mysql:db --link df-redis:rd dreamfactorysoftware/df-docker

6) Add an entry to /etc/hosts

127.0.0.1 dreamfactory.app

7) Access the app

Go to 127.0.0.1 in your browser. It will take some time the first time. You will be asked to create your first admin user.

Configuration method 2a (use docker-compose)

The easiest way to configure the DreamFactory application is to use docker-compose.

1) Clone the df-docker repo

cd ~/repos (or wherever you want the clone of the repo to be)
git clone https://github.com/dreamfactorysoftware/df-docker.git
cd df-docker

2) Edit docker-compose.yml (optional)

3) Build images

docker-compose build

4) Start containers

docker-compose up -d

5) Add an entry to /etc/hosts

127.0.0.1 dreamfactory.app

6) Access the app

Go to 127.0.0.1 in your browser. It will take some time the first time. You will be asked to create your first admin user.

Configuration method 2b (use docker-compose with load balancing)

The easiest way to configure the DreamFactory application is to use docker-compose.

1) Clone the df-docker repo

cd ~/repos (or wherever you want the clone of the repo to be)
git clone https://github.com/dreamfactorysoftware/df-docker.git
cd df-docker

2) Rename docker-compose.yml-load-balance to docker-compose.yml. Recommend backing up original docker-compose.yml first.

3) Build images

docker-compose build

4) Start containers

docker-compose up -d

This will create 4 containers. Mysql, Redis, DreamFactory, and Load Balancer container.

5) Add an entry to /etc/hosts

127.0.0.1 dreamfactory.app

6) Access the app

Go to 127.0.0.1 in your browser. It will take some time the first time. You will be asked to create your first admin user.

7) Add additional web (DreamFactory) containers

docker-compose scale web=3

This will add two more DreamFactory container. Now the load balancer is going to balance load in a round-robin fashion among these three DreamFactory containers.

Configuration method 3 (build your own)

If you don't want to use docker-compose you can build the images yourself.

1) Clone the df-docker repo

cd ~/repos (or wherever you want the clone of the repo to be)
git clone https://github.com/dreamfactorysoftware/df-docker.git
cd df-docker

2) Build dreamfactory/v2 image

docker build -t dreamfactory/v2 .

3) Ensure that the database container is created and running

docker run -d --name df-mysql -e "MYSQL_ROOT_PASSWORD=root" -e "MYSQL_DATABASE=dreamfactory" -e "MYSQL_USER=df_admin" -e "MYSQL_PASSWORD=df_admin" mysql

4) Ensure that the redis container is created and running

docker run -d --name df-redis redis

5) Start the dreamfactorysoftware/df-docker container with linked MySQL and Redis server

If your database and redis runs inside another container you can simply link it under the name db and rd respectively.

docker run -d --name df-web -p 127.0.0.1:80:80 -e "DB_HOST=db" -e "DB_USERNAME=df_admin" -e "DB_PASSWORD=df_admin" -e "DB_DATABASE=dreamfactory" -e "REDIS_HOST=rd" -e "REDIS_DATABASE=0" -e "REDIS_PORT=6379" --link df-mysql:db --link df-redis:rd dreamfactory/v2

6) Add an entry to /etc/hosts

127.0.0.1 dreamfactory.app

7) Access the app

Go to 127.0.0.1 in your browser. It will take some time the first time. You will be asked to create your first admin user.

Notes

  • You may have to use sudo for Docker commands depending on your setup.
  • By default, the container only sends nginx error logs to STDOUT. If you also want to have dreamfactory.log, e.g. for forwarding via docker logging driver
    you can set environment variable LOG_TO_STDOUT=true

Configuration method 4 (build your own for IBM Bluemix)

1) Install the IBM Containers command line interface

IBM Bluemix has a complete set of instructions available at https://console.ng.bluemix.net/docs/containers/container_cli_ov.html#container_cli_cfic

2) Login to Bluemix

cf login

3) Login to Bluemix Containers

cf ic login

4) Clone the df-docker repo

cd ~/repos (or wherever you want the clone of the repo to be)
git clone https://github.com/dreamfactorysoftware/df-docker.git
cd df-docker

5) Edit the Dockerfile

In the Dockerfile, you will find comments indicating which lines need to be commented out and which ones need to be commented.

6) Build dreamfactory/v2 image

cf ic build -t dreamfactory/v2 .

Once the image has been built, the cf ic command will push the image to your private container repository on Bluemix.

Starting the image on Bluemix

1) From the Dashboard, click on 'Start Containers'

2) Create a Postgres or MySQL service that you leave unbound

3) Create a Redis service that you leave unbound

4) Click on the v2 icon in the list of containers

5) On the container configuration page, give your container a name, such as 'DF2', select a size (2GB Memory minimum recommended)

6) Select an already existing Public IP address or choose the 'Request and Bind Public IP' option from the dropdown

7) Expand the Advanced Options and select the services from steps 2 and 3

Notes

  • Based on extensive testing, it has been found that on Bluemix, the container works best using the Redis Cloud and
    ElephantSQL services. For the Redis Cloud service, select the 30MB or higher plan, and for Elephant SQL, select
    'Pretty Panda' or higher. The 'Tiny Turtle' service plan is not sufficient.
  • Extensive testing has shown that the free ClearDB MySQL Database service is not sufficient to run DreamFactory 2.0.
  • The MySQL or Postgres service must support a minimum of 10 concurrent connections for the proper operation of
    DreamFactory 2.0.
  • At this time, the PostgreSQL by Composer and Redis by Compose can not be bound to a container. This is an issue with
    Bluemix.
  • At this time, a user-provided external service can not be bound to a container at this time. This
    is an issue with Bluemix.
  • If you use a service other than ElephantSQL, when starting the image, in step 7, you will have to add the environment
    variable BM_DB_SERVICE_KEY and set it to the value present in the VCAP_SERVICES environment variable provided to the container.
    Unfortunately, the only practical way to find this out is to create the container, bind the services and then open a
    shell on the container once it's running. To do this, get the CONTAINER ID by running cf ic ps and then run
    cf ic exec -it "CONTAINERID" bash, replacing CONTAINERID with the CONTAINER ID gotten from the cf ic ps command. Once
    you are at a command prompt, run echo $VCAP_SERVICES which will display something like

    {"rediscloud": [{"name": "df2-redis", "entity": {"service_instance_url": "https://api.ng.bluemix.net/v2/service_instances/3811bc12-d42c-4a4a-9255-d5c1d42b4849"}, "plan": "30mb", "credentials": {"password": "mINogWGFMpTJC9g0", "hostname": "pub-redis-13942.dal-05.1.sl.garantiadata.com", "port": "13942"}, "label": "rediscloud", "metadata": {"url": "https://api.ng.bluemix.net/v2/service_keys/b323438b-470e-4c7b-a877-a33268c27072"}}], "elephantsql": [{"name": "df2-db", "entity": {"service_instance_url": "https://api.ng.bluemix.net/v2/service_instances/677f57e1-a637-4022-8b50-730f4372091b"}, "plan": "panda", "credentials": {"uri": "postgres://mcfmjlcl:JeOGfJ7_q7kWih0v2rzPa1I6XDYHHLc3@jumbo.db.elephantsql.com:5432/mcfmjlcl", "max_conns": "20"}, "label": "elephantsql", "metadata": {"url": "https://api.ng.bluemix.net/v2/service_keys/985b6785-9cbd-4f6c-bdb8-21e56d1e9d5f"}}]}

    In this particular example, the service keys are rediscloud and elephantsql which are the defaults.

  • If you use a service other than Redis Cloud, when starting the image, in step 7, you will have to add the environment
    variable BM_REDIS_SERVICE_KEY and set it to the value present in VCAP_SERVICES environment variable provided to the
    container. See the previous entry on how to view the values in VCAP SERVICES.

Environment options

Option Description required? default
SERVERNAME Domain for DF no dreamfactory.app
DB_DRIVER Database Driver (mysql,pgsql,sqlsrv,sqlite) no mysql when any DB_HOST supplied. Otherwise sqlite
DB_HOST Database Host no localhost
DB_USERNAME Database User no df_admin
DB_PASSWORD Database Password no df_admin
DB_DATABASE Database Name no dreamfactory
REDIS_HOST Redis Cache Host no uses file caching
REDIS_DATABASE Redis DB only if REDIS_HOST set
REDIS_PORT Redis Port no 6379
REDIS_PASSWORD Redis Password no none used
APP_KEY Application Key yes for immutability generates a key
JWT_TTL Login Token TTL no 60
JWT_REFRESH_TTL Login Token Refresh TTL no 20160
ALLOW_FOREVER_SESSIONS Allow refresh forever no false
LOG_TO_STDOUT Forward log to STDOUT no not forwarded
SSMTP_mailhub MX for mailing yes if DF should mail no mailing capabilities
SSMTP_XXXX prefix options with SSMTP_ no see the man page
Docker Pull Command
Owner
dreamfactorysoftware
Source Repository

Comments (4)
greyarch
a year ago

Is it possible to provide env vars via the -e docker run option, potentially overriding the ones specified in the env file?

todda48
a year ago

@flaviostutz we're going to improve the Dockerfile so a new app key is generated on each install. See comment on your pr. Until then I added a temporary valid key. Worked fine for me including services. Give it a try.

alexgv99
a year ago

Hi @flaviostutz... we were with the same problem here and we accomplished to solve it adding the following line to the .env file:

DF_CIPHER=rijndael-128

Don't ask anything about... :-)

flaviostutz
a year ago

This is not working for me. I had an error "Something Went Wrong" on the first access. After I manually created keys (check pull request on README.md), it opened, but now I the combobox "service type" is empty. I cannot create nor update any service. Please help!