Rocky/AlmaLinux 9|8에 Caddy 웹 서버 설치
Caddy는 웹사이트, 애플리케이션 및 서비스를 제공하는 데 사용되는 강력하고 사용자 친화적이며 오픈 소스 웹 플랫폼입니다. Caddy는 Go 프로그래밍 언어로 작성되어 오픈 소스 시장에서 가장 빠른 웹 서버 중 하나입니다. 보안, 성능 및 사용 용이성에 중점을 두며, 단순한 정적 사이트와 같은 간단한 프로젝트나 더 복잡한 웹 애플리케이션을 호스팅하는 데 사용할 수 있습니다.
Caddy 웹 서버를 사용하는 이유
- 자동 HTTPS: Caddy는 웹사이트를 위한 SSL/TLS 인증서의 자동 생성 및 갱신을 수행합니다.
- 그 단순함: Caddy는 단순하게 만드는 원칙을 중심으로 설계되었습니다.
Caddyfile이라는 하나의 간단하고 사람이 읽기 쉬운 설정 파일을 사용합니다. - 슈퍼 성능: 캐디는 빠르고 효율적이면서도 최소한의 하드웨어 자원을 사용하도록 설계되었습니다
- 모듈형 아키텍처: 플러그인과 확장 기능을 사용하여 Caddy 웹 서버의 기능을 확장할 수 있습니다
- 다중 플랫폼 지원: 캐디(Caddy)는 리눅스, 윈도우, macOS 또는 Docker/Podman과 같은 내부 컨테이너에서 실행될 수 있습니다
- 큰 커뮤니티: 캐디(Caddy)는 활발하고 지원적인 커뮤니티를 갖고 있어, 시작할 때 도움을 받을 수 있습니다.
다음 섹션에서는 Rocky Linux/AlmaLinux 또는 CentOS Stream Linux 시스템에서 Caddy 웹 서버를 설치, 구성 및 사용하는 방법을 살펴보겠습니다. 이 튜토리얼을 실용적이고 동적으로 만들기 위해 MariaDB 데이터베이스와 함께 WordPress 웹사이트를 호스팅할 것입니다. 이 튜토리얼에서는 도메인 blog.cloudlabske.com.을 사용합니다.
Caddy 웹 서버 설치
Rocky/AlmaLinux/CentOS Steam Linux 머신에 Caddy 웹 서버를 설치하려면 시스템에 copr를 설치해야 합니다:
sudo dnf -y install 'dnf-command(copr)'copr를 사용하여 캐디 저장소 활성화:
sudo dnf copr enable @caddy/caddy
프롬프트가 나타나면 키보드에서 y 키를 누르세요:
Enabling a Copr repository. Please note that this repository is not part
of the main distribution, and quality may vary.
The Fedora Project does not exercise any power over the contents of
this repository beyond the rules outlined in the Copr FAQ at
<https://docs.pagure.org/copr.copr/user_documentation.html#what-i-can-build-in-copr>,
and packages are not held to any quality or security level.
Please do not file bug reports about these packages in Fedora
Bugzilla. In case of problems, contact the owner of this repository.
Do you really want to enable copr.fedorainfracloud.org/@caddy/caddy? [y/N]: y
Repository successfully enabled.저장소가 활성화되면 시스템에 Caddy 웹 서버를 설치하세요:
sudo dnf -y install caddyrpm이나 dnf를 사용하여 추가 세부 정보 패키지를 얻을 수 있습니다
sudo dnf info caddy
# OR
rpm -qi caddy기본 Caddy 서버 구성 파일은 /etc/caddy/Caddyfile에 위치해 있습니다. 내용을 확인할 수 있습니다:
cat /etc/caddy/Caddyfile서비스를 시작하려면 systemctl 명령어를 사용하세요:
sudo systemctl start caddy시스템 부팅 시 서비스가 시작되도록 설정합니다.
sudo systemctl enable caddy서비스 상태 확인 중:
$ systemctl status caddy
● caddy.service - Caddy
Loaded: loaded (/usr/lib/systemd/system/caddy.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2024-08-02 17:43:26 UTC; 39s ago
Docs: https://caddyserver.com/docs/
Main PID: 42001 (caddy)
Tasks: 7 (limit: 48750)
Memory: 20.0M
CGroup: /system.slice/caddy.service
└─42001 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.719293,"msg":"adapted config to JSON","adapter":"caddyfile"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7204406,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019",">
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"warn","ts":1722620606.7205217,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server>
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7206764,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7208471,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7209103,"msg":"serving initial configuration"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7212656,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc000488e00"}
Aug 02 17:43:26 rocky8.computingforgeeks.com systemd[1]: Started Caddy.
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7246072,"logger":"tls","msg":"cleaning storage unit","storage":"FileStorage:/var/lib/caddy/.local/share/caddy"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7248337,"logger":"tls","msg":"finished cleaning storage units"}Caddy 웹 서버를 사용하여 워드프레스 호스팅하기
시스템에 PHP를 설치해 봅시다.
sudo dnf -y install @php또한 다른 필요한 PHP 확장도 설치하세요.
sudo dnf install php-{cli,fpm,mysqlnd,zip,gd,mbstring,curl,xml,pear,bcmath,json}FPM 소켓의 소유자를 caddy 사용자로 설정합니다.
$ sudo vim /etc/php-fpm.d/www.conf
user = caddy
group = caddy
listen = /run/php-fpm/www.sock
listen.owner = caddy
listen.group = caddy
listen.mode = 0660
listen.acl_users = apache,nginx,caddy
PHP FPM 서비스를 시작하고 활성화합니다.
sudo systemctl enable --now php-fpmMariaDB 데이터베이스 서버를 설치합니다.
sudo dnf -y install @mariadb
sudo systemctl enable --now mariadb
sudo mysql -u root워드프레스 웹사이트용 데이터베이스 생성:
CREATE DATABASE wp_db;
GRANT ALL PRIVILEGES ON wp_db.* to 'wp_user'@'localhost' IDENTIFIED BY 'DBStr%ngPassw0rd';
FLUSH PRIVILEGES;
EXIT워드프레스를 다운로드하고, 압축을 풀고, wordpress 폴더를 /var/www로 이동하세요
wget wordpress.org/latest.tar.gz
tar xvf latest.tar.gz
sudo mv wordpress /var/www
sudo cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php 워드프레스 데이터베이스 연결 설정
$ sudo vim /var/www/wordpress/wp-config.php
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wp_db' );
/** Database username */
define( 'DB_USER', 'wp_user' );
/** Database password */
define( 'DB_PASSWORD', 'DBStr%ngPassw0rd' );
/** Database hostname */
define( 'DB_HOST', 'localhost' );디렉터리의 권한을 caddy 사용자로 설정:
sudo chown -R caddy:caddy /var/www/wordpress/워드프레스를 위한 캐디 설정
Caddy 구성 파일을 편집을 위해 열기
sudo vim /etc/caddy/Caddyfile아래 설정을 환경에 맞게 수정하세요. 도메인 blog.cloudlabske.com과 관리자 사용자 이름을 변경하세요
blog.cloudlabske.com {
tls [email
log {
output file /var/log/caddy/wordpress.log
format console
}
root * /var/www/wordpress
encode gzip
file_server
php_fastcgi unix//run/php-fpm/www.sock
@disallowed {
path /xmlrpc.php
path *.sql
path /wp-content/uploads/*.php
}
rewrite @disallowed '/index.php'
}로그 디렉터리를 생성합니다.
sudo mkdir /var/log/caddy/
sudo chown -R caddy:caddy /var/log/caddy/구성 구문이 유효한지 확인하세요:
$ sudo caddy validate --config /etc/caddy/Caddyfile
2024/08/03 07:25:16.349 INFO using config from file {"file": "/etc/caddy/Caddyfile"}
2024/08/03 07:25:16.351 INFO adapted config to JSON {"adapter": "caddyfile"}
2024/08/03 07:25:16.351 INFO http.auto_https server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS {"server_name": "srv0", "https_port": 443}
2024/08/03 07:25:16.351 INFO http.auto_https enabling automatic HTTP->HTTPS redirects {"server_name": "srv0"}
2024/08/03 07:25:16.351 WARN http.auto_https server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server {"server_name": "srv1", "http_port": 80}
2024/08/03 07:25:16.351 INFO tls.cache.maintenance started background certificate maintenance {"cache": "0xc000157680"}
2024/08/03 07:25:16.352 INFO tls.cache.maintenance stopped background certificate maintenance {"cache": "0xc000157680"}
구성이 올바른지 확인한 후 Caddy 웹 서버를 다시 시작하세요.
sudo systemctl restart caddyCaddy 서비스 상태를 확인하고 SSL 생성 관련 로그를 확인하세요. Let’s Encrypt 생성이 성공했는지 주의 깊게 살펴보세요:
$ systemctl status caddy
● caddy.service - Caddy
Loaded: loaded (/usr/lib/systemd/system/caddy.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2024-08-03 07:23:34 UTC; 5s ago
Docs: https://caddyserver.com/docs/
Main PID: 45140 (caddy)
Tasks: 7 (limit: 48750)
Memory: 19.6M
CGroup: /system.slice/caddy.service
└─45140 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.0895815,"logger":"tls.issuance.acme","msg":"served key authentication","identifier":"blog.cloudlabske.com","challenge":"http-01","remote">
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.2393315,"logger":"tls.issuance.acme","msg":"served key authentication","identifier":"blog.cloudlabske.com","challenge":"http-01","remote">
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.3801627,"logger":"tls.issuance.acme","msg":"served key authentication","identifier":"blog.cloudlabske.com","challenge":"http-01","remote">
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.7106369,"logger":"tls.issuance.acme.acme_client","msg":"authorization finalized","identifier":"blog.cloudlabske.com","authz_status":"vali>
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.7106667,"logger":"tls.issuance.acme.acme_client","msg":"validations succeeded; finalizing order","order":"https://acme-v02.api.letsencryp>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.3649049,"logger":"tls.issuance.acme.acme_client","msg":"got renewal info","names":["blog.cloudlabske.com"],"window_start":1727765075,"win>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.666609,"logger":"tls.issuance.acme.acme_client","msg":"got renewal info","names":["blog.cloudlabske.com"],"window_start":1727765075,"wind>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.6666691,"logger":"tls.issuance.acme.acme_client","msg":"successfully downloaded available certificate chains","count":2,"first_url":"http>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.6672106,"logger":"tls.obtain","msg":"certificate obtained successfully","identifier":"blog.cloudlabske.com","issuer":"acme-v02.api.letsen>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.6673443,"logger":"tls.obtain","msg":"releasing lock","identifier":"blog.cloudlabske.com"}WordPress 웹사이트에 http://yourdomain로 접속하면 자동으로 https://yourdomain로 리디렉션되어야 합니다.
시작하기 공식 가이드 페이지에서 더 알아보세요.
