-
Notifications
You must be signed in to change notification settings - Fork 1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improving Self-Hosting and Removing 3rd Party dependencies. #4465
Open
Podginator
wants to merge
27
commits into
omnivore-app:main
Choose a base branch
from
Podginator:self-host-updates
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+11,779
−5,961
Open
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit
Hold shift + click to select a range
60303ff
Self-Hosting Changes
Podginator bb7b3c9
Fix Minio Environment Variable
Podginator 593bac0
Just make pdfs successful, due to lack of PDFHandler
Podginator d4710a8
Fix issue where flag was set wrong
Podginator 26c5ef3
Added an NGINX Example file
Podginator 4607032
Add some documentation for self-hosting via Docker Compose
Podginator ae66e2e
Make some adjustments to Puppeteer due to failing sites.
Podginator b350fbd
adjust timings
Podginator 322ec68
Add start of Mail Service
Podginator 6f1ee6b
Fix Docker Files
Podginator 222ba06
More email service stuff
Podginator 34e039e
Add Guide to use Zapier for Email-Importing.
Podginator 8b845b5
Ensure that if no env is provided it uses the old email settings
Podginator e557fd0
Add some instructions for self-hosted email
Podginator b8226db
Add SNS Endpoints for Mail Watcher
Podginator af70b25
Add steps and functionality for using SES and SNS for email
Podginator 2e3134c
Uncomment a few jobs.
Podginator ab51fc9
Added option for Firefox for parser. Was having issues with Chromium …
Podginator 0e6c675
Add missing space.
Podginator 6b7f170
Fix some wording on the Guide
Podginator 9d41cc5
Fix Package
Podginator a66f92b
Fix MV
Podginator c27af01
Do raw handlers for Medium
Podginator 7bebb45
Fix images in Medium
Podginator 7bdf222
Update self-hosting/GUIDE.md
Podginator d42656b
Update Guide with other variables
Podginator 685f542
Merge
Podginator File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,216 @@ | ||
# Self Hosting | ||
|
||
- [Docker Compose](#docker-compose) | ||
- [Nginx Reverse Proxy](#nginx-reverse-proxy) | ||
- [Cloudflare Tunnel](#cloudflare-tunnel) | ||
|
||
## Docker Compose | ||
|
||
We recommend using Docker-compose for the simplest way to deploy Omnivore. We have provided a configuration in the `self-hosting/docker-compose` folder. | ||
|
||
All networking and persistent storage is handled by the docker-compose file. | ||
|
||
### Requirements | ||
* Docker | ||
* Docker Compose | ||
|
||
### 1. Clone the Repository | ||
|
||
Clone the repository at ``git@github.com:omnivore-app/omnivore.git`` | ||
|
||
### 2. Change directory to self-hosting/docker-compose | ||
|
||
The Docker-compose file and necessary environment variables are found in the self-hosting folder under docker-compose. | ||
|
||
These files provide all you need to get Omnivore up and running on your local environment. | ||
|
||
### 3. Populate the .env file | ||
|
||
There is a .env.example file located within the docker-compose folder that should give you the necessary environment variables to begin running. | ||
You can use these by `mv .env.example.env` | ||
Podginator marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
The following environment variables should be changed to reflect where you are running your application. | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I believe the table below should also include |
||
|
||
| Environment Variable | Description | Local Parameter | | ||
|----------------------------------|------------------------------------------------|-------------------------| | ||
| BASE URL | The URL of the Front End of the Application. | http://localhost:3000 | | ||
Podginator marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| SERVER_BASE_URL | The URL of the API Server. | http://localhost:4000 | | ||
| HIGHLIGHTS_BASE_URL | The URL of the Front end of the Application | http://localhost:3000 | | ||
| NEXT_PUBLIC_BASE_URL | Same as above BASE URL, but for NEXT | http://localhost:3000 | | ||
| NEXT_PUBLIC_SERVER_BASE_URL | Same as above SERVER_BASE_URL, but for NEXT | http://localhost:4000 | | ||
| NEXT_PUBLIC_HIGHLIGHTS_BASE_URL | Same as above HIGHLIGHTS_BASE_URL but for NEXT | http://localhost:3000 | | ||
|
||
Additionally, when doing a docker-compose build, if you are hosting this application you must change the args in the `docker-compose` file. | ||
|
||
```yaml | ||
web: | ||
build: | ||
context: ../../ | ||
dockerfile: ./packages/web/Dockerfile-self | ||
args: | ||
- APP_ENV=prod | ||
- BASE_URL=http://localhost:3000 | ||
- SERVER_BASE_URL=http://localhost:4000 | ||
- HIGHLIGHTS_BASE_URL=http://localhost:3000 | ||
``` | ||
They are the same as the listed environment variables above. | ||
### 4. Build the docker images. | ||
Running `docker compose build` will go through and build all the necessary docker images. | ||
|
||
### 5. Start the service. | ||
|
||
Running `docker compose up` will start the services. | ||
|
||
During the first deployment omnivore-migrate will go through and set up the necessary Postgres tables. | ||
This will also create a demo user with email: demo@omnivore.app, password: demo_password. | ||
|
||
When the service is ready you can access the web-app by using localhost:3000 | ||
|
||
With the default .env file you will be able to use Omnivore, add RSS Feeds, add stories etc. | ||
|
||
|
||
### Additional Services used: | ||
|
||
#### PGVector | ||
A PGVector image is used to provide Postgres functionality. If you have another postgres service running it is possible to remove | ||
this from the docker-compose and provide the host, username and password of the Postgres instance. | ||
|
||
#### Redis | ||
Redis is used as a queueing system, and for caching. If you have a Redis Instance already it is possible to remove this from the docker-compose | ||
and rely on the hosted Redis. You must replace the redis url for this. | ||
|
||
#### Minio | ||
Minio is an AWS S3 compatible Object storage service. It allows you to use the S3 Storage API. | ||
|
||
We also have a small client that creates the necessary buckets (createbuckets). See below: | ||
```bash | ||
until (/usr/bin/mc config host add myminio http://minio:9000 minio miniominio) do echo '...waiting...' && sleep 1; done; | ||
/usr/bin/mc mb myminio/omnivore; | ||
/usr/bin/mc policy set public myminio/omnivore; | ||
``` | ||
|
||
If you use GCS, or S3 buckets you can do the following: | ||
|
||
##### S3: | ||
Replace the following with the correct parameters. | ||
```env | ||
AWS_ACCESS_KEY_ID=minio # Used for Minio S3 Client | ||
AWS_SECRET_ACCESS_KEY=miniominio | ||
AWS_REGION=us-east-1 | ||
``` | ||
|
||
Replace the following with an endpoint URL from [here](https://docs.aws.amazon.com/general/latest/gr/s3.html) | ||
```env | ||
LOCAL_MINIO_URL=http://localhost:1010 | ||
``` | ||
|
||
##### GCS: | ||
Remove the following Environment Variable: | ||
```env | ||
GCS_USE_LOCAL_HOST=true | ||
``` | ||
and populate | ||
``` | ||
GCS_UPLOAD_SA_KEY_FILE_PATH | ||
``` | ||
with the path of the JSON key file for the service account. | ||
## Nginx Reverse Proxy | ||
Nginx is a reverse proxy that receives requests, and directs them to the correct service internally. Omnivore runs 4 services we want to redirect to. | ||
* Omnivore Web | ||
* Omnivore API | ||
* Omnivore Bucket [Optional] | ||
* Omnivore Image Proxy [Optional] | ||
We have included an example Nginx Configuration that redirects traffic from http (80) to https (443), and then directs traffic to the correct service based on the request path. | ||
```nginx | ||
events {} | ||
http { | ||
sendfile on; | ||
keepalive_timeout 60; | ||
upstream omnivore_web { | ||
ip_hash; | ||
server 127.0.0.1:3000; | ||
} | ||
upstream omnivore_backend { | ||
ip_hash; | ||
server 127.0.0.1:4000; | ||
} | ||
upstream omnivore_imageproxy { | ||
ip_hash; | ||
server 127.0.0.1:1010; | ||
} | ||
upstream omnivore_bucket { | ||
ip_hash; | ||
server 127.0.0.1:7070; | ||
} | ||
server { | ||
listen 80; | ||
return 301 https://$host$request_uri | ||
} | ||
server { | ||
listen 443; | ||
server_name omnivore.domain.com; | ||
ssl_certification /path/to/cert.crt; | ||
ssl_certificate_key /path/to/cert.key; | ||
ssl on; | ||
ssl_session_cache builtin:1000 shared:SSL:10m; | ||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | ||
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4; | ||
ssl_prefer_server_ciphers on; | ||
# Override for authentication on the frontend | ||
location /api/client/auth { | ||
proxy_pass http://omnivore_web; | ||
} | ||
# API | ||
location /api { | ||
proxy_pass http://omnivore_backend; | ||
} | ||
# Minio | ||
location /bucket { | ||
proxy_pass http://omnivore_bucket; | ||
} | ||
# ImageProxy | ||
location /images { | ||
proxy_pass http://omnivore_imageproxy; | ||
} | ||
# FrontEnd application | ||
location / { | ||
proxy_pass http://omnivore_web; | ||
} | ||
} | ||
} | ||
``` | ||
|
||
## Cloudflare Tunnel | ||
Cloudflare tunnels is an easy way to expose a service running on a local machine to the internet without a publicly routable IP Address. | ||
|
||
You run a daemon on your host machine, which creates outbound connections to the | ||
|
||
![Tunnels Config](../docs/guides/images/cloudflare-tunnel.png) | ||
|
||
Omnivore is no way affiliated with Cloudflare, it is just the method to which the person writing this guide used, and found pretty painless overall. | ||
|
||
[Read More](https://www.cloudflare.com/products/tunnel/) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello, playing with the guide I believe I just found a typo here. It's missing a space and should be
mv .env.example .env