Compare commits

...

23 Commits

Author SHA1 Message Date
8295b625c1 Merge branch 'main' of https://github.com/aykhans/my-self-host-services 2025-11-24 16:05:33 +00:00
593e8f5238 update cadvisor config 2025-11-24 16:04:20 +00:00
e2c73da3b5 Update README with service ports information
Added ports information for Caddy, Stalwart, and Croc.
2025-11-24 01:39:55 +04:00
c44be3079c add stalwart 2025-11-22 22:03:00 +00:00
3b687f582c update configs 2025-11-22 14:42:59 +00:00
b8ce15ecfa revert prometheus/docker-compose.yml 2025-11-22 11:52:30 +00:00
baf4ed51ca update compose 2025-11-20 00:28:09 +00:00
e0d86e37cc update caddy config to save logs to file 2025-11-19 23:06:28 +00:00
eca500ff9f update configs 2025-11-19 22:06:23 +00:00
4a02405e06 update main.sh 2025-10-25 13:35:33 +00:00
57f4fbe9f3 add watchtower 2025-10-25 13:27:43 +00:00
905fa852a5 update REAMDE.md 2025-10-23 16:06:56 +00:00
3cd3b692c1 add croc 2025-10-23 16:03:12 +00:00
dd6fcdedd1 update service versions 2025-10-23 16:02:30 +00:00
8487de2298 update service versions 2025-09-26 08:26:07 +00:00
8488001461 Give docker socket access to uptime kuma 2025-08-19 12:58:46 +00:00
34020ece2f Increase prometheus storage retention size 2025-08-19 12:46:06 +00:00
74e451fdf2 bump immich to v1.138.1 2025-08-19 12:45:18 +00:00
4fba524f00 Add uptime kuma 2025-08-15 18:40:40 +00:00
258c204163 Add immich 2025-08-09 13:26:23 +00:00
78e524d61c bump ghost to 6 2025-08-09 11:47:11 +00:00
724c6056f4 replace blinko with memos 2025-08-03 10:52:46 +00:00
fe1d9d5a5b bump vaultwarden to 1.34.2 2025-07-29 06:48:38 +00:00
42 changed files with 552 additions and 365 deletions

View File

@@ -2,6 +2,22 @@
- **Bash**
- **Docker**
- **Docker compose**
- **Ports:**
- **Caddy**
- 80/tcp (HTTP)
- 443/tcp (HTTPS)
- **Stalwart**
- 25/tcp (SMTP)
- 110/tcp (POP3)
- 995/tcp (POP3S)
- 143/tcp (IMAP)
- 993/tcp (IMAPS)
- 465/tcp (SMTPS)
- 587/tcp (SUBMISSION)
- **Croc**
- 9009/tcp (PICHAT)
- 9010/tcp (SDR)
- 9011/tcp (D-STAR)
## Getting Started
@@ -22,12 +38,13 @@ Create `.env` configuration files with the following command:
Edit the generated `.env` files to fill in the required fields:
- `./gitea/.env`
- `./searxng/.env`
- `./sftpgo/.env`
- `./vaultwarden/.env`
- `./wg_easy/.env`
- `./blinko/.env`
- `./glance/.env`
- `./ghost/.env`
- `./immich/.env`
- `./uptime_kuma/.env`
- `./croc/.env`
- `./caddy/.env`
- `./caddy/Caddyfile.private`

View File

@@ -1,4 +0,0 @@
AUTH_SECRET=
POSTGRES_USER=
POSTGRES_PASSWORD=
POSTGRES_DB=

View File

@@ -1,55 +0,0 @@
networks:
blinko:
external: false
caddy:
name: caddy
driver: bridge
external: true
services:
blinko-website:
image: blinkospace/blinko:1.2.2
container_name: blinko-website
environment:
NODE_ENV: production
NEXTAUTH_SECRET: ${AUTH_SECRET}
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@blinko-postgres:5432/${POSTGRES_DB}
depends_on:
postgres:
condition: service_healthy
volumes:
- ./data/app:/app/.blinko
restart: unless-stopped
logging:
options:
max-size: "10m"
max-file: "3"
networks:
- blinko
- caddy
postgres:
image: postgres:14
container_name: blinko-postgres
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ./data/db:/var/lib/postgresql/data
healthcheck:
test:
[
"CMD",
"pg_isready",
"-U",
"${POSTGRES_USER}",
"-d",
"${POSTGRES_DB}",
]
interval: 5s
timeout: 10s
retries: 5
networks:
- blinko

View File

@@ -1,42 +1,35 @@
############# Grafana #############
GRAFANA_DOMAIN=
GRAFANA_CRT=
GRAFANA_KEY=
############# Gitea #############
GITEA_DOMAIN=
GITEA_CRT=
GITEA_KEY=
############# Slash #############
SLASH_DOMAIN=
SLASH_CRT=
SLASH_KEY=
############# Blinko #############
BLINKO_DOMAIN=
BLINKO_CRT=
BLINKO_KEY=
############# Memos #############
MEMOS_DOMAIN=
############# WG easy #############
WG_EASY_DOMAIN=
WG_EASY_CRT=
WG_EASY_KEY=
############# VaultWarden #############
VAULTWARDEN_DOMAIN=
VAULTWARDEN_CRT=
VAULTWARDEN_KEY=
############# Sftpgo #############
SFTPGO_DOMAIN=
############# Glance #############
GLANCE_DOMAIN=
GLANCE_CRT=
GLANCE_KEY=
############# Ghost #############
GHOST_DOMAIN=
GHOST_CRT=
GHOST_KEY=
############# Immich #############
IMMICH_DOMAIN=
############# Uptime Kuma #############
UPTIME_KUMA_DOMAIN=
############# Stalwart #############
STALWART_DOMAIN=

View File

@@ -3,6 +3,11 @@
metrics {
per_host
}
log {
output file /var/log/caddy/access.log
format json
level DEBUG
}
}
:2019 {
@@ -11,98 +16,56 @@
############## grafana ##############
{$GRAFANA_DOMAIN} {
tls /etc/ssl/custom/{$GRAFANA_CRT} /etc/ssl/custom/{$GRAFANA_KEY}
request_body {
max_size 2048MB
}
reverse_proxy http://grafana:3000 {
header_up X-Real-IP {http.request.header.Cf-Connecting-Ip}
header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip}
header_up X-Country-Code {http.request.header.Cf-Ipcountry}
header_up -CF-*
}
reverse_proxy http://grafana:3000
}
############## gitea ##############
{$GITEA_DOMAIN} {
tls /etc/ssl/custom/{$GITEA_CRT} /etc/ssl/custom/{$GITEA_KEY}
request_body {
max_size 512MB
}
reverse_proxy http://gitea:3000 {
header_up X-Real-IP {http.request.header.Cf-Connecting-Ip}
header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip}
header_up X-Country-Code {http.request.header.Cf-Ipcountry}
header_up -CF-*
}
reverse_proxy http://gitea:3000
}
############## slash ##############
{$SLASH_DOMAIN} {
tls /etc/ssl/custom/{$SLASH_CRT} /etc/ssl/custom/{$SLASH_KEY}
request_body {
max_size 10MB
}
reverse_proxy http://slash:5231 {
header_up X-Real-IP {http.request.header.Cf-Connecting-Ip}
header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip}
header_up X-Country-Code {http.request.header.Cf-Ipcountry}
header_up -CF-*
}
reverse_proxy http://slash:5231
}
############## blinko ##############
{$BLINKO_DOMAIN} {
tls /etc/ssl/custom/{$BLINKO_CRT} /etc/ssl/custom/{$BLINKO_KEY}
############## memos ##############
{$MEMOS_DOMAIN} {
request_body {
max_size 1024MB
}
reverse_proxy http://blinko-website:1111 {
header_up X-Real-IP {http.request.header.Cf-Connecting-Ip}
header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip}
header_up X-Country-Code {http.request.header.Cf-Ipcountry}
header_up -CF-*
}
reverse_proxy http://memos:5230
}
############## wg-easy ##############
{$WG_EASY_DOMAIN} {
tls /etc/ssl/custom/{$WG_EASY_CRT} /etc/ssl/custom/{$WG_EASY_KEY}
request_body {
max_size 10MB
}
reverse_proxy http://wg-easy:51821 {
header_up X-Real-IP {http.request.header.Cf-Connecting-Ip}
header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip}
header_up X-Country-Code {http.request.header.Cf-Ipcountry}
header_up -CF-*
}
reverse_proxy http://wg-easy:51821
}
############## vaultwarden ##############
{$VAULTWARDEN_DOMAIN} {
tls /etc/ssl/custom/{$VAULTWARDEN_CRT} /etc/ssl/custom/{$VAULTWARDEN_KEY}
request_body {
max_size 128MB
}
reverse_proxy http://vaultwarden {
header_up X-Real-IP {http.request.header.Cf-Connecting-Ip}
header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip}
header_up X-Country-Code {http.request.header.Cf-Ipcountry}
header_up -CF-*
}
reverse_proxy http://vaultwarden
}
############## sftpgo ##############
@@ -111,48 +74,61 @@
max_size 8120MB
}
reverse_proxy http://sftpgo:8080 {
header_up X-Real-IP {http.request.header.Cf-Connecting-Ip}
header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip}
header_up X-Country-Code {http.request.header.Cf-Ipcountry}
header_up -CF-*
}
reverse_proxy http://sftpgo:8080
}
############## glance ##############
{$GLANCE_DOMAIN} {
tls /etc/ssl/custom/{$GLANCE_CRT} /etc/ssl/custom/{$GLANCE_KEY}
request_body {
max_size 64MB
}
reverse_proxy http://glance:8080 {
header_up X-Real-IP {http.request.header.Cf-Connecting-Ip}
header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip}
header_up X-Country-Code {http.request.header.Cf-Ipcountry}
header_up -CF-*
}
reverse_proxy http://glance:8080
}
############## ghost ##############
{$GHOST_DOMAIN} {
tls /etc/ssl/custom/{$GHOST_CRT} /etc/ssl/custom/{$GHOST_KEY}
request_body {
max_size 124MB
}
reverse_proxy http://ghost:2368 {
header_up X-Real-IP {http.request.header.Cf-Connecting-Ip}
header_up X-Forwarded-For {http.request.header.Cf-Connecting-Ip}
header_up X-Country-Code {http.request.header.Cf-Ipcountry}
header_up X-Forwarded-Proto {http.request.scheme}
header_up Host {http.request.host}
header_up -CF-*
}
}
############## immich ##############
{$IMMICH_DOMAIN} {
request_body {
max_size 1024MB
}
reverse_proxy http://immich_server:2283 {
header_up X-Forwarded-Proto {http.request.scheme}
header_up Host {http.request.host}
}
}
############## uptime-kuma ##############
{$UPTIME_KUMA_DOMAIN} {
request_body {
max_size 1024MB
}
reverse_proxy http://uptime_kuma:3001 {
header_up X-Forwarded-Proto {http.request.scheme}
header_up Host {http.request.host}
}
}
############## stalwart ##############
{$STALWART_DOMAIN} {
request_body {
max_size 4048MB
}
reverse_proxy http://stalwart:8080
}
import Caddyfile.private

View File

@@ -6,9 +6,11 @@ networks:
services:
caddy:
image: caddy:2.10.0-alpine
image: caddy:2-alpine
container_name: caddy
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
networks:
- caddy
ports:
@@ -21,6 +23,7 @@ services:
- ./ssl:/etc/ssl/custom/
- ./data/data:/data
- ./data/config:/config
- ./data/log:/var/log/caddy
- ../private_volume:/private_volume
env_file:
- ./.env

1
croc/.env.example Normal file
View File

@@ -0,0 +1 @@
CROC_PASS=pass1234

9
croc/docker-compose.yml Normal file
View File

@@ -0,0 +1,9 @@
services:
croc:
image: schollz/croc:10
labels:
- "com.centurylinklabs.watchtower.enable=true"
ports:
- "9009-9013:9009-9013"
env_file: .env
restart: unless-stopped

View File

@@ -6,9 +6,11 @@ networks:
services:
ghost:
image: ghost:5-alpine
image: ghost:6-alpine
container_name: ghost
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
networks:
- caddy
environment:

View File

@@ -8,8 +8,10 @@ networks:
services:
server:
image: gitea/gitea:1.24.3
image: gitea/gitea:1
container_name: gitea
labels:
- "com.centurylinklabs.watchtower.enable=true"
environment:
- USER_UID=${USER_UID}
- USER_GID=${USER_GID}
@@ -27,7 +29,7 @@ services:
memory: 1G
act:
image: gitea/act_runner:0.2.11
image: gitea/act_runner:0.2.13
container_name: gitea_act
restart: unless-stopped
environment:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -1 +0,0 @@
<svg version="1.1" id="main_outline" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" style="enable-background:new 0 0 640 640;" xml:space="preserve" viewBox="5.67 143.05 628.65 387.55"> <g> <path id="teabag" style="fill:#FFFFFF" d="M395.9,484.2l-126.9-61c-12.5-6-17.9-21.2-11.8-33.8l61-126.9c6-12.5,21.2-17.9,33.8-11.8 c17.2,8.3,27.1,13,27.1,13l-0.1-109.2l16.7-0.1l0.1,117.1c0,0,57.4,24.2,83.1,40.1c3.7,2.3,10.2,6.8,12.9,14.4 c2.1,6.1,2,13.1-1,19.3l-61,126.9C423.6,484.9,408.4,490.3,395.9,484.2z"></path> <g> <g> <path style="fill:#609926" d="M622.7,149.8c-4.1-4.1-9.6-4-9.6-4s-117.2,6.6-177.9,8c-13.3,0.3-26.5,0.6-39.6,0.7c0,39.1,0,78.2,0,117.2 c-5.5-2.6-11.1-5.3-16.6-7.9c0-36.4-0.1-109.2-0.1-109.2c-29,0.4-89.2-2.2-89.2-2.2s-141.4-7.1-156.8-8.5 c-9.8-0.6-22.5-2.1-39,1.5c-8.7,1.8-33.5,7.4-53.8,26.9C-4.9,212.4,6.6,276.2,8,285.8c1.7,11.7,6.9,44.2,31.7,72.5 c45.8,56.1,144.4,54.8,144.4,54.8s12.1,28.9,30.6,55.5c25,33.1,50.7,58.9,75.7,62c63,0,188.9-0.1,188.9-0.1s12,0.1,28.3-10.3 c14-8.5,26.5-23.4,26.5-23.4s12.9-13.8,30.9-45.3c5.5-9.7,10.1-19.1,14.1-28c0,0,55.2-117.1,55.2-231.1 C633.2,157.9,624.7,151.8,622.7,149.8z M125.6,353.9c-25.9-8.5-36.9-18.7-36.9-18.7S69.6,321.8,60,295.4 c-16.5-44.2-1.4-71.2-1.4-71.2s8.4-22.5,38.5-30c13.8-3.7,31-3.1,31-3.1s7.1,59.4,15.7,94.2c7.2,29.2,24.8,77.7,24.8,77.7 S142.5,359.9,125.6,353.9z M425.9,461.5c0,0-6.1,14.5-19.6,15.4c-5.8,0.4-10.3-1.2-10.3-1.2s-0.3-0.1-5.3-2.1l-112.9-55 c0,0-10.9-5.7-12.8-15.6c-2.2-8.1,2.7-18.1,2.7-18.1L322,273c0,0,4.8-9.7,12.2-13c0.6-0.3,2.3-1,4.5-1.5c8.1-2.1,18,2.8,18,2.8 l110.7,53.7c0,0,12.6,5.7,15.3,16.2c1.9,7.4-0.5,14-1.8,17.2C474.6,363.8,425.9,461.5,425.9,461.5z"></path> <path style="fill:#609926" d="M326.8,380.1c-8.2,0.1-15.4,5.8-17.3,13.8c-1.9,8,2,16.3,9.1,20c7.7,4,17.5,1.8,22.7-5.4 c5.1-7.1,4.3-16.9-1.8-23.1l24-49.1c1.5,0.1,3.7,0.2,6.2-0.5c4.1-0.9,7.1-3.6,7.1-3.6c4.2,1.8,8.6,3.8,13.2,6.1 c4.8,2.4,9.3,4.9,13.4,7.3c0.9,0.5,1.8,1.1,2.8,1.9c1.6,1.3,3.4,3.1,4.7,5.5c1.9,5.5-1.9,14.9-1.9,14.9 c-2.3,7.6-18.4,40.6-18.4,40.6c-8.1-0.2-15.3,5-17.7,12.5c-2.6,8.1,1.1,17.3,8.9,21.3c7.8,4,17.4,1.7,22.5-5.3 c5-6.8,4.6-16.3-1.1-22.6c1.9-3.7,3.7-7.4,5.6-11.3c5-10.4,13.5-30.4,13.5-30.4c0.9-1.7,5.7-10.3,2.7-21.3 c-2.5-11.4-12.6-16.7-12.6-16.7c-12.2-7.9-29.2-15.2-29.2-15.2s0-4.1-1.1-7.1c-1.1-3.1-2.8-5.1-3.9-6.3c4.7-9.7,9.4-19.3,14.1-29 c-4.1-2-8.1-4-12.2-6.1c-4.8,9.8-9.7,19.7-14.5,29.5c-6.7-0.1-12.9,3.5-16.1,9.4c-3.4,6.3-2.7,14.1,1.9,19.8 C343.2,346.5,335,363.3,326.8,380.1z"></path> </g> </g> </g> </svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-slash"><line x1="9" x2="15" y1="15" y2="9"/><circle cx="12" cy="12" r="10"/></svg>

Before

Width:  |  Height:  |  Size: 291 B

View File

@@ -1,5 +0,0 @@
<svg version="1.1" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg">
<title>Vaultwarden</title>
<path class="tw-fill-marketing-logo" d="m18 11-5.6.00073 15 42h5.3l15-42h-5.6l-9.5 27c-.63 1.7-1.2 3.4-1.6 4.9-.43 1.5-.79 2.9-1.1 4.3-.28-1.4-.63-2.8-1.1-4.4-.43-1.5-.97-3.2-1.6-5l-9.5-27z"></path>
<path class="tw-fill-marketing-logo" d="m30 0.05c-0.19 0.068-0.34 0.2-0.44 0.37l-1.5 2.5c-0.27 0.022-0.53 0.046-0.8 0.076l-2-2.2c-0.43-0.44-1.2-0.29-1.4 0.29l-1 2.8c-0.26 0.074-0.51 0.15-0.77 0.23l-2.4-1.8c-0.52-0.45-1.3-0.12-1.4 0.56l-0.44 2.9c-0.23 0.12-0.47 0.24-0.7 0.37l-2.7-1.3c-0.58-0.26-1.2 0.18-1.2 0.81l0.14 3c-0.2 0.16-0.4 0.33-0.6 0.49l-2.9-0.72c-0.59-0.12-1.1 0.41-1 1l0.72 2.9c-0.17 0.2-0.33 0.4-0.49 0.6l-3-0.14c-0.63-0.027-1.1 0.62-0.81 1.2l1.3 2.7c-0.13 0.23-0.25 0.46-0.37 0.7l-2.9 0.44c-0.68 0.068-1 0.88-0.56 1.4l1.8 2.4c-0.081 0.25-0.16 0.51-0.23 0.77l-2.8 1c-0.58 0.22-0.73 0.97-0.29 1.4l2.2 2c-0.03 0.26-0.054 0.53-0.076 0.8l-2.5 1.5c-0.6 0.32-0.6 1.2 0 1.5l2.5 1.5c0.022 0.27 0.046 0.53 0.076 0.8l-2.2 2c-0.44 0.43-0.29 1.2 0.29 1.4l2.8 1c0.074 0.26 0.15 0.51 0.23 0.77l-1.8 2.4c-0.45 0.52-0.12 1.3 0.56 1.4l2.9 0.44c0.12 0.23 0.24 0.47 0.37 0.7l-1.3 2.7c-0.26 0.58 0.18 1.2 0.81 1.2l3-0.14c0.16 0.2 0.33 0.4 0.49 0.6l-0.72 2.9c-0.12 0.59 0.41 1.1 1 1l2.9-0.72c0.2 0.17 0.4 0.33 0.6 0.49l-0.14 3c-0.027 0.63 0.62 1.1 1.2 0.81l2.7-1.3c0.23 0.13 0.46 0.25 0.7 0.37l0.44 2.9c0.068 0.68 0.88 1 1.4 0.56l2.4-1.8c0.25 0.081 0.51 0.16 0.77 0.23l1 2.8c0.22 0.58 0.97 0.73 1.4 0.29l2-2.2c0.26 0.03 0.53 0.054 0.8 0.076l1.5 2.5c0.32 0.6 1.2 0.6 1.5 0l1.5-2.5c0.27-0.022 0.53-0.046 0.8-0.076l2 2.2c0.43 0.44 1.2 0.29 1.4-0.29l1-2.8c0.26-0.074 0.51-0.15 0.77-0.23l2.4 1.8c0.52 0.45 1.3 0.12 1.4-0.56l0.44-2.9c0.23-0.12 0.47-0.24 0.7-0.37l2.7 1.3c0.58 0.26 1.2-0.18 1.2-0.81l-0.14-3c0.2-0.16 0.4-0.33 0.6-0.49l2.9 0.72c0.59 0.12 1.1-0.41 1-1l-0.72-2.9c0.17-0.2 0.33-0.4 0.49-0.6l3 0.14c0.63 0.027 1.1-0.62 0.81-1.2l-1.3-2.7c0.13-0.23 0.25-0.46 0.37-0.7l2.9-0.44c0.68-0.068 1-0.88 0.56-1.4l-1.8-2.4c0.081-0.25 0.16-0.51 0.23-0.77l2.8-1c0.58-0.22 0.73-0.97 0.29-1.4l-2.2-2c0.03-0.26 0.054-0.53 0.076-0.8l2.5-1.5c0.6-0.32 0.6-1.2 0-1.5l-2.5-1.5c-0.022-0.27-0.046-0.53-0.076-0.8l2.2-2c0.44-0.43 0.29-1.2-0.29-1.4l-2.8-1c-0.074-0.26-0.15-0.51-0.23-0.77l1.8-2.4c0.45-0.52 0.12-1.3-0.56-1.4l-2.9-0.44c-0.12-0.23-0.24-0.47-0.37-0.7l1.3-2.7c0.26-0.58-0.18-1.2-0.81-1.2l-3 0.14c-0.16-0.2-0.33-0.4-0.49-0.6l0.72-2.9c0.12-0.59-0.41-1.1-1-1l-2.9 0.72c-0.2-0.17-0.4-0.33-0.6-0.49l0.14-3c0.027-0.63-0.62-1.1-1.2-0.81l-2.7 1.3c-0.23-0.13-0.46-0.25-0.7-0.37l-0.44-2.9c-0.068-0.68-0.88-1-1.4-0.56l-2.4 1.8c-0.25-0.081-0.51-0.16-0.77-0.23l-1-2.8c-0.22-0.58-0.97-0.73-1.4-0.29l-2 2.2c-0.26-0.03-0.53-0.054-0.8-0.076l-1.5-2.5c-0.2-0.34-0.62-0.5-1-0.37zm0.29 5.4c0.94 0 1.7 0.76 1.7 1.7s-0.76 1.7-1.7 1.7-1.7-0.76-1.7-1.7 0.76-1.7 1.7-1.7zm-4 2.9 2.8 2.8c0.66 0.66 1.7 0.66 2.4 0l2.8-2.8c6.6 1.2 12 5.4 15 11l-1.8 3.6c-0.43 0.84-0.097 1.9 0.75 2.3l3.6 1.8c0.12 0.92 0.18 1.9 0.18 2.8 0 5.8-2.3 11-6 15l-4-0.63c-0.94-0.18-1.8 0.45-2 1.4l-0.63 4c-2.8 1.3-6 2.1-9.4 2.1s-6.5-0.76-9.4-2.1l-0.63-4c-0.15-0.95-1.1-1.6-2-1.4l-4 0.63c-3.7-3.9-6-9.2-6-15 0-0.96 0.064-1.9 0.18-2.8l3.6-1.8c0.85-0.42 1.2-1.5 0.75-2.3l-1.8-3.6c3.1-5.7 8.6-9.8 15-11zm-18 13c0.16 0.0045 0.32 0.032 0.48 0.083 0.93 0.29 1.4 1.3 1.1 2.2-0.29 0.93-1.3 1.4-2.2 1.1-0.93-0.29-1.4-1.3-1.1-2.2 0.23-0.74 0.93-1.2 1.7-1.2zm43 0c0.77-0.034 1.5 0.46 1.7 1.2 0.33 0.91-0.17 1.9-1.1 2.2-0.91 0.33-1.9-0.17-2.2-1.1-0.33-0.91 0.17-1.9 1.1-2.2 0.16-0.051 0.32-0.079 0.48-0.083zm-35 25c0.33 0.017 0.64 0.13 0.91 0.32 0.78 0.55 0.95 1.6 0.38 2.4-0.55 0.78-1.6 0.95-2.4 0.38-0.78-0.55-0.95-1.6-0.38-2.4 0.34-0.48 0.91-0.74 1.5-0.7zm27 0c0.59-0.042 1.2 0.22 1.5 0.7 0.57 0.77 0.4 1.8-0.38 2.4-0.77 0.57-1.8 0.4-2.4-0.38-0.57-0.77-0.4-1.8 0.38-2.4 0.27-0.19 0.58-0.3 0.91-0.32z"></path>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View File

@@ -7,51 +7,24 @@
- type: local
name: Services
- type: monitor
cache: 1s
title: Services
sites:
- title: seradar.net
url: https://seradar.net/auth
icon: /assets/seradar.png
- title: git.aykhans.me
url: https://git.aykhans.me/aykhans
icon: /assets/gitea.svg
- title: ftp.aykhans.me
url: https://ftp.aykhans.me/web/client/login
icon: /assets/sftpgo.png
- title: notes.aykhans.me
url: https://notes.aykhans.me/signin
icon: /assets/blinko.png
- title: url.aykhans.me
url: https://url.aykhans.me/auth
icon: /assets/slash.svg
- title: vault.aykhans.me
url: https://vault.aykhans.me/#/login
icon: /assets/vaultwarden.svg
- title: wg.aykhans.me
url: https://wg.aykhans.me/
icon: /assets/wireguard.png
- title: aykhans.me
url: https://aykhans.me/
icon: /assets/ghost.png
- type: docker-containers
cache: 0s
hide-by-default: false
- type: releases
cache: 1d
collapse-after: 3
collapse-after: 5
# Without authentication the Github API allows for up to 60 requests per hour. You can create a
# read-only token from your Github account settings and use it here to increase the limit.
token: ${GITHUB_TOKEN}
repositories:
- caddyserver/caddy
- louislam/uptime-kuma
- immich-app/immich
- glanceapp/glance
- go-gitea/gitea
- drakkan/sftpgo
- blinko-space/blinko
- usememos/memos
- yourselfhosted/slash
- dani-garcia/vaultwarden
- wg-easy/wg-easy
@@ -59,6 +32,8 @@
- prometheus/prometheus
- grafana/grafana
- TryGhost/Ghost
- schollz/croc
- stalwartlabs/stalwart
- size: full
widgets:

View File

@@ -1,6 +1,4 @@
networks:
glance:
external: false
caddy:
name: caddy
driver: bridge

View File

@@ -10,9 +10,11 @@ networks:
services:
grafana:
image: grafana/grafana-enterprise:12.1.0
image: grafana/grafana-enterprise:12.2
container_name: grafana
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
networks:
- grafana
- caddy

12
immich/.env.example Normal file
View File

@@ -0,0 +1,12 @@
# The location where your uploaded files are stored
UPLOAD_LOCATION=./data/server
# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./data/postgres
DB_PASSWORD=postgres
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

2
immich/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/data/*
!.gitkeep

82
immich/docker-compose.yml Normal file
View File

@@ -0,0 +1,82 @@
networks:
immich:
external: false
caddy:
name: caddy
driver: bridge
external: true
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:v2
labels:
- "com.centurylinklabs.watchtower.enable=true"
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
depends_on:
- redis
- database
networks:
- immich
- caddy
deploy:
resources:
limits:
cpus: "1.5"
memory: 1G
restart: unless-stopped
healthcheck:
disable: false
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:release
labels:
- "com.centurylinklabs.watchtower.enable=true"
volumes:
- model-cache:/cache
env_file:
- .env
networks:
- immich
# deploy:
# resources:
# limits:
# cpus: "1"
# memory: 600M
restart: unless-stopped
healthcheck:
disable: false
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:8-bookworm@sha256:facc1d2c3462975c34e10fccb167bfa92b0e0dbd992fc282c29a61c3243afb11
networks:
- immich
healthcheck:
test: redis-cli ping || exit 1
restart: unless-stopped
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:32324a2f41df5de9efe1af166b7008c3f55646f8d0e00d9550c16c9822366b4a
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: "--data-checksums"
networks:
- immich
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
shm_size: 128mb
restart: unless-stopped
volumes:
model-cache:

132
main.sh
View File

@@ -60,8 +60,10 @@ generate_env_files() {
cp --update=none ./wg_easy/.env.example ./wg_easy/.env
cp --update=none ./caddy/.env.example ./caddy/.env
cp --update=none ./glance/.env.example ./glance/.env
cp --update=none ./blinko/.env.example ./blinko/.env
cp --update=none ./ghost/.env.example ./ghost/.env
cp --update=none ./immich/.env.example ./immich/.env
cp --update=none ./uptime_kuma/.env.example ./uptime_kuma/.env
cp --update=none ./croc/.env.example ./croc/.env
cp --update=none ./caddy/Caddyfile.private.example ./caddy/Caddyfile.private
# cp --update=none ./slash/.env.example ./slash/.env
# cp --update=none ./grafana/.env.example ./grafana/.env
@@ -75,7 +77,7 @@ start_services() {
docker network create gitea 2>/dev/null
echo "Starting prometheus..."
$DOCKER_COMPOSE_COMMAND -f ./prometheus/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./prometheus/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Prometheus started successfully."
else
@@ -84,7 +86,7 @@ start_services() {
fi
echo "Starting Grafana..."
$DOCKER_COMPOSE_COMMAND -f ./grafana/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./grafana/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Grafana started successfully."
else
@@ -93,7 +95,7 @@ start_services() {
fi
echo "Starting Gitea..."
$DOCKER_COMPOSE_COMMAND -f ./gitea/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./gitea/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Gitea started successfully."
else
@@ -102,7 +104,7 @@ start_services() {
fi
echo "Starting gitea..."
$DOCKER_COMPOSE_COMMAND -f ./gitea/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./gitea/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Gitea started successfully."
else
@@ -110,17 +112,17 @@ start_services() {
exit 1
fi
echo "Starting blinko..."
$DOCKER_COMPOSE_COMMAND -f ./blinko/docker-compose.yml up -d
echo "Starting memos..."
$DOCKER_COMPOSE_COMMAND -f ./memos/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Blinko started successfully."
print_success "Memos started successfully."
else
print_error "failed to start Blinko!"
print_error "failed to start Memos!"
exit 1
fi
echo "Starting sftpgo..."
$DOCKER_COMPOSE_COMMAND -f ./sftpgo/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./sftpgo/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Sftpgo started successfully."
else
@@ -129,7 +131,7 @@ start_services() {
fi
echo "Starting slash..."
$DOCKER_COMPOSE_COMMAND -f ./slash/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./slash/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Slash started successfully."
else
@@ -138,7 +140,7 @@ start_services() {
fi
echo "Starting vaultwarden..."
$DOCKER_COMPOSE_COMMAND -f ./vaultwarden/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./vaultwarden/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Vaultwarden started successfully."
else
@@ -147,7 +149,7 @@ start_services() {
fi
echo "Starting wg-easy..."
$DOCKER_COMPOSE_COMMAND -f ./wg_easy/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./wg_easy/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Wg-easy started successfully."
else
@@ -156,7 +158,7 @@ start_services() {
fi
echo "Starting glance..."
$DOCKER_COMPOSE_COMMAND -f ./glance/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./glance/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Glance started successfully."
else
@@ -165,7 +167,7 @@ start_services() {
fi
echo "Starting ghost..."
$DOCKER_COMPOSE_COMMAND -f ./ghost/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./ghost/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Ghost started successfully."
else
@@ -173,14 +175,59 @@ start_services() {
exit 1
fi
echo "Starting immich..."
$DOCKER_COMPOSE_COMMAND -f ./immich/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Immich started successfully."
else
print_error "failed to start Immich!"
exit 1
fi
echo "Starting uptime kuma..."
$DOCKER_COMPOSE_COMMAND -f ./uptime_kuma/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Uptime kuma started successfully."
else
print_error "failed to start Uptime kuma!"
exit 1
fi
echo "Starting croc..."
$DOCKER_COMPOSE_COMMAND -f ./croc/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Croc started successfully."
else
print_error "failed to start Croc!"
exit 1
fi
echo "Starting caddy..."
$DOCKER_COMPOSE_COMMAND -f ./caddy/docker-compose.yml up -d
$DOCKER_COMPOSE_COMMAND -f ./caddy/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Caddy started successfully."
else
print_error "failed to start Caddy!"
exit 1
fi
echo "Starting watchtower..."
$DOCKER_COMPOSE_COMMAND -f ./watchtower/docker-compose.yml up --pull -d
if [ $? -eq 0 ]; then
print_success "Watchtower started successfully."
else
print_error "failed to start Watchtower!"
exit 1
fi
echo "Starting stalwart..."
$DOCKER_COMPOSE_COMMAND -f ./stalwart/docker-compose.yaml up --pull -d
if [ $? -eq 0 ]; then
print_success "Stalwart started successfully."
else
print_error "failed to start Stalwart!"
exit 1
fi
}
stop_services() {
@@ -220,12 +267,12 @@ stop_services() {
exit 1
fi
echo "Stopping blinko..."
$DOCKER_COMPOSE_COMMAND -f ./blinko/docker-compose.yml down
echo "Stopping memos..."
$DOCKER_COMPOSE_COMMAND -f ./memos/docker-compose.yml down
if [ $? -eq 0 ]; then
print_success "Blinko stopped successfully."
print_success "Memos stopped successfully."
else
print_error "failed to stop Blinko!"
print_error "failed to stop Memos!"
exit 1
fi
@@ -283,6 +330,33 @@ stop_services() {
exit 1
fi
echo "Stopping immich..."
$DOCKER_COMPOSE_COMMAND -f ./immich/docker-compose.yml down
if [ $? -eq 0 ]; then
print_success "Immich stopped successfully."
else
print_error "failed to stop Immich!"
exit 1
fi
echo "Stopping uptime kuma..."
$DOCKER_COMPOSE_COMMAND -f ./uptime_kuma/docker-compose.yml down
if [ $? -eq 0 ]; then
print_success "Uptime kuma stopped successfully."
else
print_error "failed to stop Uptime kuma!"
exit 1
fi
echo "Stopping croc..."
$DOCKER_COMPOSE_COMMAND -f ./croc/docker-compose.yml down
if [ $? -eq 0 ]; then
print_success "Croc stopped successfully."
else
print_error "failed to stop Croc!"
exit 1
fi
echo "Stopping caddy..."
$DOCKER_COMPOSE_COMMAND -f ./caddy/docker-compose.yml down
if [ $? -eq 0 ]; then
@@ -291,6 +365,24 @@ stop_services() {
print_error "failed to stop Caddy!"
exit 1
fi
echo "Stopping watchtower..."
$DOCKER_COMPOSE_COMMAND -f ./watchtower/docker-compose.yml down
if [ $? -eq 0 ]; then
print_success "Watchtower stopped successfully."
else
print_error "failed to stop Watchtower!"
exit 1
fi
echo "Stopping stalwart..."
$DOCKER_COMPOSE_COMMAND -f ./stalwart/docker-compose.yaml down
if [ $? -eq 0 ]; then
print_success "Stalwart stopped successfully."
else
print_error "failed to stop Stalwart!"
exit 1
fi
}
if [ $# -lt 1 ]; then

17
memos/docker-compose.yml Normal file
View File

@@ -0,0 +1,17 @@
networks:
caddy:
name: caddy
driver: bridge
external: true
services:
memos:
image: neosmemo/memos:0.25
restart: unless-stopped
container_name: memos
labels:
- "com.centurylinklabs.watchtower.enable=true"
volumes:
- ./data/app:/var/opt/memos
networks:
- caddy

View File

@@ -12,20 +12,20 @@ networks:
services:
prometheus:
image: prom/prometheus:v3.5.0
image: prom/prometheus:v3.7.2
container_name: prometheus
restart: unless-stopped
networks:
- prometheus
- grafana
- caddy
command: "--config.file=/etc/prometheus/prometheus.yaml --storage.tsdb.retention.time=10d --storage.tsdb.retention.size=5GB"
command: "--config.file=/etc/prometheus/prometheus.yaml --storage.tsdb.retention.time=10d --storage.tsdb.retention.size=15GB"
volumes:
- ./data/config/prometheus.yaml:/etc/prometheus/prometheus.yaml:ro
- prometheus-data:/prometheus
node_exporter:
image: quay.io/prometheus/node-exporter:v1.9.1
image: quay.io/prometheus/node-exporter:v1.10.0
container_name: node_exporter
restart: unless-stopped
networks:
@@ -37,7 +37,7 @@ services:
- "/:/host:ro,rslave"
cadvisor:
image: gcr.io/cadvisor/cadvisor:v0.49.1
image: gcr.io/cadvisor/cadvisor:v0.52.1
container_name: cadvisor
restart: unless-stopped
networks:
@@ -52,6 +52,7 @@ services:
devices:
- "/dev/kmsg:/dev/kmsg"
command:
- -docker_only
- --disable_metrics=advtcp,cpu_topology,cpuset,hugetlb,memory_numa,process,referenced_memory,resctrl,sched,tcp,udp,percpu,disk,diskIO,oom_event,perf_event
volumes:

View File

@@ -6,9 +6,11 @@ networks:
services:
server:
image: drakkan/sftpgo:v2.6.6
image: drakkan/sftpgo:v2
container_name: sftpgo
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
environment:
- SFTPGO_COMMON_IDLE_TIMEOUT=${SFTPGO_COMMON_IDLE_TIMEOUT}
- SFTPGO_COMMON_UPLOAD_MODE=${SFTPGO_COMMON_UPLOAD_MODE}

View File

@@ -6,7 +6,7 @@ networks:
services:
server:
# image: yourselfhosted/slash:latest
# image: yourselfhosted/slash:latest
image: aykhans/slash:1.0.0-rc.0-e
container_name: slash
restart: unless-stopped

2
stalwart/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/data/*
!.gitkeep

0
stalwart/data/.gitkeep Normal file
View File

View File

@@ -0,0 +1,28 @@
networks:
caddy:
name: caddy
driver: bridge
external: true
services:
stalwart:
image: stalwartlabs/stalwart:v0.14
container_name: stalwart
restart: unless-stopped
labels:
- "com.centurylinklabs.watchtower.enable=true"
networks:
- caddy
ports:
- "25:25"
- "587:587"
- "465:465"
- "143:143"
- "993:993"
- "4190:4190"
- "110:110"
- "995:995"
volumes:
- ./data:/opt/stalwart
- ../caddy/data/data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.aykhans.me/mail.aykhans.me.crt:/opt/stalwart/cert/mail.aykhans.me.pem
- ../caddy/data/data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.aykhans.me/mail.aykhans.me.key:/opt/stalwart/cert/mail.aykhans.me.priv.pem

1
uptime_kuma/.env.example Normal file
View File

@@ -0,0 +1 @@
CADDY_DOMAIN=sub.example.com

2
uptime_kuma/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
/data/*
!.gitkeep

View File

View File

@@ -0,0 +1,20 @@
networks:
caddy:
name: caddy
driver: bridge
external: true
services:
uptime-kuma:
image: louislam/uptime-kuma:2
container_name: uptime_kuma
restart: unless-stopped
volumes:
- ./data/app:/app/data
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- caddy
labels:
caddy: ${CADDY_DOMAIN}
caddy.reverse_proxy: "* {{upstreams 3001}}"
com.centurylinklabs.watchtower.enable: true

View File

@@ -6,7 +6,7 @@ networks:
services:
server:
image: vaultwarden/server:1.34.1
image: vaultwarden/server:1.34.2
container_name: vaultwarden
restart: unless-stopped
environment:

View File

@@ -0,0 +1,12 @@
services:
watchtower:
image: nickfedor/watchtower:latest
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command:
- "--label-enable"
- "--cleanup"
- "--rolling-restart"
- "--interval"
- "600" # 10 minutes

View File

@@ -2,6 +2,8 @@ services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy
labels:
- "com.centurylinklabs.watchtower.enable=true"
networks:
caddy:
interface_name: wgeth1