aboutsummaryrefslogtreecommitdiff
path: root/blog/2022-06-07-freshrss.org
diff options
context:
space:
mode:
authorChristian Cleberg <hello@cleberg.net>2023-12-02 23:27:35 -0600
committerChristian Cleberg <hello@cleberg.net>2023-12-02 23:27:35 -0600
commit3d4da5ac6000a4871c5caa80d1e61f2782da3069 (patch)
tree29f36b50823d22f4c7df0a3db3ede83192ae649f /blog/2022-06-07-freshrss.org
parentdcf0186e16b6ac8f0e00a3aeb9734421ce548177 (diff)
downloadcleberg.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.org327
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.