aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorNicolas Lœuillet <nicolas@loeuillet.org>2016-01-11 09:08:39 +0100
committerNicolas Lœuillet <nicolas@loeuillet.org>2016-01-11 09:08:39 +0100
commit0aafb8dfcb098ae586dc87f3487b4948f8ae2314 (patch)
tree601e1f208bd5e7bf38369241ec0beb1eb820a8f3
parent4aa29971062dd41df89939b8e6c20e3ed2ed7183 (diff)
parent8b909e7ea7773807fdcae6e1cc08b2e62084bfd9 (diff)
downloadwallabag-0aafb8dfcb098ae586dc87f3487b4948f8ae2314.tar.gz
wallabag-0aafb8dfcb098ae586dc87f3487b4948f8ae2314.tar.zst
wallabag-0aafb8dfcb098ae586dc87f3487b4948f8ae2314.zip
Merge pull request #1561 from FabienM/docker-compose
Add basic docker-compose configuration
-rw-r--r--.gitignore4
-rw-r--r--app/config/parameters.yml.dist10
-rw-r--r--docker-compose.yml42
-rw-r--r--docker/mariadb/env10
-rw-r--r--docker/nginx/nginx.conf89
-rw-r--r--docker/php/Dockerfile10
-rw-r--r--docker/php/env6
-rw-r--r--docker/postgres/env9
-rw-r--r--docs/en/developer/docker.rst51
9 files changed, 231 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 9bde27db..f88370d7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -36,3 +36,7 @@
36# Data for wallabag 36# Data for wallabag
37data/assets/* 37data/assets/*
38data/db/wallabag*.sqlite 38data/db/wallabag*.sqlite
39
40# Docker container logs and data
41docker/logs/
42docker/data/
diff --git a/app/config/parameters.yml.dist b/app/config/parameters.yml.dist
index a769bc66..0c0cbff1 100644
--- a/app/config/parameters.yml.dist
+++ b/app/config/parameters.yml.dist
@@ -1,5 +1,15 @@
1# This file is a "template" of what your parameters.yml file should look like 1# This file is a "template" of what your parameters.yml file should look like
2parameters: 2parameters:
3 # Uncomment these settings or manually update your parameters.yml
4 # to use docker-compose
5 #
6 # database_driver: %env.database_driver%
7 # database_host: %env.database_host%
8 # database_port: %env.database_port%
9 # database_name: %env.database_name%
10 # database_user: %env.database_user%
11 # database_password: %env.database_password%
12
3 database_driver: pdo_sqlite 13 database_driver: pdo_sqlite
4 database_host: 127.0.0.1 14 database_host: 127.0.0.1
5 database_port: ~ 15 database_port: ~
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000..c774b621
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,42 @@
1nginx:
2 image: nginx
3 ports:
4 - "8080:80"
5 volumes:
6 - ./docker/nginx/nginx.conf:/nginx.conf
7 - ./docker/logs/nginx:/var/log/nginx
8 - .:/var/www/html
9 links:
10 - php:php
11 command: nginx -c /nginx.conf
12php:
13 build: docker/php
14 ports:
15 - "9000:9000"
16 volumes:
17 - .:/var/www/html
18 #links:
19 # - "postgres:rdbms"
20 # - "mariadb:rdbms"
21 env_file:
22 - ./docker/php/env
23 # Comment non-used DBMS lines
24 # If all DBMS are commented out, sqlite will be used as default
25 # - ./docker/postgres/env
26 # - ./docker/mariadb/env
27#postgres:
28# image: postgres:9
29# ports:
30# - "5432:5432"
31# volumes:
32# - ./docker/data/pgsql:/var/lib/postgresql/data
33# env_file:
34# - ./docker/postgres/env
35#mariadb:
36# image: mariadb:10
37# ports:
38# - "3306:3306"
39# volumes:
40# - ./docker/data/mariadb:/var/lib/mysql
41# env_file:
42# - ./docker/mariadb/env
diff --git a/docker/mariadb/env b/docker/mariadb/env
new file mode 100644
index 00000000..87556a15
--- /dev/null
+++ b/docker/mariadb/env
@@ -0,0 +1,10 @@
1MYSQL_ROOT_PASSWORD=wallaroot
2MYSQL_USER=wallabag
3MYSQL_PASSWORD=wallapass
4MYSQL_DATABASE=wallabag
5SYMFONY__ENV__DATABASE_DRIVER=pdo_mysql
6SYMFONY__ENV__DATABASE_HOST=rdbms
7SYMFONY__ENV__DATABASE_PORT=3306
8SYMFONY__ENV__DATABASE_NAME=wallabag
9SYMFONY__ENV__DATABASE_USER=wallabag
10SYMFONY__ENV__DATABASE_PASSWORD=wallapass
diff --git a/docker/nginx/nginx.conf b/docker/nginx/nginx.conf
new file mode 100644
index 00000000..7e82a0f8
--- /dev/null
+++ b/docker/nginx/nginx.conf
@@ -0,0 +1,89 @@
1user nginx;
2worker_processes 1;
3pid /var/run/nginx.pid;
4
5events {
6 worker_connections 2048;
7 multi_accept on;
8 use epoll;
9}
10
11http {
12
13 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
14 '$status $body_bytes_sent "$http_referer" '
15 '"$http_user_agent" "$http_x_forwarded_for"';
16
17 access_log /var/log/nginx/access.log main;
18
19 server_tokens off;
20 sendfile on;
21 tcp_nopush on;
22 tcp_nodelay on;
23 keepalive_timeout 15;
24 types_hash_max_size 2048;
25 include /etc/nginx/mime.types;
26 default_type application/octet-stream;
27 access_log off;
28 error_log off;
29 gzip on;
30 gzip_disable "msie6";
31 open_file_cache max=100;
32
33
34 upstream php-upstream {
35 server php:9000;
36 }
37
38 server {
39 #server_name domain.tld www.domain.tld;
40 root /var/www/html/web;
41
42 location / {
43 # try to serve file directly, fallback to app.php
44 try_files $uri /app.php$is_args$args;
45 }
46 # DEV
47 # This rule should only be placed on your development environment
48 # In production, don't include this and don't deploy app_dev.php or config.php
49 location ~ ^/(app_dev|config)\.php(/|$) {
50 fastcgi_pass php-upstream;
51 fastcgi_split_path_info ^(.+\.php)(/.*)$;
52 include fastcgi_params;
53 # When you are using symlinks to link the document root to the
54 # current version of your application, you should pass the real
55 # application path instead of the path to the symlink to PHP
56 # FPM.
57 # Otherwise, PHP's OPcache may not properly detect changes to
58 # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126
59 # for more information).
60 fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
61 fastcgi_param DOCUMENT_ROOT $realpath_root;
62 }
63 # PROD
64 location ~ ^/app\.php(/|$) {
65 fastcgi_pass php-upstream;
66 fastcgi_split_path_info ^(.+\.php)(/.*)$;
67 include fastcgi_params;
68 # When you are using symlinks to link the document root to the
69 # current version of your application, you should pass the real
70 # application path instead of the path to the symlink to PHP
71 # FPM.
72 # Otherwise, PHP's OPcache may not properly detect changes to
73 # your PHP files (see https://github.com/zendtech/ZendOptimizerPlus/issues/126
74 # for more information).
75 fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
76 fastcgi_param DOCUMENT_ROOT $realpath_root;
77 # Prevents URIs that include the front controller. This will 404:
78 # http://domain.tld/app.php/some-path
79 # Remove the internal directive to allow URIs like this
80 internal;
81 }
82
83 error_log /var/log/nginx/project_error.log;
84 access_log /var/log/nginx/project_access.log;
85 }
86
87}
88
89daemon off;
diff --git a/docker/php/Dockerfile b/docker/php/Dockerfile
new file mode 100644
index 00000000..7c56ae57
--- /dev/null
+++ b/docker/php/Dockerfile
@@ -0,0 +1,10 @@
1FROM php:fpm
2
3RUN apt-get update && apt-get install -y \
4 libmcrypt-dev libicu-dev libpq-dev libxml2-dev \
5 && docker-php-ext-install \
6 iconv mcrypt mbstring intl pdo pdo_mysql pdo_pgsql
7
8RUN usermod -u 1000 www-data
9
10CMD ["php-fpm"]
diff --git a/docker/php/env b/docker/php/env
new file mode 100644
index 00000000..935134fc
--- /dev/null
+++ b/docker/php/env
@@ -0,0 +1,6 @@
1SYMFONY__ENV__DATABASE_DRIVER=pdo_sqlite
2SYMFONY__ENV__DATABASE_HOST=127.0.0.1
3SYMFONY__ENV__DATABASE_PORT=~
4SYMFONY__ENV__DATABASE_NAME=symfony
5SYMFONY__ENV__DATABASE_USER=root
6SYMFONY__ENV__DATABASE_PASSWORD=~
diff --git a/docker/postgres/env b/docker/postgres/env
new file mode 100644
index 00000000..80c78c2a
--- /dev/null
+++ b/docker/postgres/env
@@ -0,0 +1,9 @@
1POSTGRES_USER=wallabag
2POSTGRES_PASSWORD=wallapass
3POSTGRES_DB=wallabag
4export SYMFONY__ENV__DATABASE_DRIVER=pdo_pgsql
5export SYMFONY__ENV__DATABASE_HOST=rdbms
6export SYMFONY__ENV__DATABASE_PORT=5432
7export SYMFONY__ENV__DATABASE_NAME=wallabag
8export SYMFONY__ENV__DATABASE_USER=wallabag
9export SYMFONY__ENV__DATABASE_PASSWORD=wallapass
diff --git a/docs/en/developer/docker.rst b/docs/en/developer/docker.rst
new file mode 100644
index 00000000..9ed9dde2
--- /dev/null
+++ b/docs/en/developer/docker.rst
@@ -0,0 +1,51 @@
1Run Wallabag in docker-compose
2==============================
3
4In order to run your own development instance of wallabag, you may
5want to use the pre-configured docker compose files.
6
7Requirements
8------------
9
10Make sure to have `Docker
11<https://docs.docker.com/installation/ubuntulinux/>`__ and `Docker
12Compose <https://docs.docker.com/compose/install/>`__ availables on
13your system and up to date.
14
15Switch DBMS
16-----------
17
18By default, Wallabag will start with a sqlite database.
19Since Wallabag provide support for Postgresql and MySQL, docker
20containers are also available for these ones.
21
22In ``docker-compose.yml``, for the chosen DBMS uncomment :
23
24- the container definition (``postgres`` or ``mariadb`` root level
25 block)
26- the container link in the ``php`` container
27- the container env file in the ``php`` container
28
29In order to keep running Symfony commands on your host (such as
30``wallabag:install``), you also should :
31
32- source the proper env files on your command line, so variables
33 like ``SYMFONY__ENV__DATABASE_HOST`` will exist.
34- create a ``127.0.0.1 rdbms`` on your system ``hosts`` file
35
36Run Wallabag
37------------
38
39#. Fork and clone the project
40#. Edit ``app/config/parameters.yml`` to replace ``database_*``
41 properties with commented ones (with values prefixed by ``env.``)
42#. ``composer install`` the project dependencies
43#. ``php app/console wallabag:install`` to create the schema
44#. ``docker-compose up`` to run the containers
45#. Finally, browse to http://localhost:8080/ to find your freshly
46 installed wallabag.
47
48At various step, you'll probably run into UNIX permission problems,
49bad paths in generated cache, etc…
50Operations like removing cache files or changing files owners might
51be frequently required, so don't be afraid !