.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 |