Sign inSign up

jcpd/docker-dotclear

By jcpd

•Updated about 18 hours ago

Docker image for the open-source web publishing software called Dotclear

Image
Content management system
3

100K+

jcpd/docker-dotclear repository overview

⁠README

Stable image version Docker image size Stable image downloads

Stable image build Testing image build Unstable image build

⁠1. THE SHORT WAY

In your futur server, with Docker installed, execute:

docker run -d --name dotclear -p 80:80 -v dotclear:/var/www/dotclear jcpd/docker-dotclear

or with Docker compose installed, execute:

curl -fsSL -o docker-compose.yaml https://raw.githubusercontent.com/JcDenis/docker-dotclear/refs/heads/master/docker-compose.yaml && docker-compose up -d

⁠2. WHAT IS DOTCLEAR

Dotclear is an open-source web publishing software. Take control over your blog!

Dotclear project's purpose is to provide a user-friendly tool allowing anyone to publish on the web, regardless of their technical skills.

=> https://dotclear.org/⁠

⁠3. WHAT IS DOCKER-DOTCLEAR

This repository contains all features to build or run Dotclear on a Docker environment. It is hightly based on work from darknao⁠.

⁠3.1 TAGS

Docker images are based on Alpine Linux OS, Nginx server and PHP-FPM language. Image tags are composed of Dotclear version or release type:

  • x.x : A given Dotclear version (ex: 2.31.1)
  • latest : The latest stable Dotclear release
  • testing: The latest dev of Dotclear stable branch
  • dev : A Dotclear unstable (nightly) release
⁠3.2 BUILDS

Clone this repository:

git clone https://github.com/JcDenis/docker-dotclear.git

To build image from stable canal, from the Dokerfile path, execute:

docker build -t dotclear:latest --build-arg CANAL=stable .

Or to build image from testing canal, from the Dokerfile path, execute:

docker build -t dotclear:testing --build-arg CANAL=testing .

Or to build image from unstable canal, from the Dokerfile path, execute:

docker build -t dotclear:dev --build-arg CANAL=unstable .

Builds should support:

  • postgresql and mysql and sqlite database
  • linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x (and more) plateforms
  • docker container healthcheck
⁠3.3 DOCKER
⁠3.3.1 Exemple of a docker compose file with a mariadb database

Create and edit a docker-compose.yaml file and put into it this contents :

services:
  # MYSQL database service
  dc_db:
    image: mariadb:latest
    container_name: dotcleardb
    restart: unless-stopped
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - dc_db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: dotclear_root
      MYSQL_DATABASE: dotclear_db
      MYSQL_USER: dotclear_user
      MYSQL_PASSWORD: dotclear_pwd
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      start_period: 10s
      interval: 10s
      timeout: 5s
      retries: 3

  # PHP-FPM Service
  dc_app:
    image: jcpd/docker-dotclear:latest
    container_name: dotclearphp
    restart: unless-stopped
    volumes:
      - dc_app:/var/www/dotclear
    ports:
      - 80:80
    depends_on:
      dc_db: # MYSQL database service
        condition: service_healthy # Waiting for database ready
    environment:
      # These variables are only used for first install, see inc/config.php
      DC_DBDRIVER: mysqlimb4 # MYSQL full UTF-8
      DC_DBHOST: dc_db # MYSQL database service
      DC_DBNAME: dotclear_db # MYSQL_DATABASE
      DC_DBUSER: dotclear_user # MYSQL_USER 
      DC_DBPASSWORD: dotclear_pwd # MYSQL_PASSWORD 
      DC_DBPREFIX: dc_ # Database tables prefix
      DC_ADMINMAILFROM: [email protected] # Dotclear mail from

volumes:
  dc_app: # NGINX (dotclear) volume
  dc_db: # MYSQL (database) volume
  • You MUST replace database USER and PASSWORD by something else.

Then execute:

docker-compose up -d

Dotclear is now available on your server host at http://locahost/⁠ On first run Dotclear does its installation process and ask you to create a first user. On first run you should wait that container download and install required version of Dotclear, this may takes a while...

⁠3.3.2 Exemple of a docker compose file with an SQLite database and a single container

Create and edit a docker-compose.yaml file and put into it this contents :

services:
  dotclear:
    image: jcpd/docker-dotclear:latest
    container_name: dotclear
    restart: unless-stopped
    volumes:
      - ./dotclear:/var/www/dotclear
    ports:
      - 80:80
    environment:
      DC_DBDRIVER: sqlite
      DC_DBNAME: \var\www\dotclear\sqlite.db
      DC_ADMINMAILFROM: [email protected]

Then execute:

docker-compose up -d
⁠3.3.3 Direct docker run without docker compose

Exemple with a simple docker command :

docker run -d --name dotclear -p 80:80 -v dotclear:/var/www/dotclear -e DC_DBDRIVER=sqlite -e DC_DBNAME=/var/www/dotclear/sqlite.db -e [email protected] jcpd/docker-dotclear:latest

SQLite database will be stored in folder \var\www\dotclear

⁠3.4 BLOG
⁠3.4.1 Standard configuration by subfolders

These images use Dotclear URL rewriting in PATH INFO mode. By default URL and path should be corrected by a custom plugin automatically. Blogs URLs looks like:

Blogs administration is available at http://localhost/admin⁠

When you create a new blog in this configuration, you must use the blog_id with the trailing slash in blog URL setting like http://localhost/blog_id/⁠

Web server configuration

To customized web server configuration for subfolders, edit:

/var/www/dotclear/app/servers/subfolder.conf

Original contents looks like:

server {
    server_name localhost;
    include /etc/nginx/snippets/snippets_subfolder.conf;
    include /etc/nginx/snippets/snippets_common.conf;
}
⁠3.4.2 Standard configuration by subdomains

These images use Dotclear URL rewriting in PATH INFO mode. By default URL and path should be corrected by a custom plugin automatically. Blogs URLs looks like:

Blogs administration is available at http://xxx.domain.tld/admin⁠

When you create a new blog in this configuration, you must use the blog_id as subdomain in blog URL setting like http://blog_id.domain.tld/⁠

Web server configuration

To customized web server configuration for subdomains, edit:

/var/www/dotclear/app/servers/subdomain.conf

Original contents looks like:

server {
    server_name ~^(?<dc_blog_id>\w*?)?\.?(\w+\.\w+)$;
    if ($dc_blog_id = '') {
            set $dc_blog_id default;
    }
    if ($dc_blog_id = 'blog') {
            set $dc_blog_id default;
    }
    include /etc/nginx/snippets/snippets_subdomain.conf;
    include /etc/nginx/snippets/snippets_common.conf;
}
⁠3.4.3 Non standard configuration

Setup nginx server configuration (see bellow):

  • adapt /var/www/dotclear/servers/*.conf to your needs

Then to configure blog:

  • go to the administration interface at http://my_custom_domain/admin,
  • left side menu Blog settings
  • panel Advanced parameters
  • set Blog URL to http://my_custom_domain/ (with trailing slash)
  • set URL scan method to 'PATH_INFO'

Then fix public_path and public_url for the blog:

  • go to the administration interface at http://my_custom_domain/admin,
  • left side menu about:config
  • panel system
  • set public_path to the real path on system to public directory of the blog
  • set public_url to the URL of the public directory of the blog
⁠3.5 STRUCTURE

Default root path of this image structure is in /var/www/dotclear with sub folders:

  • app : Dotclear application files
  • blogs : Blogs public directories
  • cache : Dotclear template cache
  • plugins : Third party plugins directory
  • servers : Nginx servers configurations
  • themes : Dotclear themes directory
  • var : Dotclear var directory
⁠3.6 UPGRADE

To upgrade Dotclear to next version it is recommanded to pull latest image and restart the docker container:

docker pull jcpd/docker-dotclear:latest && docker compose up -d

or use Dotclear buitin update system but themes wiil not be updated.

⁠4. TODO

  • Add better cache management. From another container or from Dotclear container.
  • Add mail support.

⁠5. SECURITY

  • Nginx master process runs as root and set uid/gid to user www
  • PHP-FPM master process runs as root and set uid/gid to user www
  • Docker image entrypoint runs as root and set runuser to www at its end
  • Dotclear application files are chown to user www

For security report see SECURITY file⁠ or open a ticket on github repository.

⁠6. CONTRIBUTING

This image is an open source project. If you'd like to contribute, please read the CONTRIBUTING file⁠. You can submit a pull request, or feel free to use any other way you'd prefer.

⁠7. LICENSES

Many licenses are involved in there, from files in repository to those from softwares used in final Docker image.

⁠7.1 DOCKER-DOTCLEAR REPOSITORY FILES

All files in docker-dotclear repository are licensed under AGPL-3, Copyright (c) Jean-Christian Paul Denis.

Copyright (c) Jean-Christian Paul Denis
AGPL-v3 <https://www.gnu.org/licenses/agpl-3.0.html>
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program.  If not, see <https://www.gnu.org/licenses/>.
⁠7.2 LINUX ALPINE

Linux Alpine operating system in these final Docker images is licensed under MIT License, Copyright (c) 2019 Natanael Copa.

⁠7.3 NGINX

NGINX web server in these final Docker images is licensed under 2-clause BSD-like license, Copyright (c) 2002-2021 Igor Sysoev, 2011-2024 Nginx, Inc.

⁠7.4 PHP

PHP hypertext preprocessor in these final Docker images is licensed under the PHP License v3.01, copyright (c) the PHP Group.

⁠7.5 DOTCLEAR

Dotclear software present in these final Docker images is licensed under AGPL-v3, Copyright (c) Olivier Meunier & Association Dotclear.

Tag summary

Content type

Image

Digest

sha256:4a0658bb0…

Size

35.5 MB

Last updated

about 2 months ago

docker pull jcpd/docker-dotclear