update document.

This commit is contained in:
luming 2024-01-15 16:21:08 +08:00
parent bd1994a61f
commit 1d9de1c635
16 changed files with 779 additions and 36 deletions

21
LICENSE.txt Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 rainerosion
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

139
README.MD
View File

@ -1,4 +1,141 @@
# CaddyServer with PHP-FPM # CaddyServer with PHP-FPM
# This is a simple Docker image to run CaddyServer with PHP-FPM. This is a simple Docker image to run CaddyServer with PHP-FPM.
## Usage
The following examples use images that have already been built; you can build your own images as described below.
### Single Container
- Configure your Caddyfile and place it in a folder on your host. Exapmle:
```plaintext
{
email admin@rainss.cn
}
example.com:80 {
encode gzip
root * /www/websites
php_fastcgi localhost:9000
file_server
}
```
- Run the container with the following command. Example:
```bash
docker run -d -p 80:80 -p 443:443 -v /path/to/your/Caddyfile:/etc/caddy/Caddyfile -v /path/to/your/site:/www/websites --name caddyserver-php-fpm rainautos/caddyserver-php-fpm
```
### Docker Compose [Multi-container]
You can use Docker Compose to run CaddyServer with PHP-FPM. For example:
- Configure your Caddyfile and Using the following command to create a container.
- Caddyfile
```plaintext
{
email admin@rainss.cn
}
example.com:80 {
encode gzip
root * /www/websites
# notice: php-fpm is the name of the container
php_fastcgi php-fpm:9000
file_server
}
```
#### Using Dockerfile
```bash
version: '3'
services:
webservice:
container_name: caddy
image: caddy:latest
ports:
- "80:80"
- "443:443"
volumes:
- ${PWD}/Caddyfile:/etc/caddy/Caddyfile
- ${PWD}/config:/config
- ${PWD}/data:/data
- ${PWD}/websites:/www/websites
depends_on:
- php-cgi
restart: unless-stopped
networks:
- website
php-cgi:
container_name: php-fpm
build:
context: ./php-fpm/8.2
dockerfile: Dockerfile
volumes:
- ${PWD}/websites:/www/websites
restart: unless-stopped
networks:
- website
networks:
website:
driver: bridge
```
#### Using Repository Image
```bash
```yaml
version: '3'
services:
webservice:
container_name: caddy
image: caddy:latest
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- /etc/localtime:/etc/localtime
- ${PWD}/Caddyfile:/etc/caddy/Caddyfile
- ${PWD}/opt/caddy/config:/config
- ${PWD}/opt/caddy/data:/data
- ${PWD}/websites:/www/websites
depends_on:
- php-cgi
restart: always
networks:
- website
php-cgi:
container_name: php-fpm
image: rainautos/php-fpm:8.1.15
volumes:
- /etc/localtime:/etc/localtime
- ${PWD}/websites:/www/websites
restart: always
networks:
- website
networks:
website:
driver: bridge
```
## Build images
You can find the Dockerfiles in the `supervisor` or `php-fpm` folder to build the images.
### Build Caddy + PHP-FPM image
```bash
cd caddy-with-php/supervisor
docker build -t rainautos/caddyserver-php-fpm:latest .
```
### Build PHP-FPM image
```bash
cd php-fpm/8.3
docker build -t rainautos/php-fpm:latest .
```

View File

@ -1,6 +0,0 @@
:80 {
encode gzip
root * /www/websites/public
php_fastcgi 127.0.0.1:9000
file_server
}

View File

@ -1,13 +0,0 @@
#!/bin/sh
if [ "${1}" = "-D" ]; then
exec /usr/bin/supervisord -n -c /etc/supervisord.conf
else
exec "$@"
fi
# first arg is `-f` or `--some-option`
#if [ "${1#-}" != "$1" ]; then
# set -- php-fpm "$@"
#fi
#
#exec "$@"

View File

@ -5,6 +5,7 @@ LABEL maintainer="rainerosion <admin@rainss.cn>"
ENV XDG_CONFIG_HOME /config ENV XDG_CONFIG_HOME /config
ENV XDG_DATA_HOME /data ENV XDG_DATA_HOME /data
ENV CADDY_VERSION 2.7.6
# build dependencies # build dependencies
ENV BUILD_DEPS \ ENV BUILD_DEPS \
@ -82,26 +83,25 @@ RUN set -eux; \
echo "<?php phpinfo();" > /usr/share/caddy/info.php; \ echo "<?php phpinfo();" > /usr/share/caddy/info.php; \
apkArch="$(apk --print-arch)"; \ apkArch="$(apk --print-arch)"; \
case "$apkArch" in \ case "$apkArch" in \
x86_64) binArch='amd64'; checksum='b74311ec8263f30f6d36e5c8be151e8bc092b377789a55300d5671238b9043de5bd6db2bcefae32aa1e6fe94c47bbf02982c44a7871e5777b2596fdb20907cbf' ;; \ x86_64) binArch='amd64' ;; \
armhf) binArch='armv6'; checksum='88756642ca412db3a8da7a40b518861a6f524a8ac704021e8451d3cb38746f24243b1e561f4eec07e1575200d06bfd098783d2b7ee7ee07a971aed1c677da6e6' ;; \ armhf) binArch='armv6' ;; \
armv7) binArch='armv7'; checksum='118776e879c280556abb7c03ff7c0081eda23c2aee0472aef176f733785e9501defaeaf334cd2443e31294809beafaea831d2e695aa68045160082aa3a966e2f' ;; \ armv7) binArch='armv7' ;; \
aarch64) binArch='arm64'; checksum='62252ade5e8dcec13a66154ee1978d959370be049cce52e7c4edefff14ef70bbb21630e3735092719bc3c31214e89dff99e55970ff0adec8ac0a94c6415b059a' ;; \ aarch64) binArch='arm64' ;; \
ppc64el|ppc64le) binArch='ppc64le'; checksum='65d27fe53f5e4fa79f3476f8902071c907aab74db1a2616342be3714d4252219fbb53b174ef588e20c51e7cfac84376c7a0a608091c2fe83b31dbf59dabeb237' ;; \ ppc64el|ppc64le) binArch='ppc64le' ;; \
s390x) binArch='s390x'; checksum='c562190962a2db0248a4190616dd2ebaa02df2cf62f1a2c71f9d9de18af2a297df8000a06a11e8d3929dfd64f0c081d1e61961687ca220007459f2dbd0be2c81' ;; \ s390x) binArch='s390x' ;; \
*) echo >&2 "error: unsupported architecture ($apkArch)"; exit 1 ;;\ *) echo >&2 "error: unsupported architecture ($apkArch)"; exit 1 ;;\
esac; \ esac; \
wget -O /tmp/caddy.tar.gz "https://github.com/caddyserver/caddy/releases/download/v2.7.6/caddy_2.7.6_linux_${binArch}.tar.gz"; \ wget -O /tmp/caddy.tar.gz "https://github.com/caddyserver/caddy/releases/download/v${CADDY_VERSION}/caddy_${CADDY_VERSION}_linux_${binArch}.tar.gz"; \
echo "$checksum /tmp/caddy.tar.gz" | sha512sum -c; \
tar x -z -f /tmp/caddy.tar.gz -C /usr/bin caddy; \ tar x -z -f /tmp/caddy.tar.gz -C /usr/bin caddy; \
rm -f /tmp/caddy.tar.gz; \ rm -f /tmp/caddy.tar.gz; \
setcap cap_net_bind_service=+ep /usr/bin/caddy; \ setcap cap_net_bind_service=+ep /usr/bin/caddy; \
chmod +x /usr/bin/caddy; \ chmod +x /usr/bin/caddy; \
caddy version; \ caddy version; \
# docker-php-ext-configure gd --enable-gd --with-jpeg --with-webp --with-freetype; \ docker-php-ext-configure gd --enable-gd --with-jpeg --with-webp --with-freetype; \
# docker-php-ext-install -j $(nproc) $PHP_EXTENSIONS; \ docker-php-ext-install -j $(nproc) $PHP_EXTENSIONS; \
# pecl install -o -f redis; \ pecl install -o -f redis; \
# pecl install memcached imagick; \ pecl install memcached imagick; \
# docker-php-ext-enable redis memcached imagick; \ docker-php-ext-enable redis memcached imagick; \
apk del .build-deps; \ apk del .build-deps; \
curl --tlsv1 -v -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer; curl --tlsv1 -v -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer;

View File

@ -19,7 +19,7 @@
# reverse_proxy localhost:8080 # reverse_proxy localhost:8080
# Or serve a PHP site through php-fpm: # Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000 php_fastcgi localhost:9000
} }
# Refer to the Caddy docs for more information: # Refer to the Caddy docs for more information:

View File

@ -2,5 +2,5 @@
set -e set -e
# php-fpm daemonize # php-fpm daemonize
php-fpm -D php-fpm -D
# start caddy # execute cmd
exec "$@" exec "$@"

View File

@ -0,0 +1,122 @@
FROM caddy:alpine as caddy-build
FROM php:8.3-fpm-alpine3.19
LABEL maintainer="rainerosion <admin@rainss.cn>"
ENV XDG_CONFIG_HOME /config
ENV XDG_DATA_HOME /data
ENV CADDY_VERSION 2.7.6
# build dependencies
ENV BUILD_DEPS \
libzip-dev \
icu-dev \
postgresql-dev \
libpng-dev \
libwebp-dev \
libjpeg-turbo-dev \
curl-dev \
sqlite-dev \
oniguruma-dev \
libmemcached-dev \
zlib-dev \
imagemagick-dev \
freetype-dev
# runtime dependencies
ENV RUN_DEPS \
autoconf \
g++ \
make \
libzip \
icu \
postgresql-libs \
libpng \
libwebp \
libjpeg-turbo \
curl \
sqlite-libs \
oniguruma \
libmemcached \
shadow \
zlib \
imagemagick \
freetype \
ca-certificates \
libcap \
mailcap \
supervisor
# php extensions
ENV PHP_EXTENSIONS \
zip \
intl \
exif \
pdo_mysql \
pdo_pgsql \
mysqli \
pgsql \
gd \
curl \
session \
pdo_sqlite \
fileinfo \
mbstring \
bcmath
# set default uid and gid for www-data
ARG UID=1000
ARG GUID=1000
# fpm user
ARG USER=www-data
# web server and php-fpm
RUN set -eux; \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories; \
apk update; \
apk add --no-cache $RUN_DEPS; \
usermod -u $UID -o $USER; \
groupmod -g $GUID -o $USER; \
apk add --no-cache --virtual .build-deps $BUILD_DEPS; \
mkdir -p \
/config/caddy \
/data/caddy \
/etc/caddy \
/usr/share/caddy \
/etc/supervisor/conf.d \
/srv ; \
wget -O /etc/caddy/Caddyfile "https://p.iblog.site/https://github.com/caddyserver/dist/raw/cd39178d252a610fee6aa8465c787d9c780007a2/config/Caddyfile"; \
wget -O /usr/share/caddy/index.html "https://p.iblog.site/https://github.com/caddyserver/dist/raw/cd39178d252a610fee6aa8465c787d9c780007a2/welcome/index.html"; \
echo "<?php phpinfo();" > /usr/share/caddy/info.php; \
apkArch="$(apk --print-arch)"; \
case "$apkArch" in \
x86_64) binArch='amd64' ;; \
armhf) binArch='armv6' ;; \
armv7) binArch='armv7' ;; \
aarch64) binArch='arm64' ;; \
ppc64el|ppc64le) binArch='ppc64le' ;; \
s390x) binArch='s390x' ;; \
*) echo >&2 "error: unsupported architecture ($apkArch)"; exit 1 ;;\
esac; \
wget -O /tmp/caddy.tar.gz "https://github.com/caddyserver/caddy/releases/download/v${CADDY_VERSION}/caddy_${CADDY_VERSION}_linux_${binArch}.tar.gz"; \
tar x -z -f /tmp/caddy.tar.gz -C /usr/bin caddy; \
rm -f /tmp/caddy.tar.gz; \
setcap cap_net_bind_service=+ep /usr/bin/caddy; \
chmod +x /usr/bin/caddy; \
caddy version; \
docker-php-ext-configure gd --enable-gd --with-jpeg --with-webp --with-freetype; \
docker-php-ext-install -j $(nproc) $PHP_EXTENSIONS; \
pecl install -o -f redis; \
pecl install memcached imagick; \
docker-php-ext-enable redis memcached imagick; \
apk del .build-deps; \
curl --tlsv1 -v -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer;
COPY listener.php /srv/listener.php
COPY supervisord.conf /etc/supervisord.conf
COPY conf /etc/supervisor/conf.d/
EXPOSE 80
EXPOSE 443
EXPOSE 2019
EXPOSE 443/udp
WORKDIR /srv
CMD ["supervisord","-n","-c","/etc/supervisord.conf"]

View File

@ -0,0 +1,10 @@
[program:caddy]
command=caddy run --config /etc/caddy/Caddyfile --adapter caddyfile
process_name=%(program_name)s_%(process_num)02d
numprocs=1
autostart=true
autorestart=true
startsecs=0
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0

View File

@ -0,0 +1,7 @@
[eventlistener:subprocess-stopped]
command=php /srv/listener.php
process_name=%(program_name)s_%(process_num)02d
numprocs=1
events=PROCESS_STATE_EXITED,PROCESS_STATE_STOPPED,PROCESS_STATE_FATAL
autostart=true
autorestart=unexpected

View File

@ -0,0 +1,10 @@
[program:php-fpm]
command=php-fpm --nodaemonize
process_name=%(program_name)s_%(process_num)02d
numprocs=1
autostart=true
autorestart=true
startsecs=0
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0

View File

@ -0,0 +1,26 @@
# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.
:80 {
# Set this path to your site's directory.
root * /usr/share/caddy
# Enable the static file server.
file_server
# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080
# Or serve a PHP site through php-fpm:
php_fastcgi localhost:9000
}
# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile

View File

@ -0,0 +1,394 @@
<!DOCTYPE html>
<html>
<head>
<title>Caddy works!</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="data:,">
<style>
* {
box-sizing: border-box;
padding: 0;
margin: 0;
}
body {
background: #f1f4f5;
font-family: Inter, sans-serif;
font-size: 20px;
-webkit-font-smoothing: antialiased;
}
a {
color: #2f79ff;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.stack {
width: 70%;
max-width: 1150px;
margin: 25px 0 150px 25px;
display: flex;
align-content: flex-start;
}
.paper {
position: relative;
flex-shrink: 0;
width: 100%;
background: white;
border-radius: 3px;
box-shadow: 1px 2px 4px 1px rgba(0, 0, 0, .15);
padding: 100px;
}
#paper1 {
top: 45px;
left: 50px;
}
#paper2 {
top: 20px;
left: -100%;
}
#paper3 {
top: 25px;
transform: rotate(-4deg);
left: -200%;
}
#caddy {
max-width: 300px;
margin-bottom: 50px;
}
#caddy .caddy-color {
fill: #005e7e;
}
h1 {
font-size: 20px;
margin-bottom: 50px;
}
h1 .emoji {
font-size: 150%;
vertical-align: middle;
}
h1 .lang {
margin-right: 1.25em;
}
h2 {
font-size: 28px;
margin-top: 1.5em;
}
p,
ol,
ul {
color: #333;
line-height: 1.5em;
}
p {
margin: 1.5em 0;
}
ol,
ul {
margin: .5em 0 .5em 2em;
}
ol li,
ul li {
margin-left: 1em;
margin-bottom: .5em;
}
li ol {
list-style-type: lower-alpha;
}
code {
color: #000;
font-family: Menlo, monospace;
background: #f0f0f0;
border-radius: 2px;
padding: 4px 8px;
font-size: 90%;
}
.warn {
color: #dd0000;
}
footer {
color: #777;
font-size: 16px;
text-align: center;
max-width: 600px;
margin: 0 auto 50px;
}
#disclaimer {
font-size: 14px;
margin-top: 20px;
display: inline-block;
border-top: 1px solid #ccc;
padding: 20px;
}
@media (max-width: 1100px) {
.stack {
width: 85%;
}
}
@media (max-width: 800px) {
.stack {
margin: 0 0 50px 0;
width: 100%;
}
.paper {
padding: 50px;
}
#paper1,
#paper2 {
display: none;
}
#paper3 {
left: 0;
transform: none;
top: 0;
}
#caddy {
max-width: 300px;
margin-bottom: 45px;
display: block;
}
}
</style>
</head>
<body>
<div class="stack">
<div class="paper" id="paper1"></div>
<div class="paper" id="paper2"></div>
<div class="paper" id="paper3">
<a href="https://caddyserver.com/" title="Caddy Web Server">
<svg id="caddy" viewBox="0 0 379 114" version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;">
<g transform="matrix(1,0,0,1,-35.5985,-67.948)">
<g transform="matrix(1.16548,0,0,1.10195,-124,-68.27)">
<g id="Light-Logo" serif:id="Light Logo"
transform="matrix(0.858013,0,0,0.907485,-3243.42,-1469.17)">
<g id="Logo" transform="matrix(1,0,0,1,21.4759,36.7359)">
<g id="Icon">
<g>
<g
transform="matrix(-0.191794,-0.715786,0.715786,-0.191794,4329.14,4673.64)">
<path
d="M3901.56,610.734C3893.53,610.261 3886.06,608.1 3879.2,604.877C3872.24,601.608 3866.04,597.093 3860.8,591.633C3858.71,589.457 3856.76,587.149 3854.97,584.709C3853.2,582.281 3851.57,579.733 3850.13,577.066C3845.89,569.224 3843.21,560.381 3842.89,550.868C3842.57,543.321 3843.64,536.055 3845.94,529.307C3848.37,522.203 3852.08,515.696 3856.83,510.049L3855.79,509.095C3850.39,514.54 3846.02,520.981 3842.9,528.125C3839.84,535.125 3838.03,542.781 3837.68,550.868C3837.34,561.391 3839.51,571.425 3843.79,580.306C3845.27,583.38 3847.03,586.304 3849.01,589.049C3851.01,591.806 3853.24,594.39 3855.69,596.742C3861.75,602.568 3869,607.19 3877.03,610.1C3884.66,612.867 3892.96,614.059 3901.56,613.552L3901.56,610.734Z"
style="fill:rgb(31,136,192);" />
</g>
<g
transform="matrix(-0.191794,-0.715786,0.715786,-0.191794,4329.14,4673.64)">
<path
d="M3875.69,496.573C3879.62,494.538 3883.8,492.897 3888.2,491.786C3892.49,490.704 3896.96,490.124 3901.56,490.032C3903.82,490.13 3906.03,490.332 3908.21,490.688C3917.13,492.147 3925.19,495.814 3932.31,500.683C3936.13,503.294 3939.59,506.335 3942.81,509.619C3947.09,513.98 3950.89,518.816 3953.85,524.232C3958.2,532.197 3960.96,541.186 3961.32,550.868C3961.61,558.748 3960.46,566.345 3957.88,573.322C3956.09,578.169 3953.7,582.753 3950.66,586.838C3947.22,591.461 3942.96,595.427 3938.27,598.769C3933.66,602.055 3928.53,604.619 3923.09,606.478C3922.37,606.721 3921.6,606.805 3920.93,607.167C3920.42,607.448 3920.14,607.854 3919.69,608.224L3920.37,610.389C3920.98,610.432 3921.47,610.573 3922.07,610.474C3922.86,610.344 3923.55,609.883 3924.28,609.566C3931.99,606.216 3938.82,601.355 3944.57,595.428C3947.02,592.903 3949.25,590.174 3951.31,587.319C3953.59,584.168 3955.66,580.853 3957.43,577.348C3961.47,569.34 3964.01,560.422 3964.36,550.868C3964.74,540.511 3962.66,530.628 3958.48,521.868C3955.57,515.775 3951.72,510.163 3946.95,505.478C3943.37,501.962 3939.26,498.99 3934.84,496.562C3926.88,492.192 3917.87,489.76 3908.37,489.229C3906.12,489.104 3903.86,489.054 3901.56,489.154C3896.87,489.06 3892.3,489.519 3887.89,490.397C3883.3,491.309 3878.89,492.683 3874.71,494.525L3875.69,496.573Z"
style="fill:rgb(31,136,192);" />
</g>
</g>
<g>
<g transform="matrix(-3.37109,-0.514565,0.514565,-3.37109,4078.07,1806.88)">
<path
d="M22,12C22,10.903 21.097,10 20,10C19.421,10 18.897,10.251 18.53,10.649C18.202,11.006 18,11.481 18,12C18,13.097 18.903,14 20,14C21.097,14 22,13.097 22,12Z"
style="fill:none;fill-rule:nonzero;stroke:rgb(31,136,192);stroke-width:1.05px;" />
</g>
<g transform="matrix(-5.33921,-5.26159,-3.12106,-6.96393,4073.87,1861.55)">
<path
d="M10.315,5.333C10.315,5.333 9.748,5.921 9.03,6.673C7.768,7.995 6.054,9.805 6.054,9.805L6.237,9.86C6.237,9.86 8.045,8.077 9.36,6.771C10.107,6.028 10.689,5.444 10.689,5.444L10.315,5.333Z"
style="fill:rgb(31,136,192);" />
</g>
</g>
<g id="Padlock" transform="matrix(3.11426,0,0,3.11426,3938.31,1737.25)">
<g>
<path
d="M9.876,21L18.162,21C18.625,21 19,20.625 19,20.162L19,11.838C19,11.375 18.625,11 18.162,11L5.838,11C5.375,11 5,11.375 5,11.838L5,16.758"
style="fill:none;stroke:rgb(34,182,56);stroke-width:1.89px;stroke-linecap:butt;stroke-linejoin:miter;" />
<path d="M8,11L8,7C8,4.806 9.806,3 12,3C14.194,3 16,4.806 16,7L16,11"
style="fill:none;fill-rule:nonzero;stroke:rgb(34,182,56);stroke-width:1.89px;" />
</g>
</g>
<g>
<g transform="matrix(5.30977,0.697415,-0.697415,5.30977,3852.72,1727.97)">
<path
d="M22,12C22,11.659 21.913,11.337 21.76,11.055C21.421,10.429 20.756,10 20,10C18.903,10 18,10.903 18,12C18,13.097 18.903,14 20,14C21.097,14 22,13.097 22,12Z"
style="fill:none;fill-rule:nonzero;stroke:rgb(31,136,192);stroke-width:0.98px;" />
</g>
<g transform="matrix(4.93114,2.49604,1.11018,5.44847,3921.41,1726.72)">
<path
d="M8.902,6.77C8.902,6.77 7.235,8.253 6.027,9.366C5.343,9.996 4.819,10.502 4.819,10.502L5.52,11.164C5.52,11.164 6.021,10.637 6.646,9.951C7.749,8.739 9.219,7.068 9.219,7.068L8.902,6.77Z"
style="fill:rgb(31,136,192);" />
</g>
</g>
</g>
<g id="Wordmark" transform="matrix(1.54159,0,0,2.8744,2710.6,709.804)">
<g id="y" transform="matrix(0.50291,0,0,0.281607,905.533,304.987)">
<path
d="M192.152,286.875L202.629,268.64C187.804,270.106 183.397,265.779 180.143,263.391C176.888,261.004 174.362,257.99 172.563,254.347C170.765,250.705 169.866,246.691 169.866,242.305L169.866,208.107L183.21,208.107L183.21,242.213C183.21,245.188 183.896,247.822 185.268,250.116C186.64,252.41 188.465,254.197 190.743,255.475C193.022,256.754 195.501,257.393 198.182,257.393C200.894,257.393 203.393,256.75 205.68,255.463C207.966,254.177 209.799,252.391 211.178,250.105C212.558,247.818 213.248,245.188 213.248,242.213L213.248,208.107L226.545,208.107L226.545,242.305C226.545,246.707 225.378,258.46 218.079,268.64C215.735,271.909 207.835,286.875 207.835,286.875L192.152,286.875Z"
style="fill:rgb(47,47,47);fill-rule:nonzero;" />
</g>
<g id="add" transform="matrix(0.525075,0,0,0.281607,801.871,304.987)">
<g transform="matrix(116.242,0,0,116.242,161.846,267.39)">
<path
d="M0.276,0.012C0.227,0.012 0.186,0 0.15,-0.024C0.115,-0.048 0.088,-0.08 0.069,-0.12C0.05,-0.161 0.04,-0.205 0.04,-0.254C0.04,-0.305 0.051,-0.35 0.072,-0.39C0.094,-0.431 0.125,-0.463 0.165,-0.487C0.205,-0.51 0.254,-0.522 0.31,-0.522C0.366,-0.522 0.413,-0.51 0.452,-0.486C0.491,-0.463 0.521,-0.431 0.542,-0.39C0.562,-0.35 0.573,-0.305 0.573,-0.256L0.573,-0L0.458,-0L0.458,-0.095L0.456,-0.095C0.446,-0.076 0.433,-0.058 0.417,-0.042C0.401,-0.026 0.381,-0.013 0.358,-0.003C0.335,0.007 0.307,0.012 0.276,0.012ZM0.307,-0.086C0.337,-0.086 0.363,-0.093 0.386,-0.108C0.408,-0.123 0.426,-0.144 0.438,-0.17C0.45,-0.195 0.456,-0.224 0.456,-0.256C0.456,-0.288 0.45,-0.317 0.438,-0.342C0.426,-0.367 0.409,-0.387 0.387,-0.402C0.365,-0.417 0.338,-0.424 0.308,-0.424C0.276,-0.424 0.249,-0.417 0.226,-0.402C0.204,-0.387 0.186,-0.366 0.174,-0.341C0.162,-0.315 0.156,-0.287 0.156,-0.255C0.156,-0.224 0.162,-0.195 0.174,-0.169C0.186,-0.144 0.203,-0.123 0.226,-0.108C0.248,-0.093 0.275,-0.086 0.307,-0.086Z"
style="fill:rgb(47,47,47);fill-rule:nonzero;" />
</g>
<g transform="matrix(116.242,0,0,116.242,226.592,267.39)">
<path
d="M0.306,0.012C0.265,0.012 0.229,0.006 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.088 0.071,-0.117 0.059,-0.151C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.072,-0.399C0.093,-0.437 0.122,-0.468 0.159,-0.489C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.333,-0.518 0.355,-0.511C0.377,-0.504 0.396,-0.493 0.413,-0.48C0.431,-0.466 0.445,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.156 0.537,-0.115C0.515,-0.074 0.484,-0.043 0.444,-0.021C0.405,0.001 0.358,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.107C0.406,-0.122 0.423,-0.141 0.436,-0.167C0.448,-0.192 0.455,-0.221 0.455,-0.255C0.455,-0.288 0.448,-0.317 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.383,-0.402C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.206,-0.387 0.188,-0.368 0.175,-0.342C0.163,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.163,-0.193 0.175,-0.167C0.188,-0.142 0.206,-0.122 0.229,-0.108C0.251,-0.093 0.277,-0.086 0.306,-0.086Z"
style="fill:rgb(47,47,47);fill-rule:nonzero;" />
</g>
<g transform="matrix(116.242,0,0,116.242,290.293,267.39)">
<path
d="M0.306,0.012C0.265,0.012 0.229,0.006 0.196,-0.008C0.163,-0.021 0.135,-0.039 0.112,-0.064C0.089,-0.088 0.071,-0.117 0.059,-0.151C0.046,-0.185 0.04,-0.222 0.04,-0.263C0.04,-0.315 0.051,-0.36 0.072,-0.399C0.093,-0.437 0.122,-0.468 0.159,-0.489C0.196,-0.511 0.239,-0.522 0.287,-0.522C0.311,-0.522 0.333,-0.518 0.355,-0.511C0.377,-0.504 0.396,-0.493 0.413,-0.48C0.431,-0.466 0.445,-0.451 0.455,-0.433L0.456,-0.433L0.456,-0.73L0.571,-0.73L0.571,-0.261C0.571,-0.205 0.56,-0.156 0.537,-0.115C0.515,-0.074 0.484,-0.043 0.444,-0.021C0.405,0.001 0.358,0.012 0.306,0.012ZM0.306,-0.086C0.335,-0.086 0.361,-0.093 0.384,-0.107C0.406,-0.122 0.423,-0.141 0.436,-0.167C0.448,-0.192 0.455,-0.221 0.455,-0.255C0.455,-0.288 0.448,-0.317 0.436,-0.343C0.423,-0.368 0.406,-0.388 0.383,-0.402C0.361,-0.417 0.335,-0.424 0.305,-0.424C0.276,-0.424 0.251,-0.417 0.228,-0.402C0.206,-0.387 0.188,-0.368 0.175,-0.342C0.163,-0.317 0.156,-0.288 0.156,-0.255C0.156,-0.222 0.163,-0.193 0.175,-0.167C0.188,-0.142 0.206,-0.122 0.229,-0.108C0.251,-0.093 0.277,-0.086 0.306,-0.086Z"
style="fill:rgb(47,47,47);fill-rule:nonzero;" />
</g>
</g>
<g id="c"
transform="matrix(-0.0716462,0.31304,-0.583685,-0.0384251,1489.76,-444.051)">
<path
d="M2668.11,700.4C2666.79,703.699 2666.12,707.216 2666.12,710.766C2666.12,726.268 2678.71,738.854 2694.21,738.854C2709.71,738.854 2722.3,726.268 2722.3,710.766C2722.3,704.111 2719.93,697.672 2715.63,692.597L2707.63,699.378C2710.33,702.559 2711.57,706.602 2711.81,710.766C2712.2,717.38 2706.61,724.52 2697.27,726.637C2683.9,728.581 2676.61,720.482 2676.61,710.766C2676.61,708.541 2677.03,706.336 2677.85,704.269L2668.11,700.4Z"
style="fill:rgb(46,46,46);" />
</g>
</g>
</g>
<g id="R" transform="matrix(0.497016,0,0,0.497016,2390.38,823.152)">
<g transform="matrix(1,0,0,1,-0.10786,0.450801)">
<g transform="matrix(12.1247,0,0,12.1247,3862.61,1929.9)">
<path
d="M0.073,-0L0.073,-0.7L0.383,-0.7C0.428,-0.7 0.469,-0.69 0.506,-0.67C0.543,-0.651 0.572,-0.623 0.594,-0.588C0.616,-0.553 0.627,-0.512 0.627,-0.465C0.627,-0.418 0.615,-0.377 0.592,-0.342C0.569,-0.306 0.539,-0.279 0.501,-0.259L0.57,-0.128C0.574,-0.12 0.579,-0.115 0.584,-0.111C0.59,-0.107 0.596,-0.106 0.605,-0.106L0.664,-0.106L0.664,-0L0.587,-0C0.56,-0 0.535,-0.007 0.514,-0.02C0.493,-0.034 0.476,-0.052 0.463,-0.075L0.381,-0.232C0.375,-0.231 0.368,-0.231 0.361,-0.231C0.354,-0.231 0.347,-0.231 0.34,-0.231L0.192,-0.231L0.192,-0L0.073,-0ZM0.192,-0.336L0.368,-0.336C0.394,-0.336 0.417,-0.341 0.438,-0.351C0.459,-0.361 0.476,-0.376 0.489,-0.396C0.501,-0.415 0.507,-0.438 0.507,-0.465C0.507,-0.492 0.501,-0.516 0.488,-0.535C0.475,-0.554 0.459,-0.569 0.438,-0.579C0.417,-0.59 0.394,-0.595 0.369,-0.595L0.192,-0.595L0.192,-0.336Z"
style="fill:rgb(46,46,46);fill-rule:nonzero;" />
</g>
</g>
<g transform="matrix(1,0,0,1,0.278569,0.101881)">
<circle cx="3866.43" cy="1926.14" r="8.923"
style="fill:none;stroke:rgb(46,46,46);stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;" />
</g>
</g>
</g>
</g>
</g>
</svg>
</a>
<h1>
<!-- English --> <span class="lang">Congratulations!</span>
<!-- Japanese --> <span class="lang">おめでとう!</span>
<!-- Spanish --> <span class="lang">Felicidades!</span>
<!-- Chinese --> <span class="lang">恭喜!</span>
<!-- Hindi --> <span class="lang">बधाई हो!</span>
<!-- Russian --> <span class="lang">Поздравляю!</span>
<!-- Ukrainian --> <span class="lang">Вітаю!</span>
<span class="emoji">🎊</span>
</h1>
<p>
Your web server is working. Now make it work for you. 💪
</p>
<p>
Caddy is ready to serve your site over HTTPS:
</p>
<ol>
<li>Point your domain's A/AAAA DNS records at this machine.</li>
<li>Upload your site's files to <code>/var/www/html</code>.
<li>
Edit your Caddyfile at <code>/etc/caddy/Caddyfile</code>:
<ol>
<li>Replace <code>:80</code> with your domain name</li>
<li>Change the site root to <code>/var/www/html</code></li>
</ol>
</li>
<li>Reload the configuration: <code>systemctl reload caddy</code></li>
<li>Visit your site!</li>
</ol>
<h2>If that worked 🥳</h2>
<p>
Awesome! You won't have to look at this slanted page anymore.
</p>
<p>
Remember, Caddy can do a lot more than serve static files. It's also a powerful reverse proxy and
application platform. You can use the Caddyfile to enable any other features you need. Or you could use
Caddy's API to configure it programmatically.
</p>
<p>
Everything you need to know is either in the <a href="https://caddyserver.com/docs/">📖 Caddy
documentation</a> or the manual for your OS/platform. Have fun!
</p>
<h2>If that didn't work 😶</h2>
<p>
It's okay, you can fix it! First check the following things:
</p>
<ul>
<li>Service status: <code>systemctl status caddy</code></li>
<li>Logs: <code>journalctl --no-pager -u caddy</code></li>
<li>Are your site's files readable by the caddy user and group? <code>ls -la /var/www/html</code></li>
<li>Is the caddy home directory writeable? <code>ls -la /var/lib/caddy</code></li>
<li>Ensure your domain's A and/or AAAA records point to your machine's public IP address:
<code>dig example.com</code></li>
<li>Are your ports 80 and 443 externally reachable, and is Caddy able to bind to them? Check your
firewalls, port forwarding, and other network configuration.</li>
</ul>
<p>
<b class="warn">WAIT!</b> Before trying again, switch to <a
href="https://letsencrypt.org/docs/staging-environment/">Let's Encrypt's staging environment</a> to
avoid being accidentally <a href="https://letsencrypt.org/docs/rate-limits/">rate limited</a>. Once you
get everything else working, it's safe to switch back.
</p>
<p>
Depending on your DNS provider, it may take a while for the DNS records to propagate. Even when
everything is configured properly, automated challenges to obtain TLS certificates usually take several
seconds, but may take up to several minutes or hours.
<p>
If you still need help, we have a <a href="https://caddy.community/">great community</a>! First <a
href="https://caddy.community/search">try a search</a>, and if your question is original, go ahead
and ask it! Remember to pay it forward and help others too. 😁
</p>
<p>
Visit Caddy on:
<b><a href="https://github.com/caddyserver/caddy" title="Caddy on GitHub">GitHub</a></b>
or
<b><a href="https://twitter.com/caddyserver" title="@caddyserver on Twitter">Twitter</a></b>
or
<b><a href="https://caddy.community/" title="Caddy forums">Our Forum</a></b>
</p>
</div>
</div>
<footer>
&copy; Copyright The Caddy Authors
<div id="disclaimer">
The Caddy project is not responsible for the content, disposition, or behavior of this Web
property, which is independently owned and maintained. For inquiries, please contact the site owner or
hosting provider.
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,18 @@
<?php
$stdIn = STDIN;
$stdOut = STDOUT;
fwrite($stdOut, "READY\n");
while (true) {
if (false == ($line = trim(fgets($stdIn)))) {
sleep(1);
continue;
}
$match = null;
if (preg_match('/eventname:(.*?) /', $line, $match)) {
if (in_array($match[1], ['PROCESS_STATE_EXITED', 'PROCESS_STATE_STOPPED', 'PROCESS_STATE_FATAL'])) {
exec('kill -15 ' . file_get_contents('/run/supervisord.pid'));
}
}
fwrite($stdOut, "RESULT 2\nOK");
fwrite($stdOut, "READY\n");
}

View File

@ -0,0 +1,17 @@
[unix_http_server]
file=/tmp/supervisor.sock
chmod=0777
[supervisord]
nodaemon=true
logfile=/tmp/supervisord.log
pidfile=/tmp/supervisord.pid
[rpcinterface:supervisor]
supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock
[include]
files = /etc/supervisor/conf.d/*.conf