# How to Install Pleroma Social Network Platform on Ubuntu 20.04

> URL: https://www.atlantic.net/dedicated-server-hosting/how-to-install-pleroma-social-network-platform-on-ubuntu-20-04/ | Published: 2021-07-02 | Updated: 2024-06-02 | Author: Hitesh Jethva

Pleroma is a free, open-source and self-hosted social networking platform. It consists of two components, a backend which is called Pleroma and a frontend which is called Pleroma-FE. It is compatible with Mastodon and other ActivityPub implementations.

In this post, we will show you how to install Pleroma with Nginx and Let’s Encrypt SSL on Ubuntu 20.04.

## Step 1 – Install Nginx and PostgreSQL

First, install Nginx and PostgreSQL with the following command:

```
apt-get install postgresql nginx -y
```

Once both packages are installed, install other dependencies with the following command:

```
apt-get install wget curl gnupg2 ca-certificates lsb-release gnupg zip libncurses5 libmagic-dev unzip -y
```

After installing all the dependencies, you can proceed to the next step.

## Step 2 – Download Pleroma

First, create a user for Pleroma with the following command:

```
adduser --system --shell  /bin/bash --home /opt/pleroma pleroma
```

Next, switch the user to Pleroma and download the latest version of Pleroma with the following command:

```
su - pleroma
curl "https://git.pleroma.social/api/v4/projects/2/jobs/artifacts/stable/download?job=amd64" -o pleroma_amd64.zip
```

Next, create a directory for Pleroma and extract the downloaded file to the pleroma directory:

```
mkdir pleroma
unzip pleroma_amd64.zip -d pleroma
```

Next, move all the contents from pleroma to /opt/pleroma with the following command:

```
mv pleroma/release/* /opt/pleroma/
```

Next, exit from the Pleroma user with the following command:

```
exit
```

Next, create other required directories with the following command:

```
mkdir -p /var/lib/pleroma/{uploads,static}
mkdir -p /etc/pleroma
```

Next, set proper ownership to all created directories:

```
chown -R pleroma /var/lib/pleroma /etc/pleroma
```

## Step 3 – Configure Pleroma

Next, switch the user to Pleroma and install the Pleroma using the following command:

```
su - pleroma
./bin/pleroma_ctl instance gen --output /etc/pleroma/config.exs --output-psql /tmp/setup_db.psql
```

You will be asked several questions as shown below:

```
What domain will your instance use? (e.g pleroma.soykaf.com) [] pleroma.linuxbuz.com
What is the name of your instance? (e.g. The Corndog Emporium) [pleroma.linuxbuz.com] 
What is your admin email address? [] hitjethva@gmail.com                                           
What email address do you want to use for sending email notifications? [hitjethva@gmail.com] 
Do you want search engines to index your site? (y/n) [y] y
Do you want to store the configuration in the database (allows controlling it from admin-fe)? (y/n) [n] n
What is the hostname of your database? [localhost] 
What is the name of your database? [pleroma] 
What is the user used to connect to your database? [pleroma] 
What is the password used to connect to your database? [autogenerated] password
Would you like to use RUM indices? [n] n
What port will the app listen to (leave it if you are using the default setup with nginx)? [4000] 
What ip will the app listen to (leave it if you are using the default setup with nginx)? [127.0.0.1] 
What directory should media uploads go in (when using the local uploader)? [/var/lib/pleroma/uploads] 
What directory should custom public files be read from (custom emojis, frontend bundle overrides, robots.txt, etc.)? [/var/lib/pleroma/static] 
Do you want to strip location (GPS) data from uploaded images? This requires exiftool, it was detected as not installed, please install it if you answer yes. (y/n) [n] n
Do you want to anonymize the filenames of uploads? (y/n) [n] y
Do you want to deduplicate uploaded files? (y/n) [n] y
Writing config to /etc/pleroma/config.exs.
Writing the postgres script to /tmp/setup_db.psql.
Writing /var/lib/pleroma/static/robots.txt.

 All files successfully written! Refer to the installation instructions for your platform for next steps.
```

Once Pleroma is installed, exit from the Pleroma user with the following command:

```
exit
```

## Step 4 – Migrate the Database

Next, log in to PostgreSQL and import the Pleroma database to PostgreSQL:

```
su - postgres
psql -f /tmp/setup_db.psql
```

Output:

```
CREATE ROLE
CREATE DATABASE
You are now connected to database "pleroma" as user "postgres".
CREATE EXTENSION
CREATE EXTENSION
CREATE EXTENSION
```

Next, exit from the PostgreSQL with the following command:

```
exit
```

Next, log in to Pleroma user and migrate the database with the following command:

```
su - pleroma
./bin/pleroma_ctl migrate
```

Next, exit from the Pleroma user with the following command:

```
exit
```

## Step 5 – Install And Configure Let’s Encrypt

First, install the Certbot client with the following command:

```
apt-get install python3-certbot-nginx -y
```

Next, stop the Nginx service and download the Let’s Encrypt SSL for your domain with the following command:

```
systemctl stop nginx
certbot certonly --standalone --preferred-challenges http -d pleroma.linuxbuz.com
```

Next, copy the sample Pleroma configuration file to the Nginx configuration location:

```
cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/conf.d/pleroma.conf
```

Next, replace the word “example.tld” with your domain name in pleroma.conf file:

```
sed -i 's/example\.tld/pleroma.linuxbuz.com/g'  /etc/nginx/conf.d/pleroma.conf
```

Next, verify the Nginx for any syntax errors:

```
nginx -t
```

Output:

```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

Note: If you get this error message, you need to edit the /etc/nginx/nginx.conf file and change the value server_names_hash_bucket_size to 64:

```
nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 32
nginx: configuration file /etc/nginx/nginx.conf test failed
```

Next, restart the Nginx service to apply the changes:

```
systemctl restart nginx
```

## Step 6 – Start Pleroma Service

First, copy the Pleroma service file from the Pleroma directory to the system location:

```
cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service
```

Next, start the Pleroma service and enable it to start at system reboot:

```
systemctl start pleroma
systemctl enable pleroma
```

Next, check the status of the Pleroma service with the following command:

```
systemctl status pleroma
```

You should see the following output:

```
● pleroma.service - Pleroma social network
     Loaded: loaded (/etc/systemd/system/pleroma.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-06-20 08:15:21 UTC; 4s ago
   Main PID: 12086 (beam.smp)
      Tasks: 20 (limit: 2353)
     Memory: 129.0M
     CGroup: /system.slice/pleroma.service
             ├─12086 /opt/pleroma/erts-10.7.2.1/bin/beam.smp -- -root /opt/pleroma -progname erl -- -home /opt/pleroma -- -noshell -s elixir s>
             ├─12134 /opt/pleroma/erts-10.7.2.1/bin/epmd -daemon
             └─12137 erl_child_setup 1024
```

## Step 7 – Create an Admin User

Next, you will need to create an admin user for the Pleroma web interface.

First, log in to Pleroma user with the following command:

```
su - pleroma
```

Next, create an admin user with the following command:

```
./bin/pleroma_ctl user new admin admin@pleroma.linuxbuz.com --password mypassword --admin
```

You should see the following output:

```
A user will be created with the following information:
  - nickname: admin
  - email: admin@pleroma.linuxbuz.com
  - password: mypassword
  - name: admin
  - bio: 
  - moderator: false
  - admin: true

Continue? [n] y
User admin created
```

## Step 8 – Access Pleroma Web Interface

Now, open your web browser and access the Pleroma web interface using the URL **https://pleroma.linuxbuz.com**. You should see the following screen:
 ![Pleroma Login Page](https://www.atlantic.net/wp-content/uploads/2021/06/p1-11-1024x641.png)
 Provide your admin username, password and click on the **Log in** button. You should see the Pleroma dashboard on the following screen:

![Pleroma Dashboard Page](https://www.atlantic.net/wp-content/uploads/2021/06/p2-6.png)

## Conclusion

Congratulations! You have successfully installed and configured Pleroma with Nginx and Let’s Encrypt SSL on Ubuntu 20.04. You can now host your own social networking platform with Pleroma on [dedicated hosting](https://www.atlantic.net/dedicated-server-hosting/) from Atlantic.Net.
