2019-03-28 10:46:30 -06:00
# Installing on Arch Linux
2021-08-10 00:09:31 -06:00
{! backend/installation/otp_vs_from_source_source.include !}
2019-03-28 10:46:30 -06:00
## Installation
2022-07-02 15:00:01 -06:00
This guide will assume that you have administrative rights, either as root or a user with [sudo permissions ](https://wiki.archlinux.org/index.php/Sudo ). If you want to run this guide with root, ignore the `sudo` at the beginning of the lines, unless it calls a user like `sudo -Hu akkoma` ; in this case, use `su <username> -s $SHELL -c 'command'` instead.
2019-03-28 10:46:30 -06:00
### Required packages
* `postgresql`
* `elixir`
* `git`
* `base-devel`
2020-08-10 07:24:45 -06:00
* `cmake`
2020-05-14 13:36:31 -06:00
* `file`
2019-03-28 10:46:30 -06:00
#### Optional packages used in this guide
* `nginx` (preferred, example configs for other reverse proxies can be found in the repo)
* `certbot` (or any other ACME client for Let’ s Encrypt certificates)
2020-09-26 10:32:16 -06:00
* `ImageMagick`
* `ffmpeg`
* `exiftool`
2019-03-28 10:46:30 -06:00
### Prepare the system
* First update the system, if not already done:
```shell
sudo pacman -Syu
```
* Install some of the above mentioned programs:
```shell
2020-09-10 15:02:11 -06:00
sudo pacman -S git base-devel elixir cmake file
2019-03-28 10:46:30 -06:00
```
### Install PostgreSQL
[Arch Wiki article ](https://wiki.archlinux.org/index.php/PostgreSQL )
* Install the `postgresql` package:
```shell
sudo pacman -S postgresql
```
* Initialize the database cluster:
```shell
sudo -iu postgres initdb -D /var/lib/postgres/data
```
* Start and enable the `postgresql.service`
```shell
sudo systemctl enable --now postgresql.service
```
2021-01-10 01:25:36 -07:00
### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md))
2020-09-26 10:32:16 -06:00
```shell
sudo pacman -S ffmpeg imagemagick perl-image-exiftool
```
2022-07-02 15:00:01 -06:00
### Install AkkomaBE
2019-03-28 10:46:30 -06:00
2022-07-02 15:00:01 -06:00
* Add a new system user for the Akkoma service:
2019-03-28 10:46:30 -06:00
```shell
2022-07-02 15:00:01 -06:00
sudo useradd -r -s /bin/false -m -d /var/lib/akkoma -U akkoma
2019-03-28 10:46:30 -06:00
```
2022-07-02 15:00:01 -06:00
**Note**: To execute a single command as the Akkoma system user, use `sudo -Hu akkoma command` . You can also switch to a shell by using `sudo -Hu akkoma $SHELL` . If you don’ t have and want `sudo` on your system, you can use `su` as root user (UID 0) for a single command by using `su -l akkoma -s $SHELL -c 'command'` and `su -l akkoma -s $SHELL` for starting a shell.
2019-03-28 10:46:30 -06:00
2022-07-02 15:00:01 -06:00
* Git clone the AkkomaBE repository and make the Akkoma user the owner of the directory:
2019-03-28 10:46:30 -06:00
```shell
2022-07-02 15:00:01 -06:00
sudo mkdir -p /opt/akkoma
sudo chown -R akkoma:akkoma /opt/akkoma
sudo -Hu akkoma git clone https://akkoma.dev/AkkomaGang/akkoma.git /opt/akkoma
2019-03-28 10:46:30 -06:00
```
* Change to the new directory:
```shell
2022-07-02 15:00:01 -06:00
cd /opt/akkoma
2019-03-28 10:46:30 -06:00
```
2022-07-02 15:00:01 -06:00
* Install the dependencies for Akkoma and answer with `yes` if it asks you to install `Hex` :
2019-03-28 10:46:30 -06:00
```shell
2022-07-02 15:00:01 -06:00
sudo -Hu akkoma mix deps.get
2019-03-28 10:46:30 -06:00
```
2022-07-02 15:00:01 -06:00
* Generate the configuration: `sudo -Hu akkoma MIX_ENV=prod mix pleroma.instance gen`
2019-03-28 10:46:30 -06:00
* Answer with `yes` if it asks you to install `rebar3` .
2022-07-02 15:00:01 -06:00
* This may take some time, because parts of akkoma get compiled first.
2019-03-28 10:46:30 -06:00
* After that it will ask you a few questions about your instance and generates a configuration file in `config/generated_config.exs` .
2022-07-02 15:00:01 -06:00
* Check the configuration and if all looks right, rename it, so Akkoma will load it (`prod.secret.exs` for productive instance, `dev.secret.exs` for development instances):
2019-03-28 10:46:30 -06:00
```shell
2022-07-02 15:00:01 -06:00
sudo -Hu akkoma mv config/{generated_config.exs,prod.secret.exs}
2019-03-28 10:46:30 -06:00
```
* The previous command creates also the file `config/setup_db.psql` , with which you can create the database:
```shell
sudo -Hu postgres psql -f config/setup_db.psql
```
* Now run the database migration:
```shell
2022-07-02 15:00:01 -06:00
sudo -Hu akkoma MIX_ENV=prod mix ecto.migrate
2019-03-28 10:46:30 -06:00
```
2022-07-02 15:00:01 -06:00
* Now you can start Akkoma already
2019-03-28 10:46:30 -06:00
```shell
2022-07-02 15:00:01 -06:00
sudo -Hu akkoma MIX_ENV=prod mix phx.server
2019-03-28 10:46:30 -06:00
```
### Finalize installation
2022-07-02 15:00:01 -06:00
If you want to open your newly installed instance to the world, you should run nginx or some other webserver/proxy in front of Akkoma and you should consider to create a systemd service file for Akkoma.
2019-03-28 10:46:30 -06:00
#### Nginx
* Install nginx, if not already done:
```shell
sudo pacman -S nginx
```
* Create directories for available and enabled sites:
```shell
sudo mkdir -p /etc/nginx/sites-{available,enabled}
```
* Append the following line at the end of the `http` block in `/etc/nginx/nginx.conf` :
```Nginx
include sites-enabled/*;
```
* Setup your SSL cert, using your method of choice or certbot. If using certbot, first install it:
```shell
sudo pacman -S certbot certbot-nginx
```
and then set it up:
```shell
sudo mkdir -p /var/lib/letsencrypt/
sudo certbot certonly --email < your @ emailaddress > -d < yourdomain > --standalone
```
If that doesn’ t work, make sure, that nginx is not already running. If it still doesn’ t work, try setting up nginx first (change ssl “on” to “off” and try again).
---
* Copy the example nginx configuration and activate it:
```shell
2022-07-02 15:00:01 -06:00
sudo cp /opt/akkoma/installation/akkoma.nginx /etc/nginx/sites-available/akkoma.nginx
sudo ln -s /etc/nginx/sites-available/akkoma.nginx /etc/nginx/sites-enabled/akkoma.nginx
2019-03-28 10:46:30 -06:00
```
* Before starting nginx edit the configuration and change it to your needs (e.g. change servername, change cert paths)
* Enable and start nginx:
```shell
sudo systemctl enable --now nginx.service
```
If you need to renew the certificate in the future, uncomment the relevant location block in the nginx config and run:
```shell
sudo certbot certonly --email < your @ emailaddress > -d < yourdomain > --webroot -w /var/lib/letsencrypt/
```
#### Other webserver/proxies
2022-07-02 15:00:01 -06:00
You can find example configurations for them in `/opt/akkoma/installation/` .
2019-03-28 10:46:30 -06:00
#### Systemd service
* Copy example service file
```shell
2022-07-02 15:00:01 -06:00
sudo cp /opt/akkoma/installation/akkoma.service /etc/systemd/system/akkoma.service
2019-03-28 10:46:30 -06:00
```
* Edit the service file and make sure that all paths fit your installation
2022-07-02 15:00:01 -06:00
* Enable and start `akkoma.service` :
2019-03-28 10:46:30 -06:00
```shell
2022-07-02 15:00:01 -06:00
sudo systemctl enable --now akkoma.service
2019-03-28 10:46:30 -06:00
```
#### Create your first user
If your instance is up and running, you can create your first user with administrative rights with the following task:
```shell
2022-07-02 15:00:01 -06:00
sudo -Hu akkoma MIX_ENV=prod mix pleroma.user new < username > < your @ emailaddress > --admin
2019-03-28 10:46:30 -06:00
```
#### Further reading
2020-06-22 03:41:22 -06:00
{! backend/installation/further_reading.include !}
2019-03-28 10:46:30 -06:00
## Questions
2022-07-02 15:00:01 -06:00
If you encounter any issues or have questions regarding the install process, feel free to ask at [meta.akkoma.dev ](https://meta.akkoma.dev/ ).