1
0
Fork 0
mirror of https://codeberg.org/icewind/haze.git synced 2026-06-03 09:04:12 +02:00
haze/README.md

9.5 KiB

Haze

Hazy with a chance of clouds.

Easy setup and management of Nextcloud test instances using docker

What

haze provides an easy way to set up Nextcloud test instances with a choice of php version, database server, optional s3 or ldap setup and more.

Setup

Requirements

  • Docker

Installation

Config

Create a file ~/.config/haze/haze.toml with the following options:

sources_root = "/path/to/nextcloud/sources"

See the configuration section for more options.

Quick examples

  • Start a Nextcloud instance with postgresql, and s3 primary storage:

    haze start pgsql s3
    
  • Start a Nextcloud instance with sqlite, php 8.3 and an smb external storage:

    haze start 8.3 smb
    
  • Run specific units test against an oracle database

    haze test oracle apps/dav/tests/unit/Connector/Sabre
    

Managing instances

Start an instance

haze start [database] [php-version] [services] [vX.Y.Z]

Where database is one of sqlite, mysql, mariadb, pgsql or oracle with an optional version (e.g. pgsql:12), defaults to sqlite. And php-version is one of 8.2, 8.3 or 8.4, defaults to the maximum version support by the current Nextcloud version. 7.3 till 8.1 are still supported but the docker images for those versions aren't being updated anymore so they might be missing some newer features.

Each php version also comes with a -dbg variant that has php compiled in debug mode and can be used for debugging php itself with gdb.

You can specify a version number (e.g. v32.0.2) to use the sources from a release instead of using the local sources.

Additionally, you can use the following options when starting an instance:

  • s3: set up an S3 server and configure to Nextcloud to use it as primary storage.
  • <path to app.tar.gz>: by specifying the path to an app package this package will be extracted into the apps. directory of the new instance (overwriting any existing app code). This can be used to quickly test a packaged app.
  • ldap: set up an LDAP server.
  • office: set up a Nextcloud Office server.
  • onlyoffice setup an onlyoffice document server.
  • push set up client push.
  • smb: set up a samba server for external storage use.
  • dav: set up a WebDAV server for external storage use.
  • sftp: set up a SFTP server for external storage use.
  • kaspersky: set up a kaspersky scan engine server in http mode. ( Requires manually setting up the image)
  • kaspersky-icap: setup a kaspersky scan engine server in ICAP mode.
  • clamav: set up a local clam av scanner in executable mode.
  • clamav-socket: set up a clam av scanner in socket mode.
  • clamav-icap: set up a clam av scanner in ICAP mode.
  • clamav-icap-tls: set up a clam av scanner in ICAP mode with TLS encryption.
  • oc: start an ownCloud instance in the same network.
  • imaginary: start an Imaginary service and configure it for preview generation.
  • mail: start a smtp4dev server and configure it the mail server.
  • redis: start a separate container for redis.
  • redis-tls: connect to redis over TLS.
  • The name of any configured preset.

Run tests in a new instance

haze test [database] [php-version] [path]

Where path is a file or folder to run PHPUnit in, relative to the sources root.

List running instances

haze

or

haze list

Remove all running instances

haze clean

Controlling running instances

The following commands run against the most recently started instance and allow optionally providing a match to select a specific instance by its name.

Open an instance

haze [match] open

Open the database of an instance

haze [match] db

Execute a command on an instance

haze [match] exec [cmd]

If no cmd is specified it will launch bash

Create a new instance and run a command

haze [match] shell [cmd]

If no cmd is specified it will launch bash

Execute an occ command on an instance

haze [match] occ [cmd]

Connect to the database on an instance

haze [match] db

Show the logs of an instance

haze [match] logs

Stop an instance

haze [match] stop

Pin an instance

haze [match] pin

Pinned instances will not be removed by haze clean.

Unpin an instance

haze [match] unpin

Run a command with instance environment variables set

haze [match] env <cmd> [args]

Runs the provided command with NEXTCLOUD_URL, DATABASE_URL and REDIS_URL environment variables set for the matched instance.

This is intended to run a local push daemon against an instance.

Update the container images

haze update

Edit a file in an instance with the local $EDITOR

haze [match] edit <path>

Reload the php config of an instance

haze [match] reload

The php configuration can edit changed with haze edit /config/php.ini

Checkout a branch for all local apps

haze git checkout [branch]

Checks out the branch in all git repositories within the apps folder.

Defaults to the branch matching the current checked out server versions (e.g. master or stable33).

master and main can be used interchangeably.

Pull remote changes for all local apps

haze git pull

Performs a pull in all git repositories within the apps folder.

Federation

Multiple instances can reach each other by using their instance name as domain name to allow for testing federation between instances. Alternatively, you can set up the haze proxy and the proxied domains to get https support between instances.

Proxy

By default, instances can be accessed by their IP. In order to get more memorable URLs and allow supporting https, haze comes with a builtin reverse proxy to allow using a wildcard domain.

Requirements

  • A domain name you can set wildcard DNS records for
  • A reverse proxy like nginx or Apache
  • (optionally) a wildcard ssl certificate (can be acquiring using letsencrypt and dns verification)

Setup

  • Set a DNS record for *.haze.exmaple.com and haze.example.com pointing to your development machine. Pointing it to 127.0.0.1 will also work, but comes with limitations like federation not being supported.
  • Set the proxy configuration with your domain and desired listen endpoint.
  • Set up a service to run haze proxy in the background as your own user. A systemd user service is recommended (see haze.service for an example).
  • Configure your reverse proxy of choice to proxy *.haze.example.com and haze.example.com to the proxy's listen endpoint
  • (optional) acquire a wildcard ssl certificate for your domain and set your reverse proxy to use it. This will be highly dependent on your DNS provider, this lists some DNS providers and supported ACME clients.

Usage

When the proxy is configured, generated URLs for the instances will use a subdomain of the configured domain, e.g. the rolling-bees instance will be available at rolling-bees.haze.example.com. Additionally, haze.example.com will automatically point to the last created instance.

Additionally, the proxy allows access to the server containers trough either <instance id>-<service id>.haze.example.com for a specific instance, or <service-id>.haze.example.com for the last created instead. For example rolling-bees-mail.haze.example.com will give access to the smtp4dev web interface of the rolling-bees instance.

Configuration

Configuration is loaded from ~/.config/haze/haze.toml and has the following options

sources_root = "/path/to/sources" # path of the nextcloud sources. required
app_directories = ["/path/to/sources/more_app"] # paths to additional app directories.
work_dir = "/path/to/temp/dir" # path to temporary directory. optional, defaults to "/tmp/haze"

[auto_setup] # optional
enabled = false # whether or not to automatically install nextcloud on `haze start`. enabled by default
username = "foo" # username for admin user during auto setup. optional, defaults to "admin"
password = "bar" # password for admin user during auto setup. optional, defaults to "admin"
enable_apps = ["files_external"] # apps to enable after setup, defaults to []
disable_apps = ["contacts"] # apps to disable after setup, defaults to []
post_setup = [# commands to execute after setup, defaults to []
    "occ group:add test",
]

[[volume]] # optional
source = "/tmp/haze-shared"
target = "/shared"
create = true

[[volume]]
source = "/home/me/Downloads"
target = "/Downloads"
read_only = true

[proxy] # optional
address = "haze.example.com" # base domain
https = true # Is the proxy behind a https terminating proxy
listen = "/run/haze/haze.sock" # either a unix socket path
#listen = "127.0.0.1:8080"     # or a socket address

# presets allow for easy usage of commonly used setups
[[preset]]
name = "groupfolders" # name of the preset
apps = ["groupfolders"] # app to enable
commands = ["occ groupfolders:create gf", "occ groupfolders:group 1 admin read write share delete"] # commands to run post-setup