Add docker support
- Allow setup script to get credentials from flags - Add Dockerfile and docker_entrypoint - Edit README for forked version
This commit is contained in:
parent
9ae33644e5
commit
9782f0321f
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,6 +1,7 @@
|
||||||
docs/build/
|
docs/build/
|
||||||
__pycache__
|
__pycache__
|
||||||
feedlist
|
feedlist
|
||||||
|
data
|
||||||
*.swp
|
*.swp
|
||||||
*.pyc
|
*.pyc
|
||||||
*.db
|
*.db
|
||||||
|
@ -8,3 +9,5 @@ feedlist
|
||||||
*.txt
|
*.txt
|
||||||
*.bck
|
*.bck
|
||||||
*.png
|
*.png
|
||||||
|
*.yml
|
||||||
|
.env
|
||||||
|
|
13
Dockerfile
Normal file
13
Dockerfile
Normal file
|
@ -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"]
|
87
README.md
87
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
|
||||||
|
|
||||||
Feed2toot automatically parses rss feeds, identifies new posts and posts them on the [Mastodon](https://mastodon.social) social network.
|
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.
|
||||||
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:
|
|
||||||
|
|
||||||
|
- [Liberapay](https://liberapay.com/carlchenet/)
|
||||||
- BTC: 1AW12Zw93rx4NzWn5evcG7RNNEM2RSLmAC
|
- BTC: 1AW12Zw93rx4NzWn5evcG7RNNEM2RSLmAC
|
||||||
- XMR: 43GGv8KzVhxehv832FWPTF7FSVuWjuBarFd17QP163uxMaFyoqwmDf1aiRtS5jWgCiRsi73yqedNJJ6V1La2joznKHGAhDi
|
- 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
|
### Authors
|
||||||
|
|
||||||
|
* MassiveBox <massivebox@massivebox.net>
|
||||||
* Carl Chenet <carl.chenet@ohmytux.com>
|
* Carl Chenet <carl.chenet@ohmytux.com>
|
||||||
* Antoine Beaupré <anarcat@debian.org>
|
* Antoine Beaupré <anarcat@debian.org>
|
||||||
* First developed by Todd Eddy
|
* First developed by Todd Eddy
|
||||||
|
|
12
docker_entrypoint.sh
Executable file
12
docker_entrypoint.sh
Executable file
|
@ -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
|
|
@ -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('--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('--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('--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()
|
opts = parser.parse_args()
|
||||||
|
|
||||||
clientcredfile=opts.clientcredfile
|
clientcredfile=opts.clientcredfile
|
||||||
|
@ -44,6 +47,8 @@ print(headline)
|
||||||
|
|
||||||
|
|
||||||
# get the instance
|
# get the instance
|
||||||
|
instance = opts.instance
|
||||||
|
if not instance:
|
||||||
instance = input('Mastodon instance URL (defaults to https://mastodon.social): ')
|
instance = input('Mastodon instance URL (defaults to https://mastodon.social): ')
|
||||||
if not instance:
|
if not instance:
|
||||||
instance = 'https://mastodon.social'
|
instance = 'https://mastodon.social'
|
||||||
|
@ -52,18 +57,24 @@ elif not instance.startswith('http'):
|
||||||
|
|
||||||
# get the username
|
# get the username
|
||||||
userok = False
|
userok = False
|
||||||
|
quit_on_error = True
|
||||||
while not userok:
|
while not userok:
|
||||||
|
user = opts.username
|
||||||
|
if not user:
|
||||||
user = input('Mastodon login: ')
|
user = input('Mastodon login: ')
|
||||||
|
quit_on_error = False
|
||||||
if not user:
|
if not user:
|
||||||
print('Your Mastodon username can not be empty.')
|
print('Your Mastodon username can not be empty.')
|
||||||
userok = False
|
|
||||||
elif '@' not in user or '.' not in user:
|
elif '@' not in user or '.' not in user:
|
||||||
print('Your Mastodon username should be an email.')
|
print('Your Mastodon username should be an email.')
|
||||||
userok = False
|
|
||||||
else:
|
else:
|
||||||
userok = True
|
userok = True
|
||||||
|
if not userok and quit_on_error:
|
||||||
|
exit()
|
||||||
|
|
||||||
# get the password
|
# get the password
|
||||||
|
password = opts.password
|
||||||
|
if not password:
|
||||||
password = getpass(prompt='Mastodon password: ')
|
password = getpass(prompt='Mastodon password: ')
|
||||||
Mastodon.create_app(
|
Mastodon.create_app(
|
||||||
opts.name,
|
opts.name,
|
||||||
|
|
Loading…
Reference in a new issue