Merge branch 'mysql'
This commit is contained in:
commit
f6e953765f
@ -3,8 +3,7 @@ MAINTAINER Christian Lück <christian@lueck.tv>
|
|||||||
|
|
||||||
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
|
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
|
||||||
nginx git supervisor php5-fpm php5-cli php5-curl php5-gd php5-json \
|
nginx git supervisor php5-fpm php5-cli php5-curl php5-gd php5-json \
|
||||||
php5-pgsql
|
php5-pgsql php5-mysql && apt-get clean
|
||||||
# php5-mysql
|
|
||||||
|
|
||||||
# add ttrss as the only nginx site
|
# add ttrss as the only nginx site
|
||||||
ADD ttrss.nginx.conf /etc/nginx/sites-available/ttrss
|
ADD ttrss.nginx.conf /etc/nginx/sites-available/ttrss
|
||||||
|
83
README.md
83
README.md
@ -54,7 +54,9 @@ Having trouble getting the above to run?
|
|||||||
This is the detailed installation walkthrough.
|
This is the detailed installation walkthrough.
|
||||||
If you've already followed the [quickstart](#quickstart) guide and everything works, you can skip this part.
|
If you've already followed the [quickstart](#quickstart) guide and everything works, you can skip this part.
|
||||||
|
|
||||||
### Running
|
### Select database
|
||||||
|
|
||||||
|
This container requires a PostgreSQL or MySQL database instance.
|
||||||
|
|
||||||
Following docker's best practices, this container does not contain its own database,
|
Following docker's best practices, this container does not contain its own database,
|
||||||
but instead expects you to supply a running instance.
|
but instead expects you to supply a running instance.
|
||||||
@ -63,28 +65,61 @@ database instance and configuration you're relying on.
|
|||||||
Also, this makes this container quite disposable, as it doesn't store any sensitive
|
Also, this makes this container quite disposable, as it doesn't store any sensitive
|
||||||
information at all.
|
information at all.
|
||||||
|
|
||||||
#### Starting a database instance
|
#### PostgreSQL container
|
||||||
|
|
||||||
This container requires a PostgreSQL database instance. You're free to pick (or build)
|
The recommended way to run this container is by linking it to a PostgreSQL database instance.
|
||||||
any, as long as is exposes its database port (5432) to the outside.
|
You're free to pick (or build) any PostgreSQL container, as long as it exposes
|
||||||
|
its database port (5432) to the outside.
|
||||||
|
|
||||||
Example:
|
Example with nornagon/postgres:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ sudo docker run -d --name=ttrssdb nornagon/postgres
|
$ docker run -d --name=tinydatabase nornagon/postgres:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Testing ttrss in foreground
|
> The image nornagon/postgres exposes a database superuser that this image uses
|
||||||
|
to automatically create its user and database,
|
||||||
|
so you don't have to setup your database credentials here.
|
||||||
|
|
||||||
For testing purposes it's recommended to initially start this container in foreground.
|
Use the following database options when running the container:
|
||||||
This is particular useful for your initial database setup, as errors get reported to
|
|
||||||
the console and further execution will halt.
|
```
|
||||||
|
--link tinydatabase:db
|
||||||
|
```
|
||||||
|
|
||||||
|
#### MySQL container
|
||||||
|
|
||||||
|
If you'd like to use ttrss with a mysql database backend, simply link it to a
|
||||||
|
mysql container instead.
|
||||||
|
You're free to pick (or build) any MySQL container, as long as it exposes
|
||||||
|
its database port (3306) to the outside.
|
||||||
|
|
||||||
|
Example with sameersbn/mysql:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ sudo docker run -it --link ttrssdb:db -p 80:80 clue/ttrss
|
$ docker run -d --name=tinydatabase -e DB_USER=ttrss -e DB_PASS=ttrss -e DB_NAME=ttrss sameersbn/mysql:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Database configuration
|
> The image sameersbn/mysql does not expose a database superuser,
|
||||||
|
so you have to explicitly pass the database credentials here.
|
||||||
|
|
||||||
|
Use the following database options when running the container:
|
||||||
|
|
||||||
|
```
|
||||||
|
--link tinydatabase:db
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 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 and port like so:
|
||||||
|
|
||||||
|
```
|
||||||
|
-e DB_HOST=172.17.42.1
|
||||||
|
-e DB_PORT=3306
|
||||||
|
```
|
||||||
|
|
||||||
|
### Database configuration
|
||||||
|
|
||||||
Whenever your run ttrss, it will check your database setup. It assumes the following
|
Whenever your run ttrss, it will check your database setup. It assumes the following
|
||||||
default configuration, which can be changed by passing the following additional arguments:
|
default configuration, which can be changed by passing the following additional arguments:
|
||||||
@ -95,7 +130,15 @@ default configuration, which can be changed by passing the following additional
|
|||||||
-e DB_PASS=ttrss
|
-e DB_PASS=ttrss
|
||||||
```
|
```
|
||||||
|
|
||||||
##### Database superuser
|
If your database is exposed on a non-standard port you also need to provide DB_TYPE set
|
||||||
|
to either "pgsql" or "mysql".
|
||||||
|
|
||||||
|
```
|
||||||
|
-e DB_TYPE=pgsql
|
||||||
|
-e DB_TYPE=mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
### Database superuser
|
||||||
|
|
||||||
When you run ttrss, it will check your database setup. If it can not connect using the above
|
When you run ttrss, it will check your database setup. If it can not connect using the above
|
||||||
configuration, it will automatically try to create a new database and user.
|
configuration, it will automatically try to create a new database and user.
|
||||||
@ -109,7 +152,17 @@ following additional arguments:
|
|||||||
-e DB_ENV_PASS=docker
|
-e DB_ENV_PASS=docker
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Running ttrss daemonized
|
### Testing ttrss in foreground
|
||||||
|
|
||||||
|
For testing purposes it's recommended to initially start this container in foreground.
|
||||||
|
This is particular useful for your initial database setup, as errors get reported to
|
||||||
|
the console and further execution will halt.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker run -it --link tinydatabase:db -p 80:80 clue/ttrss
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running ttrss daemonized
|
||||||
|
|
||||||
Once you've confirmed everything works in the foreground, you can start your container
|
Once you've confirmed everything works in the foreground, you can start your container
|
||||||
in the background by replacing the `-it` argument with `-d` (daemonize).
|
in the background by replacing the `-it` argument with `-d` (daemonize).
|
||||||
@ -117,5 +170,5 @@ Remaining arguments can be passed just like before, the following is the recomme
|
|||||||
minimum:
|
minimum:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ sudo docker run -d --link tinystore:db -p 80:80 clue/ttrss
|
$ docker run -d --link tinydatabase:db -p 80:80 clue/ttrss
|
||||||
```
|
```
|
||||||
|
@ -1,27 +1,53 @@
|
|||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
$ename = 'DB';
|
|
||||||
$eport = 5432;
|
|
||||||
$confpath = '/var/www/config.php';
|
$confpath = '/var/www/config.php';
|
||||||
|
|
||||||
// check DB_NAME, which will be set automatically for a linked "db" container
|
$config = array();
|
||||||
if (!env($ename . '_PORT', '')) {
|
|
||||||
error('The env ' . $ename .'_PORT does not exist. Make sure to run with "--link mypostgresinstance:' . $ename . '"');
|
if (getenv('DB_TYPE') !== false) {
|
||||||
|
$config['DB_TYPE'] = getenv('DB_TYPE');
|
||||||
|
} elseif (getenv('DB_PORT_5432_TCP_ADDR') !== false) {
|
||||||
|
// postgres container linked
|
||||||
|
$config['DB_TYPE'] = 'pgsql';
|
||||||
|
$eport = 5432;
|
||||||
|
} elseif (getenv('DB_PORT_3306_TCP_ADDR') !== false) {
|
||||||
|
// mysql container linked
|
||||||
|
$config['DB_TYPE'] = 'mysql';
|
||||||
|
$eport = 3306;
|
||||||
}
|
}
|
||||||
|
|
||||||
$config = array();
|
if (!empty($eport)) {
|
||||||
$config['DB_TYPE'] = 'pgsql';
|
$config['DB_HOST'] = env('DB_PORT_' . $eport . '_TCP_ADDR');
|
||||||
$config['DB_HOST'] = env($ename . '_PORT_' . $eport . '_TCP_ADDR');
|
$config['DB_PORT'] = env('DB_PORT_' . $eport . '_TCP_PORT');
|
||||||
$config['DB_PORT'] = env($ename . '_PORT_' . $eport . '_TCP_PORT');
|
} elseif (getenv('DB_PORT') === false) {
|
||||||
|
error('The env DB_PORT does not exist. Make sure to run with "--link mypostgresinstance:DB"');
|
||||||
|
} elseif (is_numeric(getenv('DB_PORT')) && getenv('DB_HOST') !== false) {
|
||||||
|
// numeric DB_PORT provided; assume port number passed directly
|
||||||
|
$config['DB_HOST'] = env('DB_HOST');
|
||||||
|
$config['DB_PORT'] = env('DB_PORT');
|
||||||
|
|
||||||
|
if (empty($config['DB_TYPE'])) {
|
||||||
|
switch ($config['DB_PORT']) {
|
||||||
|
case 3306:
|
||||||
|
$config['DB_TYPE'] = 'mysql';
|
||||||
|
break;
|
||||||
|
case 5432:
|
||||||
|
$config['DB_TYPE'] = 'pgsql';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
error('Database on non-standard port ' . $config['DB_PORT'] . ' and env DB_TYPE not present');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// database credentials for this instance
|
// database credentials for this instance
|
||||||
// database name (DB_NAME) can be supplied or detaults to "ttrss"
|
// database name (DB_NAME) can be supplied or detaults to "ttrss"
|
||||||
// database user (DB_USER) can be supplied or defaults to database name
|
// database user (DB_USER) can be supplied or defaults to database name
|
||||||
// database pass (DB_PASS) can be supplied or defaults to database user
|
// database pass (DB_PASS) can be supplied or defaults to database user
|
||||||
$config['DB_NAME'] = env($ename . '_NAME', 'ttrss');
|
$config['DB_NAME'] = env('DB_NAME', 'ttrss');
|
||||||
$config['DB_USER'] = env($ename . '_USER', $config['DB_NAME']);
|
$config['DB_USER'] = env('DB_USER', $config['DB_NAME']);
|
||||||
$config['DB_PASS'] = env($ename . '_PASS', $config['DB_USER']);
|
$config['DB_PASS'] = env('DB_PASS', $config['DB_USER']);
|
||||||
|
|
||||||
if (!dbcheck($config)) {
|
if (!dbcheck($config)) {
|
||||||
echo 'Database login failed, trying to create...' . PHP_EOL;
|
echo 'Database login failed, trying to create...' . PHP_EOL;
|
||||||
@ -32,12 +58,19 @@ if (!dbcheck($config)) {
|
|||||||
$super = $config;
|
$super = $config;
|
||||||
|
|
||||||
$super['DB_NAME'] = null;
|
$super['DB_NAME'] = null;
|
||||||
$super['DB_USER'] = env($ename . '_ENV_USER', 'docker');
|
$super['DB_USER'] = env('DB_ENV_USER', 'docker');
|
||||||
$super['DB_PASS'] = env($ename . '_ENV_PASS', $super['DB_USER']);
|
$super['DB_PASS'] = env('DB_ENV_PASS', $super['DB_USER']);
|
||||||
|
|
||||||
$pdo = dbconnect($super);
|
$pdo = dbconnect($super);
|
||||||
$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']));
|
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);
|
unset($pdo);
|
||||||
|
|
||||||
if (dbcheck($config)) {
|
if (dbcheck($config)) {
|
||||||
@ -89,14 +122,14 @@ function error($text)
|
|||||||
|
|
||||||
function dbconnect($config)
|
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'] . ':';
|
$dsn = $config['DB_TYPE'] . ':';
|
||||||
foreach ($map as $d => $h) {
|
foreach ($map as $d => $h) {
|
||||||
if (isset($config['DB_' . $h])) {
|
if (isset($config['DB_' . $h])) {
|
||||||
$dsn .= $d . '=' . $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);
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||||||
return $pdo;
|
return $pdo;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user