fix: traefik router for acme certs (#1068)
* fix: traefik router for acme certs * fix: set default for sites * test: use .localhost site names
This commit is contained in:
parent
8f843c1522
commit
a580385295
@ -68,6 +68,8 @@ docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml up -
|
|||||||
|
|
||||||
### Setup Frappe using containerized MariaDB and Redis with Letsencrypt certificates.
|
### Setup Frappe using containerized MariaDB and Redis with Letsencrypt certificates.
|
||||||
|
|
||||||
|
In this case make sure you've set `LETSENCRYPT_EMAIL` and `SITES` environment variables are set or certificates won't work.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Generate YAML
|
# Generate YAML
|
||||||
docker compose -f compose.yaml \
|
docker compose -f compose.yaml \
|
||||||
@ -82,6 +84,8 @@ docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml up -
|
|||||||
|
|
||||||
### Setup ERPNext using containerized MariaDB and Redis with Letsencrypt certificates.
|
### Setup ERPNext using containerized MariaDB and Redis with Letsencrypt certificates.
|
||||||
|
|
||||||
|
In this case make sure you've set `LETSENCRYPT_EMAIL` and `SITES` environment variables are set or certificates won't work.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Generate YAML
|
# Generate YAML
|
||||||
docker compose -f compose.yaml \
|
docker compose -f compose.yaml \
|
||||||
|
@ -43,3 +43,8 @@ PROXY_READ_TIMOUT=
|
|||||||
# All Values allowed by nginx client_max_body_size are allowed, default value is 50m
|
# All Values allowed by nginx client_max_body_size are allowed, default value is 50m
|
||||||
# Necessary if the upload limit in the frappe application is increased
|
# Necessary if the upload limit in the frappe application is increased
|
||||||
CLIENT_MAX_BODY_SIZE=
|
CLIENT_MAX_BODY_SIZE=
|
||||||
|
|
||||||
|
# List of sites for letsencrypt certificates quoted with backtick (`) and separated by comma (,)
|
||||||
|
# More https://doc.traefik.io/traefik/routing/routers/#rule
|
||||||
|
# About acme https://doc.traefik.io/traefik/https/acme/#domain-definition
|
||||||
|
SITES=`erp.example.com`
|
||||||
|
@ -5,7 +5,7 @@ services:
|
|||||||
- traefik.http.services.frontend.loadbalancer.server.port=8080
|
- traefik.http.services.frontend.loadbalancer.server.port=8080
|
||||||
- traefik.http.routers.frontend-http.entrypoints=websecure
|
- traefik.http.routers.frontend-http.entrypoints=websecure
|
||||||
- traefik.http.routers.frontend-http.tls.certresolver=main-resolver
|
- traefik.http.routers.frontend-http.tls.certresolver=main-resolver
|
||||||
- traefik.http.routers.frontend-http.rule=HostRegexp(`{any:.+}`)
|
- traefik.http.routers.frontend-http.rule=Host(${SITES:?List of sites not set})
|
||||||
|
|
||||||
proxy:
|
proxy:
|
||||||
image: traefik:2.5
|
image: traefik:2.5
|
||||||
|
@ -16,7 +16,7 @@ def check_cache():
|
|||||||
|
|
||||||
|
|
||||||
def main() -> int:
|
def main() -> int:
|
||||||
frappe.connect(site="tests")
|
frappe.connect(site="tests.localhost")
|
||||||
check_db()
|
check_db()
|
||||||
check_cache()
|
check_cache()
|
||||||
return 0
|
return 0
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
@ -22,12 +23,27 @@ def _add_version_var(name: str, env_path: Path):
|
|||||||
f.write(f"\n{name}={os.environ[name]}")
|
f.write(f"\n{name}={os.environ[name]}")
|
||||||
|
|
||||||
|
|
||||||
|
def _add_sites_var(env_path: Path):
|
||||||
|
with open(env_path, "r+") as f:
|
||||||
|
content = f.read()
|
||||||
|
content = re.sub(
|
||||||
|
rf"SITES=.*",
|
||||||
|
f"SITES=`tests.localhost`,`test-erpnext-site.localhost`,`test-pg-site.localhost`",
|
||||||
|
content,
|
||||||
|
)
|
||||||
|
f.seek(0)
|
||||||
|
f.truncate()
|
||||||
|
f.write(content)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="session")
|
@pytest.fixture(scope="session")
|
||||||
def env_file(tmp_path_factory: pytest.TempPathFactory):
|
def env_file(tmp_path_factory: pytest.TempPathFactory):
|
||||||
tmp_path = tmp_path_factory.mktemp("frappe-docker")
|
tmp_path = tmp_path_factory.mktemp("frappe-docker")
|
||||||
file_path = tmp_path / ".env"
|
file_path = tmp_path / ".env"
|
||||||
shutil.copy("example.env", file_path)
|
shutil.copy("example.env", file_path)
|
||||||
|
|
||||||
|
_add_sites_var(file_path)
|
||||||
|
|
||||||
for var in ("FRAPPE_VERSION", "ERPNEXT_VERSION"):
|
for var in ("FRAPPE_VERSION", "ERPNEXT_VERSION"):
|
||||||
_add_version_var(name=var, env_path=file_path)
|
_add_version_var(name=var, env_path=file_path)
|
||||||
|
|
||||||
@ -52,7 +68,7 @@ def frappe_setup(compose: Compose):
|
|||||||
|
|
||||||
@pytest.fixture(scope="session")
|
@pytest.fixture(scope="session")
|
||||||
def frappe_site(compose: Compose):
|
def frappe_site(compose: Compose):
|
||||||
site_name = "tests"
|
site_name = "tests.localhost"
|
||||||
compose.bench(
|
compose.bench(
|
||||||
"new-site",
|
"new-site",
|
||||||
"--no-mariadb-socket",
|
"--no-mariadb-socket",
|
||||||
@ -77,7 +93,7 @@ def erpnext_setup(compose: Compose):
|
|||||||
|
|
||||||
@pytest.fixture(scope="class")
|
@pytest.fixture(scope="class")
|
||||||
def erpnext_site(compose: Compose):
|
def erpnext_site(compose: Compose):
|
||||||
site_name = "test_erpnext_site"
|
site_name = "test-erpnext-site.localhost"
|
||||||
args = [
|
args = [
|
||||||
"new-site",
|
"new-site",
|
||||||
"--no-mariadb-socket",
|
"--no-mariadb-socket",
|
||||||
|
@ -144,7 +144,7 @@ class TestPostgres:
|
|||||||
def test_site_creation(self, compose: Compose):
|
def test_site_creation(self, compose: Compose):
|
||||||
compose.bench(
|
compose.bench(
|
||||||
"new-site",
|
"new-site",
|
||||||
"test_pg_site",
|
"test-pg-site.localhost",
|
||||||
"--db-type",
|
"--db-type",
|
||||||
"postgres",
|
"postgres",
|
||||||
"--admin-password",
|
"--admin-password",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user