Compare commits

...

190 Commits

Author SHA1 Message Date
LinuxServer-CI
c0059dbb4c
Bot Updating Package Versions 2026-02-13 22:01:36 +00:00
LinuxServer-CI
56055aa6a0
Bot Updating Templated Files 2026-02-13 21:58:35 +00:00
LinuxServer-CI
a0d4355e86
Bot Updating Templated Files 2026-02-13 21:56:33 +00:00
LinuxServer-CI
e4b3d3ccd3
Bot Updating Package Versions 2026-02-06 21:51:21 +00:00
LinuxServer-CI
c20dbc25df
Bot Updating Package Versions 2026-01-30 21:47:34 +00:00
LinuxServer-CI
fb815113e5
Bot Updating Package Versions 2026-01-23 21:42:10 +00:00
LinuxServer-CI
9b25ea0099
Bot Updating Package Versions 2026-01-09 21:41:08 +00:00
LinuxServer-CI
eb337d72cb
Bot Updating Package Versions 2026-01-04 21:13:00 +00:00
LinuxServer-CI
4eaf850b64
Bot Updating Templated Files 2026-01-04 21:10:10 +00:00
Adam
e3964e4b6d
Merge pull request #47 from linuxserver/3.23 2026-01-04 21:08:25 +00:00
LinuxServer-CI
4f30796c5c
Bot Updating Package Versions 2026-01-02 21:35:26 +00:00
thespad
8ac2e21838
Rebase to 3.23 2025-12-28 22:01:22 +00:00
LinuxServer-CI
4659e0090b
Bot Updating Package Versions 2025-12-26 21:38:00 +00:00
LinuxServer-CI
854afccafc
Bot Updating Package Versions 2025-12-19 21:38:24 +00:00
LinuxServer-CI
4bb4ad52d3
Bot Updating Package Versions 2025-12-12 21:37:25 +00:00
LinuxServer-CI
c3de785282
Bot Updating Package Versions 2025-11-28 21:35:16 +00:00
LinuxServer-CI
84115e1a40
Bot Updating Package Versions 2025-11-21 21:37:49 +00:00
LinuxServer-CI
98ced01b70
Bot Updating Templated Files 2025-11-21 21:34:35 +00:00
LinuxServer-CI
d3b89281e2
Bot Updating Package Versions 2025-11-14 21:36:18 +00:00
LinuxServer-CI
58f8835c03
Bot Updating Package Versions 2025-10-24 21:36:32 +00:00
LinuxServer-CI
65ed762857
Bot Updating Templated Files 2025-10-24 21:33:44 +00:00
LinuxServer-CI
6755d5d983
Bot Updating Package Versions 2025-10-17 21:33:52 +00:00
LinuxServer-CI
1364bb70ea
Bot Updating Package Versions 2025-10-10 21:33:56 +00:00
LinuxServer-CI
acec2facee
Bot Updating Package Versions 2025-10-08 04:50:37 +00:00
LinuxServer-CI
59074fd8f5
Bot Updating Package Versions 2025-10-03 21:35:06 +00:00
LinuxServer-CI
48f3306612
Bot Updating Package Versions 2025-09-26 21:34:33 +00:00
LinuxServer-CI
0cdb3767ff
Bot Updating Package Versions 2025-09-19 21:34:25 +00:00
LinuxServer-CI
5ceb767175
Bot Updating Templated Files 2025-08-23 12:50:21 +00:00
Adam
0b1cf5b6c2
Merge pull request #46 from linuxserver/sync-config 2025-08-23 13:48:21 +01:00
thespad
baf96c9469
Sync default config with upstream to support mTLS 2025-08-23 10:34:08 +01:00
LinuxServer-CI
20932b1b9d
Bot Updating Package Versions 2025-08-22 21:38:32 +00:00
LinuxServer-CI
b525490c17
Bot Updating Package Versions 2025-08-15 21:36:37 +00:00
LinuxServer-CI
2a3d7e50ed
Bot Updating Package Versions 2025-08-08 21:39:31 +00:00
LinuxServer-CI
d4fb12cc0c
Bot Updating Package Versions 2025-08-01 21:41:04 +00:00
LinuxServer-CI
ac2d0458ad
Bot Updating Package Versions 2025-07-25 21:41:15 +00:00
thespad
9ee6f0be97
Fix error line 2025-07-15 10:25:30 +01:00
Adam
37d0a6ba18
Merge pull request #44 from linuxserver/php-conf 2025-07-15 09:37:20 +01:00
LinuxServer-CI
22ee426242
Bot Updating Package Versions 2025-07-11 21:39:38 +00:00
thespad
87834f7f36
Fix php conf 2025-07-11 13:26:49 +01:00
LinuxServer-CI
e83b0fc4aa
Bot Updating Package Versions 2025-07-05 19:39:06 +00:00
LinuxServer-CI
b89a64e067
Bot Updating Templated Files 2025-07-05 19:34:21 +00:00
Adam
a2cf3f8f88
Merge pull request #43 from linuxserver/3.22 2025-07-05 20:30:24 +01:00
thespad
74d4861bf5
Rebase to 3.22 2025-07-05 16:00:46 +01:00
LinuxServer-CI
2727f2593a
Bot Updating Templated Files 2025-07-04 21:39:00 +00:00
LinuxServer-CI
b9dd92ea41
Bot Updating Templated Files 2025-07-04 21:37:16 +00:00
LinuxServer-CI
f43cec1294
Bot Updating Templated Files 2025-06-13 21:38:49 +00:00
LinuxServer-CI
ae94d56468
Bot Updating Package Versions 2025-05-16 21:37:51 +00:00
LinuxServer-CI
ed5be3e92c
Bot Updating Templated Files 2025-05-16 21:35:13 +00:00
LinuxServer-CI
ab7bdd7a3b
Bot Updating Package Versions 2025-04-18 21:35:23 +00:00
LinuxServer-CI
214794a5d3
Bot Updating Package Versions 2025-04-11 21:34:50 +00:00
LinuxServer-CI
2f8e8d1f95
Bot Updating Package Versions 2025-04-04 21:36:06 +00:00
LinuxServer-CI
1fbf2bb844
Bot Updating Package Versions 2025-03-28 21:35:46 +00:00
LinuxServer-CI
72599daf03
Bot Updating Package Versions 2025-03-21 21:34:32 +00:00
LinuxServer-CI
22b0bc15a2
Bot Updating Package Versions 2025-03-14 21:36:32 +00:00
LinuxServer-CI
58cd756865
Bot Updating Package Versions 2025-02-28 21:34:20 +00:00
LinuxServer-CI
38b8983324
Bot Updating Package Versions 2025-02-21 21:33:11 +00:00
LinuxServer-CI
c32cbd3fb2
Bot Updating Package Versions 2025-02-14 21:35:12 +00:00
LinuxServer-CI
24e293bfda
Bot Updating Templated Files 2025-02-14 21:32:32 +00:00
LinuxServer-CI
375c9c7258
Bot Updating Templated Files 2025-01-31 21:34:11 +00:00
LinuxServer-CI
cdfdf4631d
Bot Updating Templated Files 2025-01-31 21:32:33 +00:00
LinuxServer-CI
52c57a5320
Bot Updating Package Versions 2025-01-22 18:05:26 +00:00
quietsy
165bac22bc
Merge pull request #42 from linuxserver/add-project-categories
Add categories to readme-vars.yml
2025-01-22 19:55:58 +02:00
quietsy
540cf458e1 Add categories to readme-vars.yml 2025-01-22 17:12:36 +02:00
LinuxServer-CI
e3d04c99b8
Bot Updating Package Versions 2025-01-21 20:48:50 +00:00
LinuxServer-CI
113b7f1c60
Bot Updating Package Versions 2025-01-17 21:33:20 +00:00
LinuxServer-CI
08223dccb6
Bot Updating Package Versions 2025-01-06 16:30:59 +00:00
thespad
1c45555328
Fix RO/Nonroot typo 2025-01-06 16:28:05 +00:00
LinuxServer-CI
f1305d5910
Bot Updating Package Versions 2025-01-03 21:34:02 +00:00
LinuxServer-CI
2804850cac
Bot Updating Package Versions 2024-12-20 16:22:43 +00:00
LinuxServer-CI
d4084fc5eb
Bot Updating Templated Files 2024-12-20 16:18:20 +00:00
Adam
00c74772c6
Merge pull request #41 from linuxserver/3.21 2024-12-20 16:16:38 +00:00
thespad
c931d11c35
Rebase to 3.21 2024-12-20 15:55:06 +00:00
LinuxServer-CI
807349cc65
Bot Updating Package Versions 2024-12-13 21:35:30 +00:00
LinuxServer-CI
6600779a3e
Bot Updating Templated Files 2024-12-06 21:38:32 +00:00
LinuxServer-CI
355cd40e41
Bot Updating Templated Files 2024-12-06 21:36:54 +00:00
LinuxServer-CI
958d41ac94
Bot Updating Templated Files 2024-12-06 21:35:13 +00:00
Adam
be807d5845
Merge pull request #40 from linuxserver/base64 2024-11-26 16:48:10 +00:00
thespad
fcf6b03640
Consistent comparison brackets 2024-11-26 15:58:03 +00:00
thespad
127ec18710
Support BASE64 config input to match official image 2024-11-26 15:57:16 +00:00
LinuxServer-CI
a229bb5357
Bot Updating Package Versions 2024-11-22 21:34:31 +00:00
LinuxServer-CI
b0de0b2b1c
Bot Updating Templated Files 2024-11-15 21:37:11 +00:00
LinuxServer-CI
f974e22614
Bot Updating Templated Files 2024-11-15 21:35:16 +00:00
LinuxServer-CI
2bce842a16
Bot Updating Package Versions 2024-10-25 21:36:25 +00:00
LinuxServer-CI
cc4ca73e4d
Bot Updating Templated Files 2024-10-04 21:32:40 +00:00
LinuxServer-CI
0baa594dd4
Bot Updating Package Versions 2024-09-27 21:41:05 +00:00
LinuxServer-CI
fcf25c4eda
Bot Updating Templated Files 2024-09-27 21:38:09 +00:00
LinuxServer-CI
00a294fa5f
Bot Updating Templated Files 2024-09-27 21:36:39 +00:00
LinuxServer-CI
e12b27aeff
Bot Updating Templated Files 2024-09-27 21:34:40 +00:00
LinuxServer-CI
044352c1c7
Bot Updating Package Versions 2024-09-20 21:34:03 +00:00
LinuxServer-CI
d74501408c
Bot Updating Package Versions 2024-09-13 21:33:02 +00:00
LinuxServer-CI
890018025c
Bot Updating Package Versions 2024-09-06 21:35:04 +00:00
LinuxServer-CI
d1250e0c73
Bot Updating Package Versions 2024-08-23 21:37:15 +00:00
LinuxServer-CI
6f40e6b986
Bot Updating Templated Files 2024-08-23 21:35:15 +00:00
LinuxServer-CI
d2aa3b5800 Bot Updating Templated Files 2024-08-23 21:33:21 +00:00
LinuxServer-CI
cca2eba90f Bot Updating Package Versions 2024-08-16 21:33:26 +00:00
Adam
fa76d93549
Merge pull request #37 from linuxserver/migrations-x 2024-08-13 16:21:40 +01:00
thespad
0b7530a022
Make migrations executable 2024-08-13 15:16:17 +01:00
LinuxServer-CI
d002d3f49b Bot Updating Package Versions 2024-08-09 21:35:03 +00:00
LinuxServer-CI
6f2318ca60 Bot Updating Package Versions 2024-08-02 21:33:13 +00:00
driz
3339da0ed8
Merge pull request #36 from linuxserver/ipv6-listen
separate ipv6 listen in default site-conf
2024-08-01 08:51:42 -04:00
LinuxServer-CI
af18e9e0d0 Bot Updating Package Versions 2024-07-26 21:33:05 +00:00
LinuxServer-CI
c02d95646f Bot Updating Package Versions 2024-07-19 21:32:55 +00:00
Eric Nemchik
502b26ae15
separate ipv6 listen in default site-conf 2024-07-16 20:32:23 -05:00
LinuxServer-CI
da7e4e0729 Bot Updating Package Versions 2024-07-12 21:37:03 +00:00
LinuxServer-CI
0cf6c63aba Bot Updating Templated Files 2024-07-12 21:34:54 +00:00
LinuxServer-CI
ba8b1a03c2 Bot Updating Templated Files 2024-07-12 21:32:55 +00:00
LinuxServer-CI
8524d75039 Bot Updating Package Versions 2024-07-05 21:33:13 +00:00
LinuxServer-CI
826226d218 Bot Updating Package Versions 2024-06-28 21:33:15 +00:00
LinuxServer-CI
aa2abf8525 Bot Updating Package Versions 2024-06-14 21:33:37 +00:00
LinuxServer-CI
8d9695bb82 Bot Updating Package Versions 2024-06-07 21:33:23 +00:00
LinuxServer-CI
df7024aae2 Bot Updating Package Versions 2024-05-31 21:32:59 +00:00
LinuxServer-CI
8c1436aff9 Bot Updating Package Versions 2024-05-29 13:54:59 +00:00
LinuxServer-CI
573c246fb9 Bot Updating Templated Files 2024-05-29 13:51:12 +00:00
Adam
4aa47b8ec9
Merge pull request #35 from linuxserver/http2-readme
Update http2 config
2024-05-29 14:49:52 +01:00
thespad
40e51f828f
Use wildcard listener 2024-05-29 13:59:02 +01:00
thespad
aff611c862
Update http2 wording 2024-05-28 20:11:35 +01:00
thespad
dc1c33b20c
Update http2 config 2024-05-28 19:50:24 +01:00
LinuxServer-CI
3a9c5990fa Bot Updating Package Versions 2024-05-24 19:23:23 +00:00
Adam
2268507361
Merge pull request #34 from linuxserver/3.20
Rebase to 3.20
2024-05-24 20:20:55 +01:00
thespad
2de875542b
Rebase to 3.20 2024-05-24 14:51:43 +01:00
LinuxServer-CI
46ea1ca29f Bot Updating Package Versions 2024-05-17 21:33:46 +00:00
LinuxServer-CI
531ad5379e Bot Updating Package Versions 2024-05-10 21:36:12 +00:00
LinuxServer-CI
494bb620fd Bot Updating Templated Files 2024-05-10 21:33:54 +00:00
LinuxServer-CI
abbde6f355 Bot Updating Package Versions 2024-05-03 21:36:16 +00:00
LinuxServer-CI
d68d163e4f Bot Updating Templated Files 2024-05-03 21:32:34 +00:00
LinuxServer-CI
b118b52efa Bot Updating Package Versions 2024-04-26 21:34:47 +00:00
LinuxServer-CI
55fa1f6f7d Bot Updating Package Versions 2024-04-19 21:35:10 +00:00
LinuxServer-CI
093c195510 Bot Updating Package Versions 2024-04-12 21:34:49 +00:00
LinuxServer-CI
fb8599efca Bot Updating Package Versions 2024-04-05 21:33:47 +00:00
LinuxServer-CI
270997b98f Bot Updating Package Versions 2024-03-29 21:33:21 +00:00
LinuxServer-CI
4d30058c1a Bot Updating Package Versions 2024-03-22 21:35:03 +00:00
LinuxServer-CI
74411a912e Bot Updating Package Versions 2024-03-15 21:35:10 +00:00
LinuxServer-CI
96c5def5ed Bot Updating Templated Files 2024-03-15 21:32:52 +00:00
LinuxServer-CI
818593078c Bot Updating Package Versions 2024-03-01 21:33:31 +00:00
LinuxServer-CI
1cbc8d9fb3 Bot Updating Package Versions 2024-02-23 21:36:59 +00:00
LinuxServer-CI
95a7863866 Bot Updating Templated Files 2024-02-23 21:34:37 +00:00
LinuxServer-CI
76716dd428 Bot Updating Templated Files 2024-02-23 21:33:00 +00:00
LinuxServer-CI
b2eac5ca57 Bot Updating Package Versions 2024-02-16 21:34:55 +00:00
LinuxServer-CI
e843a70183 Bot Updating Package Versions 2024-02-09 21:34:30 +00:00
LinuxServer-CI
4cb7a7700f Bot Updating Package Versions 2024-02-02 21:34:33 +00:00
LinuxServer-CI
e9926c30ee Bot Updating Package Versions 2024-01-19 21:33:20 +00:00
LinuxServer-CI
089d38e545 Bot Updating Package Versions 2024-01-12 21:39:50 +00:00
LinuxServer-CI
1cbaea0ae6 Bot Updating Templated Files 2024-01-12 21:37:21 +00:00
LinuxServer-CI
2c7d9f6208 Bot Updating Templated Files 2024-01-12 21:33:13 +00:00
LinuxServer-CI
5cd0a15f0f Bot Updating Package Versions 2024-01-05 21:34:04 +00:00
LinuxServer-CI
f865f33b59 Bot Updating Package Versions 2023-12-28 18:39:52 +00:00
LinuxServer-CI
8c48a54f0a Bot Updating Templated Files 2023-12-28 18:37:38 +00:00
Eric Nemchik
6bfd9342a4
Merge pull request #32 from linuxserver/3.19
Rebase to Alpine 3.19 with php 8.3
2023-12-28 12:35:06 -06:00
Eric Nemchik
f62ee0a18e
Merge branch 'main' into 3.19 2023-12-28 12:34:59 -06:00
LinuxServer-CI
a6367d0a19 Bot Updating Templated Files 2023-12-27 13:34:13 +00:00
Eric Nemchik
5efe25cee0
Merge pull request #33 from linuxserver/nginx-cleanup
Cleanup default site conf
2023-12-27 07:31:56 -06:00
Eric Nemchik
bd026ff1a9
Cleanup default site conf
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-12-25 14:20:47 -06:00
Eric Nemchik
e730103ed8
Readme adjustment
Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-12-23 16:15:02 -06:00
LinuxServer-CI
a0f0416c35 Bot Updating Package Versions 2023-12-22 21:34:16 +00:00
Eric Nemchik
80caf4a51a
Rebase to Alpine 3.19 with php 8.3
Signed-off-by: GitHub <noreply@github.com>
2023-12-21 20:20:29 +00:00
LinuxServer-CI
eb7a410eba Bot Updating Package Versions 2023-12-15 21:34:29 +00:00
LinuxServer-CI
0ace5e68f1 Bot Updating Package Versions 2023-12-08 21:33:51 +00:00
LinuxServer-CI
ce049f41c7 Bot Updating Package Versions 2023-12-01 21:34:13 +00:00
Eric Nemchik
4b81ec575f
Merge pull request #31 from linuxserver/quiet-migration
only run migration if conf exists
2023-11-28 13:52:10 -06:00
Eric Nemchik
ca685c3da2
only run migration if conf exists
redirect stderr to /dev/null

Signed-off-by: Eric Nemchik <eric@nemchik.com>
2023-11-25 10:43:11 -06:00
LinuxServer-CI
6fd7e5403e Bot Updating Package Versions 2023-11-24 21:33:20 +00:00
LinuxServer-CI
a0a65f42d7 Bot Updating Package Versions 2023-11-17 21:36:30 +00:00
LinuxServer-CI
8fea50fc4b Bot Updating Templated Files 2023-11-17 21:32:44 +00:00
LinuxServer-CI
d7f795a691 Bot Updating Package Versions 2023-11-10 21:36:58 +00:00
LinuxServer-CI
2451a16ab9 Bot Updating Package Versions 2023-11-03 21:33:17 +00:00
LinuxServer-CI
068bc8dc34 Bot Updating Package Versions 2023-10-27 21:34:38 +00:00
LinuxServer-CI
4cb66aafb8 Bot Updating Package Versions 2023-10-20 21:34:36 +00:00
LinuxServer-CI
1ae95a9685 Bot Updating Package Versions 2023-10-13 21:36:10 +00:00
LinuxServer-CI
16d36478d5 Bot Updating Templated Files 2023-10-13 21:32:50 +00:00
LinuxServer-CI
2edc1f5923 Bot Updating Package Versions 2023-10-06 21:38:25 +00:00
LinuxServer-CI
e0a7b153f4 Bot Updating Templated Files 2023-10-06 21:35:08 +00:00
LinuxServer-CI
bcdca485da Bot Updating Templated Files 2023-10-06 21:32:44 +00:00
LinuxServer-CI
eef8412f99 Bot Updating Package Versions 2023-09-29 21:35:00 +00:00
LinuxServer-CI
8565262b69 Bot Updating Package Versions 2023-09-22 21:33:23 +00:00
LinuxServer-CI
0269708fb3 Bot Updating Package Versions 2023-09-15 21:33:25 +00:00
LinuxServer-CI
987ec83d9e Bot Updating Package Versions 2023-09-08 21:33:35 +00:00
driz
54eb354315
Merge pull request #30 from linuxserver/themes
Add support for custom themes
2023-09-06 06:59:00 -05:00
TheSpad
932d42308c
Add support for custom themes 2023-09-06 10:16:38 +01:00
LinuxServer-CI
bc55d96f8e Bot Updating Package Versions 2023-09-01 21:33:29 +00:00
LinuxServer-CI
613470f106 Bot Updating Package Versions 2023-08-18 21:36:41 +00:00
LinuxServer-CI
c100ae61db Bot Updating Package Versions 2023-08-11 21:34:34 +00:00
LinuxServer-CI
286f11f0ee Bot Updating Package Versions 2023-08-04 21:33:12 +00:00
LinuxServer-CI
3a712e8d5d Bot Updating Package Versions 2023-07-28 21:34:12 +00:00
LinuxServer-CI
6054d7156b Bot Updating Package Versions 2023-07-21 21:33:22 +00:00
LinuxServer-CI
c59ef6c3b0 Bot Updating Package Versions 2023-07-14 21:35:50 +00:00
LinuxServer-CI
3a0ab523ba Bot Updating Package Versions 2023-07-07 21:34:45 +00:00
LinuxServer-CI
e583b1929b Bot Updating Templated Files 2023-07-07 21:32:46 +00:00
LinuxServer-CI
2c75b48c18 Bot Updating Package Versions 2023-06-30 21:33:09 +00:00
LinuxServer-CI
d4119dc43f Bot Updating Package Versions 2023-06-23 21:35:20 +00:00
LinuxServer-CI
1465e5d105 Bot Updating Package Versions 2023-06-16 21:34:03 +00:00
25 changed files with 1373 additions and 727 deletions

0
.editorconfig Executable file → Normal file
View File

View File

@ -6,7 +6,7 @@
* Read, and fill the Pull Request template * Read, and fill the Pull Request template
* If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR * If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR
* If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message * If the PR is addressing an existing issue include, closes #\<issue number>, in the body of the PR commit message
* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://discord.gg/YWrKVTn) * If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://linuxserver.io/discord)
## Common files ## Common files
@ -105,10 +105,10 @@ docker build \
-t linuxserver/phpmyadmin:latest . -t linuxserver/phpmyadmin:latest .
``` ```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static` The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash ```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
``` ```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`. Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.

View File

@ -1,7 +1,7 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Discord chat support - name: Discord chat support
url: https://discord.gg/YWrKVTn url: https://linuxserver.io/discord
about: Realtime support / chat with the community and the team. about: Realtime support / chat with the community and the team.
- name: Discourse discussion forum - name: Discourse discussion forum

4
.github/ISSUE_TEMPLATE/issue.bug.yml vendored Executable file → Normal file
View File

@ -67,10 +67,10 @@ body:
- type: textarea - type: textarea
attributes: attributes:
description: | description: |
Provide a full docker log, output of "docker logs linuxserver.io" Provide a full docker log, output of "docker logs phpmyadmin"
label: Container logs label: Container logs
placeholder: | placeholder: |
Output of `docker logs linuxserver.io` Output of `docker logs phpmyadmin`
render: bash render: bash
validations: validations:
required: true required: true

0
.github/ISSUE_TEMPLATE/issue.feature.yml vendored Executable file → Normal file
View File

3
.github/workflows/call_issue_pr_tracker.yml vendored Executable file → Normal file
View File

@ -8,6 +8,9 @@ on:
pull_request_review: pull_request_review:
types: [submitted,edited,dismissed] types: [submitted,edited,dismissed]
permissions:
contents: read
jobs: jobs:
manage-project: manage-project:
permissions: permissions:

3
.github/workflows/call_issues_cron.yml vendored Executable file → Normal file
View File

@ -4,6 +4,9 @@ on:
- cron: '11 3 * * *' - cron: '11 3 * * *'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
stale: stale:
permissions: permissions:

View File

@ -3,26 +3,42 @@ name: External Trigger Main
on: on:
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
external-trigger-main: external-trigger-main:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
- name: External Trigger - name: External Trigger
if: github.ref == 'refs/heads/main' if: github.ref == 'refs/heads/main'
env:
SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }}
run: | run: |
if [ -n "${{ secrets.PAUSE_EXTERNAL_TRIGGER_PHPMYADMIN_MAIN }}" ]; then printf "# External trigger for docker-phpmyadmin\n\n" >> $GITHUB_STEP_SUMMARY
echo "**** Github secret PAUSE_EXTERNAL_TRIGGER_PHPMYADMIN_MAIN is set; skipping trigger. ****" if grep -q "^phpmyadmin_main_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "Github secret \`PAUSE_EXTERNAL_TRIGGER_PHPMYADMIN_MAIN\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`phpmyadmin_main_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY
elif grep -q "^phpmyadmin_main" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`phpmyadmin_main\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
fi fi
echo "**** External trigger running off of main branch. To disable this trigger, set a Github secret named \"PAUSE_EXTERNAL_TRIGGER_PHPMYADMIN_MAIN\". ****" echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "External trigger running off of main branch. To disable this trigger, set a Github secret named \`PAUSE_EXTERNAL_TRIGGER_PHPMYADMIN_MAIN\`" >> $GITHUB_STEP_SUMMARY echo "> External trigger running off of main branch. To disable this trigger, add \`phpmyadmin_main\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving external version ****" printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY
EXT_RELEASE=$(curl -sL 'https://www.phpmyadmin.net/home_page/version.txt' | head -n 1 | cut -d ' ' -f 1) EXT_RELEASE=$(curl -sL 'https://www.phpmyadmin.net/home_page/version.txt' | head -n 1 | cut -d ' ' -f 1)
echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY
if grep -q "^phpmyadmin_main_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then
echo "**** Can't retrieve external version, exiting ****" echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve external version for phpmyadmin branch main" FAILURE_REASON="Can't retrieve external version for phpmyadmin branch main"
GHA_TRIGGER_URL="https://github.com/linuxserver/docker-phpmyadmin/actions/runs/${{ github.run_id }}" GHA_TRIGGER_URL="https://github.com/linuxserver/docker-phpmyadmin/actions/runs/${{ github.run_id }}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
@ -30,25 +46,43 @@ jobs:
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
EXT_RELEASE=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g')
echo "**** External version: ${EXT_RELEASE} ****" echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY
echo "External version: ${EXT_RELEASE}" >> $GITHUB_STEP_SUMMARY echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY
echo "**** Retrieving last pushed version ****"
image="linuxserver/phpmyadmin" image="linuxserver/phpmyadmin"
tag="latest" tag="latest"
token=$(curl -sX GET \ token=$(curl -sX GET \
"https://ghcr.io/token?scope=repository%3Alinuxserver%2Fphpmyadmin%3Apull" \ "https://ghcr.io/token?scope=repository%3Alinuxserver%2Fphpmyadmin%3Apull" \
| jq -r '.token') | jq -r '.token')
multidigest=$(curl -s \ multidigest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.index.v1+json" \
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}")
if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then
# If there's a layer element it's a single-arch manifest so just get that digest
digest=$(jq -r '.config.digest' <<< "${multidigest}")
else
# Otherwise it's multi-arch or has manifest annotations
if jq -e '.manifests[]?.annotations // empty' <<< "${multidigest}" >/dev/null 2>&1; then
# Check for manifest annotations and delete if found
multidigest=$(jq 'del(.manifests[] | select(.annotations))' <<< "${multidigest}")
fi
if [[ $(jq '.manifests | length' <<< "${multidigest}") -gt 1 ]]; then
# If there's still more than one digest, it's multi-arch
multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}")
else
# Otherwise it's single arch
multidigest=$(jq -r ".manifests[].digest?" <<< "${multidigest}")
fi
if digest=$(curl -s \
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \
--header "Accept: application/vnd.oci.image.manifest.v1+json" \
--header "Authorization: Bearer ${token}" \ --header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${tag}" \ "https://ghcr.io/v2/${image}/manifests/${multidigest}"); then
| jq -r 'first(.manifests[].digest)') digest=$(jq -r '.config.digest' <<< "${digest}");
digest=$(curl -s \ fi
--header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ fi
--header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/manifests/${multidigest}" \
| jq -r '.config.digest')
image_info=$(curl -sL \ image_info=$(curl -sL \
--header "Authorization: Bearer ${token}" \ --header "Authorization: Bearer ${token}" \
"https://ghcr.io/v2/${image}/blobs/${digest}") "https://ghcr.io/v2/${image}/blobs/${digest}")
@ -60,45 +94,54 @@ jobs:
IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}') IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}')
IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}') IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}')
if [ -z "${IMAGE_VERSION}" ]; then if [ -z "${IMAGE_VERSION}" ]; then
echo "**** Can't retrieve last pushed version, exiting ****" echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY
FAILURE_REASON="Can't retrieve last pushed version for phpmyadmin tag latest" FAILURE_REASON="Can't retrieve last pushed version for phpmyadmin tag latest"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680,
"description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
exit 1 exit 1
fi fi
echo "**** Last pushed version: ${IMAGE_VERSION} ****" echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY
echo "Last pushed version: ${IMAGE_VERSION}" >> $GITHUB_STEP_SUMMARY if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then
if [ "${EXT_RELEASE}" == "${IMAGE_VERSION}" ]; then echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY
echo "**** Version ${EXT_RELEASE} already pushed, exiting ****"
echo "Version ${EXT_RELEASE} already pushed, exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-phpmyadmin/job/main/lastBuild/api/json | jq -r '.building') == "true" ]; then elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-phpmyadmin/job/main/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting ****" echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
echo "New version ${EXT_RELEASE} found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY
exit 0 exit 0
else else
echo "**** New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build ****" if [[ "${artifacts_found}" == "false" ]]; then
echo "New version ${EXT_RELEASE} found; old version was ${IMAGE_VERSION}. Triggering new build" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \ echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-phpmyadmin/job/main/buildWithParameters?PACKAGE_CHECK=false \ FAILURE_REASON="New version ${EXT_RELEASE} for phpmyadmin tag latest is detected, however not all artifacts are uploaded to upstream release yet. Will try again later."
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
echo "**** Jenkins job queue url: ${response%$'\r'} ****" "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}],
echo "**** Sleeping 10 seconds until job starts ****" "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
sleep 10 else
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY
buildurl="${buildurl%$'\r'}" echo "New sanitized version \`${EXT_RELEASE_SANITIZED}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY
echo "**** Jenkins job build url: ${buildurl} ****" if [[ "${artifacts_found}" == "true" ]]; then
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****" fi
curl -iX POST \ response=$(curl -iX POST \
"${buildurl}submitDescription" \ https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-phpmyadmin/job/main/buildWithParameters?PACKAGE_CHECK=false \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \ --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
--data-urlencode "Submit=Submit" echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
echo "**** Notifying Discord ****" sleep 10
TRIGGER_REASON="A version change was detected for phpmyadmin tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE}" buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, buildurl="${buildurl%$'\r'}"
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}], echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"
echo "**** Notifying Discord ****"
TRIGGER_REASON="A version change was detected for phpmyadmin tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi
fi fi

View File

@ -5,41 +5,44 @@ on:
- cron: '43 * * * *' - cron: '43 * * * *'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
external-trigger-scheduler: external-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
with: with:
fetch-depth: '0' fetch-depth: '0'
- name: External Trigger Scheduler - name: External Trigger Scheduler
run: | run: |
echo "**** Branches found: ****" printf "# External trigger scheduler for docker-phpmyadmin\n\n" >> $GITHUB_STEP_SUMMARY
git for-each-ref --format='%(refname:short)' refs/remotes printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes) for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do do
br=$(echo "$br" | sed 's|origin/||g') if [[ "${br}" == "HEAD" ]]; then
echo "**** Evaluating branch ${br} ****" printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
continue
fi
printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-phpmyadmin/${br}/jenkins-vars.yml) ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-phpmyadmin/${br}/jenkins-vars.yml)
ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch') ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch')
ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type') ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type')
if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then
echo "**** Branch ${br} appears to be live and trigger is not os; checking workflow. ****" echo "Branch appears to be live and trigger is not os; checking workflow." >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-phpmyadmin/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-phpmyadmin/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then
echo "**** Workflow exists. Triggering external trigger workflow for branch ${br} ****." echo "Triggering external trigger workflow for branch." >> $GITHUB_STEP_SUMMARY
echo "Triggering external trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY
curl -iX POST \ curl -iX POST \
-H "Authorization: token ${{ secrets.CR_PAT }}" \ -H "Authorization: token ${{ secrets.CR_PAT }}" \
-H "Accept: application/vnd.github.v3+json" \ -H "Accept: application/vnd.github.v3+json" \
-d "{\"ref\":\"refs/heads/${br}\"}" \ -d "{\"ref\":\"refs/heads/${br}\"}" \
https://api.github.com/repos/linuxserver/docker-phpmyadmin/actions/workflows/external_trigger.yml/dispatches https://api.github.com/repos/linuxserver/docker-phpmyadmin/actions/workflows/external_trigger.yml/dispatches
else else
echo "**** Workflow doesn't exist; skipping trigger. ****" echo "Skipping branch due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch ${br} due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY
fi fi
else else
echo "**** ${br} is either a dev branch, or has no external version; skipping trigger. ****" echo "Skipping branch due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
echo "Skipping branch ${br} due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY
fi fi
done done

View File

@ -2,8 +2,14 @@ name: Greetings
on: [pull_request_target, issues] on: [pull_request_target, issues]
permissions:
contents: read
jobs: jobs:
greeting: greeting:
permissions:
issues: write
pull-requests: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/first-interaction@v1 - uses: actions/first-interaction@v1

View File

@ -1,42 +0,0 @@
name: Package Trigger Main
on:
workflow_dispatch:
jobs:
package-trigger-main:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.1.0
- name: Package Trigger
if: github.ref == 'refs/heads/main'
run: |
if [ -n "${{ secrets.PAUSE_PACKAGE_TRIGGER_PHPMYADMIN_MAIN }}" ]; then
echo "**** Github secret PAUSE_PACKAGE_TRIGGER_PHPMYADMIN_MAIN is set; skipping trigger. ****"
echo "Github secret \`PAUSE_PACKAGE_TRIGGER_PHPMYADMIN_MAIN\` is set; skipping trigger." >> $GITHUB_STEP_SUMMARY
exit 0
fi
if [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-phpmyadmin/job/main/lastBuild/api/json | jq -r '.building') == "true" ]; then
echo "**** There already seems to be an active build on Jenkins; skipping package trigger ****"
echo "There already seems to be an active build on Jenkins; skipping package trigger" >> $GITHUB_STEP_SUMMARY
exit 0
fi
echo "**** Package trigger running off of main branch. To disable, set a Github secret named \"PAUSE_PACKAGE_TRIGGER_PHPMYADMIN_MAIN\". ****"
echo "Package trigger running off of main branch. To disable, set a Github secret named \`PAUSE_PACKAGE_TRIGGER_PHPMYADMIN_MAIN\`" >> $GITHUB_STEP_SUMMARY
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-phpmyadmin/job/main/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
echo "**** Jenkins job queue url: ${response%$'\r'} ****"
echo "**** Sleeping 10 seconds until job starts ****"
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "**** Jenkins job build url: ${buildurl} ****"
echo "Jenkins job build url: ${buildurl}" >> $GITHUB_STEP_SUMMARY
echo "**** Attempting to change the Jenkins job description ****"
curl -iX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"

View File

@ -5,46 +5,99 @@ on:
- cron: '24 21 * * 5' - cron: '24 21 * * 5'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
jobs: jobs:
package-trigger-scheduler: package-trigger-scheduler:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3.1.0 - uses: actions/checkout@v4.1.1
with: with:
fetch-depth: '0' fetch-depth: '0'
- name: Package Trigger Scheduler - name: Package Trigger Scheduler
env:
SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }}
run: | run: |
echo "**** Branches found: ****" printf "# Package trigger scheduler for docker-phpmyadmin\n\n" >> $GITHUB_STEP_SUMMARY
git for-each-ref --format='%(refname:short)' refs/remotes printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY
for br in $(git for-each-ref --format='%(refname:short)' refs/remotes) for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes)
do do
br=$(echo "$br" | sed 's|origin/||g') if [[ "${br}" == "HEAD" ]]; then
echo "**** Evaluating branch ${br} ****" printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY
ls_branch=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-phpmyadmin/${br}/jenkins-vars.yml | yq -r '.ls_branch') continue
if [ "${br}" == "${ls_branch}" ]; then fi
echo "**** Branch ${br} appears to be live; checking workflow. ****" printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY
if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-phpmyadmin/${br}/.github/workflows/package_trigger.yml > /dev/null 2>&1; then JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-phpmyadmin/${br}/jenkins-vars.yml)
echo "**** Workflow exists. Triggering package trigger workflow for branch ${br}. ****" if ! curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-phpmyadmin/${br}/Jenkinsfile >/dev/null 2>&1; then
echo "Triggering package trigger workflow for branch ${br}" >> $GITHUB_STEP_SUMMARY echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} " echo "> No Jenkinsfile found. Branch is either deprecated or is an early dev branch." >> $GITHUB_STEP_SUMMARY
curl -iX POST \ skipped_branches="${skipped_branches}${br} "
-H "Authorization: token ${{ secrets.CR_PAT }}" \ elif [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then
-H "Accept: application/vnd.github.v3+json" \ echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY
-d "{\"ref\":\"refs/heads/${br}\"}" \ README_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-phpmyadmin/${br}/readme-vars.yml)
https://api.github.com/repos/linuxserver/docker-phpmyadmin/actions/workflows/package_trigger.yml/dispatches if [[ $(yq -r '.project_deprecation_status' <<< "${README_VARS}") == "true" ]]; then
sleep 30 echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Branch appears to be deprecated; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif grep -q "^phpmyadmin_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`phpmyadmin_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-phpmyadmin/job/${br}/lastBuild/api/json | jq -r '.building' 2>/dev/null) == "true" ]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> There already seems to be an active build on Jenkins; skipping package trigger for ${br}" >> $GITHUB_STEP_SUMMARY
skipped_branches="${skipped_branches}${br} "
else else
echo "**** Workflow doesn't exist; skipping trigger. ****" echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY
echo "Skipping branch ${br} due to no package trigger workflow present." >> $GITHUB_STEP_SUMMARY echo "> Triggering package trigger for branch ${br}" >> $GITHUB_STEP_SUMMARY
printf "> To disable, add \`phpmyadmin_%s\` into the Github organizational variable \`SKIP_PACKAGE_TRIGGER\`.\n\n" "${br}" >> $GITHUB_STEP_SUMMARY
triggered_branches="${triggered_branches}${br} "
response=$(curl -iX POST \
https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-phpmyadmin/job/${br}/buildWithParameters?PACKAGE_CHECK=true \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|")
if [[ -z "${response}" ]]; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Jenkins build could not be triggered. Skipping branch."
continue
fi
echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY
echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY
sleep 10
buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url')
buildurl="${buildurl%$'\r'}"
echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY
echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY
if ! curl -ifX POST \
"${buildurl}submitDescription" \
--user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \
--data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
--data-urlencode "Submit=Submit"; then
echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY
echo "> Unable to change the Jenkins job description."
fi
sleep 20
fi fi
else else
echo "**** ${br} appears to be a dev branch; skipping trigger. ****"
echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY
fi fi
done done
echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****" if [[ -n "${triggered_branches}" ]] || [[ -n "${skipped_branches}" ]]; then
echo "**** Notifying Discord ****" if [[ -n "${triggered_branches}" ]]; then
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n"
"description": "**Package Check Build(s) Triggered for phpmyadmin** \n**Branch(es):** '"${triggered_branches}"' \n**Build URL:** '"https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-phpmyadmin/activity/"' \n"}], NOTIFY_BUILD_URL="**Build URL:** https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-phpmyadmin/activity/ \n"
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****"
fi
if [[ -n "${skipped_branches}" ]]; then
NOTIFY_BRANCHES="${NOTIFY_BRANCHES}**Skipped:** ${skipped_branches} \n"
fi
echo "**** Notifying Discord ****"
curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903,
"description": "**Package Check Build(s) for phpmyadmin** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}],
"username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }}
fi

2
.github/workflows/permissions.yml vendored Executable file → Normal file
View File

@ -5,6 +5,8 @@ on:
- '**/run' - '**/run'
- '**/finish' - '**/finish'
- '**/check' - '**/check'
- 'root/migrations/*'
jobs: jobs:
permission_check: permission_check:
uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1 uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1

View File

@ -1,19 +1,19 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.18 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:3.23
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
ARG VERSION ARG VERSION
ARG PHPMYADMIN_VERSION ARG PHPMYADMIN_VERSION
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="TheSpad" LABEL maintainer="thespad"
# environment settings # environment settings
ARG PHPMYADMIN_RELEASE_GPG_KEY="3D06A59ECE730EB71B511C17CE752F178259BD92" ARG PHPMYADMIN_RELEASE_GPG_KEY="3D06A59ECE730EB71B511C17CE752F178259BD92"
ENV MAX_EXECUTION_TIME 600 ENV MAX_EXECUTION_TIME=600
ENV MEMORY_LIMIT 512M ENV MEMORY_LIMIT=512M
ENV UPLOAD_LIMIT 8192K ENV UPLOAD_LIMIT=8192K
RUN \ RUN \
apk add --no-cache --virtual=build-dependencies \ apk add --no-cache --virtual=build-dependencies \
@ -21,30 +21,29 @@ RUN \
gpg-agent \ gpg-agent \
gnupg-dirmngr && \ gnupg-dirmngr && \
apk add --no-cache \ apk add --no-cache \
php82-bz2 \ php85-bz2 \
php82-dom \ php85-dom \
php82-gd \ php85-gd \
php82-mysqli \ php85-mysqli \
php82-opcache \ php85-pecl-uploadprogress \
php82-pecl-uploadprogress \ php85-tokenizer && \
php82-tokenizer && \
echo "**** configure php-fpm to pass env vars ****" && \ echo "**** configure php-fpm to pass env vars ****" && \
sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php82/php-fpm.d/www.conf && \ sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php85/php-fpm.d/www.conf && \
grep -qxF 'clear_env = no' /etc/php82/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php82/php-fpm.d/www.conf && \ if ! grep -qxF 'clear_env = no' /etc/php85/php-fpm.d/www.conf; then echo 'clear_env = no' >> /etc/php85/php-fpm.d/www.conf; fi && \
echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php82/php-fpm.conf && \ echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php85/php-fpm.conf && \
echo "**** setup php opcache ****" && \ echo "**** setup php opcache ****" && \
{ \ { \
echo 'opcache.memory_consumption=128'; \ echo 'opcache.memory_consumption=128'; \
echo 'opcache.interned_strings_buffer=8'; \ echo 'opcache.interned_strings_buffer=8'; \
echo 'opcache.max_accelerated_files=4000'; \ echo 'opcache.max_accelerated_files=4000'; \
echo 'opcache.revalidate_freq=2'; \ echo 'opcache.revalidate_freq=2'; \
echo 'opcache.fast_shutdown=1'; \ echo 'opcache.fast_shutdown=1'; \
} > /etc/php82/conf.d/opcache-recommended.ini; \ } > /etc/php85/conf.d/opcache-recommended.ini; \
\ \
{ \ { \
echo 'session.cookie_httponly=1'; \ echo 'session.cookie_httponly=1'; \
echo 'session.use_strict_mode=1'; \ echo 'session.use_strict_mode=1'; \
} > /etc/php82/conf.d/session-strict.ini; \ } > /etc/php85/conf.d/session-strict.ini; \
\ \
{ \ { \
echo 'allow_url_fopen=Off'; \ echo 'allow_url_fopen=Off'; \
@ -53,7 +52,7 @@ RUN \
echo 'memory_limit=${MEMORY_LIMIT}'; \ echo 'memory_limit=${MEMORY_LIMIT}'; \
echo 'post_max_size=${UPLOAD_LIMIT}'; \ echo 'post_max_size=${UPLOAD_LIMIT}'; \
echo 'upload_max_filesize=${UPLOAD_LIMIT}'; \ echo 'upload_max_filesize=${UPLOAD_LIMIT}'; \
} > /etc/php82/conf.d/phpmyadmin-misc.ini && \ } > /etc/php85/conf.d/phpmyadmin-misc.ini && \
echo "**** install phpmyadmin ****" && \ echo "**** install phpmyadmin ****" && \
mkdir -p /app/www/public && \ mkdir -p /app/www/public && \
if [ -z ${PHPMYADMIN_VERSION+x} ]; then \ if [ -z ${PHPMYADMIN_VERSION+x} ]; then \
@ -78,7 +77,8 @@ RUN \
tar xf \ tar xf \
/tmp/phpmyadmin.tar.xz -C \ /tmp/phpmyadmin.tar.xz -C \
/app/www/public/ --strip-components=1 && \ /app/www/public/ --strip-components=1 && \
sed -i "s@'configFile' =>.*@'configFile' => '/config/phpmyadmin/config.inc.php',@" "/app/www/public/libraries/vendor_config.php" && \ sed -i "s@'configFile' =>.*@'configFile' => '/config/phpmyadmin/config.inc.php',@" "/app/www/public/libraries/vendor_config.php" && \
printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \ echo "**** cleanup ****" && \
apk del --purge \ apk del --purge \
build-dependencies && \ build-dependencies && \

View File

@ -1,19 +1,19 @@
# syntax=docker/dockerfile:1 # syntax=docker/dockerfile:1
FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.18 FROM ghcr.io/linuxserver/baseimage-alpine-nginx:arm64v8-3.23
# set version label # set version label
ARG BUILD_DATE ARG BUILD_DATE
ARG VERSION ARG VERSION
ARG PHPMYADMIN_VERSION ARG PHPMYADMIN_VERSION
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
LABEL maintainer="TheSpad" LABEL maintainer="thespad"
# environment settings # environment settings
ARG PHPMYADMIN_RELEASE_GPG_KEY="3D06A59ECE730EB71B511C17CE752F178259BD92" ARG PHPMYADMIN_RELEASE_GPG_KEY="3D06A59ECE730EB71B511C17CE752F178259BD92"
ENV MAX_EXECUTION_TIME 600 ENV MAX_EXECUTION_TIME=600
ENV MEMORY_LIMIT 512M ENV MEMORY_LIMIT=512M
ENV UPLOAD_LIMIT 8192K ENV UPLOAD_LIMIT=8192K
RUN \ RUN \
apk add --no-cache --virtual=build-dependencies \ apk add --no-cache --virtual=build-dependencies \
@ -21,30 +21,29 @@ RUN \
gpg-agent \ gpg-agent \
gnupg-dirmngr && \ gnupg-dirmngr && \
apk add --no-cache \ apk add --no-cache \
php82-bz2 \ php85-bz2 \
php82-dom \ php85-dom \
php82-gd \ php85-gd \
php82-mysqli \ php85-mysqli \
php82-opcache \ php85-pecl-uploadprogress \
php82-pecl-uploadprogress \ php85-tokenizer && \
php82-tokenizer && \
echo "**** configure php-fpm to pass env vars ****" && \ echo "**** configure php-fpm to pass env vars ****" && \
sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php82/php-fpm.d/www.conf && \ sed -E -i 's/^;?clear_env ?=.*$/clear_env = no/g' /etc/php85/php-fpm.d/www.conf && \
grep -qxF 'clear_env = no' /etc/php82/php-fpm.d/www.conf || echo 'clear_env = no' >> /etc/php82/php-fpm.d/www.conf && \ if ! grep -qxF 'clear_env = no' /etc/php85/php-fpm.d/www.conf; then echo 'clear_env = no' >> /etc/php85/php-fpm.d/www.conf; fi && \
echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php82/php-fpm.conf && \ echo "env[PATH] = /usr/local/bin:/usr/bin:/bin" >> /etc/php85/php-fpm.conf && \
echo "**** setup php opcache ****" && \ echo "**** setup php opcache ****" && \
{ \ { \
echo 'opcache.memory_consumption=128'; \ echo 'opcache.memory_consumption=128'; \
echo 'opcache.interned_strings_buffer=8'; \ echo 'opcache.interned_strings_buffer=8'; \
echo 'opcache.max_accelerated_files=4000'; \ echo 'opcache.max_accelerated_files=4000'; \
echo 'opcache.revalidate_freq=2'; \ echo 'opcache.revalidate_freq=2'; \
echo 'opcache.fast_shutdown=1'; \ echo 'opcache.fast_shutdown=1'; \
} > /etc/php82/conf.d/opcache-recommended.ini; \ } > /etc/php85/conf.d/opcache-recommended.ini; \
\ \
{ \ { \
echo 'session.cookie_httponly=1'; \ echo 'session.cookie_httponly=1'; \
echo 'session.use_strict_mode=1'; \ echo 'session.use_strict_mode=1'; \
} > /etc/php82/conf.d/session-strict.ini; \ } > /etc/php85/conf.d/session-strict.ini; \
\ \
{ \ { \
echo 'allow_url_fopen=Off'; \ echo 'allow_url_fopen=Off'; \
@ -53,7 +52,7 @@ RUN \
echo 'memory_limit=${MEMORY_LIMIT}'; \ echo 'memory_limit=${MEMORY_LIMIT}'; \
echo 'post_max_size=${UPLOAD_LIMIT}'; \ echo 'post_max_size=${UPLOAD_LIMIT}'; \
echo 'upload_max_filesize=${UPLOAD_LIMIT}'; \ echo 'upload_max_filesize=${UPLOAD_LIMIT}'; \
} > /etc/php82/conf.d/phpmyadmin-misc.ini && \ } > /etc/php85/conf.d/phpmyadmin-misc.ini && \
echo "**** install phpmyadmin ****" && \ echo "**** install phpmyadmin ****" && \
mkdir -p /app/www/public && \ mkdir -p /app/www/public && \
if [ -z ${PHPMYADMIN_VERSION+x} ]; then \ if [ -z ${PHPMYADMIN_VERSION+x} ]; then \
@ -78,8 +77,9 @@ RUN \
tar xf \ tar xf \
/tmp/phpmyadmin.tar.xz -C \ /tmp/phpmyadmin.tar.xz -C \
/app/www/public/ --strip-components=1 && \ /app/www/public/ --strip-components=1 && \
sed -i "s@'configFile' =>.*@'configFile' => '/config/phpmyadmin/config.inc.php',@" "/app/www/public/libraries/vendor_config.php" && \ sed -i "s@'configFile' =>.*@'configFile' => '/config/phpmyadmin/config.inc.php',@" "/app/www/public/libraries/vendor_config.php" && \
echo "**** cleanup ****" && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \
echo "**** cleanup ****" && \
apk del --purge \ apk del --purge \
build-dependencies && \ build-dependencies && \
rm -rf \ rm -rf \

772
Jenkinsfile vendored

File diff suppressed because it is too large Load Diff

192
README.md
View File

@ -1,12 +1,10 @@
<!-- DO NOT EDIT THIS FILE MANUALLY --> <!-- DO NOT EDIT THIS FILE MANUALLY -->
<!-- Please read the https://github.com/linuxserver/docker-phpmyadmin/blob/main/.github/CONTRIBUTING.md --> <!-- Please read https://github.com/linuxserver/docker-phpmyadmin/blob/main/.github/CONTRIBUTING.md -->
[![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io) [![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)](https://linuxserver.io)
[![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!") [![Blog](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Blog)](https://blog.linuxserver.io "all the things you can do with our containers including How-To guides, opinions and much more!")
[![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://discord.gg/YWrKVTn "realtime support / chat with the community and the team.") [![Discord](https://img.shields.io/discord/354974912613449730.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Discord&logo=discord)](https://linuxserver.io/discord "realtime support / chat with the community and the team.")
[![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.") [![Discourse](https://img.shields.io/discourse/https/discourse.linuxserver.io/topics.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=discourse)](https://discourse.linuxserver.io "post on our community forum.")
[![Fleet](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=Fleet)](https://fleet.linuxserver.io "an online web interface which displays all of our maintained images.")
[![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.") [![GitHub](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub&logo=github)](https://github.com/linuxserver "view the source for all of our repositories.")
[![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget") [![Open Collective](https://img.shields.io/opencollective/all/linuxserver.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=Supporters&logo=open%20collective)](https://opencollective.com/linuxserver "please consider helping us by either donating or contributing to our budget")
@ -21,15 +19,14 @@ The [LinuxServer.io](https://linuxserver.io) team brings you another container r
Find us at: Find us at:
* [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more! * [Blog](https://blog.linuxserver.io) - all the things you can do with our containers including How-To guides, opinions and much more!
* [Discord](https://discord.gg/YWrKVTn) - realtime support / chat with the community and the team. * [Discord](https://linuxserver.io/discord) - realtime support / chat with the community and the team.
* [Discourse](https://discourse.linuxserver.io) - post on our community forum. * [Discourse](https://discourse.linuxserver.io) - post on our community forum.
* [Fleet](https://fleet.linuxserver.io) - an online web interface which displays all of our maintained images.
* [GitHub](https://github.com/linuxserver) - view the source for all of our repositories. * [GitHub](https://github.com/linuxserver) - view the source for all of our repositories.
* [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget * [Open Collective](https://opencollective.com/linuxserver) - please consider helping us by either donating or contributing to our budget
# [linuxserver/phpmyadmin](https://github.com/linuxserver/docker-phpmyadmin) # [linuxserver/phpmyadmin](https://github.com/linuxserver/docker-phpmyadmin)
[![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fphpmyadmin?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh/gateway/linuxserver-ci/docker/linuxserver%2Fphpmyadmin) [![Scarf.io pulls](https://scarf.sh/installs-badge/linuxserver-ci/linuxserver%2Fphpmyadmin?color=94398d&label-color=555555&logo-color=ffffff&style=for-the-badge&package-type=docker)](https://scarf.sh)
[![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-phpmyadmin.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-phpmyadmin) [![GitHub Stars](https://img.shields.io/github/stars/linuxserver/docker-phpmyadmin.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-phpmyadmin)
[![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-phpmyadmin.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-phpmyadmin/releases) [![GitHub Release](https://img.shields.io/github/release/linuxserver/docker-phpmyadmin.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&logo=github)](https://github.com/linuxserver/docker-phpmyadmin/releases)
[![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-phpmyadmin/packages) [![GitHub Package Repository](https://img.shields.io/static/v1.svg?color=94398d&labelColor=555555&logoColor=ffffff&style=for-the-badge&label=linuxserver.io&message=GitHub%20Package&logo=github)](https://github.com/linuxserver/docker-phpmyadmin/packages)
@ -46,7 +43,7 @@ Find us at:
## Supported Architectures ## Supported Architectures
We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/). We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://distribution.github.io/distribution/spec/manifest-v2-2/#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
Simply pulling `lscr.io/linuxserver/phpmyadmin:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags. Simply pulling `lscr.io/linuxserver/phpmyadmin:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
@ -56,7 +53,6 @@ The architectures supported by this image are:
| :----: | :----: | ---- | | :----: | :----: | ---- |
| x86-64 | ✅ | amd64-\<version tag\> | | x86-64 | ✅ | amd64-\<version tag\> |
| arm64 | ✅ | arm64v8-\<version tag\> | | arm64 | ✅ | arm64v8-\<version tag\> |
| armhf | ❌ | |
## Application Setup ## Application Setup
@ -66,15 +62,34 @@ We support all of the official [environment variables](https://docs.phpmyadmin.n
For more information check out the [phpmyadmin documentation](https://www.phpmyadmin.net/docs/). For more information check out the [phpmyadmin documentation](https://www.phpmyadmin.net/docs/).
## Read-Only Operation
This image can be run with a read-only container filesystem. For details please [read the docs](https://docs.linuxserver.io/misc/read-only/).
### Caveats
* `/tmp` must be mounted to tmpfs
* Custom themes are not supported
## Non-Root Operation
This image can be run with a non-root user. For details please [read the docs](https://docs.linuxserver.io/misc/non-root/).
### Caveats
* Custom themes are not supported
## Usage ## Usage
Here are some example snippets to help you get started creating a container. To help you get started creating a container from this image you can either use docker-compose or the docker cli.
>[!NOTE]
>Unless a parameter is flagged as 'optional', it is *mandatory* and a value must be provided.
### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose)) ### docker-compose (recommended, [click here for more info](https://docs.linuxserver.io/general/docker-compose))
```yaml ```yaml
--- ---
version: "2.1"
services: services:
phpmyadmin: phpmyadmin:
image: lscr.io/linuxserver/phpmyadmin:latest image: lscr.io/linuxserver/phpmyadmin:latest
@ -86,7 +101,7 @@ services:
- PMA_ARBITRARY=1 #optional - PMA_ARBITRARY=1 #optional
- PMA_ABSOLUTE_URI=https://phpmyadmin.example.com #optional - PMA_ABSOLUTE_URI=https://phpmyadmin.example.com #optional
volumes: volumes:
- /path/to/appdata/config:/config - /path/to/phpmyadmin/config:/config
ports: ports:
- 80:80 - 80:80
restart: unless-stopped restart: unless-stopped
@ -103,25 +118,26 @@ docker run -d \
-e PMA_ARBITRARY=1 `#optional` \ -e PMA_ARBITRARY=1 `#optional` \
-e PMA_ABSOLUTE_URI=https://phpmyadmin.example.com `#optional` \ -e PMA_ABSOLUTE_URI=https://phpmyadmin.example.com `#optional` \
-p 80:80 \ -p 80:80 \
-v /path/to/appdata/config:/config \ -v /path/to/phpmyadmin/config:/config \
--restart unless-stopped \ --restart unless-stopped \
lscr.io/linuxserver/phpmyadmin:latest lscr.io/linuxserver/phpmyadmin:latest
``` ```
## Parameters ## Parameters
Container images are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container. Containers are configured using parameters passed at runtime (such as those above). These parameters are separated by a colon and indicate `<external>:<internal>` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
| Parameter | Function | | Parameter | Function |
| :----: | --- | | :----: | --- |
| `-p 80` | Port for web frontend | | `-p 80:80` | Port for web frontend |
| `-e PUID=1000` | for UserID - see below for explanation | | `-e PUID=1000` | for UserID - see below for explanation |
| `-e PGID=1000` | for GroupID - see below for explanation | | `-e PGID=1000` | for GroupID - see below for explanation |
| `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). | | `-e TZ=Etc/UTC` | specify a timezone to use, see this [list](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List). |
| `-e PMA_ARBITRARY=1` | Set to `1` to allow you to connect to any server. Setting to `0` will only allow you to connect to specified hosts (See Application Setup) | | `-e PMA_ARBITRARY=1` | Set to `1` to allow you to connect to any server. Setting to `0` will only allow you to connect to specified hosts (See Application Setup) |
| `-e PMA_ABSOLUTE_URI=https://phpmyadmin.example.com` | Set the URL you will use to access the web frontend | | `-e PMA_ABSOLUTE_URI=https://phpmyadmin.example.com` | Set the URL you will use to access the web frontend |
| `-v /config` | Contains all relevant configuration files. | | `-v /config` | Persistent config files |
| `--read-only=true` | Run container with a read-only filesystem. Please [read the docs](https://docs.linuxserver.io/misc/read-only/). |
| `--user=1000:1000` | Run container with a non-root user. Please [read the docs](https://docs.linuxserver.io/misc/non-root/). |
## Environment variables from files (Docker secrets) ## Environment variables from files (Docker secrets)
@ -130,10 +146,10 @@ You can set any environment variable from a file by using a special prepend `FIL
As an example: As an example:
```bash ```bash
-e FILE__PASSWORD=/run/secrets/mysecretpassword -e FILE__MYVAR=/run/secrets/mysecretvariable
``` ```
Will set the environment variable `PASSWORD` based on the contents of the `/run/secrets/mysecretpassword` file. Will set the environment variable `MYVAR` based on the contents of the `/run/secrets/mysecretvariable` file.
## Umask for running applications ## Umask for running applications
@ -142,15 +158,20 @@ Keep in mind umask is not chmod it subtracts from permissions based on it's valu
## User / Group Identifiers ## User / Group Identifiers
When using volumes (`-v` flags) permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`. When using volumes (`-v` flags), permissions issues can arise between the host OS and the container, we avoid this issue by allowing you to specify the user `PUID` and group `PGID`.
Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic. Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.
In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below: In this instance `PUID=1000` and `PGID=1000`, to find yours use `id your_user` as below:
```bash ```bash
$ id username id your_user
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup) ```
Example output:
```text
uid=1000(your_user) gid=1000(your_user) groups=1000(your_user)
``` ```
## Docker Mods ## Docker Mods
@ -161,53 +182,101 @@ We publish various [Docker Mods](https://github.com/linuxserver/docker-mods) to
## Support Info ## Support Info
* Shell access whilst the container is running: `docker exec -it phpmyadmin /bin/bash` * Shell access whilst the container is running:
* To monitor the logs of the container in realtime: `docker logs -f phpmyadmin`
* container version number ```bash
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' phpmyadmin` docker exec -it phpmyadmin /bin/bash
* image version number ```
* `docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/phpmyadmin:latest`
* To monitor the logs of the container in realtime:
```bash
docker logs -f phpmyadmin
```
* Container version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' phpmyadmin
```
* Image version number:
```bash
docker inspect -f '{{ index .Config.Labels "build_version" }}' lscr.io/linuxserver/phpmyadmin:latest
```
## Updating Info ## Updating Info
Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (ie. nextcloud, plex), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image. Most of our images are static, versioned, and require an image update and container recreation to update the app inside. With some exceptions (noted in the relevant readme.md), we do not recommend or support updating apps inside the container. Please consult the [Application Setup](#application-setup) section above to see if it is recommended for the image.
Below are the instructions for updating containers: Below are the instructions for updating containers:
### Via Docker Compose ### Via Docker Compose
* Update all images: `docker-compose pull` * Update images:
* or update a single image: `docker-compose pull phpmyadmin` * All images:
* Let compose update all containers as necessary: `docker-compose up -d`
* or update a single container: `docker-compose up -d phpmyadmin` ```bash
* You can also remove the old dangling images: `docker image prune` docker-compose pull
```
* Single image:
```bash
docker-compose pull phpmyadmin
```
* Update containers:
* All containers:
```bash
docker-compose up -d
```
* Single container:
```bash
docker-compose up -d phpmyadmin
```
* You can also remove the old dangling images:
```bash
docker image prune
```
### Via Docker Run ### Via Docker Run
* Update the image: `docker pull lscr.io/linuxserver/phpmyadmin:latest` * Update the image:
* Stop the running container: `docker stop phpmyadmin`
* Delete the container: `docker rm phpmyadmin` ```bash
docker pull lscr.io/linuxserver/phpmyadmin:latest
```
* Stop the running container:
```bash
docker stop phpmyadmin
```
* Delete the container:
```bash
docker rm phpmyadmin
```
* Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved) * Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your `/config` folder and settings will be preserved)
* You can also remove the old dangling images: `docker image prune` * You can also remove the old dangling images:
### Via Watchtower auto-updater (only use if you don't remember the original parameters) ```bash
docker image prune
* Pull the latest image at its tag and replace it with the same env variables in one run: ```
```bash
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once phpmyadmin
```
* You can also remove the old dangling images: `docker image prune`
**Note:** We do not endorse the use of Watchtower as a solution to automated updates of existing Docker containers. In fact we generally discourage automated updates. However, this is a useful tool for one-time manual updates of containers where you have forgotten the original parameters. In the long term, we highly recommend using [Docker Compose](https://docs.linuxserver.io/general/docker-compose).
### Image Update Notifications - Diun (Docker Image Update Notifier) ### Image Update Notifications - Diun (Docker Image Update Notifier)
* We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported. >[!TIP]
>We recommend [Diun](https://crazymax.dev/diun/) for update notifications. Other tools that automatically update containers unattended are not recommended or supported.
## Building locally ## Building locally
@ -222,16 +291,25 @@ docker build \
-t lscr.io/linuxserver/phpmyadmin:latest . -t lscr.io/linuxserver/phpmyadmin:latest .
``` ```
The ARM variants can be built on x86_64 hardware using `multiarch/qemu-user-static` The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static`
```bash ```bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset
``` ```
Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`. Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`.
## Versions ## Versions
* **28.12.25:** - Rebase to Alpine 3.23.
* **23.08.25:** - Add support for mTLS. Existing users will need to delete their config.inc.php and restart the container.
* **05.07.25:** - Rebase to Alpine 3.22.
* **19.12.24:** - Rebase to Alpine 3.21.
* **27.05.24:** - Existing users should update their nginx confs to avoid http2 deprecation warnings.
* **24.05.24:** - Rebase to Alpine 3.20.
* **28.12.23:** - Rebase to Alpine 3.19 with php 8.3.
* **25.12.23:** - Existing users should update: site-confs/default.conf - Cleanup default site conf.
* **06.09.23:** - Add support for custom themes.
* **25.05.23:** - Rebase to Alpine 3.18, deprecate armhf. * **25.05.23:** - Rebase to Alpine 3.18, deprecate armhf.
* **13.04.23:** - Move ssl.conf include to default.conf. * **13.04.23:** - Move ssl.conf include to default.conf.
* **20.01.23:** - Rebase to alpine 3.17 with php8.1. * **20.01.23:** - Rebase to alpine 3.17 with php8.1.

View File

@ -7,7 +7,6 @@ custom_version_command: "curl -sL 'https://www.phpmyadmin.net/home_page/version.
release_type: stable release_type: stable
release_tag: latest release_tag: latest
ls_branch: main ls_branch: main
build_armhf: false
repo_vars: repo_vars:
- EXT_GIT_BRANCH = 'master' - EXT_GIT_BRANCH = 'master'
- EXT_USER = 'phpmyadmin' - EXT_USER = 'phpmyadmin'
@ -25,8 +24,7 @@ repo_vars:
- CI_WEB='true' - CI_WEB='true'
- CI_PORT='80' - CI_PORT='80'
- CI_SSL='false' - CI_SSL='false'
- CI_DELAY='120' - CI_DELAY='60'
- CI_DOCKERENV='TZ=US/Pacific' - CI_DOCKERENV=''
- CI_AUTH='' - CI_AUTH=''
- CI_WEBPATH='' - CI_WEBPATH=''

View File

@ -1,164 +1,174 @@
NAME VERSION TYPE NAME VERSION TYPE
alpine-baselayout 3.4.3-r1 apk acl-libs 2.3.2-r1 apk
alpine-baselayout-data 3.4.3-r1 apk alpine-baselayout 3.7.1-r8 apk
alpine-keys 2.4-r1 apk alpine-baselayout-data 3.7.1-r8 apk
alpine-release 3.18.0-r0 apk alpine-keys 2.6-r0 apk
aom-libs 3.6.1-r0 apk alpine-release 3.23.3-r0 apk
apache2-utils 2.4.57-r2 apk aom-libs 3.13.1-r1 apk
apk-tools 2.14.0-r2 apk apache2-utils 2.4.66-r0 apk
apr 1.7.4-r0 apk apk-tools 3.0.4-r0 apk
apr-util 1.6.3-r1 apk apr 1.7.6-r0 apk
argon2-libs 20190702-r4 apk apr-util 1.6.3-r2 apk
bacon/bacon-qr-code 2.0.8 php-composer argon2-libs 20190702-r5 apk
bash 5.2.15-r5 apk bacon/bacon-qr-code 2.0.8 php-composer
beberlei/assert v3.3.2 php-composer bash 5.3.3-r1 apk
brick/math 0.8.17 php-composer beberlei/assert v3.3.3 php-composer
brotli-libs 1.0.9-r14 apk brick/math 0.8.17 php-composer
busybox 1.36.1 binary brotli-libs 1.2.0-r0 apk
busybox 1.36.1-r0 apk busybox 1.37.0-r30 apk
busybox-binsh 1.36.1-r0 apk busybox-binsh 1.37.0-r30 apk
ca-certificates 20230506-r0 apk c-ares 1.34.6-r0 apk
ca-certificates-bundle 20230506-r0 apk ca-certificates 20251003-r0 apk
code-lts/u2f-php-server v1.2.1 php-composer ca-certificates-bundle 20251003-r0 apk
composer/ca-bundle 1.3.5 php-composer catatonit 0.2.1-r0 apk
coreutils 9.3-r1 apk code-lts/u2f-php-server v1.2.2 php-composer
curl 8.1.2-r0 apk composer 2.9.5 binary
dasprid/enum 1.0.3 php-composer composer/ca-bundle 1.5.8 php-composer
fgrosse/phpasn1 v2.5.0 php-composer coreutils 9.8-r1 apk
fig/http-message-util 1.1.5 php-composer coreutils-env 9.8-r1 apk
freetype 2.13.0-r5 apk coreutils-fmt 9.8-r1 apk
git 2.40.1-r0 apk coreutils-sha512sum 9.8-r1 apk
google/recaptcha 1.2.4 php-composer curl 8.17.0-r1 apk
jq 1.6-r3 apk dasprid/enum 1.0.7 php-composer
league/uri 6.4.0 php-composer fgrosse/phpasn1 v2.5.0 php-composer
league/uri-interfaces 2.3.0 php-composer fig/http-message-util 1.1.5 php-composer
libacl 2.3.1-r3 apk findutils 4.10.0-r0 apk
libattr 2.5.1-r4 apk freetype 2.14.1-r0 apk
libavif 0.11.1-r2 apk git 2.52.0-r0 apk
libbsd 0.11.7-r1 apk git-init-template 2.52.0-r0 apk
libbz2 1.0.8-r5 apk google/recaptcha 1.2.4 php-composer
libc-utils 0.7.2-r5 apk jq 1.8.1-r0 apk
libcrypto3 3.1.1-r1 apk league/uri 6.4.0 php-composer
libcurl 8.1.2-r0 apk league/uri-interfaces 2.3.0 php-composer
libdav1d 1.2.1-r0 apk libapk 3.0.4-r0 apk
libedit 20221030.3.1-r1 apk libattr 2.5.2-r2 apk
libexpat 2.5.0-r1 apk libavif 1.3.0-r0 apk
libgcc 12.2.1_git20220924-r10 apk libbsd 0.12.2-r0 apk
libice 1.1.1-r2 apk libbz2 1.0.8-r6 apk
libidn2 2.3.4-r1 apk libcrypto3 3.5.5-r0 apk
libintl 0.21.1-r7 apk libcurl 8.17.0-r1 apk
libjpeg-turbo 2.1.5.1-r2 apk libdav1d 1.5.2-r0 apk
libmd 1.0.4-r2 apk libedit 20251016.3.1-r0 apk
libncursesw 6.4_p20230506-r0 apk libexpat 2.7.4-r0 apk
libpng 1.6.39-r3 apk libgcc 15.2.0-r2 apk
libproc2 4.0.3-r1 apk libice 1.1.2-r0 apk
libsm 1.2.4-r1 apk libidn2 2.3.8-r0 apk
libssl3 3.1.1-r1 apk libintl 0.24.1-r1 apk
libunistring 1.1-r1 apk libjpeg-turbo 3.1.2-r0 apk
libuuid 2.38.1-r8 apk libmd 1.1.0-r0 apk
libwebp 1.3.0-r2 apk libncursesw 6.5_p20251123-r0 apk
libx11 1.8.4-r3 apk libpng 1.6.54-r0 apk
libxau 1.0.11-r2 apk libproc2 4.0.5-r0 apk
libxcb 1.15-r1 apk libpsl 0.21.5-r3 apk
libxdmcp 1.1.4-r2 apk libsharpyuv 1.6.0-r0 apk
libxext 1.3.5-r2 apk libsm 1.2.6-r0 apk
libxml2 2.11.4-r0 apk libssl3 3.5.5-r0 apk
libxpm 3.5.16-r1 apk libstdc++ 15.2.0-r2 apk
libxt 1.3.0-r2 apk libunistring 1.4.1-r0 apk
libzip 1.9.2-r2 apk libuuid 2.41.2-r0 apk
linux-pam 1.5.2-r10 apk libwebp 1.6.0-r0 apk
logrotate 3.21.0-r1 apk libx11 1.8.12-r1 apk
musl 1.2.4-r0 apk libxau 1.0.12-r0 apk
musl-utils 1.2.4-r0 apk libxcb 1.17.0-r1 apk
nano 7.2-r1 apk libxdmcp 1.1.5-r1 apk
ncurses-terminfo-base 6.4_p20230506-r0 apk libxext 1.3.6-r2 apk
netcat-openbsd 1.219-r1 apk libxml2 2.13.9-r0 apk
nghttp2-libs 1.53.0-r0 apk libxpm 3.5.17-r0 apk
nginx 1.24.0-r6 apk libxt 1.3.1-r0 apk
nikic/fast-route v1.3.0 php-composer libyuv 0.0.1887.20251502-r1 apk
oniguruma 6.9.8-r1 apk libzip 1.11.4-r1 apk
openssl 3.1.1-r1 apk linux-pam 1.7.1-r2 apk
paragonie/constant_time_encoding v2.6.3 php-composer logrotate 3.22.0-r0 apk
paragonie/random_compat v9.99.100 php-composer musl 1.2.5-r21 apk
paragonie/sodium_compat v1.19.0 php-composer musl-utils 1.2.5-r21 apk
pcre 8.45-r3 apk nano 8.7-r0 apk
pcre2 10.42-r1 apk ncurses-terminfo-base 6.5_p20251123-r0 apk
php-cli 8.2.7 binary netcat-openbsd 1.234.1-r0 apk
php-fpm 8.2.7 binary nghttp2-libs 1.68.0-r0 apk
php82 8.2.7-r0 apk nghttp3 1.13.1-r0 apk
php82-bz2 8.2.7-r0 apk nginx 1.28.2-r0 apk
php82-common 8.2.7-r0 apk nikic/fast-route v1.3.0 php-composer
php82-ctype 8.2.7-r0 apk oniguruma 6.9.10-r0 apk
php82-curl 8.2.7-r0 apk openssl 3.5.5-r0 apk
php82-dom 8.2.7-r0 apk paragonie/constant_time_encoding v2.8.2 php-composer
php82-fileinfo 8.2.7-r0 apk paragonie/random_compat v9.99.100 php-composer
php82-fpm 8.2.7-r0 apk paragonie/sodium_compat v1.23.0 php-composer
php82-gd 8.2.7-r0 apk pcre2 10.47-r0 apk
php82-iconv 8.2.7-r0 apk php85 8.5.2-r0 apk
php82-mbstring 8.2.7-r0 apk php85-bz2 8.5.2-r0 apk
php82-mysqli 8.2.7-r0 apk php85-common 8.5.2-r0 apk
php82-mysqlnd 8.2.7-r0 apk php85-ctype 8.5.2-r0 apk
php82-opcache 8.2.7-r0 apk php85-curl 8.5.2-r0 apk
php82-openssl 8.2.7-r0 apk php85-dom 8.5.2-r0 apk
php82-pecl-uploadprogress 2.0.2-r1 apk php85-fileinfo 8.5.2-r0 apk
php82-phar 8.2.7-r0 apk php85-fpm 8.5.2-r0 apk
php82-session 8.2.7-r0 apk php85-gd 8.5.2-r0 apk
php82-simplexml 8.2.7-r0 apk php85-iconv 8.5.2-r0 apk
php82-tokenizer 8.2.7-r0 apk php85-mbstring 8.5.2-r0 apk
php82-xml 8.2.7-r0 apk php85-mysqli 8.5.2-r0 apk
php82-xmlwriter 8.2.7-r0 apk php85-mysqlnd 8.5.2-r0 apk
php82-zip 8.2.7-r0 apk php85-openssl 8.5.2-r0 apk
phpmyadmin 5.2.1 npm php85-pecl-uploadprogress 2.0.2-r1 apk
phpmyadmin/motranslator 5.3.0 php-composer php85-phar 8.5.2-r0 apk
phpmyadmin/shapefile 3.0.1 php-composer php85-session 8.5.2-r0 apk
phpmyadmin/sql-parser 5.7.0 php-composer php85-simplexml 8.5.2-r0 apk
phpmyadmin/twig-i18n-extension v4.0.1 php-composer php85-tokenizer 8.5.2-r0 apk
popt 1.19-r2 apk php85-xml 8.5.2-r0 apk
pragmarx/google2fa v8.0.1 php-composer php85-xmlwriter 8.5.2-r0 apk
pragmarx/google2fa-qrcode v2.1.1 php-composer php85-zip 8.5.2-r0 apk
procps-ng 4.0.3-r1 apk phpmyadmin 5.2.3 npm
psr/cache 1.0.1 php-composer phpmyadmin/motranslator 5.4.0 php-composer
psr/container 1.1.1 php-composer phpmyadmin/shapefile 3.0.2 php-composer
psr/http-client 1.0.1 php-composer phpmyadmin/sql-parser 5.11.1 php-composer
psr/http-factory 1.0.1 php-composer phpmyadmin/twig-i18n-extension 4.1.5 php-composer
psr/http-message 1.0.1 php-composer popt 1.19-r4 apk
psr/log 1.1.4 php-composer pragmarx/google2fa v9.0.0 php-composer
ralouphie/getallheaders 3.0.3 php-composer pragmarx/google2fa-qrcode v2.1.1 php-composer
ramsey/collection 1.1.4 php-composer procps-ng 4.0.5-r0 apk
ramsey/uuid 4.2.3 php-composer psr/cache 1.0.1 php-composer
readline 8.2.1-r1 apk psr/container 1.1.1 php-composer
scanelf 1.3.7-r1 apk psr/http-client 1.0.3 php-composer
shadow 4.13-r2 apk psr/http-factory 1.1.0 php-composer
skalibs 2.13.1.1-r1 apk psr/http-message 1.1 php-composer
slim/psr7 1.4 php-composer psr/log 1.1.4 php-composer
spomky-labs/base64url v2.0.4 php-composer ralouphie/getallheaders 3.0.3 php-composer
spomky-labs/cbor-php v1.1.1 php-composer ramsey/collection 1.1.4 php-composer
ssl_client 1.36.1-r0 apk ramsey/uuid 4.2.3 php-composer
symfony/cache v5.4.19 php-composer readline 8.3.1-r0 apk
symfony/cache-contracts v2.5.2 php-composer scanelf 1.3.8-r2 apk
symfony/config v5.4.19 php-composer shadow 4.18.0-r0 apk
symfony/dependency-injection v5.4.20 php-composer skalibs-libs 2.14.4.0-r0 apk
symfony/deprecation-contracts v2.5.2 php-composer slim/psr7 1.4.2 php-composer
symfony/expression-language v5.4.19 php-composer spomky-labs/base64url v2.0.4 php-composer
symfony/filesystem v5.4.19 php-composer spomky-labs/cbor-php v1.1.1 php-composer
symfony/polyfill-ctype v1.27.0 php-composer ssl_client 1.37.0-r30 apk
symfony/polyfill-mbstring v1.27.0 php-composer symfony/cache v5.4.46 php-composer
symfony/polyfill-php73 v1.27.0 php-composer symfony/cache-contracts v2.5.4 php-composer
symfony/polyfill-php80 v1.27.0 php-composer symfony/config v5.4.46 php-composer
symfony/polyfill-php81 v1.27.0 php-composer symfony/dependency-injection v5.4.48 php-composer
symfony/process v5.4.19 php-composer symfony/deprecation-contracts v2.5.4 php-composer
symfony/service-contracts v2.5.2 php-composer symfony/expression-language v5.4.45 php-composer
symfony/var-exporter v5.4.19 php-composer symfony/filesystem v5.4.45 php-composer
tecnickcom/tcpdf 6.6.2 php-composer symfony/polyfill-ctype v1.33.0 php-composer
thecodingmachine/safe v1.3.3 php-composer symfony/polyfill-iconv v1.33.0 php-composer
twig/twig v3.5.0 php-composer symfony/polyfill-mbstring v1.33.0 php-composer
tzdata 2023c-r1 apk symfony/polyfill-php73 v1.33.0 php-composer
utmps-libs 0.1.2.1-r1 apk symfony/polyfill-php80 v1.33.0 php-composer
web-auth/cose-lib v3.3.12 php-composer symfony/polyfill-php81 v1.33.0 php-composer
web-auth/metadata-service v3.3.12 php-composer symfony/polyfill-php84 v1.33.0 php-composer
web-auth/webauthn-lib v3.3.12 php-composer symfony/process v5.4.47 php-composer
webmozart/assert 1.11.0 php-composer symfony/service-contracts v2.5.4 php-composer
williamdes/mariadb-mysql-kbs v1.2.14 php-composer symfony/var-exporter v5.4.45 php-composer
xz-libs 5.4.3-r0 apk tecnickcom/tcpdf 6.10.0 php-composer
zlib 1.2.13-r1 apk thecodingmachine/safe v1.3.3.1 php-composer
zstd-libs 1.5.5-r4 apk twig/twig v3.11.3 php-composer
tzdata 2025c-r0 apk
utmps-libs 0.1.3.1-r0 apk
web-auth/cose-lib v3.3.12 php-composer
web-auth/metadata-service v3.3.12 php-composer
web-auth/webauthn-lib v3.3.12 php-composer
webmozart/assert 1.11.0 php-composer
williamdes/mariadb-mysql-kbs v1.3.0 php-composer
xz-libs 5.8.2-r0 apk
zlib 1.3.1-r2 apk
zstd-libs 1.5.7-r2 apk

View File

@ -6,36 +6,34 @@ project_url: "https://github.com/phpmyadmin/phpmyadmin/"
project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/phpmyadmin-logo.png" project_logo: "https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/phpmyadmin-logo.png"
project_blurb: | project_blurb: |
[{{ project_name|capitalize }}]({{ project_url }}) is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB. [{{ project_name|capitalize }}]({{ project_url }}) is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB.
project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}"
project_categories: "Databases"
# supported architectures # supported architectures
available_architectures: available_architectures:
- { arch: "{{ arch_x86_64 }}", tag: "amd64-latest"} - {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"}
- { arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"} - {arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"}
# container parameters # container parameters
common_param_env_vars_enabled: true common_param_env_vars_enabled: true
param_container_name: "{{ project_name }}" param_container_name: "{{ project_name }}"
param_usage_include_env: false
param_usage_include_env: true
param_env_vars:
- { env_var: "TZ", env_value: "America/New_York", desc: "Specify a timezone to use EG America/New_York"}
opt_param_usage_include_env: true opt_param_usage_include_env: true
opt_param_env_vars: opt_param_env_vars:
- { env_var: "PMA_ARBITRARY", env_value: "1", desc: "Set to `1` to allow you to connect to any server. Setting to `0` will only allow you to connect to specified hosts (See Application Setup)"} - {env_var: "PMA_ARBITRARY", env_value: "1", desc: "Set to `1` to allow you to connect to any server. Setting to `0` will only allow you to connect to specified hosts (See Application Setup)"}
- { env_var: "PMA_ABSOLUTE_URI", env_value: "https://phpmyadmin.example.com", desc: "Set the URL you will use to access the web frontend"} - {env_var: "PMA_ABSOLUTE_URI", env_value: "https://phpmyadmin.example.com", desc: "Set the URL you will use to access the web frontend"}
param_usage_include_ports: true param_usage_include_ports: true
param_ports: param_ports:
- { external_port: "80", internal_port: "80", port_desc: "Port for web frontend" } - {external_port: "80", internal_port: "80", port_desc: "Port for web frontend"}
param_usage_include_vols: true param_usage_include_vols: true
param_volumes: param_volumes:
- { vol_path: "/config", vol_host_path: "/path/to/appdata/config", desc: "Contains all relevant configuration files." } - {vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Persistent config files"}
# application setup block # application setup block
readonly_supported: true
readonly_message: |
* `/tmp` must be mounted to tmpfs
* Custom themes are not supported
nonroot_supported: true
nonroot_message: |
* Custom themes are not supported
app_setup_block_enabled: true app_setup_block_enabled: true
app_setup_block: | app_setup_block: |
This image uses nginx, in contrast to the official images which offer fpm-only or Apache variants. This image uses nginx, in contrast to the official images which offer fpm-only or Apache variants.
@ -43,13 +41,73 @@ app_setup_block: |
We support all of the official [environment variables](https://docs.phpmyadmin.net/en/latest/setup.html#docker-environment-variables) for configuration as well as directly editing the config files. We support all of the official [environment variables](https://docs.phpmyadmin.net/en/latest/setup.html#docker-environment-variables) for configuration as well as directly editing the config files.
For more information check out the [phpmyadmin documentation](https://www.phpmyadmin.net/docs/). For more information check out the [phpmyadmin documentation](https://www.phpmyadmin.net/docs/).
# init diagram
init_diagram: |
"phpmyadmin:latest": {
docker-mods
base {
fix-attr +\nlegacy cont-init
}
docker-mods -> base
legacy-services
custom services
init-services -> legacy-services
init-services -> custom services
custom services -> legacy-services
legacy-services -> ci-service-check
init-migrations -> init-adduser
init-nginx-end -> init-config
init-os-end -> init-config
init-config -> init-config-end
init-crontab-config -> init-config-end
init-phpmyadmin-config -> init-config-end
init-config -> init-crontab-config
init-mods-end -> init-custom-files
init-adduser -> init-device-perms
base -> init-envfile
init-os-end -> init-folders
init-php -> init-keygen
base -> init-migrations
init-config-end -> init-mods
init-mods-package-install -> init-mods-end
init-mods -> init-mods-package-install
init-samples -> init-nginx
init-version-checks -> init-nginx-end
init-adduser -> init-os-end
init-device-perms -> init-os-end
init-envfile -> init-os-end
init-keygen -> init-permissions
init-nginx -> init-php
init-nginx-end -> init-phpmyadmin-config
init-folders -> init-samples
init-custom-files -> init-services
init-permissions -> init-version-checks
init-services -> svc-cron
svc-cron -> legacy-services
init-services -> svc-nginx
svc-nginx -> legacy-services
init-services -> svc-php-fpm
svc-php-fpm -> legacy-services
}
Base Images: {
"baseimage-alpine-nginx:3.23" <- "baseimage-alpine:3.23"
}
"phpmyadmin:latest" <- Base Images
# changelog # changelog
changelogs: changelogs:
- { date: "25.05.23:", desc: "Rebase to Alpine 3.18, deprecate armhf." } - {date: "28.12.25:", desc: "Rebase to Alpine 3.23."}
- { date: "13.04.23:", desc: "Move ssl.conf include to default.conf." } - {date: "23.08.25:", desc: "Add support for mTLS. Existing users will need to delete their config.inc.php and restart the container."}
- { date: "20.01.23:", desc: "Rebase to alpine 3.17 with php8.1." } - {date: "05.07.25:", desc: "Rebase to Alpine 3.22."}
- { date: "18.11.22:", desc: "Rebasing to Alpine 3.16, migrate to s6v3." } - {date: "19.12.24:", desc: "Rebase to Alpine 3.21."}
- { date: "20.08.22:", desc: "Rebasing to Alpine 3.15 with php8. Restructure nginx configs ([see changes announcement](https://info.linuxserver.io/issues/2022-08-20-nginx-base))." } - {date: "27.05.24:", desc: "Existing users should update their nginx confs to avoid http2 deprecation warnings."}
- { date: "23.01.22:", desc: "Pin versions to 5.x.x." } - {date: "24.05.24:", desc: "Rebase to Alpine 3.20."}
- { date: "14.06.21:", desc: "Initial Release." } - {date: "28.12.23:", desc: "Rebase to Alpine 3.19 with php 8.3."}
- {date: "25.12.23:", desc: "Existing users should update: site-confs/default.conf - Cleanup default site conf."}
- {date: "06.09.23:", desc: "Add support for custom themes."}
- {date: "25.05.23:", desc: "Rebase to Alpine 3.18, deprecate armhf."}
- {date: "13.04.23:", desc: "Move ssl.conf include to default.conf."}
- {date: "20.01.23:", desc: "Rebase to alpine 3.17 with php8.1."}
- {date: "18.11.22:", desc: "Rebasing to Alpine 3.16, migrate to s6v3."}
- {date: "20.08.22:", desc: "Rebasing to Alpine 3.15 with php8. Restructure nginx configs ([see changes announcement](https://info.linuxserver.io/issues/2022-08-20-nginx-base))."}
- {date: "23.01.22:", desc: "Pin versions to 5.x.x."}
- {date: "14.06.21:", desc: "Initial Release."}

View File

@ -2,10 +2,11 @@
// Sourced from https://github.com/phpmyadmin/docker/blob/master/config.inc.php // Sourced from https://github.com/phpmyadmin/docker/blob/master/config.inc.php
require('/config/phpmyadmin/config.secret.inc.php'); require_once '/config/phpmyadmin/config.secret.inc.php';
require_once '/config/phpmyadmin/helpers.php';
/* Ensure we got the environment */ /* Ensure we got the environment */
$vars = array( $vars = [
'PMA_ARBITRARY', 'PMA_ARBITRARY',
'PMA_HOST', 'PMA_HOST',
'PMA_HOSTS', 'PMA_HOSTS',
@ -26,20 +27,45 @@ $vars = array(
'PMA_QUERYHISTORYDB', 'PMA_QUERYHISTORYDB',
'PMA_QUERYHISTORYMAX', 'PMA_QUERYHISTORYMAX',
'MAX_EXECUTION_TIME', 'MAX_EXECUTION_TIME',
'MEMORY_LIMIT' 'MEMORY_LIMIT',
); 'PMA_UPLOADDIR',
'PMA_SAVEDIR',
'PMA_SSL',
'PMA_SSLS',
'PMA_SSL_DIR',
'PMA_SSL_VERIFY',
'PMA_SSL_VERIFIES',
'PMA_SSL_CA',
'PMA_SSL_CAS',
'PMA_SSL_CA_BASE64',
'PMA_SSL_CAS_BASE64',
'PMA_SSL_KEY',
'PMA_SSL_KEYS',
'PMA_SSL_KEY_BASE64',
'PMA_SSL_KEYS_BASE64',
'PMA_SSL_CERT',
'PMA_SSL_CERTS',
'PMA_SSL_CERT_BASE64',
'PMA_SSL_CERTS_BASE64',
];
foreach ($vars as $var) { foreach ($vars as $var) {
$env = getenv($var); $env = getenv($var);
if (!isset($_ENV[$var]) && $env !== false) { if (!isset($_ENV[$var]) && $env !== false) {
$_ENV[$var] = $env; $_ENV[$var] = $env;
} }
} }
if (! defined('PMA_SSL_DIR')) {
define('PMA_SSL_DIR', $_ENV['PMA_SSL_DIR'] ?? '/config/phpmyadmin/ssl');
}
if (isset($_ENV['PMA_QUERYHISTORYDB'])) { if (isset($_ENV['PMA_QUERYHISTORYDB'])) {
$cfg['QueryHistoryDB'] = boolval($_ENV['PMA_QUERYHISTORYDB']); $cfg['QueryHistoryDB'] = (bool) $_ENV['PMA_QUERYHISTORYDB'];
} }
if (isset($_ENV['PMA_QUERYHISTORYMAX'])) { if (isset($_ENV['PMA_QUERYHISTORYMAX'])) {
$cfg['QueryHistoryMax'] = intval($_ENV['PMA_QUERYHISTORYMAX']); $cfg['QueryHistoryMax'] = (int) $_ENV['PMA_QUERYHISTORYMAX'];
} }
/* Arbitrary server connection */ /* Arbitrary server connection */
@ -52,29 +78,84 @@ if (isset($_ENV['PMA_ABSOLUTE_URI'])) {
$cfg['PmaAbsoluteUri'] = trim($_ENV['PMA_ABSOLUTE_URI']); $cfg['PmaAbsoluteUri'] = trim($_ENV['PMA_ABSOLUTE_URI']);
} }
if (isset($_ENV['PMA_SSL_CA_BASE64'])) {
$_ENV['PMA_SSL_CA'] = decodeBase64AndSaveFiles($_ENV['PMA_SSL_CA_BASE64'], 'phpmyadmin-ssl-CA', 'pem', PMA_SSL_DIR);
}
/* Decode and save the SSL key from base64 */
if (isset($_ENV['PMA_SSL_KEY_BASE64'])) {
$_ENV['PMA_SSL_KEY'] = decodeBase64AndSaveFiles($_ENV['PMA_SSL_KEY_BASE64'], 'phpmyadmin-ssl-CERT', 'cert', PMA_SSL_DIR);
}
/* Decode and save the SSL certificate from base64 */
if (isset($_ENV['PMA_SSL_CERT_BASE64'])) {
$_ENV['PMA_SSL_CERT'] = decodeBase64AndSaveFiles($_ENV['PMA_SSL_CERT_BASE64'], 'phpmyadmin-ssl-CERT', 'cert', PMA_SSL_DIR);
}
/* Decode and save multiple SSL CA certificates from base64 */
if (isset($_ENV['PMA_SSL_CAS_BASE64'])) {
$_ENV['PMA_SSL_CAS'] = decodeBase64AndSaveFiles($_ENV['PMA_SSL_CAS_BASE64'], 'phpmyadmin-ssl-CA', 'pem', PMA_SSL_DIR);
}
/* Decode and save multiple SSL keys from base64 */
if (isset($_ENV['PMA_SSL_KEYS_BASE64'])) {
$_ENV['PMA_SSL_KEYS'] = decodeBase64AndSaveFiles($_ENV['PMA_SSL_KEYS_BASE64'], 'phpmyadmin-ssl-CERT', 'cert', PMA_SSL_DIR);
}
/* Decode and save multiple SSL certificates from base64 */
if (isset($_ENV['PMA_SSL_CERTS_BASE64'])) {
$_ENV['PMA_SSL_CERTS'] = decodeBase64AndSaveFiles($_ENV['PMA_SSL_CERTS_BASE64'], 'phpmyadmin-ssl-KEY', 'key', PMA_SSL_DIR);
}
/* Figure out hosts */ /* Figure out hosts */
/* Fallback to default linked */ /* Fallback to default linked */
$hosts = array('db'); $hosts = ['db'];
/* Set by environment */ /* Set by environment */
if (!empty($_ENV['PMA_HOST'])) { if (! empty($_ENV['PMA_HOST'])) {
$hosts = array($_ENV['PMA_HOST']); $hosts = [$_ENV['PMA_HOST']];
$verbose = array($_ENV['PMA_VERBOSE']); $verbose = [$_ENV['PMA_VERBOSE']];
$ports = array($_ENV['PMA_PORT']); $ports = [$_ENV['PMA_PORT']];
} elseif (!empty($_ENV['PMA_HOSTS'])) { $ssls = [$_ENV['PMA_SSL']];
$ssl_verifies = [$_ENV['PMA_SSL_VERIFY']];
$ssl_cas = [$_ENV['PMA_SSL_CA']];
$ssl_keys = [$_ENV['PMA_SSL_KEY']];
$ssl_certs = [$_ENV['PMA_SSL_CERT']];
} elseif (! empty($_ENV['PMA_HOSTS'])) {
$hosts = array_map('trim', explode(',', $_ENV['PMA_HOSTS'])); $hosts = array_map('trim', explode(',', $_ENV['PMA_HOSTS']));
$verbose = array_map('trim', explode(',', $_ENV['PMA_VERBOSES'])); $verbose = array_map('trim', explode(',', $_ENV['PMA_VERBOSES']));
$ports = array_map('trim', explode(',', $_ENV['PMA_PORTS'])); $ports = array_map('trim', explode(',', $_ENV['PMA_PORTS']));
$ssls = array_map('trim', explode(',', $_ENV['PMA_SSLS']));
$ssl_verifies = array_map('trim', explode(',', $_ENV['PMA_SSL_VERIFIES']));
$ssl_cas = array_map('trim', explode(',', $_ENV['PMA_SSL_CAS']));
$ssl_keys = array_map('trim', explode(',', $_ENV['PMA_SSL_KEYS']));
$ssl_certs = array_map('trim', explode(',', $_ENV['PMA_SSL_CERTS']));
} }
if (!empty($_ENV['PMA_SOCKET'])) {
$sockets = array($_ENV['PMA_SOCKET']); if (! empty($_ENV['PMA_SOCKET'])) {
} elseif (!empty($_ENV['PMA_SOCKETS'])) { $sockets = [$_ENV['PMA_SOCKET']];
} elseif (! empty($_ENV['PMA_SOCKETS'])) {
$sockets = explode(',', $_ENV['PMA_SOCKETS']); $sockets = explode(',', $_ENV['PMA_SOCKETS']);
} }
/* Server settings */ /* Server settings */
for ($i = 1; isset($hosts[$i - 1]); $i++) { for ($i = 1; isset($hosts[$i - 1]); $i++) {
if (isset($ssls[$i - 1]) && $ssls[$i - 1] === '1') {
$cfg['Servers'][$i]['ssl'] = $ssls[$i - 1];
}
if (isset($ssl_verifies[$i - 1]) && $ssl_verifies[$i - 1] === '1') {
$cfg['Servers'][$i]['ssl_verify'] = $ssl_verifies[$i - 1];
}
if (isset($ssl_cas[$i - 1])) {
$cfg['Servers'][$i]['ssl_ca'] = $ssl_cas[$i - 1];
}
if (isset($ssl_keys[$i - 1])) {
$cfg['Servers'][$i]['ssl_key'] = $ssl_keys[$i - 1];
}
if (isset($ssl_certs[$i - 1])) {
$cfg['Servers'][$i]['ssl_cert'] = $ssl_certs[$i - 1];
}
$cfg['Servers'][$i]['host'] = $hosts[$i - 1]; $cfg['Servers'][$i]['host'] = $hosts[$i - 1];
if (isset($verbose[$i - 1])) { if (isset($verbose[$i - 1])) {
$cfg['Servers'][$i]['verbose'] = $verbose[$i - 1]; $cfg['Servers'][$i]['verbose'] = $verbose[$i - 1];
@ -126,9 +207,10 @@ for ($i = 1; isset($hosts[$i - 1]); $i++) {
$cfg['Servers'][$i]['compress'] = false; $cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['AllowNoPassword'] = true; $cfg['Servers'][$i]['AllowNoPassword'] = true;
} }
for ($i = 1; isset($sockets[$i - 1]); $i++) { // Avoid overwriting the last server id $i, use another variable name
$cfg['Servers'][$i]['socket'] = $sockets[$i - 1]; for ($socketHostId = 1; isset($sockets[$socketHostId - 1]); $socketHostId++) {
$cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$socketHostId]['socket'] = $sockets[$socketHostId - 1];
$cfg['Servers'][$socketHostId]['host'] = 'localhost';
} }
/* /*
* Revert back to last configured server to make * Revert back to last configured server to make
@ -137,8 +219,13 @@ for ($i = 1; isset($sockets[$i - 1]); $i++) {
$i--; $i--;
/* Uploads setup */ /* Uploads setup */
$cfg['UploadDir'] = ''; if (isset($_ENV['PMA_UPLOADDIR'])) {
$cfg['SaveDir'] = ''; $cfg['UploadDir'] = $_ENV['PMA_UPLOADDIR'];
}
if (isset($_ENV['PMA_SAVEDIR'])) {
$cfg['SaveDir'] = $_ENV['PMA_SAVEDIR'];
}
if (isset($_ENV['MAX_EXECUTION_TIME'])) { if (isset($_ENV['MAX_EXECUTION_TIME'])) {
$cfg['ExecTimeLimit'] = $_ENV['MAX_EXECUTION_TIME']; $cfg['ExecTimeLimit'] = $_ENV['MAX_EXECUTION_TIME'];
@ -150,5 +237,12 @@ if (isset($_ENV['MEMORY_LIMIT'])) {
/* Include User Defined Settings Hook */ /* Include User Defined Settings Hook */
if (file_exists('/config/phpmyadmin/config.user.inc.php')) { if (file_exists('/config/phpmyadmin/config.user.inc.php')) {
include('/config/phpmyadmin/config.user.inc.php'); include '/config/phpmyadmin/config.user.inc.php';
}
/* Support additional configurations */
if (is_dir('/config/phpmyadmin/conf.d/')) {
foreach (glob('/config/phpmyadmin/conf.d/*.php') as $filename) {
include $filename;
}
} }

53
root/defaults/helpers.php Normal file
View File

@ -0,0 +1,53 @@
<?php
// Sourced from https://github.com/phpmyadmin/docker/blob/master/helpers.php
declare(strict_types=1);
/**
* Helper function to decode and save multiple SSL files from base64.
*
* @param string $base64FilesContents The base64 encoded string containing multiple files separated by commas.
* If no commas are present, the entire string is treated as a single file.
* @param string $prefix The prefix to use for the generated file names.
* @param string $extension The file extension to use for the generated files.
* @param string $storageFolder The folder where to store the generated files.
*
* @return string A comma-separated list of paths to the generated files.
*/
function decodeBase64AndSaveFiles(string $base64FilesContents, string $prefix, string $extension, string $storageFolder): string
{
// Ensure the output directory exists
if (! is_dir($storageFolder)) {
mkdir($storageFolder, 0755, true);
}
// Split the base64 string into an array of files
$base64FilesContents = explode(',', trim($base64FilesContents));
$counter = 1;
$outputFiles = [];
// Process each file
foreach ($base64FilesContents as $base64FileContent) {
$outputFile = $storageFolder . '/' . $prefix . '-' . $counter . '.' . $extension;
$fileContent = base64_decode($base64FileContent, true);
if ($fileContent === false) {
echo 'Failed to decode: ' . $base64FileContent;
exit(1);
}
// Write the decoded file to the output directory
if (file_put_contents($outputFile, $fileContent) === false) {
echo 'Failed to write to ' . $outputFile;
exit(1);
}
// Add the output file path to the list
$outputFiles[] = $outputFile;
$counter++;
}
// Return a comma-separated list of the generated file paths
return implode(',', $outputFiles);
}

View File

@ -1,4 +1,4 @@
## Version 2023/04/13 - Changelog: https://github.com/linuxserver/docker-phpmyadmin/commits/main/root/defaults/nginx/site-confs/default.conf.sample ## Version 2024/07/16 - Changelog: https://github.com/linuxserver/docker-phpmyadmin/commits/main/root/defaults/nginx/site-confs/default.conf.sample
map $sent_http_content_type $expires { map $sent_http_content_type $expires {
default off; default off;
@ -10,16 +10,15 @@ map $sent_http_content_type $expires {
server { server {
listen 80 default_server; listen 80 default_server;
listen [::]:80 default_server; listen [::]:80 default_server;
listen 443 ssl default_server;
listen 443 ssl http2 default_server; listen [::]:443 ssl default_server;
listen [::]:443 ssl http2 default_server;
server_name _; server_name _;
include /config/nginx/ssl.conf; include /config/nginx/ssl.conf;
root /app/www/public; root /app/www/public;
index index.php index.html; index index.html index.htm index.php;
location / { location / {
# enable for basic auth # enable for basic auth
@ -28,15 +27,21 @@ server {
expires $expires; expires $expires;
try_files $uri $uri/ /index.php$is_args$args; try_files $uri $uri/ /index.html /index.htm /index.php$is_args$args;
} }
location ~ ^(.+\.php)(.*)$ { location ~ ^(.+\.php)(.*)$ {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_split_path_info ^(.+\.php)(.*)$;
if (!-f $document_root$fastcgi_script_name) { return 404; }
fastcgi_pass 127.0.0.1:9000; fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php; fastcgi_index index.php;
fastcgi_read_timeout 3600;
include /etc/nginx/fastcgi_params; include /etc/nginx/fastcgi_params;
fastcgi_read_timeout 3600;
} }
# deny access to .htaccess/.htpasswd files # deny access to .htaccess/.htpasswd files

View File

@ -2,25 +2,50 @@
# shellcheck shell=bash # shellcheck shell=bash
mkdir -p \ mkdir -p \
/config/phpmyadmin \ /config/phpmyadmin
/app/www/public/tmp
if [ ! -f /config/phpmyadmin/config.secret.inc.php ]; then if [[ ! -f /config/phpmyadmin/config.secret.inc.php ]]; then
cat >/config/phpmyadmin/config.secret.inc.php <<EOT cat >/config/phpmyadmin/config.secret.inc.php <<EOT
<?php <?php
\$cfg['blowfish_secret'] = '$(tr -dc 'a-zA-Z0-9~!@#$%^&*_()+}{?></";.,[]=-' </dev/urandom | fold -w 32 | head -n 1)'; \$cfg['blowfish_secret'] = '$(tr -dc 'a-zA-Z0-9~!@#$%^&*_()+}{?></";.,[]=-' </dev/urandom | fold -w 32 | head -n 1)';
EOT EOT
fi fi
if [ ! -f /config/phpmyadmin/config.user.inc.php ]; then if [[ -n "${PMA_CONFIG_BASE64}" ]]; then
echo "${PMA_CONFIG_BASE64}" | base64 -d > /config/phpmyadmin/config.inc.php
fi
if [[ -n "${PMA_USER_CONFIG_BASE64}" ]]; then
echo "${PMA_USER_CONFIG_BASE64}" | base64 -d > /config/phpmyadmin/config.user.inc.php
fi
if [[ ! -f /config/phpmyadmin/config.user.inc.php ]]; then
touch /config/phpmyadmin/config.user.inc.php touch /config/phpmyadmin/config.user.inc.php
fi fi
if [ ! -f /config/phpmyadmin/config.inc.php ]; then if [[ ! -f /config/phpmyadmin/config.inc.php ]]; then
cp /defaults/config.inc.php /config/phpmyadmin/config.inc.php cp /defaults/config.inc.php /config/phpmyadmin/config.inc.php
fi fi
# permissions if [[ ! -f /config/phpmyadmin/helpers.php ]]; then
lsiown -R abc:abc \ cp /defaults/helpers.php /config/phpmyadmin/helpers.php
/config \ fi
/app/www/public/tmp
if [[ -z ${LSIO_READ_ONLY_FS} ]] && [[ -z ${LSIO_NON_ROOT_USER} ]]; then
# Set up themes
if [[ -d "/config/themes" && ! -L "/app/www/public/themes" ]]; then
cp -R /app/www/public/themes/* /config/themes
rm -rf "/app/www/public/themes"
fi
if [[ ! -d "/config/themes" && ! -L "/app/www/public/themes" ]]; then
mv "/app/www/public/themes" /config/themes
fi
if [[ -d "/config/themes" && ! -L "/app/www/public/themes" ]]; then
ln -s "/config/themes" "/app/www/public/themes"
fi
fi
if [[ -z ${LSIO_NON_ROOT_USER} ]]; then
lsiown -R abc:abc \
/config
fi

2
root/migrations/02-default-location Normal file → Executable file
View File

@ -5,7 +5,7 @@ DEFAULT_CONF="/config/nginx/site-confs/default.conf"
OLD_ROOT="root /app/phpmyadmin;" OLD_ROOT="root /app/phpmyadmin;"
NEW_ROOT="root /app/www/public;" NEW_ROOT="root /app/www/public;"
if grep -q "${OLD_ROOT}" "${DEFAULT_CONF}" 2>/dev/null; then if [[ -f "${DEFAULT_CONF}" ]] && grep -q "${OLD_ROOT}" "${DEFAULT_CONF}" 2>/dev/null; then
echo "updating root in ${DEFAULT_CONF}" echo "updating root in ${DEFAULT_CONF}"
sed -i "s|${OLD_ROOT}|${NEW_ROOT}|" "${DEFAULT_CONF}" sed -i "s|${OLD_ROOT}|${NEW_ROOT}|" "${DEFAULT_CONF}"
fi fi