Sign inSign up

soplanning/soplanning

By soplanning

•Updated 11 days ago

SOPlanning, simple online planning (people, projects, tasks, resources). Open source, GPL v3.

Image
0

172

soplanning/soplanning repository overview

⁠SOPlanning official docker

SOPlanning is a simple online planning tool to schedule people, projects, tasks, places and resources, with a web interface and Android / iPhone apps. Open source (GPL v3).

This image contains the SOPlanning web application (PHP 8.3 + Apache). The database runs in a separate MariaDB container; both are started together with Docker Compose.

⁠Quick start

  1. Create a folder with the two files below: docker-compose.yml and .env (from .env.example).
  2. Change the passwords in .env.
  3. Start:
    docker compose up -d
    
  4. Open http://<your-server>:8080 and log in with admin / admin (or the ADMIN_PASSWORD you set). Change this password right away.

On first start the database is created automatically. On each start, the database is upgraded automatically if the image is newer.

⁠docker-compose.yml
x-soplanning-env: &soplanning-env
  SOPLANNING_DB_HOST: db
  SOPLANNING_DB_NAME: soplanning
  SOPLANNING_DB_USER: soplanning
  SOPLANNING_DB_PASSWORD: ${DB_PASSWORD:?set DB_PASSWORD in .env}

services:
  app:
    image: soplanning/soplanning:${SOPLANNING_TAG:-latest}
    restart: unless-stopped
    environment:
      <<: *soplanning-env
      SOPLANNING_URL: ${SOPLANNING_URL:-http://localhost:8080}
      SOPLANNING_ADMIN_PASSWORD: ${ADMIN_PASSWORD:-}
      SOPLANNING_LANG: ${SOPLANNING_LANG:-fr}
      SOPLANNING_LICENSE: ${SOPLANNING_LICENSE:-}
      SOPLANNING_TRUSTED_PROXIES: ${SOPLANNING_TRUSTED_PROXIES:-}
    ports:
      - "${HTTP_PORT:-8080}:80"
    volumes:
      - uploads:/var/www/soplanning/www/upload
    depends_on:
      db:
        condition: service_healthy

  cron:
    image: soplanning/soplanning:${SOPLANNING_TAG:-latest}
    restart: unless-stopped
    command: ["cron"]
    environment:
      <<: *soplanning-env
    depends_on:
      app:
        condition: service_started

  db:
    image: mariadb:11.4
    restart: unless-stopped
    command:
      - --character-set-server=latin1
      - --collation-server=latin1_general_ci
      - --sql-mode=NO_ENGINE_SUBSTITUTION
    environment:
      MARIADB_DATABASE: soplanning
      MARIADB_USER: soplanning
      MARIADB_PASSWORD: ${DB_PASSWORD}
      MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:?set DB_ROOT_PASSWORD in .env}
    volumes:
      - dbdata:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 5s
      timeout: 5s
      retries: 30

volumes:
  uploads:
  dbdata:
⁠.env
DB_PASSWORD=change-me
DB_ROOT_PASSWORD=change-me-too
# Admin password set at first installation (empty = admin)
ADMIN_PASSWORD=
# Public URL of your instance (e-mail links, iCal, mobile app)
SOPLANNING_URL=http://localhost:8080
HTTP_PORT=8080
# Image version: latest or a fixed version (e.g. 1.57.01)
SOPLANNING_TAG=latest
# Language of the initial data: fr, en, de, es, it, nl, pt, da, hu, pl, br, id, sl
SOPLANNING_LANG=en
# Domain name for automatic HTTPS (see below)
SOPLANNING_DOMAIN=
# Mobile app licence (token provided by SOADVANCE, on one line)
SOPLANNING_LICENSE=
# Reverse proxies with a public IP in front of SOPlanning (IPs or CIDR, comma separated)
SOPLANNING_TRUSTED_PROXIES=

⁠HTTPS

Automatic (Let's Encrypt): set SOPLANNING_DOMAIN in .env (the domain must point to your server, ports 80 and 443 open), add this docker-compose.https.yml, then start with docker compose -f docker-compose.yml -f docker-compose.https.yml up -d. The certificate is obtained and renewed automatically.

services:
  app:
    ports: !reset []
    environment:
      SOPLANNING_URL: https://${SOPLANNING_DOMAIN:?set SOPLANNING_DOMAIN in .env}

  caddy:
    image: caddy:2
    restart: unless-stopped
    command: ["caddy", "reverse-proxy", "--from", "${SOPLANNING_DOMAIN}", "--to", "app:80"]
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - app

volumes:
  caddy_data:
  caddy_config:

Existing reverse proxy (Synology, Nginx Proxy Manager, Traefik...): point it to port 8080 and set SOPLANNING_URL=https://.... Proxies on private networks are trusted automatically for the client IP; declare proxies with a public IP in SOPLANNING_TRUSTED_PROXIES.

⁠Mobile app

The SOPlanning Android and iPhone apps work with a self-hosted instance under two conditions: HTTPS with a valid certificate, and a mobile app licence from SOADVANCE (https://www.soplanning.org⁠). Paste the licence token in SOPLANNING_LICENSE in .env, then run docker compose up -d.

⁠Update

docker compose pull
docker compose up -d

The database is upgraded automatically when the new version starts. Make a backup first.

⁠Backup and restore

# database
docker compose exec db sh -c 'mariadb-dump -uroot -p"$MARIADB_ROOT_PASSWORD" soplanning' > soplanning.sql
# attached files, logo, backups
docker compose cp app:/var/www/soplanning/www/upload ./upload-backup
# restore the database
docker compose exec -T db sh -c 'mariadb -uroot -p"$MARIADB_ROOT_PASSWORD" soplanning' < soplanning.sql
# restore the files, then restart (gives the files back to the web server user)
docker compose cp ./upload-backup/. app:/var/www/soplanning/www/upload
docker compose restart app

⁠Tags

  • X.YY.ZZ (e.g. 1.57.01): fixed version
  • latest: latest released version

Architectures: linux/amd64, linux/arm64.

⁠License

SOPlanning is free software released under the GNU General Public License v3.

Tag summary

Content type

Image

Digest

sha256:5b634ace7…

Size

199.8 MB

Last updated

11 days ago

docker pull soplanning/soplanning