Coder Social home page Coder Social logo

dockerjoomla's Introduction

DockerJoomla helps you developing Joomla CMS projects

DockerJoomla creates the necessary Docker containers (webserver, database, php, mail, redis, elasticsearch, couchdb) to run your Joomla CMS project. The package provides a wrapper script in vendor/bin/dockerjoomla which simplifies the handling of docker and does all the configuration necessary.

We created this package to make development on Joomla CMS projects easier and to create a simple reusable package which can easily be maintained and serves well for the standard project.

Development will continue further as the package is already reused in several projects. Contributions and feedback are very welcome.

Install docker

https://docs.docker.com/installation/ (tested with docker v1.11)

Install docker-compose

We use docker-compose to do all the automatic configuration:

http://docs.docker.com/compose/install/ (tested with docker-compose v1.6)

The repository contains a Dockerfile which will automatically be built in the docker hub after each change and used by docker-compose to build the necessary containers.

Install DockerJoomla into your distribution

Add visay/dockerjoomla as dev dependency in your composer, using the latest stable release is highly recommended.

Example:

composer require --dev visay/dockerjoomla dev-master

Note:

DockerJoomla uses port 80 for web access so you need to make sure that your host machine does not have any software using that port. Usually this happens if you have apache or nginx installed in your host machine, so you can stop it with:

sudo service apache2 stop
sudo service nginx stop

Run DockerJoomla

vendor/bin/dockerjoomla up -d

The command will echo the url with which you can access your project. Add the hostname then to your /etc/hosts and set the ip to your docker host (default for linux is 0.0.0.0). You can also use any subdomain with *.hostname and it will point to the same server. What you need to do is to add exact subdomain name to your /etc/hosts. The parameter -d will keep it running in the background until you run:

vendor/bin/dockerjoomla stop

Setup Database Connection

<?php
class JConfig {
    public $offline = '0';
    public $offline_message = 'This site is down for maintenance.<br />Please check back again soon.';
    public $display_offline_message = '1';
    public $offline_image = '';
    public $sitename = 'Joomla Demo';
    public $editor = 'tinymce';
    public $captcha = '0';
    public $list_limit = '20';
    public $access = '1';
    public $debug = '0';
    public $debug_lang = '0';
    public $dbtype = 'mysqli';
    public $host = 'db';
    public $user = 'root';
    public $password = 'root';
    public $db = 'dockerjoomla';
    public $dbprefix = 'vi7fd_';
    public $live_site = '';
    public $secret = 'rVwOsoPiMdAdQRqx';
    public $gzip = '0';
    public $error_reporting = 'default';
    public $helpurl = 'https://help.joomla.org/proxy/index.php?option=com_help&amp;keyref=Help{major}{minor}:{keyref}';
    public $ftp_host = '';
    public $ftp_port = '';
    public $ftp_user = '';
    public $ftp_pass = '';
    public $ftp_root = '';
    public $ftp_enable = '0';
    public $offset = 'UTC';
    public $mailonline = '1';
    public $mailer = 'mail';
    public $mailfrom = '[email protected]';
    public $fromname = 'Joomla Demo';
    public $sendmail = '/usr/sbin/sendmail';
    public $smtpauth = '0';
    public $smtpuser = '';
    public $smtppass = '';
    public $smtphost = 'localhost';
    public $smtpsecure = 'none';
    public $smtpport = '25';
    public $caching = '0';
    public $cache_handler = 'file';
    public $cachetime = '15';
    public $cache_platformprefix = '0';
    public $MetaDesc = 'This is Joomla Demo';
    public $MetaKeys = '';
    public $MetaTitle = '1';
    public $MetaAuthor = '1';
    public $MetaVersion = '0';
    public $robots = '';
    public $sef = '1';
    public $sef_rewrite = '0';
    public $sef_suffix = '0';
    public $unicodeslugs = '0';
    public $feed_limit = '10';
    public $feed_email = 'none';
    public $log_path = '/var/www/logs';
    public $tmp_path = '/var/www/tmp';
    public $lifetime = '15';
    public $session_handler = 'database';
}

Check the status

vendor/bin/dockerjoomla ps

This will show the running containers. The data container can be inactive to do it's work.

Tips & Tricks

Configure remote debugging from your host to container

DockerJoomla installs by the default xdebug with the following config on the server:

xdebug.remote_enable = On
xdebug.remote_host = 'dockerhost'
xdebug.remote_port = '9001'
xdebug.max_nesting_level = 500

So you can do remote debugging from your host to the container through port 9001. From your IDE, you need to configure the port accordingly. If you are using PHPStorm, this link may be useful for you to configure your IDE properly.

Running a shell in one of the service containers

vendor/bin/dockerjoomla run SERVICE /bin/bash

SERVICE can currently be app, web, data, db, redis, elasticsearch or couchdb.

Access database inside container from docker host

While you can easily login to shell of the db container with vendor/bin/dockerjoomla run db /bin/bash and execute your mysql commands, there are some cases that you want to run mysql commands directly from your host without having to login to the db container first. One of the best use cases, for example, is to access the databases inside the container from MySQL Workbench tool. To be able to do that, we have mapped database port inside the container (which is 3306) to your host machine through 3307 port.

Screenshot of MySQL Workbench interface

Access CouchDB

From your host machine, you can access couchdb from web interface or command line:

Web: http://0.0.0.0:5984/_utils/

Cli: curl -X GET http://0.0.0.0:5984/_all_dbs

From inside your app container, you can also access couchdb through the command line:

vendor/bin/dockerjoomla run app /bin/bash
curl -X GET http://couchdb:5984/_all_dbs

Attach to a running service

Run vendor/bin/dockerjoomla ps and copy the container's name that you want to attach to.

Run docker exec -it <containername> /bin/bash with the name you just copied. With this you can work in a running container instead of creating a new one.

Check open ports in a container

vendor/bin/dockerjoomla run SERVICE netstat --listen

Further reading

dockerjoomla's People

Stargazers

Radu Alexandru Popescu avatar

Watchers

Visay Keo avatar James Cloos avatar Radu Alexandru Popescu avatar

dockerjoomla's Issues

Strange error when attempting to bring up service

Hi.
I was hoping you could help me with a issue encountered when using this cool project on Windows 10 with docker-machine and bash from git install.
I pasted below the whole output from the first run:

radua@DESKTOP-2GT09E2 MINGW64 /c/Git/couriercostscalculator
$ vendor/bin/dockerjoomla up -d
####
### Project name    : couriercostscalculator
###
### DockerJoomla is now running action 'up'
####
Pulling couchdb (klaemo/couchdb:1.6)...
1.6: Pulling from klaemo/couchdb
357ea8c3d80b: Pull complete
b9d8031c25d7: Pull complete
4bbf2ef11196: Pull complete
851898dc6df8: Pull complete
741869c0c341: Pull complete
eaabc83c8de6: Pull complete
89e0525524b5: Pull complete
Digest: sha256:693de5819b0dd0fa9e8db23a5040914003bba5b4c515d13f68c12ba36fc0c12c
Status: Downloaded newer image for klaemo/couchdb:1.6
Pulling redis (redis:3.0)...
3.0: Pulling from library/redis
23e3d0773492: Pull complete
bc8f870e2eab: Pull complete
9fb63685a3db: Pull complete
8fcca56b3c0b: Pull complete
381e72ed1b4a: Pull complete
75b494c8be5f: Pull complete
49b02da0101b: Pull complete
Digest: sha256:d307de6891ff2a7f2d630e307346d007a49332a36b6d55d8be89ad070800b9c9
Status: Downloaded newer image for redis:3.0
Pulling elasticsearch (elasticsearch:1.4)...
1.4: Pulling from library/elasticsearch
51f5c6a04d83: Pull complete
65e9ddd8bd7a: Pull complete
02500df954bf: Pull complete
e3b067df5fd6: Pull complete
121bc2f7d35c: Pull complete
33b88e5aef8c: Pull complete
9e022032b28e: Pull complete
bcc87244e8c5: Pull complete
da8b8f2cc010: Pull complete
b45f9c51b515: Pull complete
2c4e619f07e6: Pull complete
e027dc7bc000: Pull complete
d4531161c948: Pull complete
f216af6c6dde: Pull complete
Digest: sha256:0641859e6d19e2dacc14d8059af8f7680d9c5d801cfa3d52db3b5e71c914d5a0
Status: Downloaded newer image for elasticsearch:1.4
Pulling mail (mailhog/mailhog:latest)...
latest: Pulling from mailhog/mailhog
709515475419: Pull complete
6f91489e9e5b: Pull complete
6500075800d5: Pull complete
c3d9e42bac5e: Pull complete
Digest: sha256:5be1ae7cf894b58fffbe48f84a0541a3595e53124d460d3fb71b3450a8d11189
Status: Downloaded newer image for mailhog/mailhog:latest
Pulling data (mariadb:10.0)...
10.0: Pulling from library/mariadb
10a267c67f42: Pull complete
c2dcc7bb2a88: Pull complete
17e7a0445698: Pull complete
9a61839a176f: Pull complete
64675690edb1: Pull complete
3de17e251488: Pull complete
f814b22b783e: Pull complete
5f18f1acf809: Pull complete
78c6a67789f8: Pull complete
66d12d3e00ed: Pull complete
9b5ba6f80114: Pull complete
089ccb3350e6: Pull complete
Digest: sha256:8d4ed8fede923ed6b63cb5645a2f7a5dc2a65976e29c7a28342384ad9e57e5cc
Status: Downloaded newer image for mariadb:10.0
Pulling app (visay/dockerjoomla:1.0.0)...
1.0.0: Pulling from visay/dockerjoomla
56eb14001ceb: Pull complete
7ff49c327d83: Pull complete
6e532f87f96d: Pull complete
3ce63537e70c: Pull complete
6085f2af3d24: Pull complete
dbe4673287ba: Pull complete
c28ca12cc702: Pull complete
ae120110f7bf: Pull complete
003e181969e6: Pull complete
71f71c6b52cf: Pull complete
c7a3265da7c0: Pull complete
41b19c30cf4a: Pull complete
Digest: sha256:681e52764ced8bb0393e6c58fa8f2d20736c0da767adecbfc27f5eb66c37e2bc
Status: Downloaded newer image for visay/dockerjoomla:1.0.0
Pulling web (nginx:1.7)...
1.7: Pulling from library/nginx
193224d99eda: Pull complete
a3ed95caeb02: Pull complete
eb250aa1fe8b: Pull complete
26547bfb8cca: Pull complete
9118cfaa8eaa: Pull complete
a6efe51e1a3b: Pull complete
a2318bfd27ef: Pull complete
Digest: sha256:02537b932a849103ab21c75fac25c0de622ca12fe2c5ba8af2c7cb23339ee6d4
Status: Downloaded newer image for nginx:1.7
Creating couriercostscalculator_data_1
Creating couriercostscalculator_redis_1
Creating couriercostscalculator_mail_1
Creating couriercostscalculator_elasticsearch_1
Creating couriercostscalculator_couchdb_1
Creating couriercostscalculator_db_1
Creating couriercostscalculator_app_1

ERROR: for app  Cannot start service app: Cannot link to a non running container: /couriercostscalculator_db_1 AS /couriercostscalculator_app_1/couriercostscalculator_db_1
ERROR: Encountered errors while bringing up the project.
####
### Done! Your app is running here  : http://couriercostscalculator/
####

Software versions:

radua@DESKTOP-2GT09E2 MINGW64 /c/Git/couriercostscalculator
$ docker-machine --version
docker-machine.exe version 0.10.0, build 76ed2a6

radua@DESKTOP-2GT09E2 MINGW64 /c/Git/couriercostscalculator
$ docker --version
time="2017-06-19T02:49:23+03:00" level=info msg="Unable to use system certificate pool: crypto/x509: system root pool is not available on Windows"
Docker version 17.03.0-ce, build 60ccb22

radua@DESKTOP-2GT09E2 MINGW64 /c/Git/couriercostscalculator
$ docker-compose --version
docker-compose version 1.11.2, build f963d76f

Could this be related to an incompatibility between docker-compose.yml format version and my docker-compose version?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.