docs: Use one file to describe dependencies
[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 {! backend/installation/generic_dependencies.include !}
9
10 ### Prepare the system
11
12 * 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:
13
14 ```shell
15 awk 'NR==2' /etc/apk/repositories | sed 's/main/community/' | tee -a /etc/apk/repositories
16 ```
17
18 * Then update the system, if not already done:
19
20 ```shell
21 sudo apk update
22 sudo apk upgrade
23 ```
24
25 * Install some tools, which are needed later:
26
27 ```shell
28 sudo apk add git build-base cmake file-dev
29 ```
30
31 ### Install Elixir and Erlang
32
33 * Install Erlang and Elixir:
34
35 ```shell
36 sudo apk add erlang erlang-runtime-tools erlang-xmerl elixir
37 ```
38
39 * Install `erlang-eldap` if you want to enable ldap authenticator
40
41 ```shell
42 sudo apk add erlang-eldap
43 ```
44
45 ### Install PostgreSQL
46
47 * Install Postgresql server:
48
49 ```shell
50 sudo apk add postgresql postgresql-contrib
51 ```
52
53 * Initialize database:
54
55 ```shell
56 sudo /etc/init.d/postgresql start
57 ```
58
59 * Enable and start postgresql server:
60
61 ```shell
62 sudo rc-update add postgresql
63 ```
64
65 ### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md))
66
67 ```shell
68 sudo apk add ffmpeg imagemagick exiftool
69 ```
70
71 ### Install PleromaBE
72
73 * Add a new system user for the Pleroma service:
74
75 ```shell
76 sudo addgroup pleroma
77 sudo adduser -S -s /bin/false -h /opt/pleroma -H -G pleroma pleroma
78 ```
79
80 **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.
81
82 * Git clone the PleromaBE repository and make the Pleroma user the owner of the directory:
83
84 ```shell
85 sudo mkdir -p /opt/pleroma
86 sudo chown -R pleroma:pleroma /opt/pleroma
87 sudo -Hu pleroma git clone -b stable https://git.pleroma.social/pleroma/pleroma /opt/pleroma
88 ```
89
90 * Change to the new directory:
91
92 ```shell
93 cd /opt/pleroma
94 ```
95
96 * Install the dependencies for Pleroma and answer with `yes` if it asks you to install `Hex`:
97
98 ```shell
99 sudo -Hu pleroma mix deps.get
100 ```
101
102 * Generate the configuration: `sudo -Hu pleroma MIX_ENV=prod mix pleroma.instance gen`
103 * Answer with `yes` if it asks you to install `rebar3`.
104 * This may take some time, because parts of pleroma get compiled first.
105 * After that it will ask you a few questions about your instance and generates a configuration file in `config/generated_config.exs`.
106
107 * 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):
108
109 ```shell
110 sudo -Hu pleroma mv config/{generated_config.exs,prod.secret.exs}
111 ```
112
113 * The previous command creates also the file `config/setup_db.psql`, with which you can create the database:
114
115 ```shell
116 sudo -Hu postgres psql -f config/setup_db.psql
117 ```
118
119 * Now run the database migration:
120
121 ```shell
122 sudo -Hu pleroma MIX_ENV=prod mix ecto.migrate
123 ```
124
125 * Now you can start Pleroma already
126
127 ```shell
128 sudo -Hu pleroma MIX_ENV=prod mix phx.server
129 ```
130
131 ### Finalize installation
132
133 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.
134
135 #### Nginx
136
137 * Install nginx, if not already done:
138
139 ```shell
140 sudo apk add nginx
141 ```
142
143 * Setup your SSL cert, using your method of choice or certbot. If using certbot, first install it:
144
145 ```shell
146 sudo apk add certbot
147 ```
148
149 and then set it up:
150
151 ```shell
152 sudo mkdir -p /var/lib/letsencrypt/
153 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --standalone
154 ```
155
156 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).
157
158 * Copy the example nginx configuration to the nginx folder
159
160 ```shell
161 sudo cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/conf.d/pleroma.conf
162 ```
163
164 * 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).
165
166 ```
167 server {
168 server_name your.domain;
169 listen 80;
170 ...
171 }
172
173 server {
174 server_name your.domain;
175 listen 443 ssl http2;
176 ...
177 ssl_trusted_certificate /etc/letsencrypt/live/your.domain/chain.pem;
178 ssl_certificate /etc/letsencrypt/live/your.domain/fullchain.pem;
179 ssl_certificate_key /etc/letsencrypt/live/your.domain/privkey.pem;
180 ...
181 }
182 ```
183
184 * Enable and start nginx:
185
186 ```shell
187 sudo rc-update add nginx
188 sudo service nginx start
189 ```
190
191 If you need to renew the certificate in the future, uncomment the relevant location block in the nginx config and run:
192
193 ```shell
194 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --webroot -w /var/lib/letsencrypt/
195 ```
196
197 #### OpenRC service
198
199 * Copy example service file:
200
201 ```shell
202 sudo cp /opt/pleroma/installation/init.d/pleroma /etc/init.d/pleroma
203 ```
204
205 * Make sure to start it during the boot
206
207 ```shell
208 sudo rc-update add pleroma
209 ```
210
211 #### Create your first user
212
213 If your instance is up and running, you can create your first user with administrative rights with the following task:
214
215 ```shell
216 sudo -Hu pleroma MIX_ENV=prod mix pleroma.user new <username> <your@emailaddress> --admin
217 ```
218
219 #### Further reading
220
221 {! backend/installation/further_reading.include !}
222
223 ## Questions
224
225 Questions about the installation or didn’t it work as it should be, ask in [#pleroma:libera.chat](https://matrix.to/#/#pleroma:libera.chat) via Matrix or **#pleroma** on **libera.chat** via IRC.