Don't make MediaProxy be a compile-dep of Router
[akkoma] / docs / installation / arch_linux_en.md
1 # Installing on Arch Linux
2 ## Installation
3
4 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 pleroma`; in this case, use `su <username> -s $SHELL -c 'command'` instead.
5
6 ### Required packages
7
8 * `postgresql`
9 * `elixir`
10 * `git`
11 * `base-devel`
12 * `cmake`
13 * `file`
14
15 #### Optional packages used in this guide
16
17 * `nginx` (preferred, example configs for other reverse proxies can be found in the repo)
18 * `certbot` (or any other ACME client for Let’s Encrypt certificates)
19 * `ImageMagick`
20 * `ffmpeg`
21 * `exiftool`
22
23 ### Prepare the system
24
25 * First update the system, if not already done:
26
27 ```shell
28 sudo pacman -Syu
29 ```
30
31 * Install some of the above mentioned programs:
32
33 ```shell
34 sudo pacman -S git base-devel elixir cmake file
35 ```
36
37 ### Install PostgreSQL
38
39 [Arch Wiki article](https://wiki.archlinux.org/index.php/PostgreSQL)
40
41 * Install the `postgresql` package:
42
43 ```shell
44 sudo pacman -S postgresql
45 ```
46
47 * Initialize the database cluster:
48
49 ```shell
50 sudo -iu postgres initdb -D /var/lib/postgres/data
51 ```
52
53 * Start and enable the `postgresql.service`
54
55 ```shell
56 sudo systemctl enable --now postgresql.service
57 ```
58
59 ### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md))
60
61 ```shell
62 sudo pacman -S ffmpeg imagemagick perl-image-exiftool
63 ```
64
65 ### Install PleromaBE
66
67 * Add a new system user for the Pleroma service:
68
69 ```shell
70 sudo useradd -r -s /bin/false -m -d /var/lib/pleroma -U pleroma
71 ```
72
73 **Note**: To execute a single command as the Pleroma system user, use `sudo -Hu pleroma command`. You can also switch to a shell by using `sudo -Hu pleroma $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 pleroma -s $SHELL -c 'command'` and `su -l pleroma -s $SHELL` for starting a shell.
74
75 * Git clone the PleromaBE repository and make the Pleroma user the owner of the directory:
76
77 ```shell
78 sudo mkdir -p /opt/pleroma
79 sudo chown -R pleroma:pleroma /opt/pleroma
80 sudo -Hu pleroma git clone -b stable https://git.pleroma.social/pleroma/pleroma /opt/pleroma
81 ```
82
83 * Change to the new directory:
84
85 ```shell
86 cd /opt/pleroma
87 ```
88
89 * Install the dependencies for Pleroma and answer with `yes` if it asks you to install `Hex`:
90
91 ```shell
92 sudo -Hu pleroma mix deps.get
93 ```
94
95 * Generate the configuration: `sudo -Hu pleroma mix pleroma.instance gen`
96 * Answer with `yes` if it asks you to install `rebar3`.
97 * This may take some time, because parts of pleroma get compiled first.
98 * After that it will ask you a few questions about your instance and generates a configuration file in `config/generated_config.exs`.
99
100 * Check the configuration and if all looks right, rename it, so Pleroma will load it (`prod.secret.exs` for productive instance, `dev.secret.exs` for development instances):
101
102 ```shell
103 sudo -Hu pleroma mv config/{generated_config.exs,prod.secret.exs}
104 ```
105
106 * The previous command creates also the file `config/setup_db.psql`, with which you can create the database:
107
108 ```shell
109 sudo -Hu postgres psql -f config/setup_db.psql
110 ```
111
112 * Now run the database migration:
113
114 ```shell
115 sudo -Hu pleroma MIX_ENV=prod mix ecto.migrate
116 ```
117
118 * Now you can start Pleroma already
119
120 ```shell
121 sudo -Hu pleroma MIX_ENV=prod mix phx.server
122 ```
123
124 ### Finalize installation
125
126 If you want to open your newly installed instance to the world, you should run nginx or some other webserver/proxy in front of Pleroma and you should consider to create a systemd service file for Pleroma.
127
128 #### Nginx
129
130 * Install nginx, if not already done:
131
132 ```shell
133 sudo pacman -S nginx
134 ```
135
136 * Create directories for available and enabled sites:
137
138 ```shell
139 sudo mkdir -p /etc/nginx/sites-{available,enabled}
140 ```
141
142 * Append the following line at the end of the `http` block in `/etc/nginx/nginx.conf`:
143
144 ```Nginx
145 include sites-enabled/*;
146 ```
147
148 * Setup your SSL cert, using your method of choice or certbot. If using certbot, first install it:
149
150 ```shell
151 sudo pacman -S certbot certbot-nginx
152 ```
153
154 and then set it up:
155
156 ```shell
157 sudo mkdir -p /var/lib/letsencrypt/
158 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --standalone
159 ```
160
161 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).
162
163 ---
164
165 * Copy the example nginx configuration and activate it:
166
167 ```shell
168 sudo cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/pleroma.nginx
169 sudo ln -s /etc/nginx/sites-available/pleroma.nginx /etc/nginx/sites-enabled/pleroma.nginx
170 ```
171
172 * Before starting nginx edit the configuration and change it to your needs (e.g. change servername, change cert paths)
173 * Enable and start nginx:
174
175 ```shell
176 sudo systemctl enable --now nginx.service
177 ```
178
179 If you need to renew the certificate in the future, uncomment the relevant location block in the nginx config and run:
180
181 ```shell
182 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --webroot -w /var/lib/letsencrypt/
183 ```
184
185 #### Other webserver/proxies
186
187 You can find example configurations for them in `/opt/pleroma/installation/`.
188
189 #### Systemd service
190
191 * Copy example service file
192
193 ```shell
194 sudo cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service
195 ```
196
197 * Edit the service file and make sure that all paths fit your installation
198 * Enable and start `pleroma.service`:
199
200 ```shell
201 sudo systemctl enable --now pleroma.service
202 ```
203
204 #### Create your first user
205
206 If your instance is up and running, you can create your first user with administrative rights with the following task:
207
208 ```shell
209 sudo -Hu pleroma MIX_ENV=prod mix pleroma.user new <username> <your@emailaddress> --admin
210 ```
211
212 #### Further reading
213
214 {! backend/installation/further_reading.include !}
215
216 ## Questions
217
218 Questions about the installation or didn’t it work as it should be, ask in [#pleroma:matrix.org](https://matrix.heldscal.la/#/room/#freenode_#pleroma:matrix.org) or IRC Channel **#pleroma** on **Freenode**.