forked from photoview/photoview
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.example.yml
More file actions
249 lines (241 loc) · 11.9 KB
/
Copy pathdocker-compose.example.yml
File metadata and controls
249 lines (241 loc) · 11.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
services:
## Makes sure that the media cache folder is created with the correct permissions
photoview-prepare:
image: photoview/photoview:2
hostname: photoview-prepare
container_name: photoview-prepare
network_mode: "none"
user: root
entrypoint: []
command: /bin/bash -c "sleep 1 && chown -R photoview:photoview /home/photoview/media-cache"
cap_add:
- CHOWN
volumes:
- "/etc/localtime:/etc/localtime:ro" ## use local time from host
- "/etc/timezone:/etc/timezone:ro" ## use timezone from host
- "${HOST_PHOTOVIEW_LOCATION}/storage:/home/photoview/media-cache"
photoview:
image: photoview/photoview:2
labels:
- "com.centurylinklabs.watchtower.enable=true"
hostname: photoview
container_name: photoview
restart: unless-stopped
stop_grace_period: 10s
networks:
- ui_net
- api_db_net
ports:
- "8000:80" ## HTTP port (host:container)
## This ensures that DB is initialized and ready for connections.
## Comment out the entire `depends_on` section if PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` in the .env
## Or comment out the `mariadb:` and uncomment the `postgres:` if PHOTOVIEW_DATABASE_DRIVER is set to `postgres`
depends_on:
photoview-prepare:
condition: service_completed_successfully
# postgres:
mariadb:
condition: service_healthy
## Security options for some restricted systems
security_opt:
- seccomp:unconfined
- apparmor:unconfined
environment:
PHOTOVIEW_DATABASE_DRIVER: ${PHOTOVIEW_DATABASE_DRIVER}
## Comment out the next variable in the case PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` or `postgres` in the .env
PHOTOVIEW_MYSQL_URL: "${MARIADB_USER}:${MARIADB_PASSWORD}@tcp(photoview-mariadb)/${MARIADB_DATABASE}"
## Uncomment the next line if PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` in the .env
# PHOTOVIEW_SQLITE_PATH: ${PHOTOVIEW_SQLITE_PATH}
## Uncomment the next line if PHOTOVIEW_DATABASE_DRIVER is set to `postgres` in the .env
# PHOTOVIEW_POSTGRES_URL: postgres://${PGSQL_USER}:${PGSQL_PASSWORD}@photoview-pgsql:5432/${PGSQL_DATABASE}?sslmode=${PGSQL_SSL_MODE}
## Uncomment the next variable if set in the `.env` file
# PHOTOVIEW_UI_ENDPOINTS: ${PHOTOVIEW_UI_ENDPOINTS}
PHOTOVIEW_LISTEN_IP: "0.0.0.0"
## Uncomment the next variable and set a different value to change the port photoview uses inside the container.
## If you change this, remember to update the port mapping (under the `ports:`) above!
# PHOTOVIEW_LISTEN_PORT: 80
## Uncomment the next variable and set a different value to set the location of the media cache inside the container.
## Make sure that you know why you are doing this.
## If you change this, remember to update the corresponding paths in:
## - the command of the `photoview-prepare` service
## - the `photoview-prepare` service's right side of the storage volume mount (under the `volumes:`)
## - the right side of the storage volume mount (under the `volumes:`) below
# PHOTOVIEW_MEDIA_CACHE: "/home/photoview/media-cache"
## Optional: To enable map related features, you need to create a mapbox token.
## A token can be generated for free here https://account.mapbox.com/access-tokens/
## It's a good idea to limit the scope of the token to your own domain, to prevent others from using it.
MAPBOX_TOKEN: ${MAPBOX_TOKEN}
## If you want to use it, set the correct value in the .env file.
## Support `qsv`, `vaapi`, `nvenc`.
## Only `qsv` is verified with `/dev/dri` devices (see below `devices`).
PHOTOVIEW_VIDEO_HARDWARE_ACCELERATION: ${PHOTOVIEW_VIDEO_HARDWARE_ACCELERATION}
## Uncomment the next variable if set in the `.env` file to override the default 5s media probe timeout
# PHOTOVIEW_MEDIA_PROBE_TIMEOUT: ${PHOTOVIEW_MEDIA_PROBE_TIMEOUT}
## Share hardware devices with FFmpeg (optional):
# devices:
## Uncomment next devices mappings if they are available in your host system
## Intel QSV and/or AMD VA-API
# - "/dev/dri:/dev/dri"
## Nvidia CUDA
# - "/dev/nvidia0:/dev/nvidia0"
# - "/dev/nvidiactl:/dev/nvidiactl"
# - "/dev/nvidia-modeset:/dev/nvidia-modeset"
# - "/dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl"
# - "/dev/nvidia-uvm:/dev/nvidia-uvm"
# - "/dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools"
## Video4Linux Video Encode Device (h264_v4l2m2m)
# - "/dev/video11:/dev/video11"
volumes:
## Example:
## - "/host/folder:/container/folder"
- "/etc/localtime:/etc/localtime:ro" ## use local time from host
- "/etc/timezone:/etc/timezone:ro" ## use timezone from host
## Uncomment the next line if PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` in the .env
# - "${HOST_PHOTOVIEW_LOCATION}/database:/home/photoview/database"
- "${HOST_PHOTOVIEW_LOCATION}/storage:/home/photoview/media-cache"
## Change This in the .env file: to the directory where your photos are located on your server.
## You can mount multiple paths if your photos are spread across multiple directories.
## The same path as the container path set here, you'll need to provide on the Photoview's init page (the one between the ':' chars).
## If you mount several folders, provide the path to the parent one on the init page.
## If you mount several folders, make sure that there are no direct mappings to the media root folder.
## This means that you need to also modify the container path of the HOST_PHOTOVIEW_MEDIA_ROOT
## to something like '/photos/main'. Note that this new name ('main' in this example) will become an album in Photoview.
- "${HOST_PHOTOVIEW_MEDIA_ROOT}:/photos:ro"
## *Additional* media folders can be mounted like this (set the variable in .env file)
## Note that a mount cannot be located in a subfolder of another mount.
# - "${HOST_PHOTOVIEW_MEDIA_FAMILY}:/photos/Family:ro"
## Watchtower upgrades services automatically (optional)
## WARNING: the automatic version upgrades may silently generate unexpected problems,
## so please periodically check the logs
watchtower:
image: nickfedor/watchtower:latest
hostname: watchtower
container_name: watchtower
networks:
- ext_only_net
restart: unless-stopped
environment:
## Comment out the next variable if you want Watchtower to auto-update all containers, running on the host,
## while now it will update only those with the label "com.centurylinklabs.watchtower.enable=true"
WATCHTOWER_LABEL_ENABLE: true
WATCHTOWER_CLEANUP: ${WATCHTOWER_CLEANUP}
WATCHTOWER_POLL_INTERVAL: ${WATCHTOWER_POLL_INTERVAL}
WATCHTOWER_TIMEOUT: ${WATCHTOWER_TIMEOUT}
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "~/.docker/config.json:/config.json:ro" ## optional, for authentication if you have a Docker Hub account
- "/etc/localtime:/etc/localtime:ro" ## use local time from host
- "/etc/timezone:/etc/timezone:ro" ## use timezone from host
## Comment out the `mariadb` service if PHOTOVIEW_DATABASE_DRIVER is set to `sqlite` or `postgres` in the .env
mariadb:
image: mariadb:lts
labels:
- "com.centurylinklabs.watchtower.enable=true"
hostname: photoview-mariadb
container_name: photoview-mariadb
restart: unless-stopped
stop_grace_period: 5s
## Optimized MariaDB startup command for better performance and compatibility
command: mariadbd --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-connections=512 --innodb-rollback-on-timeout=OFF --innodb-lock-wait-timeout=120
security_opt: ## see https://github.com/MariaDB/mariadb-docker/issues/434#issuecomment-1136151239
- seccomp:unconfined
- apparmor:unconfined
networks:
- api_db_net
## Comment the previous one and uncomment the following 3 lines if you want to access the database directly
# - ui_net
# ports:
# - "3306:3306" ## host:container
environment:
MARIADB_AUTO_UPGRADE: "1"
MARIADB_DATABASE: ${MARIADB_DATABASE}
MARIADB_USER: ${MARIADB_USER}
MARIADB_PASSWORD: ${MARIADB_PASSWORD}
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
volumes:
## Example:
## - "/host/folder:/container/folder"
- "/etc/localtime:/etc/localtime:ro" ## use local time from host
- "/etc/timezone:/etc/timezone:ro" ## use timezone from host
- "${HOST_PHOTOVIEW_LOCATION}/database/mariadb:/var/lib/mysql" ## DO NOT REMOVE
healthcheck:
test: healthcheck.sh --connect --innodb_initialized
interval: 1m
timeout: 5s
retries: 5
start_period: 3m
## Uncomment the `postgres-autoupgrade` service if you want to upgrade PostgreSQL automatically, or follow the
## official PostgreSQL upgrade guide https://www.postgresql.org/docs/current/upgrading.html manually.
## Don't forget to uncomment the 3 `depends_on` lines in the `postgres` service.
## This service will upgrade the PostgreSQL database to the version, specified in the `image` tag.
## Read more on the https://hub.docker.com/r/pgautoupgrade/pgautoupgrade
## Tip: Back up the Photoview data before autoupgrade to a new PostgreSQL version.
## It is an optional service to simplify the upgrade process. You can also upgrade PostgreSQL manually.
## It is safe to keep it enabled, as if it detects no upgrade is needed, it exits immediately.
# postgres-autoupgrade:
# image: pgautoupgrade/pgautoupgrade:18-alpine
# hostname: pgsql-upg
# container_name: pgsql-upg
# network_mode: "none"
# restart: "no"
# environment:
# POSTGRES_DB: ${PGSQL_DATABASE}
# POSTGRES_USER: ${PGSQL_USER}
# POSTGRES_PASSWORD: ${PGSQL_PASSWORD}
# PGAUTO_ONESHOT: "yes"
# volumes:
# ## Example:
# ## - "/host/folder:/container/folder"
# - "/etc/localtime:/etc/localtime:ro" ## use local time from host
# - "/etc/timezone:/etc/timezone:ro" ## use timezone from host
# - "${HOST_PHOTOVIEW_LOCATION}/database/postgres:/var/lib/postgresql" ## DO NOT REMOVE
## Uncomment the `postgres` service if PHOTOVIEW_DATABASE_DRIVER is set to `postgres` in the .env
# postgres:
# image: postgres:18-alpine
# labels:
# - "com.centurylinklabs.watchtower.enable=true"
# hostname: photoview-pgsql
# container_name: photoview-pgsql
# restart: unless-stopped
# stop_grace_period: 5s
# ## Security options for some restricted systems
# security_opt:
# - seccomp:unconfined
# - apparmor:unconfined
# ## Uncomment the following 3 lines if you want to use the autoupgrade service
# #depends_on:
# # postgres-autoupgrade:
# # condition: service_completed_successfully
# networks:
# - api_db_net
# ## Comment the previous one and uncomment the following 3 lines if you want to access the database directly
# # - ui_net
# # ports:
# # - "5432:5432" ## host:container
# environment:
# POSTGRES_DB: ${PGSQL_DATABASE}
# POSTGRES_USER: ${PGSQL_USER}
# POSTGRES_PASSWORD: ${PGSQL_PASSWORD}
# ## See other optional variables in the https://hub.docker.com/_/postgres
# volumes:
# ## Example:
# ## - "/host/folder:/container/folder"
# - "/etc/localtime:/etc/localtime:ro" ## use local time from host
# - "/etc/timezone:/etc/timezone:ro" ## use timezone from host
# - "${HOST_PHOTOVIEW_LOCATION}/database/postgres:/var/lib/postgresql" ## DO NOT REMOVE
# healthcheck:
# test: pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB
# interval: 1m
# timeout: 5s
# retries: 5
# start_period: 3m
networks:
# Network for external communication
ui_net:
driver: bridge
# Network for Backend <-> DB communication (Internal only)
api_db_net:
internal: true
# Network for the Watchtower that needs internet but no local services
ext_only_net:
driver: bridge