diff --git a/doc/PRODUCTION.md b/doc/PRODUCTION.md index 45b3066..358b14b 100644 --- a/doc/PRODUCTION.md +++ b/doc/PRODUCTION.md @@ -133,24 +133,40 @@ CAUTION, this will delete user's home, it's irrevocable. # Update ip when public ip change with CloudFlare and crontab +First you need a valid python3 interpreter running with cloudflare module installed: (make sure your pip3 pointing the right python3) + +```bash +pip3 install cloudflare==2.20.0 +``` + +Then you need to create the cfg files with credentials for your cloudflare account. + ```bash mkdir ~/.cloudflare ``` - Edit ~/.cloudflare/cloudflare.cfg ``` [PROFILE_NAME] email=EMAIL -token=TOKEN +token=TOKEN (Use the global API key so that it works) ``` -Add your cron +Add your cron and specify the python3 you want to use with it. +- USER is the local user with permissions to execute the script +- PATH is path to inside of ERPLibre/deployment/ folder +- PROFILE_NAME must match the PROFILE_NAME in cloudflare.cfg +- CLOUDFLARE_ZONE_NAME is the name of the website zone on cloudflare +- DNS_NAME is the name of one DNS A record name available on that zone + +Notes: +- Only one crontab is required because the script will automatically research all available zones with outdated ip and update them on all A records. +- For each crontab run, if public IP did not change compared to what is on cloudflare, the script will not do unnecessary changes and let everything as is. ```bash vim /etc/crontab # Add -*/5 * * * * USER cd PATH && ./script/deployment/update_dns_cloudflare.py --profile PROFILE_NAME --zone_name CLOUDFLARE_ZONE_NAME --dns_name DNS_NAME --auto_sync +*/5 * * * * USER cd PATH && python3 script/deployment/update_dns_cloudflare.py --profile PROFILE_NAME --zone_name CLOUDFLARE_ZONE_NAME --dns_name DNS_NAME --auto_sync ``` Check log with @@ -159,6 +175,21 @@ Check log with sudo journalctl -feu cron ``` +If you want to log what is happening and when the script is run, like logging when ip changes, you can add a logging part to your cron + +```bash +vim /etc/crontab +# Add +*/5 * * * * USER cd PATH && python3 script/deployment/update_dns_cloudflare.py --profile PROFILE_NAME --zone_name CLOUDFLARE_ZONE_NAME --dns_name DNS_NAME --auto_sync > /home/USER/logs/update_dns_ZONE_NAME.log 2>&1 + +``` + +You can then read all logs with this command (Need to have ts installed: sudo apt install moreutils) + +```bash +tail -f /home/USER/logs/update_dns_ZONE_NAME.log | ts +``` + # Docker ## Update diff --git a/script/deployment/update_dns_cloudflare.py b/script/deployment/update_dns_cloudflare.py index be21e71..1263b90 100755 --- a/script/deployment/update_dns_cloudflare.py +++ b/script/deployment/update_dns_cloudflare.py @@ -27,17 +27,19 @@ def get_config(): Can update all old_ip to new_ip. When auto_sync is enable: Check zone and name on cloudflare and compare with public ip, update all old ip with new ip if different. - You need your profile in file ~/.cloudflare/cloudflare.cfg + 1-you need a valid python3 interpreter running with cloudflare module installed: + pip3 install cloudflare==2.20.0 + 2-You need your profile in file ~/.cloudflare/cloudflare.cfg Example: - [profil_name] - email=email@email.com - token=TOKEN + [profil_name] + email=email@email.com + token=TOKEN (Use the global API key so that it works) Configure locally a crontab and adapt it, crontab -e, specify an existing DNS Example each 5 minutes: - */5 * * * * USERNAME cd /home/USERNAME/ERPLibre && ./script/deployment/update_dns_cloudflare.py --profile profil_name --zone_name example.com --dns_name example.com --auto_sync + */5 * * * * USERNAME cd /home/USERNAME/ERPLibre && python3 script/deployment/update_dns_cloudflare.py --profile profil_name --zone_name example.com --dns_name example.com --auto_sync Example each minute: - * * * * * USERNAME cd /home/USERNAME/ERPLibre && ./script/deployment/update_dns_cloudflare.py --profile profil_name --zone_name example.com --dns_name example.com --auto_sync + * * * * * USERNAME cd /home/USERNAME/ERPLibre && python3 script/deployment/update_dns_cloudflare.py --profile profil_name --zone_name example.com --dns_name example.com --auto_sync """, epilog="""\ """,