chore: readme.adoc
chore: readme.adoc chore: test chore: test2 chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc WIP chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc chore: readme.adoc WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation WIP: documentation fix: documentation WIP: documentation WIP: documentationpull/1/head 0.2
parent
4cc983c622
commit
3081492081
|
|
@ -106,3 +106,4 @@ docker/target/*.jar
|
||||||
# version-lock as it is only for specific build
|
# version-lock as it is only for specific build
|
||||||
version-lock.sh
|
version-lock.sh
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
.pnpm-store
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ steps:
|
||||||
group: lint
|
group: lint
|
||||||
image: *java_image
|
image: *java_image
|
||||||
commands:
|
commands:
|
||||||
- gradle spotlessCheck --no-daemon
|
- gradle --no-daemon spotlessCheck
|
||||||
"lint:dockerfile":
|
"lint:dockerfile":
|
||||||
group: lint
|
group: lint
|
||||||
image: ghcr.io/hadolint/hadolint:latest-debian
|
image: ghcr.io/hadolint/hadolint:latest-debian
|
||||||
|
|
|
||||||
|
|
@ -6,19 +6,43 @@ variables:
|
||||||
clone:
|
clone:
|
||||||
git:
|
git:
|
||||||
image: woodpeckerci/plugin-git
|
image: woodpeckerci/plugin-git
|
||||||
|
partial: false
|
||||||
settings:
|
settings:
|
||||||
skip_verify: true
|
skip_verify: true
|
||||||
steps:
|
steps:
|
||||||
"build:ui-bundle":
|
"build:ui-bundle":
|
||||||
image: *frontend_image
|
image: *frontend_image
|
||||||
commands:
|
commands:
|
||||||
- ls
|
- npm install
|
||||||
- npm ci
|
- npx gulp build
|
||||||
- npx gulp bundle:pack
|
- npx gulp bundle:pack
|
||||||
directory: documentation/layout/oc
|
directory: documentation/layouts/oc
|
||||||
"build:documentation":
|
"build:documentation":
|
||||||
image: *frontend_image
|
image: *frontend_image
|
||||||
commands:
|
commands:
|
||||||
|
- unset HTTP_RPOXY # woodpecker sets empty proxy variables, but if present, antora expects valid values, empty is not valid
|
||||||
|
- unset http_proxy
|
||||||
|
- unset HTTPS_PROXY
|
||||||
|
- unset https_proxy
|
||||||
- pnpm install --frozen-lockfile
|
- pnpm install --frozen-lockfile
|
||||||
- pnpm antora generate
|
- pnpm antora generate --stacktrace antora-playbook.yml
|
||||||
|
directory: documentation
|
||||||
|
"assemble:documentation":
|
||||||
|
image: gcr.io/kaniko-project/executor:v1.18.0-debug
|
||||||
|
commands: # Test if using --insecure can be used to directly push to the registry
|
||||||
|
- echo "$CI_WORKSPACE"
|
||||||
|
- echo "$PWD"
|
||||||
|
- ls -lh
|
||||||
|
- /kaniko/executor
|
||||||
|
--context .
|
||||||
|
--dockerfile Dockerfile
|
||||||
|
--destination=image
|
||||||
|
--tar-path=image.tar
|
||||||
|
--no-push
|
||||||
|
- ls -lh
|
||||||
|
directory: documentation
|
||||||
|
"publish:documentation":
|
||||||
|
image: alpine/crane # because the official crane image is not compatible with woodpecker (no /bin/sh)
|
||||||
|
commands:
|
||||||
|
- crane push --insecure image.tar "container.192.168.1.151.nip.io:8543/${CI_REPO_OWNER}/${CI_REPO_NAME}"
|
||||||
directory: documentation
|
directory: documentation
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,9 @@ steps:
|
||||||
- npm install --save-dev conventional-changelog-conventionalcommits @commitlint/config-conventional commitlint@latest
|
- npm install --save-dev conventional-changelog-conventionalcommits @commitlint/config-conventional commitlint@latest
|
||||||
- cat commitlint.txt
|
- cat commitlint.txt
|
||||||
- cat commitlint.txt | npx commitlint
|
- cat commitlint.txt | npx commitlint
|
||||||
|
when:
|
||||||
|
- branch: [main, dev]
|
||||||
|
event: push
|
||||||
"lint:precommit":
|
"lint:precommit":
|
||||||
group: lint
|
group: lint
|
||||||
image: python:3.11.6-bullseye
|
image: python:3.11.6-bullseye
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
FROM nginx:1.25.3-alpine
|
||||||
|
|
||||||
|
RUN mkdir /docroot \
|
||||||
|
&& chgrp -R 0 /etc/nginx \
|
||||||
|
&& chmod -R g+rwX /etc/nginx \
|
||||||
|
# support running as arbitrary user which belongs to the root group \
|
||||||
|
&& chmod g+rwx /var/cache/nginx /var/run /var/log/nginx \
|
||||||
|
# comment user directive as master process is run as different user anyhow \
|
||||||
|
&& sed -i.bak 's/^user/#user/' /etc/nginx/nginx.conf
|
||||||
|
|
||||||
|
COPY nginx.vh.default.conf.nginx /etc/nginx/conf.d/default.conf
|
||||||
|
COPY build/site /docroot
|
||||||
|
|
||||||
|
RUN echo ls /usr/share/nginx/html \
|
||||||
|
&& ls -lisa /usr/share/nginx/html
|
||||||
|
|
||||||
|
RUN chown -R nginx: /docroot
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
test2
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
site:
|
site:
|
||||||
url: http://127.0.0.1:5001
|
url: https://demo.pages.192.168.1.151.nip.io:8543
|
||||||
title: Engineering Handbook
|
title: Engineering Handbook
|
||||||
start_page: handbook::index.adoc
|
start_page: handbook::index.adoc
|
||||||
|
|
||||||
|
|
@ -17,21 +17,24 @@ antora:
|
||||||
index_latest_only: true
|
index_latest_only: true
|
||||||
snippet_length: 100
|
snippet_length: 100
|
||||||
|
|
||||||
|
urls:
|
||||||
|
latest_version_segment_strategy: redirect:to
|
||||||
|
latest_version_segment: stable
|
||||||
|
latest_prerelease_version_segment: unstable
|
||||||
|
redirect_facility: nginx
|
||||||
|
|
||||||
asciidoc:
|
asciidoc:
|
||||||
extensions:
|
extensions:
|
||||||
- asciidoctor-kroki
|
- asciidoctor-kroki
|
||||||
attributes:
|
attributes:
|
||||||
kroki-server-url: "http://127.0.0.1:8000"
|
kroki-server-url: "http://kroki:8000"
|
||||||
kroki-fetch-diagram: true
|
kroki-fetch-diagram: true
|
||||||
guidelines-database-development: xref:system-standards:backend/guideline-database.adoc[]
|
guidelines-database-development: xref:system-standards:backend/guideline-database.adoc[]
|
||||||
guidelines-java-development: xref:system-standards:backend/guideline-general-development.adoc#java-guidelines[Java Styleguide]
|
guidelines-java-development: xref:system-standards:backend/guideline-general-development.adoc#java-guidelines[Java Styleguide]
|
||||||
guidelines-rest-rule: xref:system-standards:rest-guidelines/index.adoc
|
guidelines-rest-rule: xref:system-standards:rest-guidelines/index.adoc
|
||||||
guidelines-rest: xref:system-standards:rest-guidelines/index.adoc[REST Guideline]
|
guidelines-rest: xref:system-standards:rest-guidelines/index.adoc[REST Guideline]
|
||||||
|
|
||||||
|
|
||||||
runtime:
|
|
||||||
fetch: true
|
|
||||||
|
|
||||||
ui:
|
ui:
|
||||||
bundle:
|
bundle:
|
||||||
url: ./layouts/ed/build/ui-bundle.zip
|
url: ./layouts/oc/build/ui-bundle.zip
|
||||||
|
snapshot: true
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@ version: "1.0"
|
||||||
nav:
|
nav:
|
||||||
- modules/ROOT/nav.adoc
|
- modules/ROOT/nav.adoc
|
||||||
|
|
||||||
|
urls:
|
||||||
|
redirect_facility: nginx
|
||||||
|
|
||||||
asciidoc:
|
asciidoc:
|
||||||
attributes:
|
attributes:
|
||||||
MUST: |
|
MUST: |
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,5 @@ tasks.register<NpmTask>("preview", NpmTask::class.java) {
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.findByName("antora")?.dependsOn(":layouts:oc:build")
|
tasks.findByName("antora")?.dependsOn(":layouts:oc:build")
|
||||||
|
|
||||||
tasks.findByName("build")?.dependsOn("antora")
|
tasks.findByName("build")?.dependsOn("antora")
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
import com.github.gradle.node.npm.task.NpmTask
|
import com.github.gradle.node.npm.task.NpmTask
|
||||||
|
|
||||||
plugins {
|
plugins { id("com.github.node-gradle.node") }
|
||||||
id("com.github.node-gradle.node")
|
|
||||||
}
|
|
||||||
|
|
||||||
node {
|
node {
|
||||||
download.set(true)
|
download.set(true)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,51 @@
|
||||||
|
# config to don't allow the browser to render the page inside a frame or iframe
|
||||||
|
# and avoid clickjacking http://en.wikipedia.org/wiki/Clickjacking
|
||||||
|
# if you need to allow [i]frames, you can use SAMEORIGIN or even set an uri with ALLOW-FROM uri
|
||||||
|
# https://developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options
|
||||||
|
# add_header X-Frame-Options SAMEORIGIN;
|
||||||
|
|
||||||
|
# when serving user-supplied content, include a X-Content-Type-Options: nosniff header along with the Content-Type: header,
|
||||||
|
# to disable content-type sniffing on some browsers.
|
||||||
|
add_header X-Content-Type-Options nosniff;
|
||||||
|
|
||||||
|
# This header enables the Cross-site scripting (XSS) filter built into most recent web browsers.
|
||||||
|
# It's usually enabled by default anyway, so the role of this header is to re-enable the filter for
|
||||||
|
# this particular website if it was disabled by the user.
|
||||||
|
add_header X-XSS-Protection "1; mode=block" always;
|
||||||
|
|
||||||
|
# config to enable HSTS(HTTP Strict Transport Security) https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security
|
||||||
|
# to avoid ssl stripping https://en.wikipedia.org/wiki/SSL_stripping#SSL_stripping
|
||||||
|
# also https://hstspreload.org/
|
||||||
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 8080;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
# don't send the nginx version number in error pages and Server header
|
||||||
|
server_tokens off;
|
||||||
|
|
||||||
|
port_in_redirect off;
|
||||||
|
absolute_redirect off;
|
||||||
|
server_name_in_redirect off;
|
||||||
|
|
||||||
|
location = /.etc/nginx/rewrite.conf {
|
||||||
|
deny all;
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
include /docroot/.etc/nginx/rewrite.conf;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /docroot;
|
||||||
|
index index.html /index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_page 404 /404.html;
|
||||||
|
# redirect server error pages to the static page /50x.html
|
||||||
|
#
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root html;
|
||||||
|
}
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -1,7 +1,8 @@
|
||||||
{
|
{
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"check:links": "linkinator ./build/site --config linkinator.config.json",
|
"check:links": "linkinator ./build/site --config linkinator.config.json",
|
||||||
"preview": "http-server build/site -c-1 -p 5001"
|
"preview": "http-server build/site -c-1 -p 5001",
|
||||||
|
"build": "antora generate --clean --fetch --noproxy '*' antora-playbook.yml"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@antora/cli": "3.1.4",
|
"@antora/cli": "3.1.4",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,73 @@
|
||||||
|
= Forgejo
|
||||||
|
|
||||||
|
You need to find out the official IP address of your computer.
|
||||||
|
This can be done using the following command: `./update-ip-addr.sh`
|
||||||
|
It updates also the .env file and in this file (so you can easily copy and paste the links)
|
||||||
|
|
||||||
|
Lets say it is `192.168.1.151` then the URLs for accessing the services are:
|
||||||
|
|
||||||
|
|===
|
||||||
|
|Service | URL | User / Pwd
|
||||||
|
|
||||||
|
| git | https://git.192.168.1.151.nip.io:8543[] |
|
||||||
|
| woodpecker | https://ci.192.168.1.151.nip.io:8543[] |
|
||||||
|
| Traefik Dashboard | http://traefik.192.168.1.151.nip.io:8181[] |
|
||||||
|
|===
|
||||||
|
|
||||||
|
First start forgejo using:
|
||||||
|
|
||||||
|
`docker compose up -d traefik forgejo`
|
||||||
|
|
||||||
|
And then register an (admin) user in forgejo.
|
||||||
|
|
||||||
|
E.g., fjadmin / admin123 / fjadmin@localhost.de
|
||||||
|
|
||||||
|
Setup > Applications > oauth2 apps
|
||||||
|
|
||||||
|
woodpecker / https://ci.192.168.1.151.nip.io:8543/authorize
|
||||||
|
|
||||||
|
note client-id and client-secret and enter this in .env for.
|
||||||
|
|
||||||
|
Now you can start everything using `docker compose up -d`.
|
||||||
|
|
||||||
|
== Chaning IP
|
||||||
|
|
||||||
|
If the IP address of your computer changes, you have to update some configuration.
|
||||||
|
|
||||||
|
1. `./update-ip-addr.sh`
|
||||||
|
2. `docker exec -it -u root forgejo /bin/ash` and then `vi /data/gitea/conf/app.ini`` and change the IP address.
|
||||||
|
3. `docker compose down`
|
||||||
|
4. `docker volume rm forgejo_woodpecker``
|
||||||
|
5. `docker compose up -d`
|
||||||
|
|
||||||
|
== Check access to woodpecker
|
||||||
|
|
||||||
|
Access https://ci.192.168.1.151.nip.io:8543 and try to login.
|
||||||
|
|
||||||
|
|
||||||
|
== Create and push a repository
|
||||||
|
|
||||||
|
In forgejo, you should create a new repository, called ci-demo-2.
|
||||||
|
|
||||||
|
You need to disable ssl verification for this remote in your local git directory:
|
||||||
|
|
||||||
|
git config http.sslVerify false
|
||||||
|
|
||||||
|
Then add the repository
|
||||||
|
|
||||||
|
git remote add origin https://git.192.168.1.151.nip.io:8543/fjadmin/ci-demo-2.git
|
||||||
|
|
||||||
|
and push it
|
||||||
|
|
||||||
|
git push -u --all origin
|
||||||
|
|
||||||
|
You need also at least one tag.
|
||||||
|
|
||||||
|
git push --tags origin
|
||||||
|
|
||||||
|
== Adding Repo to woodpecker
|
||||||
|
|
||||||
|
In woodpecker, you need to add the repository.
|
||||||
|
It should be listed in the repositories list if you try to add it.
|
||||||
|
|
||||||
|
You need to "activate" the repository in woodpecker using the button.
|
||||||
|
|
@ -0,0 +1,227 @@
|
||||||
|
---
|
||||||
|
version: "3.7"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
woodpecker:
|
||||||
|
forgejo:
|
||||||
|
proxy:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
forgejo:
|
||||||
|
postgres:
|
||||||
|
woodpecker:
|
||||||
|
traefik_config:
|
||||||
|
traefik_certs:
|
||||||
|
traefik_logs:
|
||||||
|
registry:
|
||||||
|
artifacts_data:
|
||||||
|
verdaccio_data:
|
||||||
|
verdaccio_config:
|
||||||
|
verdaccio_plugins:
|
||||||
|
|
||||||
|
services:
|
||||||
|
traefik:
|
||||||
|
image: traefik:latest
|
||||||
|
container_name: traefik
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
# The HTTP port
|
||||||
|
- "8380:80"
|
||||||
|
# The HTTPS port
|
||||||
|
- "8543:443"
|
||||||
|
# SSH port
|
||||||
|
- "2222:222/tcp"
|
||||||
|
# The Web UI (enabled by '--api.dashboard=true' and '--api.insecure=true')
|
||||||
|
- "8181:8080"
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
volumes:
|
||||||
|
- "/var/run/docker.sock:/var/run/docker.sock:ro"
|
||||||
|
- "./traefik/traefik.yml:/etc/traefik/traefik.yml:ro"
|
||||||
|
- "traefik_certs:/etc/certs"
|
||||||
|
- "traefik_logs:/var/log/traefik"
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.dashboard.rule=Host(`${TRAEFIK_HOST}`)"
|
||||||
|
- "traefik.http.routers.dashboard.tls=true"
|
||||||
|
- "traefik.http.routers.dashboard.entrypoints=https"
|
||||||
|
- "traefik.http.services.dashboard.loadbalancer.server.port=8080"
|
||||||
|
|
||||||
|
smtp:
|
||||||
|
image: "maildev/maildev:2.1.0"
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
ports:
|
||||||
|
- "1080:1080"
|
||||||
|
- "1025:1025"
|
||||||
|
|
||||||
|
forgejo:
|
||||||
|
image: codeberg.org/forgejo/forgejo:1.20
|
||||||
|
container_name: forgejo
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
- FORGEJO__database__DB_TYPE=postgres
|
||||||
|
- FORGEJO__database__HOST=db:5432
|
||||||
|
- FORGEJO__database__NAME=forgejo
|
||||||
|
- FORGEJO__database__USER=forgejo
|
||||||
|
- FORGEJO__database__PASSWD=forgejo
|
||||||
|
- FORGEJO__webhook__SKIP_TLS_VERIFY=true
|
||||||
|
- FORGEJO__webhook__ALLOWED_HOST_LIST=external,*
|
||||||
|
- FORGEJO__webhook__DELIVER_TIMEOUT=20
|
||||||
|
- FORGEJO__mailer__SMTP_ADDR=smtp
|
||||||
|
- FORGEJO__mailer__SMTP_PORT=1025
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- forgejo
|
||||||
|
- proxy
|
||||||
|
volumes:
|
||||||
|
- forgejo:/data
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.forgejo.rule=Host(`${FORGEJO_HOST}`)"
|
||||||
|
- "traefik.http.routers.forgejo.entrypoints=https"
|
||||||
|
- "traefik.http.routers.forgejo.tls=true"
|
||||||
|
- "traefik.http.services.forgejo.loadbalancer.server.port=3000"
|
||||||
|
- "traefik.tcp.routers.forgejo-ssh.rule=HostSNI(`*`)"
|
||||||
|
- "traefik.tcp.routers.forgejo-ssh.entrypoints=ssh"
|
||||||
|
- "traefik.tcp.routers.forgejo-ssh.service=gitea-ssh-svc"
|
||||||
|
- "traefik.tcp.services.forgejo-ssh-svc.loadbalancer.server.port=22"
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres:14
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=forgejo
|
||||||
|
- POSTGRES_PASSWORD=forgejo
|
||||||
|
- POSTGRES_DB=forgejo
|
||||||
|
networks:
|
||||||
|
- forgejo
|
||||||
|
volumes:
|
||||||
|
- postgres:/var/lib/postgresql/data
|
||||||
|
|
||||||
|
woodpecker-server:
|
||||||
|
image: woodpeckerci/woodpecker-server:v1.0.5
|
||||||
|
container_name: woodpecker-server
|
||||||
|
restart: unless-stopped
|
||||||
|
cpus: 0.5
|
||||||
|
mem_limit: 512m
|
||||||
|
networks:
|
||||||
|
- woodpecker
|
||||||
|
- proxy
|
||||||
|
environment:
|
||||||
|
- "WOODPECKER_OPEN=true"
|
||||||
|
- "WOODPECKER_HOST=${WOODPECKER_URL}"
|
||||||
|
- "WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}"
|
||||||
|
- "WOODPECKER_ADMIN=${WOODPECKER_ADMIN}"
|
||||||
|
- "WOODPECKER_GITEA=true"
|
||||||
|
- "WOODPECKER_GITEA_URL=${WOODPECKER_FORGEJO_URL}"
|
||||||
|
- "WOODPECKER_GITEA_CLIENT=${WOODPECKER_FORGEJO_CLIENT}"
|
||||||
|
- "WOODPECKER_GITEA_SECRET=${WOODPECKER_FORGEJO_SECRET}"
|
||||||
|
- "WOODPECKER_GITEA_SKIP_VERIFY=true"
|
||||||
|
- "WOODPECKER_LIMIT_MEM=2147483648"
|
||||||
|
- "WOODPECKER_LIMIT_MEM_SWAP=2147483648"
|
||||||
|
volumes:
|
||||||
|
- "woodpecker:/var/lib/woodpecker"
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.woodpecker.rule=Host(`${WOODPECKER_HOST}`)"
|
||||||
|
- "traefik.http.routers.woodpecker.tls=true"
|
||||||
|
- "traefik.http.routers.woodpecker.entrypoints=https"
|
||||||
|
- "traefik.http.services.woodpecker.loadbalancer.server.port=8000"
|
||||||
|
|
||||||
|
woodpecker-agent:
|
||||||
|
container_name: woodpecker-agent
|
||||||
|
image: woodpeckerci/woodpecker-agent:v1.0.5
|
||||||
|
restart: unless-stopped
|
||||||
|
cpus: 0.5
|
||||||
|
mem_limit: 512m
|
||||||
|
depends_on:
|
||||||
|
- woodpecker-server
|
||||||
|
networks:
|
||||||
|
- woodpecker
|
||||||
|
environment:
|
||||||
|
- "WOODPECKER_SERVER=woodpecker-server:9000"
|
||||||
|
- "WOODPECKER_AGENT_SECRET=${WOODPECKER_AGENT_SECRET}"
|
||||||
|
- "WOODPECKER_MAX_WORKFLOWS=2"
|
||||||
|
volumes:
|
||||||
|
- "/var/run/docker.sock:/var/run/docker.sock"
|
||||||
|
|
||||||
|
registry:
|
||||||
|
image: registry:2
|
||||||
|
container_name: registry
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
environment:
|
||||||
|
- REGISTRY_STORAGE_DELETE_ENABLED=true
|
||||||
|
volumes:
|
||||||
|
- registry:/var/lib/registry
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.registry.rule=Host(`${REGISTRY_HOST}`)"
|
||||||
|
- "traefik.http.routers.registry.tls=true"
|
||||||
|
- "traefik.http.routers.registry.entrypoints=https,http"
|
||||||
|
- "traefik.http.services.registry.loadbalancer.server.port=5000"
|
||||||
|
ui:
|
||||||
|
image: joxit/docker-registry-ui:latest
|
||||||
|
environment:
|
||||||
|
- DELETE_IMAGES=true
|
||||||
|
- REGISTRY_TITLE=My Private Docker Registry
|
||||||
|
- NGINX_PROXY_PASS_URL=http://registry:5000
|
||||||
|
- SINGLE_REGISTRY=true
|
||||||
|
depends_on: ['registry']
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.regui.rule=Host(`${REGISTRY_UI_HOST}`)"
|
||||||
|
- "traefik.http.routers.regui.tls=true"
|
||||||
|
- "traefik.http.routers.regui.entrypoints=https"
|
||||||
|
- "traefik.http.services.regui.loadbalancer.passhostheader=true"
|
||||||
|
mvn-registry:
|
||||||
|
image: ghcr.io/dzikoysk/reposilite:3.4.10
|
||||||
|
container_name: mvn-registry
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
memory: ${REPOSILITE_MEMORY}
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
volumes:
|
||||||
|
- artifacts_data:/app/data
|
||||||
|
stdin_open: true
|
||||||
|
environment:
|
||||||
|
- JAVA_OPTS=-Xmx${REPOSILITE_MEMORY} ${REPOSILITE_JAVA_COMPOSE_OPTS}
|
||||||
|
- REPOSILITE_OPTS=--port ${REPOSILITE_PORT} ${REPOSILITE_COMPOSE_OPTS}
|
||||||
|
tty: true
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.http.routers.artifacts.rule=Host(`${ARTIFACTS_HOST}`)"
|
||||||
|
- "traefik.http.routers.artifacts.entrypoints=http"
|
||||||
|
- "traefik.http.services.artifacts.loadbalancer.server.port=8080"
|
||||||
|
verdaccio:
|
||||||
|
image: verdaccio/verdaccio:5
|
||||||
|
container_name: verdaccio
|
||||||
|
volumes:
|
||||||
|
- verdaccio_data:/verdaccio/storage
|
||||||
|
- verdaccio_config:/verdaccio/conf
|
||||||
|
- verdaccio_plugins:/verdaccio/plugins
|
||||||
|
ports:
|
||||||
|
- "4873:4873"
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
labels:
|
||||||
|
- "traefik.http.routers.artifacts.rule=Host(`${VERDACCIO_HOST}`)"
|
||||||
|
- "traefik.http.routers.artifacts.entrypoints=http"
|
||||||
|
- "traefik.http.services.artifacts.loadbalancer.server.port=4873"
|
||||||
|
#
|
||||||
|
#watchtower:
|
||||||
|
# image: containrrr/watchtower:latest
|
||||||
|
# volumes:
|
||||||
|
# - /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
global:
|
||||||
|
sendAnonymousUsage: false
|
||||||
|
|
||||||
|
api:
|
||||||
|
dashboard: true
|
||||||
|
insecure: true
|
||||||
|
|
||||||
|
log:
|
||||||
|
level: INFO
|
||||||
|
filePath: /var/log/traefik/traefik.log
|
||||||
|
|
||||||
|
accessLog:
|
||||||
|
filePath: /var/log/traefik/access.log
|
||||||
|
bufferingSize: 100
|
||||||
|
|
||||||
|
providers:
|
||||||
|
docker:
|
||||||
|
watch: true
|
||||||
|
exposedByDefault: false
|
||||||
|
network: forgejo_proxy
|
||||||
|
|
||||||
|
entryPoints:
|
||||||
|
http:
|
||||||
|
address: ":80"
|
||||||
|
http:
|
||||||
|
redirections:
|
||||||
|
entrypoint:
|
||||||
|
to: https
|
||||||
|
scheme: https
|
||||||
|
https:
|
||||||
|
address: ":443"
|
||||||
|
ssh:
|
||||||
|
address: ":222"
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/bash
|
||||||
|
if [ $# -eq 0 ] ; then
|
||||||
|
newip=$(ifconfig | grep 0xfff | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}' | grep -v 255 | head -1 | sed 's/\./-/g')
|
||||||
|
searchStr="s/[0-9]\{1,3\}-[0-9]\{1,3\}-[0-9]\{1,3\}-[0-9]\{1,3\}"
|
||||||
|
elif [ $# -eq 2 ] ; then
|
||||||
|
newip=$2
|
||||||
|
searchStr=$1
|
||||||
|
else
|
||||||
|
echo "you must either provide 0 arguments or"
|
||||||
|
echo "exactly 2 arguments:"
|
||||||
|
echo "./update-ip-adrr.sh <old-ip-or-dns> <new-ip-or-dns>"
|
||||||
|
fi
|
||||||
|
echo $newip
|
||||||
|
sed -i -e "s/${searchStr}"/"$newip"/g .env
|
||||||
|
sed -i -e 's/[0-9]\{1,3\}-[0-9]\{1,3\}-[0-9]\{1,3\}-[0-9]\{1,3\}'/"$newip"/g README.adoc
|
||||||
|
|
@ -13,4 +13,5 @@ plugins {
|
||||||
rootProject.name = "ci-demo"
|
rootProject.name = "ci-demo"
|
||||||
|
|
||||||
include("app", "list", "utilities")
|
include("app", "list", "utilities")
|
||||||
|
|
||||||
includeBuild("documentation")
|
includeBuild("documentation")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue