mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-06-13 10:59:37 +00:00
Administration articles moved
This commit is contained in:
parent
64a241ccc8
commit
a63a74053e
186
README.md
186
README.md
|
@ -20,13 +20,6 @@ An opinionated fork of the Drone CI system.
|
||||||
- [Pipeline documentation](#pipeline-documentation)
|
- [Pipeline documentation](#pipeline-documentation)
|
||||||
- [Plugins](#plugins)
|
- [Plugins](#plugins)
|
||||||
- [Custom plugins](#custom-plugins)
|
- [Custom plugins](#custom-plugins)
|
||||||
- [Server setup](#server-setup)
|
|
||||||
- [Quickstart](#quickstart)
|
|
||||||
- [Authentication](#authentication)
|
|
||||||
- [Database](#database)
|
|
||||||
- [SSL](#ssl)
|
|
||||||
- [Metrics](#metrics)
|
|
||||||
- [Behind a proxy](#behind-a-proxy)
|
|
||||||
- [Contributing](#contributing)
|
- [Contributing](#contributing)
|
||||||
- [License](#license)
|
- [License](#license)
|
||||||
|
|
||||||
|
@ -133,185 +126,6 @@ Plugins are Docker containers with their entrypoint set to a predefined script.
|
||||||
|
|
||||||
## Server setup
|
## Server setup
|
||||||
|
|
||||||
#### Quickstart
|
|
||||||
|
|
||||||
The below [docker-compose](https://docs.docker.com/compose/) configuration can be used to start the Drone server with a single agent. It relies on a number of environment variables that you must set before running `docker-compose up`. The variables are described below.
|
|
||||||
|
|
||||||
Each agent is able to process one build by default. If you have 4 agents installed and connected to the Drone server, your system will process 4 builds in parallel. You can add more agents to increase the number of parallel builds or set the agent's `DRONE_MAX_PROCS=1` environment variable to increase the number of parallel builds for that agent.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
version: '2'
|
|
||||||
|
|
||||||
services:
|
|
||||||
drone-server:
|
|
||||||
image: drone/drone:{{% version %}}
|
|
||||||
ports:
|
|
||||||
- 80:8000
|
|
||||||
- 9000
|
|
||||||
volumes:
|
|
||||||
- drone-server-data:/var/lib/drone/
|
|
||||||
restart: always
|
|
||||||
environment:
|
|
||||||
- DRONE_OPEN=true
|
|
||||||
- DRONE_HOST=${DRONE_HOST}
|
|
||||||
- DRONE_GITHUB=true
|
|
||||||
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
|
||||||
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
|
||||||
|
|
||||||
drone-agent:
|
|
||||||
image: drone/agent:{{% version %}}
|
|
||||||
command: agent
|
|
||||||
restart: always
|
|
||||||
depends_on:
|
|
||||||
- drone-server
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
environment:
|
|
||||||
- DRONE_SERVER=drone-server:9000
|
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
drone-server-data:
|
|
||||||
```
|
|
||||||
|
|
||||||
Drone needs to know its own address. You must therefore provide the address in `<scheme>://<hostname>` format. Please omit trailing slashes.
|
|
||||||
|
|
||||||
```diff
|
|
||||||
services:
|
|
||||||
drone-server:
|
|
||||||
image: drone/drone:{{% version %}}
|
|
||||||
environment:
|
|
||||||
- DRONE_OPEN=true
|
|
||||||
+ - DRONE_HOST=${DRONE_HOST}
|
|
||||||
- DRONE_GITHUB=true
|
|
||||||
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
|
||||||
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
|
||||||
```
|
|
||||||
|
|
||||||
Drone agents require access to the host machine Docker daemon.
|
|
||||||
|
|
||||||
```diff
|
|
||||||
services:
|
|
||||||
drone-agent:
|
|
||||||
image: drone/agent:{{% version %}}
|
|
||||||
command: agent
|
|
||||||
restart: always
|
|
||||||
depends_on: [ drone-server ]
|
|
||||||
+ volumes:
|
|
||||||
+ - /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
```
|
|
||||||
|
|
||||||
Drone agents require the server address for agent-to-server communication.
|
|
||||||
|
|
||||||
```diff
|
|
||||||
services:
|
|
||||||
drone-agent:
|
|
||||||
image: drone/agent:{{% version %}}
|
|
||||||
command: agent
|
|
||||||
restart: always
|
|
||||||
depends_on: [ drone-server ]
|
|
||||||
volumes:
|
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
environment:
|
|
||||||
+ - DRONE_SERVER=drone-server:9000
|
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
|
||||||
```
|
|
||||||
|
|
||||||
Drone server and agents use a shared secret to authenticate communication. This should be a random string of your choosing and should be kept private. You can generate such string with `openssl rand -hex 32`.
|
|
||||||
|
|
||||||
```diff
|
|
||||||
services:
|
|
||||||
drone-server:
|
|
||||||
image: drone/drone:{{% version %}}
|
|
||||||
environment:
|
|
||||||
- DRONE_OPEN=true
|
|
||||||
- DRONE_HOST=${DRONE_HOST}
|
|
||||||
- DRONE_GITHUB=true
|
|
||||||
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
|
||||||
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
|
||||||
+ - DRONE_SECRET=${DRONE_SECRET}
|
|
||||||
drone-agent:
|
|
||||||
image: drone/agent:{{% version %}}
|
|
||||||
environment:
|
|
||||||
- DRONE_SERVER=drone-server:9000
|
|
||||||
- DRONE_DEBUG=true
|
|
||||||
+ - DRONE_SECRET=${DRONE_SECRET}
|
|
||||||
```
|
|
||||||
|
|
||||||
Drone registration is closed by default. This example enables open registration for users that are members of approved GitHub organizations.
|
|
||||||
|
|
||||||
```diff
|
|
||||||
services:
|
|
||||||
drone-server:
|
|
||||||
image: drone/drone:{{% version %}}
|
|
||||||
environment:
|
|
||||||
+ - DRONE_OPEN=true
|
|
||||||
+ - DRONE_ORGS=dolores,dogpatch
|
|
||||||
- DRONE_HOST=${DRONE_HOST}
|
|
||||||
- DRONE_GITHUB=true
|
|
||||||
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
|
||||||
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
|
||||||
```
|
|
||||||
|
|
||||||
Drone administrators should also be enumerated in your configuration.
|
|
||||||
|
|
||||||
```diff
|
|
||||||
services:
|
|
||||||
drone-server:
|
|
||||||
image: drone/drone:{{% version %}}
|
|
||||||
environment:
|
|
||||||
- DRONE_OPEN=true
|
|
||||||
- DRONE_ORGS=dolores,dogpatch
|
|
||||||
+ - DRONE_ADMIN=johnsmith,janedoe
|
|
||||||
- DRONE_HOST=${DRONE_HOST}
|
|
||||||
- DRONE_GITHUB=true
|
|
||||||
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
|
||||||
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Authentication
|
|
||||||
|
|
||||||
Authentication is done using OAuth and is delegated to one of multiple version control providers, configured using environment variables. The example above demonstrates basic GitHub integration.
|
|
||||||
|
|
||||||
See the complete reference for [Github](docs/administration/github.md), [Bitbucket Cloud](docs/administration/bitbucket.md), [Bitbucket Server](docs/administration/bitbucket_server.md) and [Gitlab](docs/administration/gitlab.md).
|
|
||||||
|
|
||||||
#### Database
|
|
||||||
|
|
||||||
Drone mounts a [data volume](https://docs.docker.com/storage/volumes/#create-and-manage-volumes) to persist the sqlite database.
|
|
||||||
|
|
||||||
See the [database settings](docs/administration/database.md) page to configure Postgresql or MySQL as database.
|
|
||||||
|
|
||||||
```diff
|
|
||||||
services:
|
|
||||||
drone-server:
|
|
||||||
image: drone/drone:{{% version %}}
|
|
||||||
ports:
|
|
||||||
- 80:8000
|
|
||||||
- 9000
|
|
||||||
+ volumes:
|
|
||||||
+ - drone-server-data:/var/lib/drone/
|
|
||||||
restart: always
|
|
||||||
```
|
|
||||||
|
|
||||||
#### SSL
|
|
||||||
|
|
||||||
Drone supports ssl configuration by mounting certificates into your container.
|
|
||||||
|
|
||||||
See the [SSL guide](docs/administration/ssl.md).
|
|
||||||
|
|
||||||
Automated [Lets Encrypt](docs/administration/lets_encrypt.md) is also supported.
|
|
||||||
|
|
||||||
#### Metrics
|
|
||||||
|
|
||||||
A [Prometheus endpoint](docs/administration/lets_encrypt.md) is exposed.
|
|
||||||
|
|
||||||
#### Behind a proxy
|
|
||||||
|
|
||||||
See the [proxy guide](docs/administration/proxy.md) if you want to see a setup behind Apache, Nginx, Caddy or ngrok.
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
|
|
||||||
This guide provides instructions for using alternate storage engines. Please note this is optional. The default storage engine is an embedded SQLite database which requires zero installation or configuration.
|
|
||||||
|
|
||||||
# Configure MySQL
|
|
||||||
|
|
||||||
The below example demonstrates mysql database configuration. See the official driver [documentation](https://github.com/go-sql-driver/mysql#dsn-data-source-name) for configuration options and examples.
|
|
||||||
|
|
||||||
```diff
|
|
||||||
version: '2'
|
|
||||||
|
|
||||||
services:
|
|
||||||
drone-server:
|
|
||||||
image: drone/drone:{{% version %}}
|
|
||||||
environment:
|
|
||||||
+ DRONE_DATABASE_DRIVER: mysql
|
|
||||||
+ DRONE_DATABASE_DATASOURCE: root:password@tcp(1.2.3.4:3306)/drone?parseTime=true
|
|
||||||
```
|
|
||||||
|
|
||||||
# Configure Postgres
|
|
||||||
|
|
||||||
The below example demonstrates postgres database configuration. See the official driver [documentation](https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING) for configuration options and examples.
|
|
||||||
|
|
||||||
```diff
|
|
||||||
version: '2'
|
|
||||||
|
|
||||||
services:
|
|
||||||
drone-server:
|
|
||||||
image: drone/drone:{{% version %}}
|
|
||||||
environment:
|
|
||||||
+ DRONE_DATABASE_DRIVER: postgres
|
|
||||||
+ DRONE_DATABASE_DATASOURCE: postgres://root:password@1.2.3.4:5432/postgres?sslmode=disable
|
|
||||||
```
|
|
||||||
|
|
||||||
# Database Creation
|
|
||||||
|
|
||||||
Drone does not create your database automatically. If you are using the mysql or postgres driver you will need to manually create your database using `CREATE DATABASE`
|
|
||||||
|
|
||||||
# Database Migration
|
|
||||||
|
|
||||||
Drone automatically handles database migration, including the initial creation of tables and indexes. New versions of Drone will automatically upgrade the database unless otherwise specified in the release notes.
|
|
||||||
|
|
||||||
# Database Backups
|
|
||||||
|
|
||||||
Drone does not perform database backups. This should be handled by separate third party tools provided by your database vendor of choice.
|
|
||||||
|
|
||||||
# Database Archiving
|
|
||||||
|
|
||||||
Drone does not perform data archival; it considered out-of-scope for the project. Drone is rather conservative with the amount of data it stores, however, you should expect the database logs to grow the size of your database considerably.
|
|
|
@ -1,38 +0,0 @@
|
||||||
Drone supports automated ssl configuration and updates using let's encrypt. You can enable let's encrypt by making the following modifications to your server configuration:
|
|
||||||
|
|
||||||
```diff
|
|
||||||
services:
|
|
||||||
drone-server:
|
|
||||||
image: drone/drone:{{% version %}}
|
|
||||||
ports:
|
|
||||||
+ - 80:80
|
|
||||||
+ - 443:443
|
|
||||||
- 9000:9000
|
|
||||||
volumes:
|
|
||||||
- /var/lib/drone:/var/lib/drone/
|
|
||||||
restart: always
|
|
||||||
environment:
|
|
||||||
- DRONE_OPEN=true
|
|
||||||
- DRONE_HOST=${DRONE_HOST}
|
|
||||||
- DRONE_GITHUB=true
|
|
||||||
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
|
||||||
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
|
||||||
+ - DRONE_LETS_ENCRYPT=true
|
|
||||||
```
|
|
||||||
|
|
||||||
Note that Drone uses the hostname from the `DRONE_HOST` environment variable when requesting certificates. For example, if `DRONE_HOST=https://foo.com` the certificate is requested for `foo.com`.
|
|
||||||
|
|
||||||
>Once enabled you can visit your website at both the http and the https address
|
|
||||||
|
|
||||||
# Certificate Cache
|
|
||||||
|
|
||||||
Drone writes the certificates to the below directory:
|
|
||||||
|
|
||||||
```
|
|
||||||
/var/lib/drone/golang-autocert
|
|
||||||
```
|
|
||||||
|
|
||||||
# Certificate Updates
|
|
||||||
|
|
||||||
Drone uses the official Go acme library which will handle certificate upgrades. There should be no addition configuration or management required.
|
|
|
@ -1,162 +0,0 @@
|
||||||
|
|
||||||
Drone is compatible with Prometheus and exposes a `/metrics` endpoint. Please note that access to the metrics endpoint is restricted and requires an authorization token with administrative privileges.
|
|
||||||
|
|
||||||
```nohighlight
|
|
||||||
global:
|
|
||||||
scrape_interval: 60s
|
|
||||||
|
|
||||||
scrape_configs:
|
|
||||||
- job_name: 'drone'
|
|
||||||
bearer_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
|
||||||
|
|
||||||
static_configs:
|
|
||||||
- targets: ['drone.domain.com']
|
|
||||||
```
|
|
||||||
|
|
||||||
# Authorization
|
|
||||||
|
|
||||||
An administrator will need to generate a user api token and configure in the prometheus configuration file as a bearer token. Please see the following example:
|
|
||||||
|
|
||||||
```diff
|
|
||||||
global:
|
|
||||||
scrape_interval: 60s
|
|
||||||
|
|
||||||
scrape_configs:
|
|
||||||
- job_name: 'drone'
|
|
||||||
+ bearer_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
|
||||||
|
|
||||||
static_configs:
|
|
||||||
- targets: ['drone.domain.com']
|
|
||||||
```
|
|
||||||
|
|
||||||
# Metric Reference
|
|
||||||
|
|
||||||
List of prometheus metrics specific to Drone:
|
|
||||||
|
|
||||||
```
|
|
||||||
# HELP drone_build_count Total number of builds.
|
|
||||||
# TYPE drone_build_count gauge
|
|
||||||
drone_build_count 7275
|
|
||||||
# HELP drone_pending_jobs Total number of pending build processes.
|
|
||||||
# TYPE drone_pending_jobs gauge
|
|
||||||
drone_pending_jobs 0
|
|
||||||
# HELP drone_repo_count Total number of registered repositories.
|
|
||||||
# TYPE drone_repo_count gauge
|
|
||||||
drone_repo_count 133
|
|
||||||
# HELP drone_running_jobs Total number of running build processes.
|
|
||||||
# TYPE drone_running_jobs gauge
|
|
||||||
drone_running_jobs 0
|
|
||||||
# HELP drone_user_count Total number of active users.
|
|
||||||
# TYPE drone_user_count gauge
|
|
||||||
drone_user_count 15
|
|
||||||
```
|
|
||||||
|
|
||||||
List of prometheus metrics for server resource usage:
|
|
||||||
|
|
||||||
```
|
|
||||||
# HELP go_gc_duration_seconds A summary of the GC invocation durations.
|
|
||||||
# TYPE go_gc_duration_seconds summary
|
|
||||||
go_gc_duration_seconds{quantile="0"} 0.000189189
|
|
||||||
go_gc_duration_seconds{quantile="0.25"} 0.000391444
|
|
||||||
go_gc_duration_seconds{quantile="0.5"} 0.001895967
|
|
||||||
go_gc_duration_seconds{quantile="0.75"} 0.003075854
|
|
||||||
go_gc_duration_seconds{quantile="1"} 0.004224575
|
|
||||||
go_gc_duration_seconds_sum 0.019922696
|
|
||||||
go_gc_duration_seconds_count 10
|
|
||||||
# HELP go_goroutines Number of goroutines that currently exist.
|
|
||||||
# TYPE go_goroutines gauge
|
|
||||||
go_goroutines 24
|
|
||||||
# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.
|
|
||||||
# TYPE go_memstats_alloc_bytes gauge
|
|
||||||
go_memstats_alloc_bytes 2.556344e+06
|
|
||||||
# HELP go_memstats_alloc_bytes_total Total number of bytes allocated, even if freed.
|
|
||||||
# TYPE go_memstats_alloc_bytes_total counter
|
|
||||||
go_memstats_alloc_bytes_total 2.0479656e+07
|
|
||||||
# HELP go_memstats_buck_hash_sys_bytes Number of bytes used by the profiling bucket hash table.
|
|
||||||
# TYPE go_memstats_buck_hash_sys_bytes gauge
|
|
||||||
go_memstats_buck_hash_sys_bytes 1.45144e+06
|
|
||||||
# HELP go_memstats_frees_total Total number of frees.
|
|
||||||
# TYPE go_memstats_frees_total counter
|
|
||||||
go_memstats_frees_total 200332
|
|
||||||
# HELP go_memstats_gc_cpu_fraction The fraction of this program's available CPU time used by the GC since the program started.
|
|
||||||
# TYPE go_memstats_gc_cpu_fraction gauge
|
|
||||||
go_memstats_gc_cpu_fraction 8.821705133777562e-05
|
|
||||||
# HELP go_memstats_gc_sys_bytes Number of bytes used for garbage collection system metadata.
|
|
||||||
# TYPE go_memstats_gc_sys_bytes gauge
|
|
||||||
go_memstats_gc_sys_bytes 557056
|
|
||||||
# HELP go_memstats_heap_alloc_bytes Number of heap bytes allocated and still in use.
|
|
||||||
# TYPE go_memstats_heap_alloc_bytes gauge
|
|
||||||
go_memstats_heap_alloc_bytes 2.556344e+06
|
|
||||||
# HELP go_memstats_heap_idle_bytes Number of heap bytes waiting to be used.
|
|
||||||
# TYPE go_memstats_heap_idle_bytes gauge
|
|
||||||
go_memstats_heap_idle_bytes 3.842048e+06
|
|
||||||
# HELP go_memstats_heap_inuse_bytes Number of heap bytes that are in use.
|
|
||||||
# TYPE go_memstats_heap_inuse_bytes gauge
|
|
||||||
go_memstats_heap_inuse_bytes 4.972544e+06
|
|
||||||
# HELP go_memstats_heap_objects Number of allocated objects.
|
|
||||||
# TYPE go_memstats_heap_objects gauge
|
|
||||||
go_memstats_heap_objects 19986
|
|
||||||
# HELP go_memstats_heap_released_bytes Number of heap bytes released to OS.
|
|
||||||
# TYPE go_memstats_heap_released_bytes gauge
|
|
||||||
go_memstats_heap_released_bytes 0
|
|
||||||
# HELP go_memstats_heap_sys_bytes Number of heap bytes obtained from system.
|
|
||||||
# TYPE go_memstats_heap_sys_bytes gauge
|
|
||||||
go_memstats_heap_sys_bytes 8.814592e+06
|
|
||||||
# HELP go_memstats_last_gc_time_seconds Number of seconds since 1970 of last garbage collection.
|
|
||||||
# TYPE go_memstats_last_gc_time_seconds gauge
|
|
||||||
go_memstats_last_gc_time_seconds 1.4941783810383117e+09
|
|
||||||
# HELP go_memstats_lookups_total Total number of pointer lookups.
|
|
||||||
# TYPE go_memstats_lookups_total counter
|
|
||||||
go_memstats_lookups_total 325
|
|
||||||
# HELP go_memstats_mallocs_total Total number of mallocs.
|
|
||||||
# TYPE go_memstats_mallocs_total counter
|
|
||||||
go_memstats_mallocs_total 220318
|
|
||||||
# HELP go_memstats_mcache_inuse_bytes Number of bytes in use by mcache structures.
|
|
||||||
# TYPE go_memstats_mcache_inuse_bytes gauge
|
|
||||||
go_memstats_mcache_inuse_bytes 2400
|
|
||||||
# HELP go_memstats_mcache_sys_bytes Number of bytes used for mcache structures obtained from system.
|
|
||||||
# TYPE go_memstats_mcache_sys_bytes gauge
|
|
||||||
go_memstats_mcache_sys_bytes 16384
|
|
||||||
# HELP go_memstats_mspan_inuse_bytes Number of bytes in use by mspan structures.
|
|
||||||
# TYPE go_memstats_mspan_inuse_bytes gauge
|
|
||||||
go_memstats_mspan_inuse_bytes 81016
|
|
||||||
# HELP go_memstats_mspan_sys_bytes Number of bytes used for mspan structures obtained from system.
|
|
||||||
# TYPE go_memstats_mspan_sys_bytes gauge
|
|
||||||
go_memstats_mspan_sys_bytes 98304
|
|
||||||
# HELP go_memstats_next_gc_bytes Number of heap bytes when next garbage collection will take place.
|
|
||||||
# TYPE go_memstats_next_gc_bytes gauge
|
|
||||||
go_memstats_next_gc_bytes 4.819216e+06
|
|
||||||
# HELP go_memstats_other_sys_bytes Number of bytes used for other system allocations.
|
|
||||||
# TYPE go_memstats_other_sys_bytes gauge
|
|
||||||
go_memstats_other_sys_bytes 672584
|
|
||||||
# HELP go_memstats_stack_inuse_bytes Number of bytes in use by the stack allocator.
|
|
||||||
# TYPE go_memstats_stack_inuse_bytes gauge
|
|
||||||
go_memstats_stack_inuse_bytes 622592
|
|
||||||
# HELP go_memstats_stack_sys_bytes Number of bytes obtained from system for stack allocator.
|
|
||||||
# TYPE go_memstats_stack_sys_bytes gauge
|
|
||||||
go_memstats_stack_sys_bytes 622592
|
|
||||||
# HELP go_memstats_sys_bytes Number of bytes obtained from system.
|
|
||||||
# TYPE go_memstats_sys_bytes gauge
|
|
||||||
go_memstats_sys_bytes 1.2232952e+07
|
|
||||||
# HELP go_threads Number of OS threads created
|
|
||||||
# TYPE go_threads gauge
|
|
||||||
go_threads 9
|
|
||||||
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
|
|
||||||
# TYPE process_cpu_seconds_total counter
|
|
||||||
process_cpu_seconds_total 0.9
|
|
||||||
# HELP process_max_fds Maximum number of open file descriptors.
|
|
||||||
# TYPE process_max_fds gauge
|
|
||||||
process_max_fds 524288
|
|
||||||
# HELP process_open_fds Number of open file descriptors.
|
|
||||||
# TYPE process_open_fds gauge
|
|
||||||
process_open_fds 17
|
|
||||||
# HELP process_resident_memory_bytes Resident memory size in bytes.
|
|
||||||
# TYPE process_resident_memory_bytes gauge
|
|
||||||
process_resident_memory_bytes 2.5296896e+07
|
|
||||||
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
|
|
||||||
# TYPE process_start_time_seconds gauge
|
|
||||||
process_start_time_seconds 1.494177893e+09
|
|
||||||
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
|
|
||||||
# TYPE process_virtual_memory_bytes gauge
|
|
||||||
process_virtual_memory_bytes 4.23243776e+08
|
|
||||||
```
|
|
|
@ -1,11 +1,13 @@
|
||||||
Drone comes with built-in support for Bitbucket Cloud. To enable Bitbucket Cloud you should configure the Drone container using the following environment variables:
|
# Bitbucket
|
||||||
|
|
||||||
|
Woodpecker comes with built-in support for Bitbucket Cloud. To enable Bitbucket Cloud you should configure the Woodpecker container using the following environment variables:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
version: '2'
|
version: '3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
drone-server:
|
woodpecker-server:
|
||||||
image: drone/drone:{{% version %}}
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
ports:
|
ports:
|
||||||
- 80:8000
|
- 80:8000
|
||||||
- 9000
|
- 9000
|
||||||
|
@ -20,19 +22,19 @@ services:
|
||||||
+ - DRONE_BITBUCKET_SECRET=30f5064039e6b359e075
|
+ - DRONE_BITBUCKET_SECRET=30f5064039e6b359e075
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
|
||||||
drone-agent:
|
woodpecker-agent:
|
||||||
image: drone/agent:{{% version %}}
|
image: laszlocloud/woodpecker-agent:v0.9.0
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- drone-server
|
- woodpecker-server
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
environment:
|
environment:
|
||||||
- DRONE_SERVER=drone-server:9000
|
- DRONE_SERVER=woodpecker-server:9000
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
```
|
```
|
||||||
|
|
||||||
# Configuration
|
## Configuration
|
||||||
|
|
||||||
This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations.
|
This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations.
|
||||||
|
|
||||||
|
@ -45,7 +47,7 @@ DRONE_BITBUCKET_CLIENT
|
||||||
DRONE_BITBUCKET_SECRET
|
DRONE_BITBUCKET_SECRET
|
||||||
: Bitbucket oauth2 client secret
|
: Bitbucket oauth2 client secret
|
||||||
|
|
||||||
# Registration
|
## Registration
|
||||||
|
|
||||||
You must register your application with Bitbucket in order to generate a client and secret. Navigate to your account settings and choose OAuth from the menu, and click Add Consumer.
|
You must register your application with Bitbucket in order to generate a client and secret. Navigate to your account settings and choose OAuth from the menu, and click Add Consumer.
|
||||||
|
|
||||||
|
@ -65,6 +67,6 @@ Repositories:Read
|
||||||
Webhooks:Read and Write
|
Webhooks:Read and Write
|
||||||
```
|
```
|
||||||
|
|
||||||
# Missing Features
|
## Missing Features
|
||||||
|
|
||||||
Merge requests are not currently supported. We are interested in patches to include this functionality. If you are interested in contributing to Drone and submitting a patch please [contact us](https://discourse.drone.io).
|
Merge requests are not currently supported. We are interested in patches to include this functionality. If you are interested in contributing to Woodpecker and submitting a patch please [contact us](https://discourse.drone.io).
|
|
@ -1,11 +1,13 @@
|
||||||
Drone comes with experimental support for Bitbucket Server, formerly known as Atlassian Stash. To enable Bitbucket Server you should configure the Drone container using the following environment variables:
|
# Bitbucket Server
|
||||||
|
|
||||||
|
Woodpecker comes with experimental support for Bitbucket Server, formerly known as Atlassian Stash. To enable Bitbucket Server you should configure the Woodpecker container using the following environment variables:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
version: '2'
|
version: '3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
drone-server:
|
woodpecker-server:
|
||||||
image: drone/drone:{{% version %}}
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
ports:
|
ports:
|
||||||
- 80:8000
|
- 80:8000
|
||||||
- 9000
|
- 9000
|
||||||
|
@ -25,19 +27,19 @@ services:
|
||||||
volumes:
|
volumes:
|
||||||
+ - /path/to/key.pem:/path/to/key.pem
|
+ - /path/to/key.pem:/path/to/key.pem
|
||||||
|
|
||||||
drone-agent:
|
woodpecker-agent:
|
||||||
image: drone/agent:{{% version %}}
|
image: laszlocloud/woodpecker-agent:v0.9.0
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- drone-server
|
- woodpecker-server
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
environment:
|
environment:
|
||||||
- DRONE_SERVER=drone-server:9000
|
- DRONE_SERVER=woodpecker-server:9000
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
```
|
```
|
||||||
|
|
||||||
# Private Key File
|
## Private Key File
|
||||||
|
|
||||||
The OAuth process in Bitbucket server requires a private and a public RSA certificate. This is how you create the private RSA certificate.
|
The OAuth process in Bitbucket server requires a private and a public RSA certificate. This is how you create the private RSA certificate.
|
||||||
|
|
||||||
|
@ -51,16 +53,16 @@ This stores the private RSA certificate in `key.pem`. The next command generates
|
||||||
openssl rsa -in /etc/bitbucket/key.pem -pubout >> /etc/bitbucket/key.pub
|
openssl rsa -in /etc/bitbucket/key.pem -pubout >> /etc/bitbucket/key.pub
|
||||||
```
|
```
|
||||||
|
|
||||||
Please note that the private key file can be mounted into your Drone conatiner at runtime or as an environment variable
|
Please note that the private key file can be mounted into your Woodpecker conatiner at runtime or as an environment variable
|
||||||
|
|
||||||
Private key file mounted into your Drone container at runtime as a volume.
|
Private key file mounted into your Woodpecker container at runtime as a volume.
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
version: '2'
|
version: '2'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
drone-server:
|
woodpecker-server:
|
||||||
image: drone/drone:{{% version %}}
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
environment:
|
environment:
|
||||||
- DRONE_OPEN=true
|
- DRONE_OPEN=true
|
||||||
- DRONE_HOST=${DRONE_HOST}
|
- DRONE_HOST=${DRONE_HOST}
|
||||||
|
@ -78,11 +80,11 @@ services:
|
||||||
Private key as environment variable
|
Private key as environment variable
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
version: '2'
|
version: '3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
drone-server:
|
woodpecker-server:
|
||||||
image: drone/drone:{{% version %}}
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
environment:
|
environment:
|
||||||
- DRONE_OPEN=true
|
- DRONE_OPEN=true
|
||||||
- DRONE_HOST=${DRONE_HOST}
|
- DRONE_HOST=${DRONE_HOST}
|
||||||
|
@ -95,18 +97,18 @@ services:
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
```
|
```
|
||||||
|
|
||||||
# Service Account
|
## Service Account
|
||||||
|
|
||||||
Drone uses `git+https` to clone repositories, however, Bitbucket Server does not currently support cloning repositories with oauth token. To work around this limitation, you must create a service account and provide the username and password to Drone. This service account will be used to authenticate and clone private repositories.
|
Woodpecker uses `git+https` to clone repositories, however, Bitbucket Server does not currently support cloning repositories with oauth token. To work around this limitation, you must create a service account and provide the username and password to Woodpecker. This service account will be used to authenticate and clone private repositories.
|
||||||
|
|
||||||
# Registration
|
## Registration
|
||||||
|
|
||||||
You must register your application with Bitbucket Server in order to generate a consumer key. Navigate to your account settings and choose Applications from the menu, and click Register new application. Now copy & paste the text value from `/etc/bitbucket/key.pub` into the `Public Key` in the incoming link part of the application registration.
|
You must register your application with Bitbucket Server in order to generate a consumer key. Navigate to your account settings and choose Applications from the menu, and click Register new application. Now copy & paste the text value from `/etc/bitbucket/key.pub` into the `Public Key` in the incoming link part of the application registration.
|
||||||
|
|
||||||
Please use http://drone.mycompany.com/authorize as the Authorization callback URL.
|
Please use http://drone.mycompany.com/authorize as the Authorization callback URL.
|
||||||
|
|
||||||
|
|
||||||
# Configuration
|
## Configuration
|
||||||
|
|
||||||
This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations.
|
This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations.
|
||||||
|
|
49
docs/docs/administration/database.md
Normal file
49
docs/docs/administration/database.md
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
# Databases
|
||||||
|
|
||||||
|
This guide provides instructions for using alternate storage engines. Please note this is optional. The default storage engine is an embedded SQLite database which requires zero installation or configuration.
|
||||||
|
|
||||||
|
## Configure MySQL
|
||||||
|
|
||||||
|
The below example demonstrates mysql database configuration. See the official driver [documentation](https://github.com/go-sql-driver/mysql#dsn-data-source-name) for configuration options and examples.
|
||||||
|
|
||||||
|
```diff
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
woodpecker-server:
|
||||||
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
|
environment:
|
||||||
|
+ DRONE_DATABASE_DRIVER: mysql
|
||||||
|
+ DRONE_DATABASE_DATASOURCE: root:password@tcp(1.2.3.4:3306)/drone?parseTime=true
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configure Postgres
|
||||||
|
|
||||||
|
The below example demonstrates postgres database configuration. See the official driver [documentation](https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING) for configuration options and examples.
|
||||||
|
|
||||||
|
```diff
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
woodpecker-server:
|
||||||
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
|
environment:
|
||||||
|
+ DRONE_DATABASE_DRIVER: postgres
|
||||||
|
+ DRONE_DATABASE_DATASOURCE: postgres://root:password@1.2.3.4:5432/postgres?sslmode=disable
|
||||||
|
```
|
||||||
|
|
||||||
|
## Database Creation
|
||||||
|
|
||||||
|
Woodpecker does not create your database automatically. If you are using the mysql or postgres driver you will need to manually create your database using `CREATE DATABASE`
|
||||||
|
|
||||||
|
## Database Migration
|
||||||
|
|
||||||
|
Woodpecker automatically handles database migration, including the initial creation of tables and indexes. New versions of Woodpecker will automatically upgrade the database unless otherwise specified in the release notes.
|
||||||
|
|
||||||
|
## Database Backups
|
||||||
|
|
||||||
|
Woodpecker does not perform database backups. This should be handled by separate third party tools provided by your database vendor of choice.
|
||||||
|
|
||||||
|
## Database Archiving
|
||||||
|
|
||||||
|
Woodpecker does not perform data archival; it considered out-of-scope for the project. Woodpecker is rather conservative with the amount of data it stores, however, you should expect the database logs to grow the size of your database considerably.
|
|
@ -1,11 +1,13 @@
|
||||||
Drone comes with built-in support for GitHub and GitHub Enterprise. To enable GitHub you should configure the Drone container using the following environment variables:
|
# Github
|
||||||
|
|
||||||
|
Woodpecker comes with built-in support for GitHub and GitHub Enterprise. To enable GitHub you should configure the Woodpecker container using the following environment variables:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
version: '2'
|
version: '3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
drone-server:
|
woodpecker-server:
|
||||||
image: drone/drone:{{% version %}}
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
ports:
|
ports:
|
||||||
- 80:8000
|
- 80:8000
|
||||||
- 9000
|
- 9000
|
||||||
|
@ -20,19 +22,19 @@ services:
|
||||||
+ - DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
+ - DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
|
||||||
drone-agent:
|
woodpecker-agent:
|
||||||
image: drone/agent:{{% version %}}
|
image: laszlocloud/woodpecker-agent:v0.9.0
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- drone-server
|
- woodpecker-server
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
environment:
|
environment:
|
||||||
- DRONE_SERVER=drone-server:9000
|
- DRONE_SERVER=woodpecker-server:9000
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
```
|
```
|
||||||
|
|
||||||
# Registration
|
## Registration
|
||||||
|
|
||||||
Register your application with GitHub to create your client id and secret. It is very import the authorization callback URL matches your http(s) scheme and hostname exactly with `<scheme>://<host>/authorize` as the path.
|
Register your application with GitHub to create your client id and secret. It is very import the authorization callback URL matches your http(s) scheme and hostname exactly with `<scheme>://<host>/authorize` as the path.
|
||||||
|
|
||||||
|
@ -40,7 +42,7 @@ Please use this screenshot for reference:
|
||||||
|
|
||||||
![github oauth setup](github_oauth.png)
|
![github oauth setup](github_oauth.png)
|
||||||
|
|
||||||
# Configuration
|
## Configuration
|
||||||
|
|
||||||
This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations.
|
This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations.
|
||||||
|
|
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 154 KiB |
|
@ -1,11 +1,13 @@
|
||||||
Drone comes with built-in support for the GitLab version 8.2 and higher. To enable GitLab you should configure the Drone container using the following environment variables:
|
# Gitlab
|
||||||
|
|
||||||
|
Woodpecker comes with built-in support for the GitLab version 8.2 and higher. To enable GitLab you should configure the Woodpecker container using the following environment variables:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
version: '2'
|
version: '2'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
drone-server:
|
woodpecker-server:
|
||||||
image: drone/drone:{{% version %}}
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
ports:
|
ports:
|
||||||
- 80:8000
|
- 80:8000
|
||||||
- 9000
|
- 9000
|
||||||
|
@ -19,19 +21,19 @@ services:
|
||||||
+ - DRONE_GITLAB_URL=http://gitlab.mycompany.com
|
+ - DRONE_GITLAB_URL=http://gitlab.mycompany.com
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
|
||||||
drone-agent:
|
woodpecker-agent:
|
||||||
image: drone/agent:{{% version %}}
|
image: laszlocloud/woodpecker-agent:v0.9.0
|
||||||
restart: always
|
restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- drone-server
|
- woodpecker-server
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
environment:
|
environment:
|
||||||
- DRONE_SERVER=drone-server:9000
|
- DRONE_SERVER=woodpecker-server:9000
|
||||||
- DRONE_SECRET=${DRONE_SECRET}
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
```
|
```
|
||||||
|
|
||||||
# Configuration
|
## Configuration
|
||||||
|
|
||||||
This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations.
|
This is a full list of configuration options. Please note that many of these options use default configuration values that should work for the majority of installations.
|
||||||
|
|
||||||
|
@ -59,8 +61,8 @@ DRONE_GITLAB_SKIP_VERIFY=false
|
||||||
DRONE_GITLAB_PRIVATE_MODE=false
|
DRONE_GITLAB_PRIVATE_MODE=false
|
||||||
: Set to true if GitLab is running in private mode.
|
: Set to true if GitLab is running in private mode.
|
||||||
|
|
||||||
# Registration
|
## Registration
|
||||||
|
|
||||||
You must register your application with GitLab in order to generate a Client and Secret. Navigate to your account settings and choose Applications from the menu, and click New Application.
|
You must register your application with GitLab in order to generate a Client and Secret. Navigate to your account settings and choose Applications from the menu, and click New Application.
|
||||||
|
|
||||||
Please use `http://drone.mycompany.com/authorize` as the Authorization callback URL. Grant `api` scope to the application.
|
Please use `http://woodpecker.mycompany.com/authorize` as the Authorization callback URL. Grant `api` scope to the application.
|
42
docs/docs/administration/lets-encrypt.md
Normal file
42
docs/docs/administration/lets-encrypt.md
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# Let's Encrypt
|
||||||
|
|
||||||
|
Woodpecker supports automated SSL configuration and updates using Let's Encrypt.
|
||||||
|
|
||||||
|
You can enable Let's Encrypt by making the following modifications to your server configuration:
|
||||||
|
|
||||||
|
```diff
|
||||||
|
services:
|
||||||
|
woodpecker-server:
|
||||||
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
|
ports:
|
||||||
|
+ - 80:80
|
||||||
|
+ - 443:443
|
||||||
|
- 9000:9000
|
||||||
|
volumes:
|
||||||
|
- /var/lib/drone:/var/lib/drone/
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- DRONE_OPEN=true
|
||||||
|
- DRONE_HOST=${DRONE_HOST}
|
||||||
|
- DRONE_GITHUB=true
|
||||||
|
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
||||||
|
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
||||||
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
+ - DRONE_LETS_ENCRYPT=true
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that Woodpecker uses the hostname from the `DRONE_HOST` environment variable when requesting certificates. For example, if `DRONE_HOST=https://foo.com` the certificate is requested for `foo.com`.
|
||||||
|
|
||||||
|
>Once enabled you can visit your website at both the http and the https address
|
||||||
|
|
||||||
|
## Certificate Cache
|
||||||
|
|
||||||
|
Woodpecker writes the certificates to the below directory:
|
||||||
|
|
||||||
|
```
|
||||||
|
/var/lib/drone/golang-autocert
|
||||||
|
```
|
||||||
|
|
||||||
|
## Certificate Updates
|
||||||
|
|
||||||
|
Woodpecker uses the official Go acme library which will handle certificate upgrades. There should be no addition configuration or management required.
|
67
docs/docs/administration/prometheus.md
Normal file
67
docs/docs/administration/prometheus.md
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
# Prometheus
|
||||||
|
|
||||||
|
Woodpecker is compatible with Prometheus and exposes a `/metrics` endpoint. Please note that access to the metrics endpoint is restricted and requires an authorization token with administrative privileges.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
global:
|
||||||
|
scrape_interval: 60s
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'drone'
|
||||||
|
bearer_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||||
|
|
||||||
|
static_configs:
|
||||||
|
- targets: ['woodpecker.domain.com']
|
||||||
|
```
|
||||||
|
|
||||||
|
## Authorization
|
||||||
|
|
||||||
|
An administrator will need to generate a user api token and configure in the prometheus configuration file as a bearer token. Please see the following example:
|
||||||
|
|
||||||
|
```diff
|
||||||
|
global:
|
||||||
|
scrape_interval: 60s
|
||||||
|
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'drone'
|
||||||
|
+ bearer_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||||
|
|
||||||
|
static_configs:
|
||||||
|
- targets: ['woodpecker.domain.com']
|
||||||
|
```
|
||||||
|
|
||||||
|
## Metric Reference
|
||||||
|
|
||||||
|
List of prometheus metrics specific to Woodpecker:
|
||||||
|
|
||||||
|
```
|
||||||
|
# HELP drone_build_count Build count.
|
||||||
|
# TYPE drone_build_count counter
|
||||||
|
drone_build_count{branch="master",pipeline="total",repo="laszlocph/woodpecker",status="success"} 3
|
||||||
|
drone_build_count{branch="mkdocs",pipeline="total",repo="laszlocph/woodpecker",status="success"} 3
|
||||||
|
# HELP drone_build_time Build time.
|
||||||
|
# TYPE drone_build_time gauge
|
||||||
|
drone_build_time{branch="master",pipeline="total",repo="laszlocph/woodpecker",status="success"} 116
|
||||||
|
drone_build_time{branch="mkdocs",pipeline="total",repo="laszlocph/woodpecker",status="success"} 155
|
||||||
|
# HELP drone_build_total_count Total number of builds.
|
||||||
|
# TYPE drone_build_total_count gauge
|
||||||
|
drone_build_total_count 1025
|
||||||
|
# HELP drone_pending_jobs Total number of pending build processes.
|
||||||
|
# TYPE drone_pending_jobs gauge
|
||||||
|
drone_pending_jobs 0
|
||||||
|
# HELP drone_repo_count Total number of repos.
|
||||||
|
# TYPE drone_repo_count gauge
|
||||||
|
drone_repo_count 9
|
||||||
|
# HELP drone_running_jobs Total number of running build processes.
|
||||||
|
# TYPE drone_running_jobs gauge
|
||||||
|
drone_running_jobs 0
|
||||||
|
# HELP drone_user_count Total number of users.
|
||||||
|
# TYPE drone_user_count gauge
|
||||||
|
drone_user_count 1
|
||||||
|
# HELP drone_waiting_jobs Total number of builds waiting on deps.
|
||||||
|
# TYPE drone_waiting_jobs gauge
|
||||||
|
drone_waiting_jobs 0
|
||||||
|
# HELP drone_worker_count Total number of workers.
|
||||||
|
# TYPE drone_worker_count gauge
|
||||||
|
drone_worker_count 4
|
||||||
|
```
|
|
@ -1,11 +1,5 @@
|
||||||
**Table of Contents**
|
## Apache
|
||||||
- [Apache](#apache)
|
This guide provides a brief overview for installing Woodpecker server behind the Apache2 webserver. This is an example configuration:
|
||||||
- [Nginx](#nginx)
|
|
||||||
- [Caddy](#caddy)
|
|
||||||
- [Ngrok](#ngrok)
|
|
||||||
|
|
||||||
# Apache
|
|
||||||
This guide provides a brief overview for installing Drone server behind the Apache2 webserver. This is an example configuration:
|
|
||||||
|
|
||||||
```nohighlight
|
```nohighlight
|
||||||
ProxyPreserveHost On
|
ProxyPreserveHost On
|
||||||
|
@ -34,16 +28,16 @@ ProxyPass / http://127.0.0.1:8000/
|
||||||
ProxyPassReverse / http://127.0.0.1:8000/
|
ProxyPassReverse / http://127.0.0.1:8000/
|
||||||
```
|
```
|
||||||
|
|
||||||
# Nginx
|
## Nginx
|
||||||
|
|
||||||
This guide provides a basic overview for installing Drone server behind the nginx webserver. For more advanced configuration options please consult the official nginx [documentation](https://www.nginx.com/resources/admin-guide/).
|
This guide provides a basic overview for installing Woodpecker server behind the nginx webserver. For more advanced configuration options please consult the official nginx [documentation](https://www.nginx.com/resources/admin-guide/).
|
||||||
|
|
||||||
Example configuration:
|
Example configuration:
|
||||||
|
|
||||||
```nginx
|
```nginx
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name drone.example.com;
|
server_name woodpecker.example.com;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
proxy_set_header X-Forwarded-For $remote_addr;
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
|
@ -65,7 +59,7 @@ You must configure the proxy to set `X-Forwarded` proxy headers:
|
||||||
```diff
|
```diff
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name drone.example.com;
|
server_name woodpecker.example.com;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
+ proxy_set_header X-Forwarded-For $remote_addr;
|
+ proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
|
@ -81,12 +75,12 @@ server {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# Caddy
|
## Caddy
|
||||||
|
|
||||||
This guide provides a brief overview for installing Drone server behind the [Caddy webserver](https://caddyserver.com/). This is an example caddyfile proxy configuration:
|
This guide provides a brief overview for installing Woodpecker server behind the [Caddy webserver](https://caddyserver.com/). This is an example caddyfile proxy configuration:
|
||||||
|
|
||||||
```nohighlight
|
```nohighlight
|
||||||
drone.mycompany.com {
|
woodpecker.mycompany.com {
|
||||||
gzip {
|
gzip {
|
||||||
not /stream/
|
not /stream/
|
||||||
}
|
}
|
||||||
|
@ -99,7 +93,7 @@ drone.mycompany.com {
|
||||||
You must disable gzip compression for streamed data otherwise the live updates won't be instant:
|
You must disable gzip compression for streamed data otherwise the live updates won't be instant:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
drone.mycompany.com {
|
woodpecker.mycompany.com {
|
||||||
+ gzip {
|
+ gzip {
|
||||||
+ not /stream/
|
+ not /stream/
|
||||||
+ }
|
+ }
|
||||||
|
@ -113,7 +107,7 @@ drone.mycompany.com {
|
||||||
You must configure the proxy to enable websocket upgrades:
|
You must configure the proxy to enable websocket upgrades:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
drone.mycompany.com {
|
woodpecker.mycompany.com {
|
||||||
gzip {
|
gzip {
|
||||||
not /stream/
|
not /stream/
|
||||||
}
|
}
|
||||||
|
@ -127,7 +121,7 @@ drone.mycompany.com {
|
||||||
You must configure the proxy to include `X-Forwarded` headers using the `transparent` directive:
|
You must configure the proxy to include `X-Forwarded` headers using the `transparent` directive:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
drone.mycompany.com {
|
woodpecker.mycompany.com {
|
||||||
gzip {
|
gzip {
|
||||||
not /stream/
|
not /stream/
|
||||||
}
|
}
|
||||||
|
@ -138,7 +132,7 @@ drone.mycompany.com {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# Ngrok
|
## Ngrok
|
||||||
After installing [ngrok](https://ngrok.com/), open a new console and run:
|
After installing [ngrok](https://ngrok.com/), open a new console and run:
|
||||||
|
|
||||||
```
|
```
|
|
@ -1,29 +1,31 @@
|
||||||
Drone supports ssl configuration by mounting certificates into your container.
|
# SSL
|
||||||
|
|
||||||
|
Woodpecker supports ssl configuration by mounting certificates into your container.
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
services:
|
services:
|
||||||
drone-server:
|
woodpecker-server:
|
||||||
image: drone/drone:{{% version %}}
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
ports:
|
ports:
|
||||||
+ - 80:80
|
+ - 80:80
|
||||||
+ - 443:443
|
+ - 443:443
|
||||||
- 9000:9000
|
- 9000:9000
|
||||||
volumes:
|
volumes:
|
||||||
- /var/lib/drone:/var/lib/drone/
|
- /var/lib/drone:/var/lib/drone/
|
||||||
+ - /etc/certs/drone.foo.com/server.crt:/etc/certs/drone.foo.com/server.crt
|
+ - /etc/certs/woodpecker.foo.com/server.crt:/etc/certs/woodpecker.foo.com/server.crt
|
||||||
+ - /etc/certs/drone.foo.com/server.key:/etc/certs/drone.foo.com/server.key
|
+ - /etc/certs/woodpecker.foo.com/server.key:/etc/certs/woodpecker.foo.com/server.key
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
+ - DRONE_SERVER_CERT=/etc/certs/drone.foo.com/server.crt
|
+ - DRONE_SERVER_CERT=/etc/certs/woodpecker.foo.com/server.crt
|
||||||
+ - DRONE_SERVER_KEY=/etc/certs/drone.foo.com/server.key
|
+ - DRONE_SERVER_KEY=/etc/certs/woodpecker.foo.com/server.key
|
||||||
```
|
```
|
||||||
|
|
||||||
Update your configuration to expose the following ports:
|
Update your configuration to expose the following ports:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
services:
|
services:
|
||||||
drone-server:
|
woodpecker-server:
|
||||||
image: drone/drone:{{% version %}}
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
ports:
|
ports:
|
||||||
+ - 80:80
|
+ - 80:80
|
||||||
+ - 443:443
|
+ - 443:443
|
||||||
|
@ -34,44 +36,44 @@ Update your configuration to mount your certificate and key:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
services:
|
services:
|
||||||
drone-server:
|
woodpecker-server:
|
||||||
image: drone/drone:{{% version %}}
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
ports:
|
ports:
|
||||||
- 80:80
|
- 80:80
|
||||||
- 443:443
|
- 443:443
|
||||||
- 9000:9000
|
- 9000:9000
|
||||||
volumes:
|
volumes:
|
||||||
- /var/lib/drone:/var/lib/drone/
|
- /var/lib/drone:/var/lib/drone/
|
||||||
+ - /etc/certs/drone.foo.com/server.crt:/etc/certs/drone.foo.com/server.crt
|
+ - /etc/certs/woodpecker.foo.com/server.crt:/etc/certs/woodpecker.foo.com/server.crt
|
||||||
+ - /etc/certs/drone.foo.com/server.key:/etc/certs/drone.foo.com/server.key
|
+ - /etc/certs/woodpecker.foo.com/server.key:/etc/certs/woodpecker.foo.com/server.key
|
||||||
```
|
```
|
||||||
|
|
||||||
Update your configuration to provide the paths of your certificate and key:
|
Update your configuration to provide the paths of your certificate and key:
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
services:
|
services:
|
||||||
drone-server:
|
woodpecker-server:
|
||||||
image: drone/drone:{{% version %}}
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
ports:
|
ports:
|
||||||
- 80:80
|
- 80:80
|
||||||
- 443:443
|
- 443:443
|
||||||
- 9000:9000
|
- 9000:9000
|
||||||
volumes:
|
volumes:
|
||||||
- /var/lib/drone:/var/lib/drone/
|
- /var/lib/drone:/var/lib/drone/
|
||||||
- /etc/certs/drone.foo.com/server.crt:/etc/certs/drone.foo.com/server.crt
|
- /etc/certs/woodpecker.foo.com/server.crt:/etc/certs/woodpecker.foo.com/server.crt
|
||||||
- /etc/certs/drone.foo.com/server.key:/etc/certs/drone.foo.com/server.key
|
- /etc/certs/woodpecker.foo.com/server.key:/etc/certs/woodpecker.foo.com/server.key
|
||||||
restart: always
|
restart: always
|
||||||
environment:
|
environment:
|
||||||
+ - DRONE_SERVER_CERT=/etc/certs/drone.foo.com/server.crt
|
+ - DRONE_SERVER_CERT=/etc/certs/woodpecker.foo.com/server.crt
|
||||||
+ - DRONE_SERVER_KEY=/etc/certs/drone.foo.com/server.key
|
+ - DRONE_SERVER_KEY=/etc/certs/woodpecker.foo.com/server.key
|
||||||
```
|
```
|
||||||
|
|
||||||
# Certificate Chain
|
## Certificate Chain
|
||||||
|
|
||||||
The most common problem encountered is providing a certificate file without the intermediate chain.
|
The most common problem encountered is providing a certificate file without the intermediate chain.
|
||||||
|
|
||||||
> LoadX509KeyPair reads and parses a public/private key pair from a pair of files. The files must contain PEM encoded data. The certificate file may contain intermediate certificates following the leaf certificate to form a certificate chain.
|
> LoadX509KeyPair reads and parses a public/private key pair from a pair of files. The files must contain PEM encoded data. The certificate file may contain intermediate certificates following the leaf certificate to form a certificate chain.
|
||||||
|
|
||||||
# Certificate Errors
|
## Certificate Errors
|
||||||
|
|
||||||
SSL support is provided using the [ListenAndServeTLS](https://golang.org/pkg/net/http/#ListenAndServeTLS) function from the Go standard library. If you receive certificate errors or warnings please examine your configuration more closely. Please do not create issues claiming SSL is broken.
|
SSL support is provided using the [ListenAndServeTLS](https://golang.org/pkg/net/http/#ListenAndServeTLS) function from the Go standard library. If you receive certificate errors or warnings please examine your configuration more closely.
|
|
@ -21,7 +21,7 @@ pipeline:
|
||||||
- echo "Testing.."
|
- echo "Testing.."
|
||||||
```
|
```
|
||||||
|
|
||||||
## Build steps are containers
|
### Build steps are containers
|
||||||
|
|
||||||
- Define any Docker image as context
|
- Define any Docker image as context
|
||||||
- Install the needed tools in custom Docker images, use them as context
|
- Install the needed tools in custom Docker images, use them as context
|
||||||
|
@ -35,7 +35,7 @@ pipeline:
|
||||||
- aws help
|
- aws help
|
||||||
```
|
```
|
||||||
|
|
||||||
## File changes are incremental
|
### File changes are incremental
|
||||||
|
|
||||||
- Woodpecker clones the source code in the beginning pipeline
|
- Woodpecker clones the source code in the beginning pipeline
|
||||||
- Changes to files are persisted through steps as the same volume is mounted to all steps
|
- Changes to files are persisted through steps as the same volume is mounted to all steps
|
||||||
|
|
192
docs/docs/server-setup.md
Normal file
192
docs/docs/server-setup.md
Normal file
|
@ -0,0 +1,192 @@
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
The below [docker-compose](https://docs.docker.com/compose/) configuration can be used to start Woodpecker with a single agent.
|
||||||
|
|
||||||
|
It relies on a number of environment variables that you must set before running `docker-compose up`. The variables are described below.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# docker-compose.yml
|
||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
woodpecker-server:
|
||||||
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
|
ports:
|
||||||
|
- 80:8000
|
||||||
|
- 9000
|
||||||
|
volumes:
|
||||||
|
- woodpecker-server-data:/var/lib/drone/
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- DRONE_OPEN=true
|
||||||
|
- DRONE_HOST=${DRONE_HOST}
|
||||||
|
- DRONE_GITHUB=true
|
||||||
|
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
||||||
|
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
||||||
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
|
||||||
|
woodpecker-agent:
|
||||||
|
image: laszlocloud/woodpecker-agent:v0.9.0
|
||||||
|
command: agent
|
||||||
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- woodpecker-server
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
environment:
|
||||||
|
- DRONE_SERVER=woodpecker-server:9000
|
||||||
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
woodpecker-server-data:
|
||||||
|
```
|
||||||
|
|
||||||
|
> Each agent is able to process one build by default.
|
||||||
|
>
|
||||||
|
> If you have 4 agents installed and connected to the Drone server, your system will process 4 builds in parallel.
|
||||||
|
>
|
||||||
|
> You can add more agents to increase the number of parallel builds or set the agent's `DRONE_MAX_PROCS=1` environment variable to increase the number of parallel builds for that agent.
|
||||||
|
|
||||||
|
|
||||||
|
Woodpecker needs to know its own address.
|
||||||
|
|
||||||
|
You must therefore provide the address in `<scheme>://<hostname>` format. Please omit trailing slashes.
|
||||||
|
|
||||||
|
```diff
|
||||||
|
services:
|
||||||
|
woodpecker-server:
|
||||||
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
|
environment:
|
||||||
|
- DRONE_OPEN=true
|
||||||
|
+ - DRONE_HOST=${DRONE_HOST}
|
||||||
|
- DRONE_GITHUB=true
|
||||||
|
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
||||||
|
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
||||||
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
```
|
||||||
|
|
||||||
|
Agents require access to the host machine's Docker daemon.
|
||||||
|
|
||||||
|
```diff
|
||||||
|
services:
|
||||||
|
woodpecker-agent:
|
||||||
|
image: laszlocloud/woodpecker-agent:v0.9.0
|
||||||
|
command: agent
|
||||||
|
restart: always
|
||||||
|
depends_on: [ woodpecker-server ]
|
||||||
|
+ volumes:
|
||||||
|
+ - /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
```
|
||||||
|
|
||||||
|
Agents require the server address for agent-to-server communication.
|
||||||
|
|
||||||
|
```diff
|
||||||
|
services:
|
||||||
|
woodpecker-agent:
|
||||||
|
image: laszlocloud/woodpecker-agent:v0.9.0
|
||||||
|
command: agent
|
||||||
|
restart: always
|
||||||
|
depends_on: [ woodpecker-server ]
|
||||||
|
volumes:
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
environment:
|
||||||
|
+ - DRONE_SERVER=woodpecker-server:9000
|
||||||
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
```
|
||||||
|
|
||||||
|
The server and agents use a shared secret to authenticate communication.
|
||||||
|
|
||||||
|
This should be a random string of your choosing and should be kept private. You can generate such string with `openssl rand -hex 32`.
|
||||||
|
|
||||||
|
```diff
|
||||||
|
services:
|
||||||
|
woodpecker-server:
|
||||||
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
|
environment:
|
||||||
|
- DRONE_OPEN=true
|
||||||
|
- DRONE_HOST=${DRONE_HOST}
|
||||||
|
- DRONE_GITHUB=true
|
||||||
|
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
||||||
|
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
||||||
|
+ - DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
woodpecker-agent:
|
||||||
|
image: laszlocloud/woodpecker-agent:v0.9.0
|
||||||
|
environment:
|
||||||
|
- DRONE_SERVER=woodpecker-server:9000
|
||||||
|
- DRONE_DEBUG=true
|
||||||
|
+ - DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
```
|
||||||
|
|
||||||
|
Registration is closed by default.
|
||||||
|
|
||||||
|
This example enables open registration for users that are members of approved GitHub organizations.
|
||||||
|
|
||||||
|
```diff
|
||||||
|
services:
|
||||||
|
woodpecker-server:
|
||||||
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
|
environment:
|
||||||
|
+ - DRONE_OPEN=true
|
||||||
|
+ - DRONE_ORGS=dolores,dogpatch
|
||||||
|
- DRONE_HOST=${DRONE_HOST}
|
||||||
|
- DRONE_GITHUB=true
|
||||||
|
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
||||||
|
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
||||||
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
```
|
||||||
|
|
||||||
|
Administrators should also be enumerated in your configuration.
|
||||||
|
|
||||||
|
```diff
|
||||||
|
services:
|
||||||
|
woodpecker-server:
|
||||||
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
|
environment:
|
||||||
|
- DRONE_OPEN=true
|
||||||
|
- DRONE_ORGS=dolores,dogpatch
|
||||||
|
+ - DRONE_ADMIN=johnsmith,janedoe
|
||||||
|
- DRONE_HOST=${DRONE_HOST}
|
||||||
|
- DRONE_GITHUB=true
|
||||||
|
- DRONE_GITHUB_CLIENT=${DRONE_GITHUB_CLIENT}
|
||||||
|
- DRONE_GITHUB_SECRET=${DRONE_GITHUB_SECRET}
|
||||||
|
- DRONE_SECRET=${DRONE_SECRET}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Authentication
|
||||||
|
|
||||||
|
Authentication is done using OAuth and is delegated to one of multiple version control providers, configured using environment variables. The example above demonstrates basic GitHub integration.
|
||||||
|
|
||||||
|
See the complete reference for [Github](/administration/github), [Bitbucket Cloud](/administration/bitbucket), [Bitbucket Server](/administration/bitbucket_server) and [Gitlab](/administration/gitlab).
|
||||||
|
|
||||||
|
## Database
|
||||||
|
|
||||||
|
Woodpecker mounts a [data volume](https://docs.docker.com/storage/volumes/#create-and-manage-volumes) to persist the sqlite database.
|
||||||
|
|
||||||
|
See the [database settings](/administration/database) page to configure Postgresql or MySQL as database.
|
||||||
|
|
||||||
|
```diff
|
||||||
|
services:
|
||||||
|
woodpecker-server:
|
||||||
|
image: laszlocloud/woodpecker-server:v0.9.0
|
||||||
|
ports:
|
||||||
|
- 80:8000
|
||||||
|
- 9000
|
||||||
|
+ volumes:
|
||||||
|
+ - woodpecker-server-data:/var/lib/drone/
|
||||||
|
restart: always
|
||||||
|
```
|
||||||
|
|
||||||
|
## SSL
|
||||||
|
|
||||||
|
Woodpecker supports ssl configuration by mounting certificates into your container. See the [SSL guide](/administration/ssl).
|
||||||
|
|
||||||
|
Automated [Lets Encrypt](/administration/lets-encrypt) is also supported.
|
||||||
|
|
||||||
|
## Metrics
|
||||||
|
|
||||||
|
A [Prometheus endpoint](/administration/prometheus) is exposed.
|
||||||
|
|
||||||
|
## Behind a proxy
|
||||||
|
|
||||||
|
See the [proxy guide](/administration/proxy) if you want to see a setup behind Apache, Nginx, Caddy or ngrok.
|
|
@ -1,9 +1,26 @@
|
||||||
site_name: Woodpecker
|
site_name: Woodpecker
|
||||||
|
repo_name: 'laszlocph/woodpecker'
|
||||||
|
repo_url: 'https://github.com/laszlocph/woodpecker'
|
||||||
|
copyright: 'Copyright © 2019 Laszlo Fogas'
|
||||||
|
nav:
|
||||||
|
- Home: index.md
|
||||||
|
- Server setup: server-setup.md
|
||||||
theme:
|
theme:
|
||||||
name: 'material'
|
name: 'material'
|
||||||
logo: 'images/logo.svg'
|
logo: 'images/favicon.svg'
|
||||||
favicon: 'images/favicon.svg'
|
favicon: 'images/favicon.svg'
|
||||||
|
palette:
|
||||||
|
primary: 'green'
|
||||||
|
accent: 'red'
|
||||||
markdown_extensions:
|
markdown_extensions:
|
||||||
- admonition
|
- admonition
|
||||||
- codehilite:
|
- codehilite:
|
||||||
linenums: true
|
linenums: true
|
||||||
|
- pymdownx.inlinehilite
|
||||||
|
|
||||||
|
extra:
|
||||||
|
social:
|
||||||
|
- type: globe
|
||||||
|
link: http://woodpecker.laszlo.cloud
|
||||||
|
- type: twitter
|
||||||
|
link: https://twitter.com/laszlocph
|
||||||
|
|
|
@ -1,77 +1,20 @@
|
||||||
apache-libcloud==2.3.0
|
|
||||||
asn1crypto==0.24.0
|
|
||||||
awscli==1.16.89
|
|
||||||
backports-abc==0.5
|
backports-abc==0.5
|
||||||
backports.functools-lru-cache==1.5
|
|
||||||
backports.ssl-match-hostname==3.5.0.1
|
|
||||||
beautifulsoup4==4.8.0
|
|
||||||
boto==2.49.0
|
|
||||||
botocore==1.12.79
|
|
||||||
cachetools==2.0.1
|
|
||||||
certifi==2018.4.16
|
|
||||||
chardet==3.0.4
|
|
||||||
Click==7.0
|
Click==7.0
|
||||||
colorama==0.3.9
|
futures==3.3.0
|
||||||
crcmod==1.7
|
|
||||||
cryptography==2.6.1
|
|
||||||
docker-py==1.10.6
|
|
||||||
docker-pycreds==0.2.2
|
|
||||||
docutils==0.14
|
|
||||||
enum34==1.1.6
|
|
||||||
fluendo-eula==0.6
|
|
||||||
futures==3.2.0
|
|
||||||
google-api-core==1.2.1
|
|
||||||
google-api-python-client==1.6.7
|
|
||||||
google-auth==1.4.1
|
|
||||||
google-auth-httplib2==0.0.3
|
|
||||||
google-cloud-monitoring==0.29.0
|
|
||||||
google-compute-engine==20190801.0
|
|
||||||
googleapis-common-protos==1.5.3
|
|
||||||
grpcio==1.12.1
|
|
||||||
gWakeOnLan==0.5.1
|
|
||||||
html5lib==1.0.1
|
|
||||||
htmlmin==0.1.12
|
htmlmin==0.1.12
|
||||||
idna==2.6
|
|
||||||
ipaddress==1.0.17
|
|
||||||
Jinja2==2.10.3
|
Jinja2==2.10.3
|
||||||
jsmin==2.2.2
|
jsmin==2.2.2
|
||||||
livereload==2.6.1
|
livereload==2.6.1
|
||||||
lxml==4.4.1
|
|
||||||
Markdown==3.1.1
|
Markdown==3.1.1
|
||||||
MarkupSafe==1.1.1
|
MarkupSafe==1.1.1
|
||||||
mkdocs==1.0.4
|
mkdocs==1.0.4
|
||||||
|
mkdocs-markdownextradata-plugin==0.1.1
|
||||||
mkdocs-material==4.4.3
|
mkdocs-material==4.4.3
|
||||||
mkdocs-minify-plugin==0.2.1
|
mkdocs-minify-plugin==0.2.1
|
||||||
numpy==1.16.2
|
|
||||||
oauth2client==4.1.2
|
|
||||||
pep562==1.0
|
pep562==1.0
|
||||||
protobuf==3.6.0
|
|
||||||
pyasn1==0.4.2
|
|
||||||
pyasn1-modules==0.2.1
|
|
||||||
pycairo==1.16.2
|
|
||||||
pydot==1.4.1
|
|
||||||
pydot-ng==1.0.0
|
|
||||||
Pygments==2.4.2
|
Pygments==2.4.2
|
||||||
pymdown-extensions==6.1
|
pymdown-extensions==6.1
|
||||||
pyOpenSSL==19.0.0
|
|
||||||
pyparsing==2.2.0
|
|
||||||
python-apt==1.9.0+ubuntu1
|
|
||||||
python-dateutil==2.7.5
|
|
||||||
python-distutils-extra==2.39
|
|
||||||
pytz==2018.4
|
|
||||||
PyYAML==5.1.2
|
PyYAML==5.1.2
|
||||||
requests==2.18.4
|
|
||||||
rsa==3.4.2
|
|
||||||
s3transfer==0.1.13
|
|
||||||
scour==0.37
|
|
||||||
singledispatch==3.4.0.3
|
singledispatch==3.4.0.3
|
||||||
six==1.12.0
|
six==1.13.0
|
||||||
soupsieve==1.9.2
|
|
||||||
tornado==5.1.1
|
tornado==5.1.1
|
||||||
unity-lens-photos==1.0
|
|
||||||
uritemplate==3.0.0
|
|
||||||
urllib3==1.22
|
|
||||||
vboxapi==1.0
|
|
||||||
virtualenv==15.2.0
|
|
||||||
webencodings==0.5.1
|
|
||||||
websocket-client==0.47.0
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ type website struct {
|
||||||
func (w *website) Register(mux *httptreemux.ContextMux) {
|
func (w *website) Register(mux *httptreemux.ContextMux) {
|
||||||
h := http.FileServer(w.fs)
|
h := http.FileServer(w.fs)
|
||||||
h = setupCache(h)
|
h = setupCache(h)
|
||||||
mux.Handler("GET", "/favicon.png", h)
|
mux.Handler("GET", "/favicon.svg", h)
|
||||||
mux.Handler("GET", "/static/*filepath", h)
|
mux.Handler("GET", "/static/*filepath", h)
|
||||||
mux.NotFoundHandler = w.handleIndex
|
mux.NotFoundHandler = w.handleIndex
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.3 KiB |
1
web/src/public/favicon.svg
Normal file
1
web/src/public/favicon.svg
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="22" height="22"><path d="M1.263 2.744C2.41 3.832 2.845 4.932 4.118 5.08l.036.007c-.588.606-1.09 1.402-1.443 2.423-.38 1.096-.488 2.285-.614 3.659-.19 2.046-.401 4.364-1.556 7.269-2.486 6.258-1.12 11.63.332 17.317.664 2.604 1.348 5.297 1.642 8.107a.857.857 0 00.633.744.86.86 0 00.922-.323c.227-.313.524-.797.86-1.424.84 3.323 1.355 6.13 1.783 8.697a.866.866 0 001.517.41c2.88-3.463 3.763-8.636 2.184-12.674.459-2.433 1.402-4.45 2.398-6.583.536-1.15 1.08-2.318 1.55-3.566.228-.084.569-.314.79-.441l1.707-.981-.256 1.052a.864.864 0 001.678.408l.68-2.858 1.285-2.95a.863.863 0 10-1.581-.687l-1.152 2.669-2.383 1.372a18.97 18.97 0 00.508-2.981c.432-4.86-.718-9.074-3.066-11.266-.163-.157-.208-.281-.247-.26.095-.12.249-.26.358-.374 2.283-1.693 6.047-.147 8.319.75.589.232.876-.337.316-.67-1.95-1.153-5.948-4.196-8.188-6.193-.313-.275-.527-.607-.89-.913C9.825.555 4.072 3.057 1.355 2.569c-.102-.018-.166.103-.092.175m10.98 5.899c-.06 1.242-.603 1.8-1 2.208-.217.224-.426.436-.524.738-.236.714.008 1.51.66 2.143 1.974 1.84 2.925 5.527 2.538 9.86-.291 3.288-1.448 5.763-2.671 8.385-1.031 2.207-2.096 4.489-2.577 7.259a.853.853 0 00.056.48c1.02 2.434 1.135 6.197-.672 9.46a96.586 96.586 0 00-1.97-8.711c1.964-4.488 4.203-11.75 2.919-17.668-.325-1.497-1.304-3.276-2.387-4.207-.208-.18-.402-.237-.495-.167-.084.06-.151.238-.062.444.55 1.266.879 2.599 1.226 4.276 1.125 5.443-.956 12.49-2.835 16.782l-.116.259-.457.982c-.356-2.014-.85-3.95-1.33-5.84-1.38-5.406-2.68-10.515-.401-16.254 1.247-3.137 1.483-5.692 1.672-7.746.116-1.263.216-2.355.526-3.252.905-2.605 3.062-3.178 4.744-2.852 1.632.316 3.24 1.593 3.156 3.42zm-2.868.62a1.177 1.177 0 10.736-2.236 1.178 1.178 0 10-.736 2.237z"/></svg>
|
After Width: | Height: | Size: 1.7 KiB |
|
@ -87,7 +87,7 @@ module.exports = {
|
||||||
filename: "static/vendor.[hash].js"
|
filename: "static/vendor.[hash].js"
|
||||||
}),
|
}),
|
||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
favicon: "src/public/favicon.png",
|
favicon: "src/public/favicon.svg",
|
||||||
template: "src/index.html"
|
template: "src/index.html"
|
||||||
})
|
})
|
||||||
].concat(
|
].concat(
|
||||||
|
|
Loading…
Reference in a new issue