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