diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..944a9b2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,45 @@
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff:
+.idea/workspace.xml
+.idea/tasks.xml
+.idea/dictionaries
+.idea/vcs.xml
+.idea/jsLibraryMappings.xml
+
+# Sensitive or high-churn files:
+.idea/dataSources.ids
+.idea/dataSources.xml
+.idea/dataSources.local.xml
+.idea/sqlDataSources.xml
+.idea/dynamic.xml
+.idea/uiDesigner.xml
+
+# Gradle:
+.idea/gradle.xml
+.idea/libraries
+
+# Mongo Explorer plugin:
+.idea/mongoSettings.xml
+
+## File-based project format:
+*.iws
+
+## Plugin-specific files:
+
+# IntelliJ
+/out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..ff5fe15
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,87 @@
+FROM debian:jessie
+
+# mysql before installation configuration
+RUN export DEBIAN_FRONTEND="noninteractive" \
+ && echo "mysql-server mysql-server/root_password password root" | debconf-set-selections \
+ && echo "mysql-server mysql-server/root_password_again password root" | debconf-set-selections
+
+# debian packages installation
+RUN apt-get clean && apt-get update && apt-get install -y \
+ # persistent &runtime deps. \
+ ca-certificates curl libpcre3 librecode0 libsqlite3-0 libxml2 --no-install-recommends \
+ # unix tools \
+ nano wget openssh-client \
+ # versioning & package manager \
+ git npm \
+ # phpize dependencies \
+ autoconf file g++ gcc libc-dev make pkg-config re2c \
+ # persistance
+ redis-server mysql-server-5.5 \
+ # php \
+ php5-json php5-cli php5-common \
+ php5-curl php5-dev php5-gd php5-mcrypt \
+ php5-mysql php5-xdebug php5-xsl php5-intl \
+ # memchached \
+ memcached php5-memcached \
+ # apache \
+ apache2 apache2-utils libapache2-mod-php5 \
+ # gnupg dependency \
+ libgpgme11-dev \
+ # pear \
+ php-pear \
+ # Commented until the following bug is fixed : https://github.com/docker/hub-feedback/issues/556 \
+ #&& apt-get clean \
+ && rm -rf /var/lib/apt/lists/*
+
+# Configure the user www-data environment
+RUN mkdir /home/www-data/ \
+ && chown www-data:www-data /home/www-data/ \
+ && usermod -d /home/www-data www-data
+
+# Configure node and install grunt
+# On debian they choose to rename node in nodejs, some tools try to access nodejs by using the commande noe.
+RUN ln -s /usr/bin/nodejs /usr/bin/node \
+ # install grunt
+ && npm install -g grunt-cli
+
+
+# Install and configure gnupg
+RUN pecl install gnupg \
+ && echo "extension=gnupg.so;" > /etc/php5/mods-available/gnupg.ini \
+ && ln -s /etc/php5/mods-available/gnupg.ini /etc/php5/apache2/conf.d/20-gnupg.ini \
+ && ln -s /etc/php5/mods-available/gnupg.ini /etc/php5/cli/conf.d/20-gnupg.ini \
+ # configure the user www-data env to work with gnupg \
+ && mkdir /home/www-data/.gnupg \
+ && chown www-data:www-data /home/www-data/.gnupg \
+ && chmod 0777 /home/www-data/.gnupg
+
+# Configure apache
+ADD /server-conf/apache/passbolt.conf /etc/apache2/sites-available/passbolt.conf
+ADD /server-conf/apache/000-default.conf /etc/apache2/sites-available/000-default.conf
+
+RUN rm -f /etc/apache2/sites-enabled/* \
+ && rm -fr /var/www/html \
+ && a2enmod proxy \
+ && a2enmod proxy_http \
+ && a2enmod rewrite \
+ && a2ensite passbolt \
+ && a2ensite 000-default.conf
+
+# Configure php
+RUN echo "memory_limit=1024M" > /etc/php5/apache2/conf.d/20-memory-limit.ini \
+ && echo "memory_limit=1024M" > /etc/php5/cli/conf.d/20-memory-limit.ini
+
+# Install composer
+RUN curl -sS https://getcomposer.org/installer | php \
+ && mv composer.phar /usr/local/bin/composer
+
+# Special hack for macosx, to let www-data able to write on mounted volumes.
+# See docker bug: https://github.com/boot2docker/boot2docker/issues/581.
+RUN usermod -u 1000 www-data \
+ && usermod -a -G staff www-data \
+ && chown -Rf www-data:www-data /var/www/
+
+ADD /entry-point.sh /entry-point.sh
+RUN chmod 0755 /entry-point.sh
+
+CMD ["bash", "/entry-point.sh"]
diff --git a/README.md b/README.md
index e60a0df..c0b0178 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,42 @@
-# passbolt_docker_debian
\ No newline at end of file
+# PASSBOLT DEBIAN DOCKER CONTAINER
+
+ERRATUM : THIS IS A DEMO CONTAINER. DO NOT USE IT IN PRODUCTION.
+
+How to use it
+-------------
+1) First, download passbolt source code from git.
+```
+ git clone https://github.com/passbolt/passbolt.git
+```
+
+2) Then, configure the container.
+There is a configuration file located in /conf/conf.sh
+
+It contains the following options :
+
+- PASSBOLT_DIR : path to passbolt source code.
+- MYSQL_HOST : mysql host. Keep it as 'localhost' to let the container handle the database.
+- MYSQL_ROOT_PASSWORD : root password of mysql. It is only useful if MYSQL_HOST is set to localhost.
+- MYSQL_USERNAME : valid username for the database.
+- MYSQL_PASSWORD : valid password for the database.
+- MYSQL_DATABASE : name of the database to be used.
+
+Enter the values corresponding to your settings. The most important setting is PASSBOLT_DIR. You can keep the default values for the rest.
+
+3) Finally, you can build and run the container :
+```
+ cd /path/to/docker/files
+ docker build -t passbolt_debian .
+ ./launch-container.sh
+```
+
+Behavior
+--------
+By default the container will create a new database and use it to install passbolt.
+However, in case an external database is provided in the settings, it will try to use it.
+A few consideration :
+- There should be a valid username, password and database on the mysql server.
+- If the database exists but without passbolt installed, then passbolt will be installed normally.
+- If the database exists and already has a passbolt installed, then no db installation will be done and the existing data will be kept.
+
+
diff --git a/conf/conf.sh b/conf/conf.sh
new file mode 100644
index 0000000..65dc2d4
--- /dev/null
+++ b/conf/conf.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+# Passbolt directory.
+PASSBOLT_DIR=/path/to/passbolt/dir
+
+# MySQL configuration.
+MYSQL_HOST=localhost
+# Only necessary if we use the local database.
+MYSQL_ROOT_PASSWORD=rootpassword
+MYSQL_USERNAME=passbolt
+MYSQL_PASSWORD=password123
+MYSQL_DATABASE=passbolt
+
diff --git a/entry-point.sh b/entry-point.sh
new file mode 100644
index 0000000..d860f41
--- /dev/null
+++ b/entry-point.sh
@@ -0,0 +1,92 @@
+#!/bin/bash
+IS_MYSQL_LOCAL=1
+if [[ $MYSQL_HOST != "localhost" ]];
+then
+ IS_MYSQL_LOCAL=0
+fi
+
+
+# If Mysql is local (no persistence), we reset everything and create the database.
+if [ $IS_MYSQL_LOCAL == 1 ]; then
+ echo "using local mysql"
+ echo "Resetting root password, and create user ${MYSQL_USERNAME}"
+ # Start mysql
+ service mysql start
+ # Change password of database
+mysql --host=localhost --user=root --password=root << EOSQL
+ SET @@SESSION.SQL_LOG_BIN=0;
+ SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQL_ROOT_PASSWORD}');
+ GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
+ DROP DATABASE IF EXISTS test ;
+ FLUSH PRIVILEGES ;
+EOSQL
+
+ # Create the passbolt database
+ echo "Create database ${MYSQL_DATABASE}"
+ mysql -u "root" --password="${MYSQL_ROOT_PASSWORD}" -e "create database ${MYSQL_DATABASE}"
+ echo "Create user ${MYSQL_USERNAME} and give access to ${MYSQL_DATABASE}"
+ mysql -u "root" --password="${MYSQL_ROOT_PASSWORD}" -e "GRANT ALL PRIVILEGES ON ${MYSQL_DATABASE}.* To '${MYSQL_USERNAME}'@'localhost' IDENTIFIED BY '${MYSQL_PASSWORD}'"
+ echo "flush privileges"
+ mysql -u "root" --password="${MYSQL_ROOT_PASSWORD}" -e "FLUSH PRIVILEGES"
+
+# If Mysql is on a different host, check if the database exists.
+else
+ echo "using remote mysql"
+ echo "Checking database ${MYSQL_DATABASE}"
+ RESULT=`mysql -h $MYSQL_HOST -u $MYSQL_USERNAME -p$MYSQL_PASSWORD --skip-column-names -e "SHOW DATABASES LIKE '$MYSQL_DATABASE'"`
+ if [ "$RESULT" != "$MYSQL_DATABASE" ]; then
+ echo "The database $MYSQL_DATABASE does not exist in the mysql instance provided."
+ fi
+ echo "ok"
+fi
+
+# Restart the apache2 service
+service apache2 restart
+
+# Start the memcached service
+service memcached restart
+
+# Default configuration files
+cp -a /var/www/passbolt/app/Config/app.php.default /var/www/passbolt/app/Config/app.php
+cp -a /var/www/passbolt/app/Config/core.php.default /var/www/passbolt/app/Config/core.php
+cp -a /var/www/passbolt/app/webroot/js/app/config/config.json.default /var/www/passbolt/app/webroot/js/app/config/config.json
+
+DATABASE_CONF=/var/www/passbolt/app/Config/database.php
+# Set configuration in file
+cat > $DATABASE_CONF << EOL
+ 'Database/Mysql',
+ 'persistent' => false,
+ 'host' => '${MYSQL_HOST}',
+ 'login' => '${MYSQL_USERNAME}',
+ 'password' => '${MYSQL_PASSWORD}',
+ 'database' => '${MYSQL_DATABASE}',
+ 'prefix' => '',
+ 'encoding' => 'utf8',
+ );
+ };
+EOL
+
+# Check if passbolt is already installed.
+IS_PASSBOLT_INSTALLED=0
+OUTPUT=$(mysql -N -s -u ${MYSQL_USERNAME} -p${MYSQL_PASSWORD} -e "select count(*) from information_schema.tables where table_schema='${MYSQL_DATABASE}' and table_name='users';")
+echo "OUTPUT=${OUTPUT}"
+if [ $OUTPUT == "1" ]; then
+ echo "passbolt is already installed in this database"
+ IS_PASSBOLT_INSTALLED=1
+else
+ echo "passbolt is not installed in this database. Proceeding.."
+fi
+
+
+# Install passbolt
+if [[ $IS_PASSBOLT_INSTALLED == "0"]]; then
+ echo "Installing"
+ su -s /bin/bash -c "/var/www/passbolt/app/Console/cake install" www-data
+ echo "We are all set. Have fun with Passbolt !"
+ echo "Reminder : THIS IS A DEMO CONTAINER. DO NOT USE IT IN PRODUCTION!!!!"
+fi
+
+/bin/bash
\ No newline at end of file
diff --git a/launch-container.sh b/launch-container.sh
new file mode 100755
index 0000000..6fa19a5
--- /dev/null
+++ b/launch-container.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+SRC=$(cd $(dirname "$0"); pwd)
+source "${SRC}/conf/conf.sh"
+
+docker run -p 8081:8081 -p 80:80 -d -it --hostname=passbolt.docker --name passbolt \
+ -v $PASSBOLT_DIR:/var/www/passbolt \
+ -e MYSQL_HOST=$MYSQL_HOST \
+ -e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \
+ -e MYSQL_USERNAME=$MYSQL_USERNAME \
+ -e MYSQL_PASSWORD=$MYSQL_PASSWORD \
+ -e MYSQL_DATABASE=$MYSQL_DATABASE \
+ passbolt_debian
diff --git a/server-conf/apache/000-default.conf b/server-conf/apache/000-default.conf
new file mode 100644
index 0000000..b5c81e7
--- /dev/null
+++ b/server-conf/apache/000-default.conf
@@ -0,0 +1,31 @@
+
+ # The ServerName directive sets the request scheme, hostname and port that
+ # the server uses to identify itself. This is used when creating
+ # redirection URLs. In the context of virtual hosts, the ServerName
+ # specifies what hostname must appear in the request's Host: header to
+ # match this virtual host. For the default virtual host (this file) this
+ # value is not decisive as it is used as a last resort host regardless.
+ # However, you must set it for any further virtual host explicitly.
+ #ServerName www.example.com
+
+ ServerAdmin webmaster@localhost
+ DocumentRoot /var/www
+
+ # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
+ # error, crit, alert, emerg.
+ # It is also possible to configure the loglevel for particular
+ # modules, e.g.
+ #LogLevel info ssl:warn
+
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+
+ # For most configuration files from conf-available/, which are
+ # enabled or disabled at a global level, it is possible to
+ # include a line for only one particular virtual host. For example the
+ # following line enables the CGI configuration for this host only
+ # after it has been globally disabled with "a2disconf".
+ #Include conf-available/serve-cgi-bin.conf
+
+
+# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
\ No newline at end of file
diff --git a/server-conf/apache/passbolt.conf b/server-conf/apache/passbolt.conf
new file mode 100644
index 0000000..54bc035
--- /dev/null
+++ b/server-conf/apache/passbolt.conf
@@ -0,0 +1,14 @@
+Listen 8081
+
+
+ DocumentRoot /var/www/passbolt
+ RewriteEngine On
+
+ # Other directives here
+
+ Options Indexes FollowSymLinks
+ AllowOverride All
+ Order allow,deny
+ allow from all
+
+