From e018a8a41aaed33a1368beb18a86ba6f95b65f43 Mon Sep 17 00:00:00 2001 From: Stefan Siegl Date: Fri, 3 Oct 2014 01:23:20 +0200 Subject: [PATCH] Support mysql storage backend --- Dockerfile | 3 +-- README.md | 31 ++++++++++++++++++++++++ configure-db.php | 61 +++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 82 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index bee7a3f..bf93968 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,8 +3,7 @@ MAINTAINER Christian Lück RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \ nginx git supervisor php5-fpm php5-cli php5-curl php5-gd php5-json \ - php5-pgsql -# php5-mysql + php5-pgsql php5-mysql && apt-get clean # add ttrss as the only nginx site ADD ttrss.nginx.conf /etc/nginx/sites-available/ttrss diff --git a/README.md b/README.md index fdbabda..b152ac6 100644 --- a/README.md +++ b/README.md @@ -110,6 +110,37 @@ following additional arguments: -e DB_ENV_PASS=docker ``` +#### Running with external database server + +If you already have a PostgreSQL or MySQL server around off docker you also can go with +that. Instead of linking docker containers you need to provide database hostname, port, +database name and user credentials manually like so: + +``` +-e DB_HOST=172.17.42.1 +-e DB_PORT=3306 +-e DB_NAME=ttrss +-e DB_USER=ttrssuser +-e DB_PASS=ttrsspass +``` + +If your database is exposed on a non-standard port you also need to provide DB_TYPE set +to either "pgsql" or "mysql". + +#### Running with mysql database server + +If you'd like to use ttrss with a mysql database backend, simply use the additional +database configuration arguments to docker mentioned above. + +You also might want to link ttrss container to a mysql container. If the mysql server +is exposed on port 3306 it will be detected automatically, otherwise you need to specify +DB_TYPE env flag. + +```bash +$ sudo docker run -name mysql -d sameersbn/mysql:latest +$ sudo docker run -it --link mysql:db -p 80:80 clue/ttrss +``` + #### Running ttrss daemonized Once you've confirmed everything works in the foreground, you can start your container diff --git a/configure-db.php b/configure-db.php index 2cc0807..a291045 100644 --- a/configure-db.php +++ b/configure-db.php @@ -2,18 +2,49 @@ exec('CREATE ROLE ' . ($config['DB_USER']) . ' WITH LOGIN PASSWORD ' . $pdo->quote($config['DB_PASS'])); - $pdo->exec('CREATE DATABASE ' . ($config['DB_NAME']) . ' WITH OWNER ' . ($config['DB_USER'])); + + if($super['DB_TYPE'] == 'mysql') { + $pdo->exec('CREATE DATABASE ' . ($config['DB_NAME'])); + $pdo->exec('GRANT ALL PRIVILEGES ON ' . ($config['DB_NAME']) . '.* TO ' . $pdo->quote($config['DB_USER']) . '@"%" IDENTIFIED BY ' . $pdo->quote($config['DB_PASS'])); + } + else { + $pdo->exec('CREATE ROLE ' . ($config['DB_USER']) . ' WITH LOGIN PASSWORD ' . $pdo->quote($config['DB_PASS'])); + $pdo->exec('CREATE DATABASE ' . ($config['DB_NAME']) . ' WITH OWNER ' . ($config['DB_USER'])); + } + unset($pdo); if (dbcheck($config)) { @@ -89,14 +128,14 @@ function error($text) function dbconnect($config) { - $map = array('host' => 'HOST', 'port' => 'PORT', 'dbname' => 'NAME', 'user' => 'USER', 'password' => 'PASS'); + $map = array('host' => 'HOST', 'port' => 'PORT', 'dbname' => 'NAME'); $dsn = $config['DB_TYPE'] . ':'; foreach ($map as $d => $h) { if (isset($config['DB_' . $h])) { $dsn .= $d . '=' . $config['DB_' . $h] . ';'; } } - $pdo = new \PDO($dsn); + $pdo = new \PDO($dsn, $config['DB_USER'], $config['DB_PASS']); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); return $pdo; }