feat: synchronize with API Platform's definition (#113)
This commit is contained in:
parent
235f6f8edc
commit
d6f3e7653f
27
Dockerfile
27
Dockerfile
@ -53,16 +53,22 @@ RUN set -eux; \
|
|||||||
\
|
\
|
||||||
apk del .build-deps
|
apk del .build-deps
|
||||||
|
|
||||||
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
COPY docker/php/docker-healthcheck.sh /usr/local/bin/docker-healthcheck
|
||||||
|
RUN chmod +x /usr/local/bin/docker-healthcheck
|
||||||
|
|
||||||
|
HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"]
|
||||||
|
|
||||||
RUN ln -s $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
|
RUN ln -s $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
|
||||||
COPY docker/php/conf.d/symfony.prod.ini $PHP_INI_DIR/conf.d/symfony.ini
|
COPY docker/php/conf.d/symfony.prod.ini $PHP_INI_DIR/conf.d/symfony.ini
|
||||||
|
|
||||||
RUN set -eux; \
|
COPY docker/php/php-fpm.d/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf
|
||||||
{ \
|
|
||||||
echo '[www]'; \
|
COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
|
||||||
echo 'ping.path = /ping'; \
|
RUN chmod +x /usr/local/bin/docker-entrypoint
|
||||||
} | tee /usr/local/etc/php-fpm.d/docker-healthcheck.conf
|
|
||||||
|
VOLUME /var/run/php
|
||||||
|
|
||||||
|
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
||||||
|
|
||||||
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
|
# https://getcomposer.org/doc/03-cli.md#composer-allow-superuser
|
||||||
ENV COMPOSER_ALLOW_SUPERUSER=1
|
ENV COMPOSER_ALLOW_SUPERUSER=1
|
||||||
@ -96,14 +102,6 @@ RUN set -eux; \
|
|||||||
chmod +x bin/console; sync
|
chmod +x bin/console; sync
|
||||||
VOLUME /srv/app/var
|
VOLUME /srv/app/var
|
||||||
|
|
||||||
COPY docker/php/docker-healthcheck.sh /usr/local/bin/docker-healthcheck
|
|
||||||
RUN chmod +x /usr/local/bin/docker-healthcheck
|
|
||||||
|
|
||||||
HEALTHCHECK --interval=10s --timeout=3s --retries=3 CMD ["docker-healthcheck"]
|
|
||||||
|
|
||||||
COPY docker/php/docker-entrypoint.sh /usr/local/bin/docker-entrypoint
|
|
||||||
RUN chmod +x /usr/local/bin/docker-entrypoint
|
|
||||||
|
|
||||||
ENTRYPOINT ["docker-entrypoint"]
|
ENTRYPOINT ["docker-entrypoint"]
|
||||||
CMD ["php-fpm"]
|
CMD ["php-fpm"]
|
||||||
|
|
||||||
@ -118,7 +116,6 @@ FROM caddy:${CADDY_VERSION} AS symfony_caddy
|
|||||||
|
|
||||||
WORKDIR /srv/app
|
WORKDIR /srv/app
|
||||||
|
|
||||||
ENV MERCURE_DEMO="demo /srv/mercure-assets/"
|
|
||||||
COPY --from=dunglas/mercure:v0.11 /srv/public /srv/mercure-assets/
|
COPY --from=dunglas/mercure:v0.11 /srv/public /srv/mercure-assets/
|
||||||
COPY --from=symfony_caddy_builder /usr/bin/caddy /usr/bin/caddy
|
COPY --from=symfony_caddy_builder /usr/bin/caddy /usr/bin/caddy
|
||||||
COPY --from=symfony_php /srv/app/public public/
|
COPY --from=symfony_php /srv/app/public public/
|
||||||
|
@ -5,9 +5,9 @@ services:
|
|||||||
php:
|
php:
|
||||||
environment:
|
environment:
|
||||||
APP_ENV: prod
|
APP_ENV: prod
|
||||||
|
APP_SECRET: ${APP_SECRET}
|
||||||
|
|
||||||
caddy:
|
caddy:
|
||||||
environment:
|
environment:
|
||||||
MERCURE_DEMO: # Disable the demo
|
MERCURE_PUBLISHER_JWT_KEY: ${MERCURE_PUBLISHER_JWT_KEY}
|
||||||
MERCURE_PUBLISHER_JWT: ${MERCURE_PUBLISHER_JWT}
|
MERCURE_SUBSCRIBER_JWT_KEY: ${MERCURE_SUBSCRIBER_JWT_KEY}
|
||||||
MERCURE_SUBSCRIBER_JWT: ${MERCURE_SUBSCRIBER_JWT}
|
|
||||||
|
@ -9,6 +9,8 @@ services:
|
|||||||
SYMFONY_VERSION: ${SYMFONY_VERSION:-}
|
SYMFONY_VERSION: ${SYMFONY_VERSION:-}
|
||||||
STABILITY: ${STABILITY:-stable}
|
STABILITY: ${STABILITY:-stable}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
volumes:
|
||||||
|
- php_socket:/var/run/php
|
||||||
healthcheck:
|
healthcheck:
|
||||||
interval: 10s
|
interval: 10s
|
||||||
timeout: 3s
|
timeout: 3s
|
||||||
@ -25,18 +27,32 @@ services:
|
|||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
target: symfony_caddy
|
target: symfony_caddy
|
||||||
|
depends_on:
|
||||||
|
- php
|
||||||
environment:
|
environment:
|
||||||
SERVER_NAME: ${SERVER_NAME:-localhost, caddy:80}
|
SERVER_NAME: ${SERVER_NAME:-localhost, caddy:80}
|
||||||
MERCURE_PUBLISHER_JWT: ${MERCURE_PUBLISHER_JWT:-!ChangeMe!}
|
MERCURE_PUBLISHER_JWT_KEY: ${MERCURE_PUBLISHER_JWT_KEY:-!ChangeMe!}
|
||||||
MERCURE_SUBSCRIBER_JWT: ${MERCURE_SUBSCRIBER_JWT:-!ChangeMe!}
|
MERCURE_SUBSCRIBER_JWT_KEY: ${MERCURE_SUBSCRIBER_JWT_KEY:-!ChangeMe!}
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
|
||||||
- "80:80"
|
|
||||||
- "443:443"
|
|
||||||
volumes:
|
volumes:
|
||||||
|
- php_socket:/var/run/php
|
||||||
- caddy_data:/data
|
- caddy_data:/data
|
||||||
- caddy_config:/config
|
- caddy_config:/config
|
||||||
|
ports:
|
||||||
|
# HTTP
|
||||||
|
- target: 80
|
||||||
|
published: 80
|
||||||
|
protocol: tcp
|
||||||
|
# HTTPS
|
||||||
|
- target: 443
|
||||||
|
published: 443
|
||||||
|
protocol: tcp
|
||||||
|
# HTTP/3
|
||||||
|
- target: 443
|
||||||
|
published: 443
|
||||||
|
protocol: udp
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
|
php_socket:
|
||||||
caddy_data:
|
caddy_data:
|
||||||
caddy_config:
|
caddy_config:
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
# Debug
|
||||||
|
{$DEBUG}
|
||||||
|
# HTTP/3 support
|
||||||
servers {
|
servers {
|
||||||
protocol {
|
protocol {
|
||||||
experimental_http3
|
experimental_http3
|
||||||
@ -14,21 +17,21 @@ route {
|
|||||||
root * /srv/app/public
|
root * /srv/app/public
|
||||||
mercure {
|
mercure {
|
||||||
# Transport to use (default to Bolt)
|
# Transport to use (default to Bolt)
|
||||||
transport_url bolt:///data/mercure.db
|
transport_url {$MERCURE_TRANSPORT_URL:bolt:///data/mercure.db}
|
||||||
# Enable the demo endpoint (disable it in production!)
|
|
||||||
{$MERCURE_DEMO}
|
|
||||||
# Publisher JWT key
|
# Publisher JWT key
|
||||||
publisher_jwt {$MERCURE_PUBLISHER_JWT}
|
publisher_jwt {env.MERCURE_PUBLISHER_JWT_KEY} {env.MERCURE_PUBLISHER_JWT_ALG}
|
||||||
# Subscriber JWT key
|
# Subscriber JWT key
|
||||||
subscriber_jwt {$MERCURE_SUBSCRIBER_JWT}
|
subscriber_jwt {env.MERCURE_SUBSCRIBER_JWT_KEY} {env.MERCURE_SUBSCRIBER_JWT_ALG}
|
||||||
# Allow anonymous subscribers (double-check that it's what you want)
|
# Allow anonymous subscribers (double-check that it's what you want)
|
||||||
anonymous
|
anonymous
|
||||||
# Enable the subscription API (double-check that it's what you want)
|
# Enable the subscription API (double-check that it's what you want)
|
||||||
subscriptions
|
subscriptions
|
||||||
|
# Extra directives
|
||||||
|
{$MERCURE_EXTRA_DIRECTIVES}
|
||||||
}
|
}
|
||||||
vulcain
|
vulcain
|
||||||
push
|
push
|
||||||
php_fastcgi php:9000
|
php_fastcgi unix//var/run/php/php-fpm.sock
|
||||||
encode gzip
|
encode zstd gzip
|
||||||
file_server
|
file_server
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ export SCRIPT_NAME=/ping
|
|||||||
export SCRIPT_FILENAME=/ping
|
export SCRIPT_FILENAME=/ping
|
||||||
export REQUEST_METHOD=GET
|
export REQUEST_METHOD=GET
|
||||||
|
|
||||||
if cgi-fcgi -bind -connect 127.0.0.1:9000; then
|
if cgi-fcgi -bind -connect /var/run/php/php-fpm.sock; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
7
docker/php/php-fpm.d/zz-docker.conf
Normal file
7
docker/php/php-fpm.d/zz-docker.conf
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[global]
|
||||||
|
daemonize = no
|
||||||
|
|
||||||
|
[www]
|
||||||
|
listen = /var/run/php/php-fpm.sock
|
||||||
|
listen.mode = 0666
|
||||||
|
ping.path = /ping
|
@ -23,7 +23,9 @@ Don't forget to add your SSH key or to create a password then press the "Finaliz
|
|||||||
Then, wait a few seconds while your Droplet is provisioning.
|
Then, wait a few seconds while your Droplet is provisioning.
|
||||||
When your Droplet is ready, use SSH to connect:
|
When your Droplet is ready, use SSH to connect:
|
||||||
|
|
||||||
$ ssh root@<droplet-ip>
|
```console
|
||||||
|
ssh root@<droplet-ip>
|
||||||
|
```
|
||||||
|
|
||||||
## Configuring a Domain Name
|
## Configuring a Domain Name
|
||||||
|
|
||||||
@ -35,7 +37,9 @@ Then create a DNS record of type `A` for your domain name pointing to the IP add
|
|||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
your-domain-name.example.com. IN A 207.154.233.113
|
```dns
|
||||||
|
your-domain-name.example.com. IN A 207.154.233.113
|
||||||
|
````
|
||||||
|
|
||||||
Example in Gandi's UI:
|
Example in Gandi's UI:
|
||||||
|
|
||||||
@ -52,13 +56,21 @@ Deploy keys are also [supported by GitLab](https://docs.gitlab.com/ee/user/proje
|
|||||||
|
|
||||||
Example with Git:
|
Example with Git:
|
||||||
|
|
||||||
$ git clone git@github.com:<username>/<project-name>.git
|
```console
|
||||||
|
git clone git@github.com:<username>/<project-name>.git
|
||||||
|
```
|
||||||
|
|
||||||
Go into the directory containing your project (`<project-name>`), and start the app in production mode:
|
Go into the directory containing your project (`<project-name>`), and start the app in production mode:
|
||||||
|
|
||||||
$ SERVER_NAME=your-domain-name.example.com docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
```console
|
||||||
|
SERVER_NAME=your-domain-name.example.com \
|
||||||
|
APP_SECRET=ChangeMe \
|
||||||
|
MERCURE_PUBLISHER_JWT_KEY=ChangeMe \
|
||||||
|
MERCURE_SUBSCRIBER_JWT_KEY=ChangeMe \
|
||||||
|
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
Be sure to replace `your-domain-name.example.com` by your actual domain name.
|
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.
|
||||||
|
|
||||||
Your server is up and running, and a Let's Encrypt HTTPS certificate has been automatically generated for you.
|
Your server is up and running, and a Let's Encrypt HTTPS certificate has been automatically generated for you.
|
||||||
Go to `https://your-domain-name.example.com` and enjoy!
|
Go to `https://your-domain-name.example.com` and enjoy!
|
||||||
@ -67,7 +79,13 @@ Go to `https://your-domain-name.example.com` and enjoy!
|
|||||||
|
|
||||||
Alternatively, if you don't want to expose an HTTPS server but only an HTTP one, run the following command:
|
Alternatively, if you don't want to expose an HTTPS server but only an HTTP one, run the following command:
|
||||||
|
|
||||||
$ SERVER_NAME=:80 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
```console
|
||||||
|
SERVER_NAME=:80 \
|
||||||
|
APP_SECRET=ChangeMe \
|
||||||
|
MERCURE_PUBLISHER_JWT_KEY=ChangeMe \
|
||||||
|
MERCURE_SUBSCRIBER_JWT_KEY=ChangeMe \
|
||||||
|
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
## Deploying on Multiple Nodes
|
## Deploying on Multiple Nodes
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user