112 lines
3.3 KiB
Markdown
112 lines
3.3 KiB
Markdown
+++
|
|
title = 'Nitter in 2024'
|
|
date = 2024-09-05T10:34:46+03:00
|
|
draft = false
|
|
+++
|
|
Earlier this year, [Nitter has ceased development](https://github.com/zedeus/nitter/issues/1155#issuecomment-1913361757), due to the removal of guest accounts, but, you can still self host an alternative Twitter frontend, and we'll do it with something some love and some hate, Docker!
|
|
|
|
We will be using [Privacydevel's Nitter fork](https://github.com/PrivacyDevel/nitter) for this.
|
|
|
|
### Prerequisites:
|
|
* A Linux server with Docker and Docker-compose installed
|
|
* A few twitter accounts
|
|
* A machine with a residential IP (for logging into your twitter alts, nothing else. You can use a smartphone for this)
|
|
|
|
### Step 1. Getting accounts
|
|
For this you will need a residential IP, as the login script won't work otherwise. You can simply run it on your computer or on your phone using something like Termux.
|
|
|
|
After you get a bunch of alts, it is time to get their oauth tokens.
|
|
```bash
|
|
curl https://raw.githubusercontent.com/PrivacyDevel/nitter/master/twitter_oauth.sh -o twitter_oauth.sh
|
|
vim twitter_oauth.sh
|
|
```
|
|
**twitter_oauth.sh**
|
|
```sh
|
|
...
|
|
5 | username="yourUsernameHere"
|
|
6 | password="yourPasswordHere"
|
|
...
|
|
```
|
|
```sh
|
|
bash twitter_oauth.sh
|
|
```
|
|
You'll end up with something similar in your terminal:
|
|
```json
|
|
{"oauth_token":"SECRET", "oauth_token_secret":"SECRET"}
|
|
```
|
|
Save it for later.
|
|
|
|
### Setting up Nitter
|
|
```bash
|
|
# Clone the instance. We will be using /srv/nitter
|
|
$ git clone https://github.com/PrivacyDevel/nitter.git /srv/nitter
|
|
# Now we have to edit the guest_accounts.json file
|
|
$ vim guest_accounts.json
|
|
```
|
|
**guest_accounts.json**
|
|
```json
|
|
[{"oauth_token":"SECRET", "oauth_token_secret":"SECRET"}]
|
|
```
|
|
```bash
|
|
# We'll also have to edit the docker-compose.yml file to pass the guest_accounts.json to the container.
|
|
$ vim docker-compose.yml
|
|
```
|
|
```yaml
|
|
version: "3"
|
|
|
|
services:
|
|
|
|
nitter:
|
|
image: ghcr.io/privacydevel/nitter:master
|
|
container_name: nitter
|
|
ports:
|
|
- "8080:8080" # Replace with "8080:8080" if you don't use a reverse proxy.
|
|
volumes:
|
|
- ./nitter.conf:/src/nitter.conf:Z,ro
|
|
- ./guest_accounts.json:/src/guest_accounts.json:Z,ro
|
|
depends_on:
|
|
- nitter-redis
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: wget -nv --tries=1 --spider http://127.0.0.1:8080/Jack/status/20 || exit 1
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 2
|
|
user: "998:998"
|
|
read_only: true
|
|
security_opt:
|
|
- no-new-privileges:true
|
|
cap_drop:
|
|
- ALL
|
|
|
|
nitter-redis:
|
|
image: redis:6-alpine
|
|
container_name: nitter-redis
|
|
command: redis-server --save 60 1 --loglevel warning
|
|
volumes:
|
|
- nitter-redis:/data
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: redis-cli ping
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 2
|
|
user: "999:1000"
|
|
read_only: true
|
|
security_opt:
|
|
- no-new-privileges:true
|
|
cap_drop:
|
|
- ALL
|
|
|
|
volumes:
|
|
nitter-redis:
|
|
|
|
```
|
|
```bash
|
|
$ vim nitter.conf # Now you can edit the nitter.conf file. I won't be going into it as it is fairly straightforward.
|
|
$ docker-compose up -d
|
|
```
|
|
|
|
And voila! Now if you go to your server's IP on port 8080, you will be greeted by Nitter. Isn't that awesome?
|
|
|
|
Thanks to [Phin](https://filehaus.su) for helping me set it up. |