From 9782f0321f96b0d853b1b3bcc8333672d6961367 Mon Sep 17 00:00:00 2001 From: MassiveBox Date: Sun, 23 Oct 2022 22:09:20 +0200 Subject: [PATCH] Add docker support - Allow setup script to get credentials from flags - Add Dockerfile and docker_entrypoint - Edit README for forked version --- .gitignore | 3 ++ Dockerfile | 13 +++++ README.md | 87 +++++++++++++--------------------- docker_entrypoint.sh | 12 +++++ scripts/register_feed2toot_app | 21 ++++++-- 5 files changed, 78 insertions(+), 58 deletions(-) create mode 100644 Dockerfile create mode 100755 docker_entrypoint.sh diff --git a/.gitignore b/.gitignore index f5189cf..90063a8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ docs/build/ __pycache__ feedlist +data *.swp *.pyc *.db @@ -8,3 +9,5 @@ feedlist *.txt *.bck *.png +*.yml +.env diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c6ca6e7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.7-bullseye + +ADD . /app +WORKDIR /app + +RUN python3 setup.py install; \ + chmod +x docker_entrypoint.sh; \ + mkdir -p /data /root/.config; \ + rm -rf docke.yml + +WORKDIR /data + +CMD ["/app/docker_entrypoint.sh"] diff --git a/README.md b/README.md index 61b4fcd..dc85036 100644 --- a/README.md +++ b/README.md @@ -1,64 +1,45 @@ +# Feed2Toot Docker + +Feed2Toot Docker is a fork of [chaica/feed2toot](https://gitlab.com/chaica/feed2toot) that allows for simple deployment over Docker. In the future I'll try to add other useful features. + +### Usage + +With Docker Compose: +```yaml +version: '3' + +services: + feed2toot: + image: gitea.massivebox.net/massivebox/feed2toot-docker:latest + environment: + - USERNAME=sampleusername@sampleinstance.url + - PASSWORD=samplepassword + - INSTANCE=https://sampleinstance.url + restart: always + volumes: + - ./data:/data +``` +Insert your full username (including the part with your homeserver's address), password and instance URL where required. +You also need to create a working `feed2toot.ini` in the `./data` folder. See the [upstream docs](`https://feed2toot.readthedocs.io/en/latest/configure.html#create-feed2toot-configuration`) for the guide. + +After the first successful run, you can remove the entire `environment` block if you want, however, if you delete and re-create the container, you will need to put it back. + +### Support + +Don't ask the upstream developers for help, if something is broken it's more likely that it is my fault. +You can get support by opening an [issue](https://gitea.massivebox.net/massivebox/feed2toot-docker/issues), or by [contacting me](https://massivebox.net/contact.html), or in the [Matrix support room](https://matrix.to/#/#support:massivebox.net). + ### Feed2toot -Feed2toot automatically parses rss feeds, identifies new posts and posts them on the [Mastodon](https://mastodon.social) social network. -For the full documentation, [read it online](https://feed2toot.readthedocs.io/en/latest/). - -If you would like, you can [support the development of this project on Liberapay](https://liberapay.com/carlchenet/). -Alternatively you can donate cryptocurrencies: +The following links and addresses are the upstream developers'. I don't want donations for this project, but I encourage you to donate to them. +- [Liberapay](https://liberapay.com/carlchenet/) - BTC: 1AW12Zw93rx4NzWn5evcG7RNNEM2RSLmAC - XMR: 43GGv8KzVhxehv832FWPTF7FSVuWjuBarFd17QP163uxMaFyoqwmDf1aiRtS5jWgCiRsi73yqedNJJ6V1La2joznKHGAhDi -### Quick Install - -* Install Feed2toot from PyPI - - # pip3 install feed2toot - -* Install Feed2toot from sources - *(see the installation guide for full details) - [Installation Guide](http://feed2toot.readthedocs.io/en/latest/install.html)* - - - # tar zxvf feed2toot-0.17.tar.gz - # cd feed2toot - # python3 setup.py install - # # or - # python3 setup.py install --install-scripts=/usr/bin - -### Create the authorization for the Feed2toot app - -* Just launch the following command:: - - $ register_feed2toot_app - -### Use Feed2toot - -* Create or modify feed2toot.ini file in order to configure feed2toot: - - [mastodon] - instance_url=https://mastodon.social - user_credentials=feed2toot_usercred.txt - client_credentials=feed2toot_clientcred.txt - ; Default visibility is public, but you can override it: - ; toot_visibility=unlisted - - [cache] - cachefile=cache.db - - [rss] - uri=https://www.journalduhacker.net/rss - toot={title} {link} - - [hashtaglist] - several_words_hashtags_list=hashtags.txt - -* Launch Feed2toot - - $ feed2toot -c /path/to/feed2toot.ini - ### Authors +* MassiveBox * Carl Chenet * Antoine Beaupré * First developed by Todd Eddy diff --git a/docker_entrypoint.sh b/docker_entrypoint.sh new file mode 100755 index 0000000..7360431 --- /dev/null +++ b/docker_entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +cd /data + +if [[ ! -f "feed2toot_clientcred.txt" || ! -f "feed2toot_usercred.txt" ]]; then + register_feed2toot_app --instance $INSTANCE --username $USERNAME --password $PASSWORD +fi + +while :; do + feed2toot -c ./feed2toot.ini + sleep 5m +done diff --git a/scripts/register_feed2toot_app b/scripts/register_feed2toot_app index 22975e8..7453ecc 100755 --- a/scripts/register_feed2toot_app +++ b/scripts/register_feed2toot_app @@ -34,6 +34,9 @@ parser.add_argument('--version', action='version', version=__version__) parser.add_argument('--client-credentials-file', dest='clientcredfile', help='the name of the client credentials for the Mastodon app', default='feed2toot_clientcred.txt') parser.add_argument('--user-credentials-file', dest='usercredfile', help='the name of the user credentials for the Mastodon app', default='feed2toot_usercred.txt') parser.add_argument('--name', help='the name of the Mastodon app', default='feed2toot') +parser.add_argument('--instance', help='the URL of the Mastodon instance') +parser.add_argument('--username', help='the username of your Mastodon account') +parser.add_argument('--password', help='the password of your Mastodon account') opts = parser.parse_args() clientcredfile=opts.clientcredfile @@ -44,7 +47,9 @@ print(headline) # get the instance -instance = input('Mastodon instance URL (defaults to https://mastodon.social): ') +instance = opts.instance +if not instance: + instance = input('Mastodon instance URL (defaults to https://mastodon.social): ') if not instance: instance = 'https://mastodon.social' elif not instance.startswith('http'): @@ -52,19 +57,25 @@ elif not instance.startswith('http'): # get the username userok = False +quit_on_error = True while not userok: - user = input('Mastodon login: ') + user = opts.username + if not user: + user = input('Mastodon login: ') + quit_on_error = False if not user: print('Your Mastodon username can not be empty.') - userok = False elif '@' not in user or '.' not in user: print('Your Mastodon username should be an email.') - userok = False else: userok = True + if not userok and quit_on_error: + exit() # get the password -password = getpass(prompt='Mastodon password: ') +password = opts.password +if not password: + password = getpass(prompt='Mastodon password: ') Mastodon.create_app( opts.name, api_base_url=instance,