Skip to content

Commit

Permalink
convert 2020-05-26
Browse files Browse the repository at this point in the history
  • Loading branch information
premist committed Dec 16, 2023
1 parent bd9510b commit a74b9e8
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 27 deletions.
18 changes: 8 additions & 10 deletions content/dev/2020-05-26-caddy-php.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@ description: "PHP 사이트를 운영하는 경험은 썩 유쾌하진 않지만

### 만능 도구상자 Caddy


[{{< figure src="https://cdn.si.mpli.st/2020-05-26-caddy-php/000-caddy-website.jpg" title="Caddy의 공식 웹사이트" alt="Caddy의 공식 웹사이트" >}}](https://caddyserver.com)
[{{< fig path="si.mpli.st/2020/05-26-caddy-php/000-caddy-website" attr="Caddy의 공식 웹사이트" alt="Caddy의 공식 웹사이트" >}}](https://caddyserver.com)

Caddy는 Go로 작성된 웹 서버입니다. 2015년에 나왔으니 이제 막 5살을 넘겼죠. Caddy가 아직까지도 다른 웹 서버와 가장 크게 차별화되는 점은 **Automatic HTTPS** 기능인데, 도메인 이름만 지정하면 HTTPS를 켜고, 모든 HTTP 요청을 HTTPS로 리디렉트하고, [Let’s Encrypt](https://letsencrypt.org)로 인증서까지 발급해줍니다. 여기에 덧붙여 HTTP/2 지원, 정적 파일 서버, 리버스 프록시, 룰 기반 리디렉트 설정 등 웹 서버가 갖춰야 할 기능은 모두 갖추고 있지만, 라이브러리 의존성이 아예 없어 단일 바이너리로 실행이 됩니다. 심지어 libc 의존성도 없어 [Alpine Linux](https://alpinelinux.org)와 같은 환경에서도 바로 돌릴 수 있죠!

Expand Down Expand Up @@ -72,15 +71,15 @@ $ sudo apt update
$ sudo apt install caddy
```
![APT 출력](https://cdn.si.mpli.st/2020-05-26-caddy-php/001-caddy-install.png)
{{< fig path="si.mpli.st/2020/05-26-caddy-php/001-caddy-install" alt="APT 출력" >}}
패키지를 설치하면 Caddy가 자동으로 켜지는걸 확인할 수 있습니다.
```bash
$ sudo systemctl status caddy
```
![Caddy 실행 중](https://cdn.si.mpli.st/2020-05-26-caddy-php/002-caddy-systemctl.png)
{{< fig path="si.mpli.st/2020/05-26-caddy-php/002-caddy-systemctl" alt="Caddy 실행 중" >}}
다음으로는 php-fpm을 설치합니다. 필요에 맞게 php-imagick과 같은 확장 기능도 설치해줍니다.
Expand All @@ -90,7 +89,7 @@ $ sudo apt install php7.2-fpm php-imagick ...
설치가 완료되면 fpm 역시 자동으로 실행이 됩니다.
![php-fpm도 켜졌다.](https://cdn.si.mpli.st/2020-05-26-caddy-php/003-phpfpm-systemctl.png)
{{< fig path="si.mpli.st/2020/05-26-caddy-php/003-phpfpm-systemctl" alt="php-fpm도 켜졌다." >}}
----
Expand All @@ -104,7 +103,7 @@ $ sudo sed -i 's/www-data/caddy/g' www.conf
$ sudo systemctl restart php7.2-fpm
```
{{< figure src="https://cdn.si.mpli.st/2020-05-26-caddy-php/004-phpfpm-user-change.png" title="sed를 이용하여 모든 www-data를 caddy로 변환했다. 익숙하다면 vim으로 해도 된다." alt="sed를 이용하여 모두 찾아 바꾸기" >}}
{{< fig path="si.mpli.st/2020/05-26-caddy-php/004-phpfpm-user-change" attr="sed를 이용하여 모든 www-data를 caddy로 변환했다. 익숙하다면 vim으로 해도 된다." alt="sed를 이용하여 모두 찾아 바꾸기" >}}
----
Expand All @@ -120,19 +119,18 @@ mydomain.com {
이후 `sudo systemctl reload caddy` 명령어로 Caddy 설정을 다시 읽어오면 됩니다. Caddy가 새로운 설정을 읽고, 지정한 도메인을 위한 인증서를 자동으로 받아옵니다. 설정한 도메인을 들어가면 Caddy의 기본 인덱스 페이지가 반겨주네요.
{{< figure src="https://cdn.si.mpli.st/2020-05-26-caddy-php/005-caddy-installed-and-configured.png" title="기본 페이지가 삐뚤어져있는 건 어서 제대로 된 콘텐츠로 바꾸라는 무언의 압박인 듯.." alt="Caddy의 기본 페이지" >}}
{{< fig path="si.mpli.st/2020/05-26-caddy-php/005-caddy-installed-and-configured" attr="기본 페이지가 삐뚤어져있는 건 어서 제대로 된 콘텐츠로 바꾸라는 무언의 압박인 듯.." alt="Caddy의 기본 페이지" >}}
지정한 루트 폴더에 [phpinfo](https://www.php.net/manual/en/function.phpinfo.php) 파일을 만들면, php도 정상 작동하는 것을 확인할 수 있습니다.
![정겨운 phpinfo 화면](https://cdn.si.mpli.st/2020-05-26-caddy-php/006-phpinfo.png)
{{< fig path="si.mpli.st/2020/05-26-caddy-php/006-phpinfo" alt="정겨운 phpinfo 화면" >}}
### 아니, 설정이 어떻게 저리 짧죠?
`php_fastcgi` 디렉티브 하나만 썼는데, /wp-admin으로 온 요청을 알아서 연결해 준다거나 하는 rewrite도 작동하는게 이상하게 느껴질 수도 있습니다. 사실 이 디렉티브 뒤에 특별한 흑마법이 숨겨져 있는 건 아니고, 대부분의 현대적인 PHP 애플리케이션에서 사용하는 설정을 간단하게 쓸 수 있도록 해 놓은 것입니다.
![정겨운 phpinfo 화면](https://cdn.si.mpli.st/2020-05-26-caddy-php/007-caddy-php-fastcgi-directive.png)
{{< fig path="si.mpli.st/2020/05-26-caddy-php/007-caddy-php-fastcgi-directive" alt="php_fastcgi directive" >}}
설정을 자세히 보면 Caddy에 내장되어 있는 [리버스 프록시 디렉티브](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy)를 사용하여 구현이 되어 있습니다. 만약 민감한 디렉터리 등을 막고 싶다거나 `php_fastcgi` 디렉티브에 없는 특수한 설정을 하고 싶다면, rewrite와 같은 여러 가지 디렉티브를 추가할 수 있습니다. 아래는 [Textcube](http://www.textcube.org)의 썸네일 관련 [rewrite](https://github.com/Needlworks/Textcube/blob/master/README.md#server-configuration)를 구현한 예시입니다.
Expand Down
2 changes: 1 addition & 1 deletion data/image_manifest.json

Large diffs are not rendered by default.

5 changes: 1 addition & 4 deletions themes/simplist2022/assets/styles/content.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
margin-top: 0;
}

p {
p, figure {
margin-bottom: 2rem;
}

Expand Down Expand Up @@ -76,9 +76,6 @@ li {
}

figure {
margin-top: 2rem;
margin-bottom: 4rem;

&.halfsize {
width: 50%;
margin-left: auto;
Expand Down
41 changes: 29 additions & 12 deletions themes/simplist2022/layouts/shortcodes/fig.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,34 @@

{{ $image := index $.Site.Data.image_manifest $path }}

{{ $srgb_avif := slice }}
{{/* AVIF standard begin */}}
{{/* sRGB + original */}}
{{ $standard_avif := slice }}
{{ range where (where $image "color_profile" "srgb") "extension" ".avif" }}
{{ $srgb_avif = $srgb_avif | append . }}
{{ $standard_avif = $standard_avif | append . }}
{{ end }}
{{ range where (where $image "color_profile" "original") "extension" ".avif" }}
{{ $standard_avif = $standard_avif | append . }}
{{ end }}
{{/* AVIF standard end */}}

{{ $srgb_jpg := slice }}
{{/* JPG standard begin */}}
{{/* sRGB + original */}}
{{ $standard_jpg := slice }}
{{ range where (where $image "color_profile" "srgb") "extension" ".jpg" }}
{{ $srgb_jpg = $srgb_jpg | append . }}
{{ $standard_jpg = $standard_jpg | append . }}
{{ end }}
{{ range where (where $image "color_profile" "original") "extension" ".jpg" }}
{{ $standard_jpg = $standard_jpg | append . }}
{{ end }}
{{/* JPG standard end */}}

{{/* AVIF Display P3 begin */}}
{{ $displayp3_avif := slice }}
{{ range where (where $image "color_profile" "displayp3") "extension" ".avif" }}
{{ $displayp3_avif = $displayp3_avif | append . }}
{{ end }}
{{/* AVIF Display P3 end */}}

<figure class="{{ $class }}">
<picture>
Expand All @@ -34,25 +48,28 @@
{{ end }}">
{{ end }}

{{ with $srgb_avif }}
{{ with $standard_avif }}
<source type="image/avif"
srcset="
{{ range $srgb_avif }}
{{ range $standard_avif }}
{{ $path_prefix }}{{ .path }} {{ .width }}w,
{{ end }}">
{{ end }}

{{ with $srgb_jpg }}
{{ with $standard_jpg }}
<source type="image/jpg"
srcset="
{{ range $srgb_jpg }}
{{ range $standard_jpg }}
{{ $path_prefix }}{{ .path }} {{ .width }}w,
{{ end }}">
{{ end }}

<img src="{{ $path_prefix }}{{ index $srgb_jpg 0 "path" }}" alt="{{ $alt }}" decoding="async">
<img src="{{ $path_prefix }}{{ index $standard_jpg 0 "path" }}" alt="{{ $alt }}" decoding="async">
</picture>
<figcaption>
<p>{{ $attr | safeHTML }}</p>
</figcaption>

{{ with $attr }}
<figcaption>
<p>{{ $attr | safeHTML }}</p>
</figcaption>
{{ end }}
</figure>

0 comments on commit a74b9e8

Please sign in to comment.