diff options
author | Christian Cleberg <hello@cleberg.net> | 2023-12-02 23:27:35 -0600 |
---|---|---|
committer | Christian Cleberg <hello@cleberg.net> | 2023-12-02 23:27:35 -0600 |
commit | 3d4da5ac6000a4871c5caa80d1e61f2782da3069 (patch) | |
tree | 29f36b50823d22f4c7df0a3db3ede83192ae649f /blog/2022-06-07-freshrss.org | |
parent | dcf0186e16b6ac8f0e00a3aeb9734421ce548177 (diff) | |
download | cleberg.net-3d4da5ac6000a4871c5caa80d1e61f2782da3069.tar.gz cleberg.net-3d4da5ac6000a4871c5caa80d1e61f2782da3069.tar.bz2 cleberg.net-3d4da5ac6000a4871c5caa80d1e61f2782da3069.zip |
feat: finish converting md to org
Diffstat (limited to 'blog/2022-06-07-freshrss.org')
-rw-r--r-- | blog/2022-06-07-freshrss.org | 327 |
1 files changed, 175 insertions, 152 deletions
diff --git a/blog/2022-06-07-freshrss.org b/blog/2022-06-07-freshrss.org index cc752b8..653e5a3 100644 --- a/blog/2022-06-07-freshrss.org +++ b/blog/2022-06-07-freshrss.org @@ -1,67 +1,75 @@ -+++ -date = 2022-06-07 -title = "Self-Hosting FreshRSS" -description = "A detailed description of my process to self-host FreshRSS on Ubuntu." -draft = false -+++ - -## Why RSS? - -After noticing that I have collected 50+ blogs as bookmarks, I decided to -migrate back to using RSS feeds to stay up-to-date with my favorite websites. -Using RSS allows me to read all of these posts in a single app (on both mobile & -desktop) and allows me to be notified when new posts are available. - -However, I ran into one issue: syncing subscriptions and read/unread posts -across devices. Since I want to be able to easily read on both mobile and -desktop, I decided to look for a self-hosted RSS solution. - -Thus, I found [FreshRSS](https://www.freshrss.org/) and was able to successfully -install it on my server in about 30 minutes. - -## Documentation - +#+title: Self-Hosting FreshRSS +#+date: 2022-06-07 + +** Why RSS? +:PROPERTIES: +:CUSTOM_ID: why-rss +:END: +After noticing that I have collected 50+ blogs as bookmarks, I decided +to migrate back to using RSS feeds to stay up-to-date with my favorite +websites. Using RSS allows me to read all of these posts in a single app +(on both mobile & desktop) and allows me to be notified when new posts +are available. + +However, I ran into one issue: syncing subscriptions and read/unread +posts across devices. Since I want to be able to easily read on both +mobile and desktop, I decided to look for a self-hosted RSS solution. + +Thus, I found [[https://www.freshrss.org/][FreshRSS]] and was able to +successfully install it on my server in about 30 minutes. + +** Documentation +:PROPERTIES: +:CUSTOM_ID: documentation +:END: While it's certainly not robust, the -[FreshRSS documentation](https://freshrss.github.io/FreshRSS/) is helpful for -figuring out basic information about the service. - -However, I wanted to install this service as a Docker container and stumbled -across the -[Docker README](https://github.com/FreshRSS/FreshRSS/tree/edge/Docker) within -the GitHub repository. - -This README was the documentation I actually needed. However, as you'll see -below, I still had to manually edit one file (`config.php`) to access the API -externally via my RSS apps. - -## Installation - -### DNS - -The first step, as required by any external web service, was assigning a domain -name to use. I chose to use a subdomain, like `rss.example.com`. - -To assign this, I created an `A` record in my DNS settings with the IPv4 address -of the server and an `AAAA` record with the IPv6 address of the server. Note: -assigning an IPv6 (`AAAA`) record is optional, but I like to enable IPV6 for my -services. - -```config +[[https://freshrss.github.io/FreshRSS/][FreshRSS documentation]] is +helpful for figuring out basic information about the service. + +However, I wanted to install this service as a Docker container and +stumbled across the +[[https://github.com/FreshRSS/FreshRSS/tree/edge/Docker][Docker README]] +within the GitHub repository. + +This README was the documentation I actually needed. However, as you'll +see below, I still had to manually edit one file (=config.php=) to +access the API externally via my RSS apps. + +** Installation +:PROPERTIES: +:CUSTOM_ID: installation +:END: +*** DNS +:PROPERTIES: +:CUSTOM_ID: dns +:END: +The first step, as required by any external web service, was assigning a +domain name to use. I chose to use a subdomain, like =rss.example.com=. + +To assign this, I created an =A= record in my DNS settings with the IPv4 +address of the server and an =AAAA= record with the IPv6 address of the +server. Note: assigning an IPv6 (=AAAA=) record is optional, but I like +to enable IPV6 for my services. + +#+begin_src config rss.example.com A xxx.xxx.xxx.xxx rss.example.com AAAA xxxx:xxxx: ... :xxxx -``` - -### Docker - -I initially tried to set up a `docker-compose.yml` file with a `.env` file -because I prefer to have a file I can look back at later to see how I initially -started the container, but it simply wouldn't work for me. I'm not sure why, but -I assume I wasn't telling `docker-compose` where the `.env` file was. - -Regardless, I chose to simply run the service with `docker run`. See the -following command for my `docker run` configuration: - -```sh +#+end_src + +*** Docker +:PROPERTIES: +:CUSTOM_ID: docker +:END: +I initially tried to set up a =docker-compose.yml= file with a =.env= +file because I prefer to have a file I can look back at later to see how +I initially started the container, but it simply wouldn't work for me. +I'm not sure why, but I assume I wasn't telling =docker-compose= where +the =.env= file was. + +Regardless, I chose to simply run the service with =docker run=. See the +following command for my =docker run= configuration: + +#+begin_src sh sudo docker run -d --restart unless-stopped --log-opt max-size=10m \ -p 8080:80 \ -e TZ=America/Chicago \ @@ -70,42 +78,46 @@ sudo docker run -d --restart unless-stopped --log-opt max-size=10m \ -v freshrss_extensions:/var/www/FreshRSS/extensions \ --name freshrss \ freshrss/freshrss -``` - -This started the container successfully and allowed me to visit the FreshRSS -instance at `localhost:8080`. - -### Fresh RSS Set-Up - -I **HIGHLY** suggest that you set up your user account prior to -exposing this service to the public. It's unlikely that someone is trying to -access the exact domain or IP/port you're assigning here, but as soon as you -expose this service, the first person to open the URL will be able to create the -admin user. - -In order to set up your FreshRSS service, open the `localhost:8080` URL in your -browser (you may need to use a local IP instead of `localhost` if you're -accessing the page from a different machine on the network - e.g., -`192.168.1.20:8080`). +#+end_src + +This started the container successfully and allowed me to visit the +FreshRSS instance at =localhost:8080=. + +*** Fresh RSS Set-Up +:PROPERTIES: +:CUSTOM_ID: fresh-rss-set-up +:END: +I *HIGHLY* suggest that you set up your user account prior to exposing +this service to the public. It's unlikely that someone is trying to +access the exact domain or IP/port you're assigning here, but as soon as +you expose this service, the first person to open the URL will be able +to create the admin user. + +In order to set up your FreshRSS service, open the =localhost:8080= URL +in your browser (you may need to use a local IP instead of =localhost= +if you're accessing the page from a different machine on the network - +e.g., =192.168.1.20:8080=). Once the page loads, set up your default user with a strong username and -password. You may also choose to configure other settings prior to exposing this -service. - -### Nginx Reverse-Proxy +password. You may also choose to configure other settings prior to +exposing this service. +*** Nginx Reverse-Proxy +:PROPERTIES: +:CUSTOM_ID: nginx-reverse-proxy +:END: In order to access this service outside my home, I needed to set up a -reverse-proxy to connect `localhost:8080` to `rss.example.com`. +reverse-proxy to connect =localhost:8080= to =rss.example.com=. First, I created a new Nginx configuration file: -```sh +#+begin_src sh sudo nano /etc/nginx/sites-available/rss.example.com -``` +#+end_src Within the config file, I pasted the following code: -```config +#+begin_src config upstream freshrss { server 127.0.0.1:8080; keepalive 64; @@ -134,80 +146,91 @@ server { proxy_pass_header Authorization; } } -``` +#+end_src -Finally, restart Nginx and you will be able to access your service via HTTP: +Finally, restart Nginx and you will be able to access your service via +HTTP: -```sh +#+begin_src sh sudo systemctl restart nginx.service -``` - -### HTTPS - -However, I don't want to access my RSS feeds via HTTP. I want it available only -via HTTPS. In order to do this, I ran the [certbot](https://certbot.eff.org/) -program to generate SSL certificates for me: - -```sh +#+end_src + +*** HTTPS +:PROPERTIES: +:CUSTOM_ID: https +:END: +However, I don't want to access my RSS feeds via HTTP. I want it +available only via HTTPS. In order to do this, I ran the +[[https://certbot.eff.org/][certbot]] program to generate SSL +certificates for me: + +#+begin_src sh sudo certbot --nginx -``` - -This process will automatically generate an SSL certificate for you and modify -the Nginx configuration file to include a redirect from HTTP to HTTPS. - -## Post-Installation Fixes - -At this point, we have a functional FreshRSS website, available from anywhere -and secured with HTTPS. However, attempting to connect this service to an RSS -app resulted in many errors regarding unavailable URLs and incorrect -credentials. - -### API Set-Up - -First, you need to open your user profile in FreshRSS (`Settings` > `Profile`) -and set an API password in the field at the bottom. This is the password you -will need to provide to your RSS apps. - -Once that is set and saved, click the link below the API password field to open -the API check tool. It should look something like `https://localhost:8080/api/` -or `https://rss.example.com/api/`. - -Within this page, you _should_ see your correct external URL and "PASS" at the -bottom of each API type. -This would mean everything is set up correctly, and you can now move on and -login to any RSS apps that support self-hosted options. +#+end_src + +This process will automatically generate an SSL certificate for you and +modify the Nginx configuration file to include a redirect from HTTP to +HTTPS. + +** Post-Installation Fixes +:PROPERTIES: +:CUSTOM_ID: post-installation-fixes +:END: +At this point, we have a functional FreshRSS website, available from +anywhere and secured with HTTPS. However, attempting to connect this +service to an RSS app resulted in many errors regarding unavailable URLs +and incorrect credentials. + +*** API Set-Up +:PROPERTIES: +:CUSTOM_ID: api-set-up +:END: +First, you need to open your user profile in FreshRSS (=Settings= > +=Profile=) and set an API password in the field at the bottom. This is +the password you will need to provide to your RSS apps. + +Once that is set and saved, click the link below the API password field +to open the API check tool. It should look something like +=https://localhost:8080/api/= or =https://rss.example.com/api/=. + +Within this page, you /should/ see your correct external URL and "PASS" +at the bottom of each API type. This would mean everything is set up +correctly, and you can now move on and login to any RSS apps that +support self-hosted options. In my case, the URL showed an internal URL and I had a warning that the -`base_url` variable may be misconfigured. If this is the case, see the next -section for a fix. - -### Base URL Fix +=base_url= variable may be misconfigured. If this is the case, see the +next section for a fix. -In order to fix the `base_url` for the API, I opened up my docker container with -the following command: +*** Base URL Fix +:PROPERTIES: +:CUSTOM_ID: base-url-fix +:END: +In order to fix the =base_url= for the API, I opened up my docker +container with the following command: -```sh +#+begin_src sh sudo docker exec -it freshrss bash -``` +#+end_src Within this container, update the packages and install an editor: -```sh +#+begin_src sh apt-get update apt-get install nano -``` +#+end_src -Finally, open up `config.php` in the `data` directory: +Finally, open up =config.php= in the =data= directory: -```sh +#+begin_src sh nano data/config.php -``` +#+end_src -Within `config.php`, you will need to update the `base_url` variable and update -it to match your external URL. In my case, I simply commented-out the incorrect -URL with `//` and added the correct one on a new line: +Within =config.php=, you will need to update the =base_url= variable and +update it to match your external URL. In my case, I simply commented-out +the incorrect URL with =//= and added the correct one on a new line: -```php +#+begin_src php <?php return array ( ... @@ -216,25 +239,25 @@ URL with `//` and added the correct one on a new line: ... ) > -``` +#+end_src -You can now exit the file with `Ctrl + x`, press `y` to save the file, and then -click `Enter` to keep the same file name. +You can now exit the file with =Ctrl + x=, press =y= to save the file, +and then click =Enter= to keep the same file name. Finally, just exit out of the docker container: -```sh +#+begin_src sh exit -``` +#+end_src Next, just restart the container: -```sh +#+begin_src sh sudo docker restart freshrss -``` +#+end_src -VoilĂ ! Your API check should now "PASS" and you should be able to use one of the -API URLs in your RSS apps. +VoilĂ ! Your API check should now "PASS" and you should be able to use +one of the API URLs in your RSS apps. -In my case, I use [NetNewsWire](https://netnewswire.com) on my desktop and -phone. +In my case, I use [[https://netnewswire.com][NetNewsWire]] on my desktop +and phone. |