From 639adba7ebd508a9dc553c88c6227111e91a8030 Mon Sep 17 00:00:00 2001 From: Stefano Date: Tue, 20 May 2025 16:24:31 -0500 Subject: [PATCH] Moved repo url and email for letsencrypt to env variables --- .env.example | 4 +++- .gitea/workflows/aws_deploy_on_push.yml | 2 ++ .vscode/settings.json | 1 + app.py | 26 +++++++++++++++---------- infrastructure/stack.py | 6 +++++- infrastructure/userdata.sh | 4 ++-- scripts/deploy.sh | 11 ++++++++--- scripts/destroy.sh | 11 ++++++++--- 8 files changed, 45 insertions(+), 20 deletions(-) diff --git a/.env.example b/.env.example index ae025e5..68f753b 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,6 @@ FREEDNS_User=MyFreeDNSUsername FREEDNS_Password=MyFreeDNSPassword DOMAIN_NAME=mydomain.com -SSH_PUBLIC_KEY="ssh-rsa AAAAB3NzaC1yc2EMYPUBLICKEY7+" \ No newline at end of file +SSH_PUBLIC_KEY="ssh-rsa AAAAB3NzaC1yc2EMYPUBLICKEY7+" +REPO_URL="https://git.example.com/user/repo.git" +LETSENCRYPT_EMAIL="admin@example.com" \ No newline at end of file diff --git a/.gitea/workflows/aws_deploy_on_push.yml b/.gitea/workflows/aws_deploy_on_push.yml index f910933..c969d31 100644 --- a/.gitea/workflows/aws_deploy_on_push.yml +++ b/.gitea/workflows/aws_deploy_on_push.yml @@ -44,6 +44,8 @@ jobs: FREEDNS_Password: ${{ secrets.FREEDNS_PASSWORD }} DOMAIN_NAME: ${{ secrets.DOMAIN_NAME }} SSH_PUBLIC_KEY: ${{ secrets.SSH_PUBLIC_KEY }} + REPO_URL: ${{ secrets.REPO_URL }} + LETSENCRYPT_EMAIL: ${{ secrets.LETSENCRYPT_EMAIL }} - name: Install AWS CLI run: | diff --git a/.vscode/settings.json b/.vscode/settings.json index 256237f..5f6170e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,6 +15,7 @@ "fullchain", "gitea", "iptv", + "LETSENCRYPT", "nohup", "passlib", "pyjwt", diff --git a/app.py b/app.py index 1bd7038..d967164 100644 --- a/app.py +++ b/app.py @@ -10,24 +10,30 @@ freedns_user = os.environ.get("FREEDNS_User") freedns_password = os.environ.get("FREEDNS_Password") domain_name = os.environ.get("DOMAIN_NAME") ssh_public_key = os.environ.get("SSH_PUBLIC_KEY") +repo_url = os.environ.get("REPO_URL") +letsencrypt_email = os.environ.get("LETSENCRYPT_EMAIL") -if not freedns_user or not freedns_password: - raise ValueError("FREEDNS_User and FREEDNS_Password environment variables must be set.") +required_vars = { + "FREEDNS_User": freedns_user, + "FREEDNS_Password": freedns_password, + "DOMAIN_NAME": domain_name, + "SSH_PUBLIC_KEY": ssh_public_key, + "REPO_URL": repo_url, + "LETSENCRYPT_EMAIL": letsencrypt_email +} -if not domain_name: - raise ValueError("DOMAIN_NAME environment variable must be set.") - -if not ssh_public_key: # Check if SSH public key is set - raise ValueError("SSH_PUBLIC_KEY environment variable must be set.") +# Check for missing required variables +missing_vars = [k for k, v in required_vars.items() if not v] +if missing_vars: + raise ValueError(f"Missing required environment variables: {', '.join(missing_vars)}") IptvUpdaterStack(app, "IptvUpdaterStack", freedns_user=freedns_user, freedns_password=freedns_password, domain_name=domain_name, ssh_public_key=ssh_public_key, - # If you don't specify 'env', the stack will be deployed to the account and region that are - # configured in your AWS CLI profile. Defaulting to the environment where the CLI is configured. - # env=cdk.Environment(account=os.getenv('CDK_DEFAULT_ACCOUNT'), region=os.getenv('CDK_DEFAULT_REGION')), + repo_url=repo_url, + letsencrypt_email=letsencrypt_email ) app.synth() \ No newline at end of file diff --git a/infrastructure/stack.py b/infrastructure/stack.py index efc4fe9..0f97d71 100644 --- a/infrastructure/stack.py +++ b/infrastructure/stack.py @@ -19,6 +19,8 @@ class IptvUpdaterStack(Stack): freedns_password: str, domain_name: str, ssh_public_key: str, + repo_url: str, + letsencrypt_email: str, **kwargs ) -> None: super().__init__(scope, construct_id, **kwargs) @@ -165,7 +167,9 @@ class IptvUpdaterStack(Stack): userdata.add_commands( f'export FREEDNS_User="{freedns_user}"', f'export FREEDNS_Password="{freedns_password}"', - f'export DOMAIN_NAME="{domain_name}"' + f'export DOMAIN_NAME="{domain_name}"', + f'export REPO_URL="{repo_url}"', + f'export LETSENCRYPT_EMAIL="{letsencrypt_email}"' ) # Adds one or more commands to the userdata object. diff --git a/infrastructure/userdata.sh b/infrastructure/userdata.sh index 1285921..e894352 100644 --- a/infrastructure/userdata.sh +++ b/infrastructure/userdata.sh @@ -9,7 +9,7 @@ pip3 install certbot certbot-nginx cd /home/ec2-user -git clone https://git.fiorinis.com/Home/iptv-updater-aws.git +git clone ${REPO_URL} cd iptv-updater-aws pip3 install -r requirements.txt @@ -36,7 +36,7 @@ EOF crontab -u root -l >/dev/null 2>&1 || (echo "" | crontab -u root -) # Install and configure acme.sh -curl https://get.acme.sh | sh -s email=stefano@fiorinis.com +curl https://get.acme.sh | sh -s email=${LEFTENCRYPT_EMAIL} # Configure acme.sh to use DNS API for FreeDNS . "/.acme.sh/acme.sh.env" diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 6f39157..450247d 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -9,9 +9,14 @@ if [ -f ${PWD}/.env ]; then fi # Check if required environment variables are set -if [ -z "$FREEDNS_User" ] || [ -z "$FREEDNS_Password" ] || [ -z "$DOMAIN_NAME" ] || [ -z "$SSH_PUBLIC_KEY" ]; then - echo "Error: FREEDNS_User, FREEDNS_Password, DOMAIN_NAME, and SSH_PUBLIC_KEY must be set as environment variables or in a .env file." - exit 1 +if [ -z "$FREEDNS_User" ] || + [ -z "$FREEDNS_Password" ] || + [ -z "$DOMAIN_NAME" ] || + [ -z "$SSH_PUBLIC_KEY" ] || + [ -z "$REPO_URL" ] || + [ -z "$LETSENCRYPT_EMAIL" ]; then + echo "Error: FREEDNS_User, FREEDNS_Password, DOMAIN_NAME, SSH_PUBLIC_KEY, REPO_URL, and LETSENCRYPT_EMAIL must be set as environment variables or in a .env file." + exit 1 fi # Deploy infrastructure diff --git a/scripts/destroy.sh b/scripts/destroy.sh index 1878bcf..b2b278b 100755 --- a/scripts/destroy.sh +++ b/scripts/destroy.sh @@ -9,9 +9,14 @@ if [ -f ${PWD}/.env ]; then fi # Check if required environment variables are set -if [ -z "$FREEDNS_User" ] || [ -z "$FREEDNS_Password" ] || [ -z "$DOMAIN_NAME" ] || [ -z "$SSH_PUBLIC_KEY" ]; then - echo "Error: FREEDNS_User, FREEDNS_Password, DOMAIN_NAME, and SSH_PUBLIC_KEY must be set as environment variables or in a .env file." - exit 1 +if [ -z "$FREEDNS_User" ] || + [ -z "$FREEDNS_Password" ] || + [ -z "$DOMAIN_NAME" ] || + [ -z "$SSH_PUBLIC_KEY" ] || + [ -z "$REPO_URL" ] || + [ -z "$LETSENCRYPT_EMAIL" ]; then + echo "Error: FREEDNS_User, FREEDNS_Password, DOMAIN_NAME, SSH_PUBLIC_KEY, REPO_URL, and LETSENCRYPT_EMAIL must be set as environment variables or in a .env file." + exit 1 fi # Destroy infrastructure