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