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