Skip to content

Commit d6f3e76

Browse files
authored
feat: synchronize with API Platform's definition (#113)
1 parent 235f6f8 commit d6f3e76

File tree

7 files changed

+79
-38
lines changed

7 files changed

+79
-38
lines changed

Dockerfile

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,22 @@ RUN set -eux; \
5353
\
5454
apk del .build-deps
5555

56-
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
56+
COPY docker/php/docker-healthcheck.sh /usr/local/bin/docker-healthcheck
57+
RUN chmod +x /usr/local/bin/docker-healthcheck
58+
59+
HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"]
5760

5861
RUN ln -s $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
5962
COPY docker/php/conf.d/symfony.prod.ini $PHP_INI_DIR/conf.d/symfony.ini
6063

61-
RUN set -eux; \
62-
{ \
63-
echo '[www]'; \
64-
echo 'ping.path = /ping'; \
65-
} | tee /usr/local/etc/php-fpm.d/docker-healthcheck.conf
64+
COPY docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf
65+
66+
COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
67+
RUN chmod +x /usr/local/bin/docker-entrypoint
68+
69+
VOLUME /var/run/php
70+
71+
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
6672

6773
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
6874
ENV COMPOSER_ALLOW_SUPERUSER=1
@@ -96,14 +102,6 @@ RUN set -eux; \
96102
chmod +x bin/console; sync
97103
VOLUME /srv/app/var
98104

99-
COPY docker/php/docker-healthcheck.sh /usr/local/bin/docker-healthcheck
100-
RUN chmod +x /usr/local/bin/docker-healthcheck
101-
102-
HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"]
103-
104-
COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
105-
RUN chmod +x /usr/local/bin/docker-entrypoint
106-
107105
ENTRYPOINT ["docker-entrypoint"]
108106
CMD ["php-fpm"]
109107

@@ -118,7 +116,6 @@ FROM caddy:${CADDY_VERSION} AS symfony_caddy
118116

119117
WORKDIR /srv/app
120118

121-
ENV MERCURE_DEMO="demo /srv/mercure-assets/"
122119
COPY --from=dunglas/mercure:v0.11 /srv/public /srv/mercure-assets/
123120
COPY --from=symfony_caddy_builder /usr/bin/caddy /usr/bin/caddy
124121
COPY --from=symfony_php /srv/app/public public/

docker-compose.prod.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ services:
55
php:
66
environment:
77
APP_ENV: prod
8+
APP_SECRET: ${APP_SECRET}
89

910
caddy:
1011
environment:
11-
MERCURE_DEMO: # Disable the demo
12-
MERCURE_PUBLISHER_JWT: ${MERCURE_PUBLISHER_JWT}
13-
MERCURE_SUBSCRIBER_JWT: ${MERCURE_SUBSCRIBER_JWT}
12+
MERCURE_PUBLISHER_JWT_KEY: ${MERCURE_PUBLISHER_JWT_KEY}
13+
MERCURE_SUBSCRIBER_JWT_KEY: ${MERCURE_SUBSCRIBER_JWT_KEY}

docker-compose.yml

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ services:
99
SYMFONY_VERSION: ${SYMFONY_VERSION:-}
1010
STABILITY: ${STABILITY:-stable}
1111
restart: unless-stopped
12+
volumes:
13+
- php_socket:/var/run/php
1214
healthcheck:
1315
interval: 10s
1416
timeout: 3s
@@ -25,18 +27,32 @@ services:
2527
build:
2628
context: .
2729
target: symfony_caddy
30+
depends_on:
31+
- php
2832
environment:
2933
SERVER_NAME: ${SERVER_NAME:-localhost, caddy:80}
30-
MERCURE_PUBLISHER_JWT: ${MERCURE_PUBLISHER_JWT:-!ChangeMe!}
31-
MERCURE_SUBSCRIBER_JWT: ${MERCURE_SUBSCRIBER_JWT:-!ChangeMe!}
34+
MERCURE_PUBLISHER_JWT_KEY: ${MERCURE_PUBLISHER_JWT_KEY:-!ChangeMe!}
35+
MERCURE_SUBSCRIBER_JWT_KEY: ${MERCURE_SUBSCRIBER_JWT_KEY:-!ChangeMe!}
3236
restart: unless-stopped
33-
ports:
34-
- "80:80"
35-
- "443:443"
3637
volumes:
38+
- php_socket:/var/run/php
3739
- caddy_data:/data
3840
- caddy_config:/config
41+
ports:
42+
# HTTP
43+
- target: 80
44+
published: 80
45+
protocol: tcp
46+
# HTTPS
47+
- target: 443
48+
published: 443
49+
protocol: tcp
50+
# HTTP/3
51+
- target: 443
52+
published: 443
53+
protocol: udp
3954

4055
volumes:
56+
php_socket:
4157
caddy_data:
4258
caddy_config:

docker/caddy/Caddyfile

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
{
2+
# Debug
3+
{$DEBUG}
4+
# HTTP/3 support
25
servers {
36
protocol {
47
experimental_http3
@@ -14,21 +17,21 @@ route {
1417
root * /srv/app/public
1518
mercure {
1619
# Transport to use (default to Bolt)
17-
transport_url bolt:///data/mercure.db
18-
# Enable the demo endpoint (disable it in production!)
19-
{$MERCURE_DEMO}
20+
transport_url {$MERCURE_TRANSPORT_URL:bolt:///data/mercure.db}
2021
# Publisher JWT key
21-
publisher_jwt {$MERCURE_PUBLISHER_JWT}
22+
publisher_jwt {env.MERCURE_PUBLISHER_JWT_KEY} {env.MERCURE_PUBLISHER_JWT_ALG}
2223
# Subscriber JWT key
23-
subscriber_jwt {$MERCURE_SUBSCRIBER_JWT}
24+
subscriber_jwt {env.MERCURE_SUBSCRIBER_JWT_KEY} {env.MERCURE_SUBSCRIBER_JWT_ALG}
2425
# Allow anonymous subscribers (double-check that it's what you want)
2526
anonymous
2627
# Enable the subscription API (double-check that it's what you want)
2728
subscriptions
29+
# Extra directives
30+
{$MERCURE_EXTRA_DIRECTIVES}
2831
}
2932
vulcain
3033
push
31-
php_fastcgi php:9000
32-
encode gzip
34+
php_fastcgi unix//var/run/php/php-fpm.sock
35+
encode zstd gzip
3336
file_server
3437
}

docker/php/docker-healthcheck.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export SCRIPT_NAME=/ping
55
export SCRIPT_FILENAME=/ping
66
export REQUEST_METHOD=GET
77

8-
if cgi-fcgi -bind -connect 127.0.0.1:9000; then
8+
if cgi-fcgi -bind -connect /var/run/php/php-fpm.sock; then
99
exit 0
1010
fi
1111

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[global]
2+
daemonize = no
3+
4+
[www]
5+
listen = /var/run/php/php-fpm.sock
6+
listen.mode = 0666
7+
ping.path = /ping

docs/production.md

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ Don't forget to add your SSH key or to create a password then press the "Finaliz
2323
Then, wait a few seconds while your Droplet is provisioning.
2424
When your Droplet is ready, use SSH to connect:
2525

26-
$ ssh root@<droplet-ip>
26+
```console
27+
ssh root@<droplet-ip>
28+
```
2729

2830
## Configuring a Domain Name
2931

@@ -35,7 +37,9 @@ Then create a DNS record of type `A` for your domain name pointing to the IP add
3537

3638
Example:
3739

38-
your-domain-name.example.com. IN A 207.154.233.113
40+
```dns
41+
your-domain-name.example.com. IN A 207.154.233.113
42+
````
3943
4044
Example in Gandi's UI:
4145
@@ -52,22 +56,36 @@ Deploy keys are also [supported by GitLab](https://docs.gitlab.com/ee/user/proje
5256
5357
Example with Git:
5458
55-
$ git clone git@github.com:<username>/<project-name>.git
59+
```console
60+
git clone git@github.com:<username>/<project-name>.git
61+
```
5662

5763
Go into the directory containing your project (`<project-name>`), and start the app in production mode:
5864

59-
$ SERVER_NAME=your-domain-name.example.com docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
65+
```console
66+
SERVER_NAME=your-domain-name.example.com \
67+
APP_SECRET=ChangeMe \
68+
MERCURE_PUBLISHER_JWT_KEY=ChangeMe \
69+
MERCURE_SUBSCRIBER_JWT_KEY=ChangeMe \
70+
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
71+
```
6072

61-
Be sure to replace `your-domain-name.example.com` by your actual domain name.
73+
Be sure to replace `your-domain-name.example.com` by your actual domain name and to set the values of `APP_SECRET`, `MERCURE_PUBLISHER_JWT_KEY` and `MERCURE_SUBSCRIBER_JWT_KEY` to cryptographically secure random values.
6274

6375
Your server is up and running, and a Let's Encrypt HTTPS certificate has been automatically generated for you.
6476
Go to `https://your-domain-name.example.com` and enjoy!
6577

66-
## Disabling HTTPS
78+
## Disabling HTTPS
6779

6880
Alternatively, if you don't want to expose an HTTPS server but only an HTTP one, run the following command:
6981

70-
$ SERVER_NAME=:80 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
82+
```console
83+
SERVER_NAME=:80 \
84+
APP_SECRET=ChangeMe \
85+
MERCURE_PUBLISHER_JWT_KEY=ChangeMe \
86+
MERCURE_SUBSCRIBER_JWT_KEY=ChangeMe \
87+
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
88+
```
7189

7290
## Deploying on Multiple Nodes
7391

0 commit comments

Comments
 (0)