mirror of
https://github.com/mempool/mempool.git
synced 2024-11-20 10:21:52 +01:00
108 lines
2.7 KiB
Markdown
108 lines
2.7 KiB
Markdown
# Mempool Link Unfurler Service
|
|
|
|
This is a standalone nodejs service which implements the [Open Graph protocol](https://ogp.me/) for Mempool instances. It performs two main tasks:
|
|
|
|
1. Serving Open Graph html meta tags to social media link crawler bots.
|
|
2. Rendering link preview images for social media sharing.
|
|
|
|
Some additional server configuration is required to properly route requests (see section 4 below).
|
|
|
|
## Setup
|
|
|
|
### 0. Install deps
|
|
|
|
For Linux, in addition to NodeJS/npm you'll need at least:
|
|
* nginx
|
|
* cups
|
|
* chromium-bsu
|
|
* libatk1.0
|
|
* libatk-bridge2.0
|
|
* libxkbcommon-dev
|
|
* libxcomposite-dev
|
|
* libxdamage-dev
|
|
* libxrandr-dev
|
|
* libgbm-dev
|
|
* libpango1.0-dev
|
|
* libasound-dev
|
|
|
|
### 1. Clone Mempool Repository
|
|
|
|
Get the latest Mempool code:
|
|
|
|
```
|
|
git clone https://github.com/mempool/mempool
|
|
cd mempool
|
|
```
|
|
|
|
Check out the latest release:
|
|
|
|
```
|
|
latestrelease=$(curl -s https://api.github.com/repos/mempool/mempool/releases/latest|grep tag_name|head -1|cut -d '"' -f4)
|
|
git checkout $latestrelease
|
|
```
|
|
|
|
### 2. Prepare the Mempool Unfurler
|
|
|
|
#### Install
|
|
|
|
Install dependencies with `npm` and build the backend:
|
|
|
|
```
|
|
cd unfurler
|
|
npm install
|
|
```
|
|
|
|
The npm install may fail if your system does not support automatic installation of Chromium for Puppeteer. In that case, manually install Puppeteer without Chromium first:
|
|
```
|
|
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true npm install puppeteer
|
|
npm install
|
|
```
|
|
|
|
#### Configure
|
|
|
|
In the `unfurler` folder, make a copy of the sample config file:
|
|
|
|
```
|
|
cp config.sample.json config.json
|
|
```
|
|
|
|
Edit `config.json` as needed:
|
|
|
|
| variable | usage |
|
|
|---|---|
|
|
| SERVER.HOST | the host where **this** service will be served |
|
|
| SERVER.HTTP_PORT | the port on which **this** service should run |
|
|
| MEMPOOL.HTTP_HOST | the host where **the Mempool frontend** is being served |
|
|
| MEMPOOL.HTTP_PORT | the port on which **the Mempool frontend** is running (or `null`) |
|
|
| PUPPETEER.CLUSTER_SIZE | the maximum number of Chromium browser instances to run in parallel, for rendering link previews |
|
|
| PUPPETEER.EXEC_PATH | (optional) an absolute path to the Chromium browser executable, e.g. `/usr/local/bin/chrome`. Only required when using a manual installation of Chromium |
|
|
|
|
#### Build
|
|
|
|
```
|
|
npm run build
|
|
```
|
|
|
|
### 3. Run the Mempool Unfurler
|
|
|
|
```
|
|
npm run start
|
|
```
|
|
|
|
### 4. Server configuration
|
|
|
|
To enable social media link previews, the system serving the Mempool frontend should detect requests from social media crawler bots and proxy those requests to this service instead.
|
|
|
|
Precise implementation is left as an exercise to the reader, but the following snippet may be of some help for Nginx users:
|
|
```Nginx
|
|
map $http_user_agent $crawler {
|
|
default 0;
|
|
~*facebookexternalhit 1;
|
|
~*twitterbot 1;
|
|
~*slackbot 1;
|
|
~*redditbot 1;
|
|
~*linkedinbot 1;
|
|
~*pinterestbot 1;
|
|
}
|
|
```
|