Adjusted MediaProxyControllerTest to gracefully fail on missing dependencies. Install...
[akkoma] / docs / installation / alpine_linux_en.md
1 # Installing on Alpine Linux
2 ## Installation
3
4 This guide is a step-by-step installation guide for Alpine Linux. The instructions were verified against Alpine v3.10 standard image. You might miss additional dependencies if you use `netboot` instead.
5
6 It assumes that you have administrative rights, either as root or a user with [sudo permissions](https://www.linode.com/docs/tools-reference/custom-kernels-distros/install-alpine-linux-on-your-linode/#configuration). 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 -l <username> -s $SHELL -c 'command'` instead.
7
8 ### Required packages
9
10 * `postgresql`
11 * `elixir`
12 * `erlang`
13 * `erlang-parsetools`
14 * `erlang-xmerl`
15 * `git`
16 * Development Tools
17 * `cmake`
18
19 #### Optional packages used in this guide
20
21 * `nginx` (preferred, example configs for other reverse proxies can be found in the repo)
22 * `certbot` (or any other ACME client for Let’s Encrypt certificates)
23 * `ImageMagick`
24 * `ffmpeg`
25 * `exiftool`
26
27 ### Prepare the system
28
29 * The community repository must be enabled in `/etc/apk/repositories`. Depending on which version and mirror you use this looks like `http://alpine.42.fr/v3.10/community`. If you autogenerated the mirror during installation:
30
31 ```shell
32 awk 'NR==2' /etc/apk/repositories | sed 's/main/community/' | tee -a /etc/apk/repositories
33 ```
34
35 * Then update the system, if not already done:
36
37 ```shell
38 sudo apk update
39 sudo apk upgrade
40 ```
41
42 * Install some tools, which are needed later:
43
44 ```shell
45 sudo apk add git build-base cmake
46 ```
47
48 ### Install Elixir and Erlang
49
50 * Install Erlang and Elixir:
51
52 ```shell
53 sudo apk add erlang erlang-runtime-tools erlang-xmerl elixir
54 ```
55
56 * Install `erlang-eldap` if you want to enable ldap authenticator
57
58 ```shell
59 sudo apk add erlang-eldap
60 ```
61
62 ### Install PostgreSQL
63
64 * Install Postgresql server:
65
66 ```shell
67 sudo apk add postgresql postgresql-contrib
68 ```
69
70 * Initialize database:
71
72 ```shell
73 sudo /etc/init.d/postgresql start
74 ```
75
76 * Enable and start postgresql server:
77
78 ```shell
79 sudo rc-update add postgresql
80 ```
81
82 ### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](docs/installation/optional/media_graphics_packages.md))
83
84 ```shell
85 sudo apk add ffmpeg imagemagick exiftool
86 ```
87
88 ### Install PleromaBE
89
90 * Add a new system user for the Pleroma service:
91
92 ```shell
93 sudo addgroup pleroma
94 sudo adduser -S -s /bin/false -h /opt/pleroma -H -G pleroma pleroma
95 ```
96
97 **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.
98
99 * Git clone the PleromaBE repository and make the Pleroma user the owner of the directory:
100
101 ```shell
102 sudo mkdir -p /opt/pleroma
103 sudo chown -R pleroma:pleroma /opt/pleroma
104 sudo -Hu pleroma git clone -b stable https://git.pleroma.social/pleroma/pleroma /opt/pleroma
105 ```
106
107 * Change to the new directory:
108
109 ```shell
110 cd /opt/pleroma
111 ```
112
113 * Install the dependencies for Pleroma and answer with `yes` if it asks you to install `Hex`:
114
115 ```shell
116 sudo -Hu pleroma mix deps.get
117 ```
118
119 * Generate the configuration: `sudo -Hu pleroma mix pleroma.instance gen`
120 * Answer with `yes` if it asks you to install `rebar3`.
121 * This may take some time, because parts of pleroma get compiled first.
122 * After that it will ask you a few questions about your instance and generates a configuration file in `config/generated_config.exs`.
123
124 * 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):
125
126 ```shell
127 mv config/{generated_config.exs,prod.secret.exs}
128 ```
129
130 * The previous command creates also the file `config/setup_db.psql`, with which you can create the database:
131
132 ```shell
133 sudo -Hu postgres psql -f config/setup_db.psql
134 ```
135
136 * Now run the database migration:
137
138 ```shell
139 sudo -Hu pleroma MIX_ENV=prod mix ecto.migrate
140 ```
141
142 * Now you can start Pleroma already
143
144 ```shell
145 sudo -Hu pleroma MIX_ENV=prod mix phx.server
146 ```
147
148 ### Finalize installation
149
150 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 an OpenRC service file for Pleroma.
151
152 #### Nginx
153
154 * Install nginx, if not already done:
155
156 ```shell
157 sudo apk add nginx
158 ```
159
160 * Setup your SSL cert, using your method of choice or certbot. If using certbot, first install it:
161
162 ```shell
163 sudo apk add certbot
164 ```
165
166 and then set it up:
167
168 ```shell
169 sudo mkdir -p /var/lib/letsencrypt/
170 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --standalone
171 ```
172
173 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).
174
175 * Copy the example nginx configuration to the nginx folder
176
177 ```shell
178 sudo cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/conf.d/pleroma.conf
179 ```
180
181 * Before starting nginx edit the configuration and change it to your needs. You must change change `server_name` and the paths to the certificates. You can use `nano` (install with `apk add nano` if missing).
182
183 ```
184 server {
185 server_name your.domain;
186 listen 80;
187 ...
188 }
189
190 server {
191 server_name your.domain;
192 listen 443 ssl http2;
193 ...
194 ssl_trusted_certificate /etc/letsencrypt/live/your.domain/chain.pem;
195 ssl_certificate /etc/letsencrypt/live/your.domain/fullchain.pem;
196 ssl_certificate_key /etc/letsencrypt/live/your.domain/privkey.pem;
197 ...
198 }
199 ```
200
201 * Enable and start nginx:
202
203 ```shell
204 sudo rc-update add nginx
205 sudo service nginx start
206 ```
207
208 If you need to renew the certificate in the future, uncomment the relevant location block in the nginx config and run:
209
210 ```shell
211 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --webroot -w /var/lib/letsencrypt/
212 ```
213
214 #### OpenRC service
215
216 * Copy example service file:
217
218 ```shell
219 sudo cp /opt/pleroma/installation/init.d/pleroma /etc/init.d/pleroma
220 ```
221
222 * Make sure to start it during the boot
223
224 ```shell
225 sudo rc-update add pleroma
226 ```
227
228 #### Create your first user
229
230 If your instance is up and running, you can create your first user with administrative rights with the following task:
231
232 ```shell
233 sudo -Hu pleroma MIX_ENV=prod mix pleroma.user new <username> <your@emailaddress> --admin
234 ```
235
236 #### Further reading
237
238 {! backend/installation/further_reading.include !}
239
240 ## Questions
241
242 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**.