.env
· 1.6 KiB · Bash
Raw
BASE_PATH=/var/lib/pelican # Path has to be absolute, else wings won't work.
TIMEZONE=Europe/London
# network
NETWORK_NAME=wings
NETWORK_SUBNET=192.30.0.0/16
NETWORK_GATEWAY=192.30.0.1
# traefik
TRAEFIK_IMAGE=traefik:3.2
TRAEFIK_NETWORK_NAME=traefik
TRAEFIK_PORT=80
# database
DATABASE_TYPE=mariadb
DATABASE_IMAGE=mariadb:11.5.2
DATABASE_PORT=3306
DATABASE_NAME=pelican
DATABASE_USER=pelican
DATABASE_PASS=P6i4hh6L5Q # Needs to be changed.
DATABASE_ROOT_PASS=lhu2bgjY5b # Needs to be changed.
# redis
REDIS_IMAGE=redis:7.4.1-alpine
REDIS_PORT=6379
# panel
PANEL_TRAEFIK_NAME=pelican-panel
PANEL_IMAGE=ghcr.io/pelican-dev/panel:v1.0.0-beta11
PANEL_URL_SCHEME=https # Needs to be changed.
PANEL_URL=pelican.example.org # Needs to be changed.
PANEL_PORT=80
PANEL_PATH=/pelican-data
DEBUG=false
NAME=Pelican
EMAIL=pelican@example.org # Needs to be changed.
TRUSTED_PROXIES=*
TOP_NAVIGATION=true
CLIENT_ALLOCATIONS=false
EDITABLE_SERVER_DESCRIPTIONS=false
BINARY_PREFIX=false
BACKUP_THROTTLE_LIMIT=5
BACKUP_THROTTLE_PERIOD=120
REQUEST_TIMEOUT=60
CONNECT_TIMEOUT=60
ACTIVITY_PRUNE_DAYS=30
ACTIVITY_HIDE_ADMIN=false
CLIENT_RATELIMIT=10000
APPLICATION_RATELIMIT=10000
# wings
WINGS_TRAEFIK_NAME=pelican-wings
WINGS_IMAGE=ghcr.io/pelican-dev/wings:v1.0.0-beta6
WINGS_URL=pelican-node.example.org # Needs to be changed.
WINGS_PORT=80
WINGS_SFTP_PORT=2022
WINGS_UUID=22c62a32-c789-4d59-8438-be1c425450c0 # Needs to be changed.
WINGS_TOKEN_ID=1uVXCsVsMOWfbYVK # Needs to be changed.
WINGS_TOKEN=zACf5zVzT0krxOLTA2cNIklV0HaozhdYuVqTMKITpwuRDodmUoELPpn3ybqgLbdl # Needs to be changed.
WINGS_UPLOAD_LIMIT=100
WINGS_DNS=1.1.1.1
WINGS_DNS_SECONDARY=8.8.8.8
| 1 | BASE_PATH=/var/lib/pelican # Path has to be absolute, else wings won't work. |
| 2 | TIMEZONE=Europe/London |
| 3 | |
| 4 | # network |
| 5 | NETWORK_NAME=wings |
| 6 | NETWORK_SUBNET=192.30.0.0/16 |
| 7 | NETWORK_GATEWAY=192.30.0.1 |
| 8 | |
| 9 | # traefik |
| 10 | TRAEFIK_IMAGE=traefik:3.2 |
| 11 | TRAEFIK_NETWORK_NAME=traefik |
| 12 | TRAEFIK_PORT=80 |
| 13 | |
| 14 | # database |
| 15 | DATABASE_TYPE=mariadb |
| 16 | DATABASE_IMAGE=mariadb:11.5.2 |
| 17 | DATABASE_PORT=3306 |
| 18 | DATABASE_NAME=pelican |
| 19 | DATABASE_USER=pelican |
| 20 | DATABASE_PASS=P6i4hh6L5Q # Needs to be changed. |
| 21 | DATABASE_ROOT_PASS=lhu2bgjY5b # Needs to be changed. |
| 22 | |
| 23 | # redis |
| 24 | REDIS_IMAGE=redis:7.4.1-alpine |
| 25 | REDIS_PORT=6379 |
| 26 | |
| 27 | # panel |
| 28 | PANEL_TRAEFIK_NAME=pelican-panel |
| 29 | PANEL_IMAGE=ghcr.io/pelican-dev/panel:v1.0.0-beta11 |
| 30 | PANEL_URL_SCHEME=https # Needs to be changed. |
| 31 | PANEL_URL=pelican.example.org # Needs to be changed. |
| 32 | PANEL_PORT=80 |
| 33 | PANEL_PATH=/pelican-data |
| 34 | DEBUG=false |
| 35 | NAME=Pelican |
| 36 | EMAIL=pelican@example.org # Needs to be changed. |
| 37 | TRUSTED_PROXIES=* |
| 38 | TOP_NAVIGATION=true |
| 39 | CLIENT_ALLOCATIONS=false |
| 40 | EDITABLE_SERVER_DESCRIPTIONS=false |
| 41 | BINARY_PREFIX=false |
| 42 | BACKUP_THROTTLE_LIMIT=5 |
| 43 | BACKUP_THROTTLE_PERIOD=120 |
| 44 | REQUEST_TIMEOUT=60 |
| 45 | CONNECT_TIMEOUT=60 |
| 46 | ACTIVITY_PRUNE_DAYS=30 |
| 47 | ACTIVITY_HIDE_ADMIN=false |
| 48 | CLIENT_RATELIMIT=10000 |
| 49 | APPLICATION_RATELIMIT=10000 |
| 50 | |
| 51 | # wings |
| 52 | WINGS_TRAEFIK_NAME=pelican-wings |
| 53 | WINGS_IMAGE=ghcr.io/pelican-dev/wings:v1.0.0-beta6 |
| 54 | WINGS_URL=pelican-node.example.org # Needs to be changed. |
| 55 | WINGS_PORT=80 |
| 56 | WINGS_SFTP_PORT=2022 |
| 57 | WINGS_UUID=22c62a32-c789-4d59-8438-be1c425450c0 # Needs to be changed. |
| 58 | WINGS_TOKEN_ID=1uVXCsVsMOWfbYVK # Needs to be changed. |
| 59 | WINGS_TOKEN=zACf5zVzT0krxOLTA2cNIklV0HaozhdYuVqTMKITpwuRDodmUoELPpn3ybqgLbdl # Needs to be changed. |
| 60 | WINGS_UPLOAD_LIMIT=100 |
| 61 | WINGS_DNS=1.1.1.1 |
| 62 | WINGS_DNS_SECONDARY=8.8.8.8 |
docker-compose.yml
· 5.2 KiB · YAML
Raw
networks:
traefik:
name: $TRAEFIK_NETWORK_NAME
pelican:
wings:
name: $NETWORK_NAME
driver: bridge
driver_opts:
com.docker.network.bridge.name: $NETWORK_NAME
ipam:
config:
- subnet: $NETWORK_SUBNET
configs:
pelican-wings-config:
content: |
app_name: $NAME
uuid: $WINGS_UUID
token_id: $WINGS_TOKEN_ID
token: $WINGS_TOKEN
api:
host: 0.0.0.0
port: $WINGS_PORT
ssl:
enabled: false
upload_limit: $WINGS_UPLOAD_LIMIT
system:
root_directory: $BASE_PATH/wings/servers
data: $BASE_PATH/wings/servers/volumes
archive_directory: $BASE_PATH/wings/servers/archives
backup_directory: $BASE_PATH/wings/servers/backups
tmp_directory: $BASE_PATH/wings/temp
log_directory: $BASE_PATH/wings/logs
timezone: $TIMEZONE
sftp:
bind_address: 0.0.0.0
bind_port: $WINGS_SFTP_PORT
user:
mount_passwd: false
docker:
network:
interface: $NETWORK_GATEWAY
dns:
- $WINGS_DNS
- $WINGS_DNS_SECONDARY
name: $NETWORK_NAME
driver: bridge
network_mode: $NETWORK_NAME
IPv6: false
interfaces:
v4:
subnet: $NETWORK_SUBNET
gateway: $NETWORK_GATEWAY
remote: http://pelican-panel:$PANEL_PORT
allowed_origins:
- http://pelican-panel:$PANEL_PORT
- $PANEL_URL_SCHEME://$PANEL_URL
services:
traefik:
image: $TRAEFIK_IMAGE
restart: unless-stopped
command:
- --global.sendAnonymousUsage=false
- --global.checkNewVersion=false
- --providers.docker=true
- --providers.docker.exposedByDefault=false
- --providers.docker.network=$TRAEFIK_NETWORK_NAME
- --serversTransport.insecureSkipVerify=true
- --entryPoints.web.address=:$TRAEFIK_PORT
- --entryPoints.web.asDefault=true
networks:
- traefik
ports:
- $TRAEFIK_PORT:$TRAEFIK_PORT
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
pelican-database:
image: $DATABASE_IMAGE
restart: unless-stopped
networks:
- pelican
volumes:
- $BASE_PATH/database:/var/lib/mysql
environment:
MYSQL_DATABASE: $DATABASE_NAME
MYSQL_USER: $DATABASE_USER
MYSQL_PASSWORD: $DATABASE_PASS
MYSQL_ROOT_PASSWORD: $DATABASE_ROOT_PASS
pelican-redis:
image: $REDIS_IMAGE
restart: unless-stopped
networks:
- pelican
pelican-panel:
image: $PANEL_IMAGE
restart: unless-stopped
healthcheck:
test: curl -f http://localhost:$PANEL_PORT/up
interval: 10s
timeout: 10s
retries: 10
networks:
- traefik
- pelican
volumes:
- $BASE_PATH/panel:$PANEL_PATH
environment:
XDG_DATA_HOME: $PANEL_PATH
APP_TIMEZONE: $TIMEZONE
APP_URL: $PANEL_URL_SCHEME://$PANEL_URL, http://, https://
APP_DEBUG: $DEBUG
APP_NAME: $NAME
TRUSTED_PROXIES: $TRUSTED_PROXIES
ADMIN_EMAIL: $EMAIL
DB_CONNECTION: $DATABASE_TYPE
DB_HOST: pelican-database
DB_PORT: $DATABASE_PORT
DB_DATABASE: $DATABASE_NAME
DB_USERNAME: $DATABASE_USER
DB_PASSWORD: $DATABASE_PASS
REDIS_HOST: pelican-redis
REDIS_PORT: $REDIS_PORT
CACHE_STORE: redis
SESSION_DRIVER: redis
QUEUE_CONNECTION: redis
FILAMENT_TOP_NAVIGATION: $TOP_NAVIGATION
RECAPTCHA_ENABLED: false
APP_BACKUP_DRIVER: wings
MAIL_MAILER: log
PANEL_CLIENT_ALLOCATIONS_ENABLED: $CLIENT_ALLOCATIONS
PANEL_SEND_INSTALL_NOTIFICATION: false
PANEL_SEND_REINSTALL_NOTIFICATION: false
PANEL_EDITABLE_SERVER_DESCRIPTIONS: $EDITABLE_SERVER_DESCRIPTIONS
PANEL_USE_BINARY_PREFIX: $BINARY_PREFIX
BACKUP_THROTTLE_LIMIT: $BACKUP_THROTTLE_LIMIT
BACKUP_THROTTLE_PERIOD: $BACKUP_THROTTLE_PERIOD
GUZZLE_TIMEOUT: $REQUEST_TIMEOUT
GUZZLE_CONNECT_TIMEOUT: $CONNECT_TIMEOUT
APP_ACTIVITY_PRUNE_DAYS: $ACTIVITY_PRUNE_DAYS
APP_ACTIVITY_HIDE_ADMIN: $ACTIVITY_HIDE_ADMIN
APP_API_CLIENT_RATELIMIT: $CLIENT_RATELIMIT
APP_API_APPLICATION_RATELIMIT: $APPLICATION_RATELIMIT
labels:
- traefik.enable=true
- traefik.http.routers.$PANEL_TRAEFIK_NAME.rule=Host(`$PANEL_URL`)
- traefik.http.services.$PANEL_TRAEFIK_NAME.loadbalancer.server.port=$PANEL_PORT
depends_on:
- pelican-database
- pelican-redis
pelican-wings:
image: $WINGS_IMAGE
restart: unless-stopped
networks:
- traefik
- pelican
- wings
volumes:
- $BASE_PATH/wings/servers:$BASE_PATH/wings/servers
- $BASE_PATH/wings/temp:$BASE_PATH/wings/temp
- $BASE_PATH/wings/logs:$BASE_PATH/wings/logs
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/containers:/var/lib/docker/containers
environment:
TZ: $TIMEZONE
configs:
- source: pelican-wings-config
target: /etc/pelican/config.yml
labels:
- traefik.enable=true
- traefik.http.routers.$WINGS_TRAEFIK_NAME.rule=Host(`$WINGS_URL`)
- traefik.http.services.$WINGS_TRAEFIK_NAME.loadbalancer.server.port=$WINGS_PORT
depends_on:
pelican-panel:
condition: service_healthy
| 1 | networks: |
| 2 | traefik: |
| 3 | name: $TRAEFIK_NETWORK_NAME |
| 4 | |
| 5 | pelican: |
| 6 | |
| 7 | wings: |
| 8 | name: $NETWORK_NAME |
| 9 | driver: bridge |
| 10 | driver_opts: |
| 11 | com.docker.network.bridge.name: $NETWORK_NAME |
| 12 | ipam: |
| 13 | config: |
| 14 | - subnet: $NETWORK_SUBNET |
| 15 | |
| 16 | configs: |
| 17 | pelican-wings-config: |
| 18 | content: | |
| 19 | app_name: $NAME |
| 20 | uuid: $WINGS_UUID |
| 21 | token_id: $WINGS_TOKEN_ID |
| 22 | token: $WINGS_TOKEN |
| 23 | api: |
| 24 | host: 0.0.0.0 |
| 25 | port: $WINGS_PORT |
| 26 | ssl: |
| 27 | enabled: false |
| 28 | upload_limit: $WINGS_UPLOAD_LIMIT |
| 29 | system: |
| 30 | root_directory: $BASE_PATH/wings/servers |
| 31 | data: $BASE_PATH/wings/servers/volumes |
| 32 | archive_directory: $BASE_PATH/wings/servers/archives |
| 33 | backup_directory: $BASE_PATH/wings/servers/backups |
| 34 | tmp_directory: $BASE_PATH/wings/temp |
| 35 | log_directory: $BASE_PATH/wings/logs |
| 36 | timezone: $TIMEZONE |
| 37 | sftp: |
| 38 | bind_address: 0.0.0.0 |
| 39 | bind_port: $WINGS_SFTP_PORT |
| 40 | user: |
| 41 | mount_passwd: false |
| 42 | docker: |
| 43 | network: |
| 44 | interface: $NETWORK_GATEWAY |
| 45 | dns: |
| 46 | - $WINGS_DNS |
| 47 | - $WINGS_DNS_SECONDARY |
| 48 | name: $NETWORK_NAME |
| 49 | driver: bridge |
| 50 | network_mode: $NETWORK_NAME |
| 51 | IPv6: false |
| 52 | interfaces: |
| 53 | v4: |
| 54 | subnet: $NETWORK_SUBNET |
| 55 | gateway: $NETWORK_GATEWAY |
| 56 | remote: http://pelican-panel:$PANEL_PORT |
| 57 | allowed_origins: |
| 58 | - http://pelican-panel:$PANEL_PORT |
| 59 | - $PANEL_URL_SCHEME://$PANEL_URL |
| 60 | |
| 61 | services: |
| 62 | traefik: |
| 63 | image: $TRAEFIK_IMAGE |
| 64 | restart: unless-stopped |
| 65 | command: |
| 66 | - --global.sendAnonymousUsage=false |
| 67 | - --global.checkNewVersion=false |
| 68 | - --providers.docker=true |
| 69 | - --providers.docker.exposedByDefault=false |
| 70 | - --providers.docker.network=$TRAEFIK_NETWORK_NAME |
| 71 | - --serversTransport.insecureSkipVerify=true |
| 72 | - --entryPoints.web.address=:$TRAEFIK_PORT |
| 73 | - --entryPoints.web.asDefault=true |
| 74 | networks: |
| 75 | - traefik |
| 76 | ports: |
| 77 | - $TRAEFIK_PORT:$TRAEFIK_PORT |
| 78 | volumes: |
| 79 | - /var/run/docker.sock:/var/run/docker.sock:ro |
| 80 | |
| 81 | pelican-database: |
| 82 | image: $DATABASE_IMAGE |
| 83 | restart: unless-stopped |
| 84 | networks: |
| 85 | - pelican |
| 86 | volumes: |
| 87 | - $BASE_PATH/database:/var/lib/mysql |
| 88 | environment: |
| 89 | MYSQL_DATABASE: $DATABASE_NAME |
| 90 | MYSQL_USER: $DATABASE_USER |
| 91 | MYSQL_PASSWORD: $DATABASE_PASS |
| 92 | MYSQL_ROOT_PASSWORD: $DATABASE_ROOT_PASS |
| 93 | |
| 94 | pelican-redis: |
| 95 | image: $REDIS_IMAGE |
| 96 | restart: unless-stopped |
| 97 | networks: |
| 98 | - pelican |
| 99 | |
| 100 | pelican-panel: |
| 101 | image: $PANEL_IMAGE |
| 102 | restart: unless-stopped |
| 103 | healthcheck: |
| 104 | test: curl -f http://localhost:$PANEL_PORT/up |
| 105 | interval: 10s |
| 106 | timeout: 10s |
| 107 | retries: 10 |
| 108 | networks: |
| 109 | - traefik |
| 110 | - pelican |
| 111 | volumes: |
| 112 | - $BASE_PATH/panel:$PANEL_PATH |
| 113 | environment: |
| 114 | XDG_DATA_HOME: $PANEL_PATH |
| 115 | APP_TIMEZONE: $TIMEZONE |
| 116 | APP_URL: $PANEL_URL_SCHEME://$PANEL_URL, http://, https:// |
| 117 | APP_DEBUG: $DEBUG |
| 118 | APP_NAME: $NAME |
| 119 | TRUSTED_PROXIES: $TRUSTED_PROXIES |
| 120 | ADMIN_EMAIL: $EMAIL |
| 121 | DB_CONNECTION: $DATABASE_TYPE |
| 122 | DB_HOST: pelican-database |
| 123 | DB_PORT: $DATABASE_PORT |
| 124 | DB_DATABASE: $DATABASE_NAME |
| 125 | DB_USERNAME: $DATABASE_USER |
| 126 | DB_PASSWORD: $DATABASE_PASS |
| 127 | REDIS_HOST: pelican-redis |
| 128 | REDIS_PORT: $REDIS_PORT |
| 129 | CACHE_STORE: redis |
| 130 | SESSION_DRIVER: redis |
| 131 | QUEUE_CONNECTION: redis |
| 132 | FILAMENT_TOP_NAVIGATION: $TOP_NAVIGATION |
| 133 | RECAPTCHA_ENABLED: false |
| 134 | APP_BACKUP_DRIVER: wings |
| 135 | MAIL_MAILER: log |
| 136 | PANEL_CLIENT_ALLOCATIONS_ENABLED: $CLIENT_ALLOCATIONS |
| 137 | PANEL_SEND_INSTALL_NOTIFICATION: false |
| 138 | PANEL_SEND_REINSTALL_NOTIFICATION: false |
| 139 | PANEL_EDITABLE_SERVER_DESCRIPTIONS: $EDITABLE_SERVER_DESCRIPTIONS |
| 140 | PANEL_USE_BINARY_PREFIX: $BINARY_PREFIX |
| 141 | BACKUP_THROTTLE_LIMIT: $BACKUP_THROTTLE_LIMIT |
| 142 | BACKUP_THROTTLE_PERIOD: $BACKUP_THROTTLE_PERIOD |
| 143 | GUZZLE_TIMEOUT: $REQUEST_TIMEOUT |
| 144 | GUZZLE_CONNECT_TIMEOUT: $CONNECT_TIMEOUT |
| 145 | APP_ACTIVITY_PRUNE_DAYS: $ACTIVITY_PRUNE_DAYS |
| 146 | APP_ACTIVITY_HIDE_ADMIN: $ACTIVITY_HIDE_ADMIN |
| 147 | APP_API_CLIENT_RATELIMIT: $CLIENT_RATELIMIT |
| 148 | APP_API_APPLICATION_RATELIMIT: $APPLICATION_RATELIMIT |
| 149 | labels: |
| 150 | - traefik.enable=true |
| 151 | - traefik.http.routers.$PANEL_TRAEFIK_NAME.rule=Host(`$PANEL_URL`) |
| 152 | - traefik.http.services.$PANEL_TRAEFIK_NAME.loadbalancer.server.port=$PANEL_PORT |
| 153 | depends_on: |
| 154 | - pelican-database |
| 155 | - pelican-redis |
| 156 | |
| 157 | pelican-wings: |
| 158 | image: $WINGS_IMAGE |
| 159 | restart: unless-stopped |
| 160 | networks: |
| 161 | - traefik |
| 162 | - pelican |
| 163 | - wings |
| 164 | volumes: |
| 165 | - $BASE_PATH/wings/servers:$BASE_PATH/wings/servers |
| 166 | - $BASE_PATH/wings/temp:$BASE_PATH/wings/temp |
| 167 | - $BASE_PATH/wings/logs:$BASE_PATH/wings/logs |
| 168 | - /var/run/docker.sock:/var/run/docker.sock |
| 169 | - /var/lib/docker/containers:/var/lib/docker/containers |
| 170 | environment: |
| 171 | TZ: $TIMEZONE |
| 172 | configs: |
| 173 | - source: pelican-wings-config |
| 174 | target: /etc/pelican/config.yml |
| 175 | labels: |
| 176 | - traefik.enable=true |
| 177 | - traefik.http.routers.$WINGS_TRAEFIK_NAME.rule=Host(`$WINGS_URL`) |
| 178 | - traefik.http.services.$WINGS_TRAEFIK_NAME.loadbalancer.server.port=$WINGS_PORT |
| 179 | depends_on: |
| 180 | pelican-panel: |
| 181 | condition: service_healthy |