Move out of Gitlab Wiki
[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. It also 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.
5
6 ### Required packages
7
8 * `postgresql`
9 * `elixir`
10 * `erlang`
11 * `erlang-parsetools`
12 * `erlang-xmerl`
13 * `git`
14 * Development Tools
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 make sure to have the community repository enabled:
24
25 ```shell
26 echo "https://nl.alpinelinux.org/alpine/latest-stable/community" | sudo tee -a /etc/apk/repository
27 ```
28
29 * Then update the system, if not already done:
30
31 ```shell
32 sudo apk update
33 sudo apk upgrade
34 ```
35
36 * Install some tools, which are needed later:
37
38 ```shell
39 sudo apk add git build-base
40 ```
41
42 ### Install Elixir and Erlang
43
44 * Install Erlang and Elixir:
45
46 ```shell
47 sudo apk add erlang erlang-runtime-tools erlang-xmerl elixir
48 ```
49
50 * Install `erlang-eldap` if you want to enable ldap authenticator
51
52 ```shell
53 sudo apk add erlang-eldap
54 ```
55 ### Install PostgreSQL
56
57 * Install Postgresql server:
58
59 ```shell
60 sudo apk add postgresql postgresql-contrib
61 ```
62
63 * Initialize database:
64
65 ```shell
66 sudo /etc/init.d/postgresql start
67 ```
68
69 * Enable and start postgresql server:
70
71 ```shell
72 sudo rc-update add postgresql
73 ```
74
75 ### Install PleromaBE
76
77 * Add a new system user for the Pleroma service:
78
79 ```shell
80 sudo adduser -S -s /bin/false -h /opt/pleroma -H pleroma
81 ```
82
83 **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.
84
85 * Git clone the PleromaBE repository and make the Pleroma user the owner of the directory:
86
87 ```shell
88 sudo mkdir -p /opt/pleroma
89 sudo chown -R pleroma:pleroma /opt/pleroma
90 sudo -Hu pleroma git clone https://git.pleroma.social/pleroma/pleroma /opt/pleroma
91 ```
92
93 * Change to the new directory:
94
95 ```shell
96 cd /opt/pleroma
97 ```
98
99 * Install the dependencies for Pleroma and answer with `yes` if it asks you to install `Hex`:
100
101 ```shell
102 sudo -Hu pleroma mix deps.get
103 ```
104
105 * Generate the configuration: `sudo -Hu pleroma mix pleroma.instance gen`
106 * Answer with `yes` if it asks you to install `rebar3`.
107 * This may take some time, because parts of pleroma get compiled first.
108 * After that it will ask you a few questions about your instance and generates a configuration file in `config/generated_config.exs`.
109
110 * 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):
111
112 ```shell
113 mv config/{generated_config.exs,prod.secret.exs}
114 ```
115
116 * The previous command creates also the file `config/setup_db.psql`, with which you can create the database:
117
118 ```shell
119 sudo -Hu postgres psql -f config/setup_db.psql
120 ```
121
122 * Now run the database migration:
123
124 ```shell
125 sudo -Hu pleroma MIX_ENV=prod mix ecto.migrate
126 ```
127
128 * Now you can start Pleroma already
129
130 ```shell
131 sudo -Hu pleroma MIX_ENV=prod mix phx.server
132 ```
133
134 ### Finalize installation
135
136 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.
137
138 #### Nginx
139
140 * Install nginx, if not already done:
141
142 ```shell
143 sudo apk add nginx
144 ```
145
146 * Setup your SSL cert, using your method of choice or certbot. If using certbot, first install it:
147
148 ```shell
149 sudo apk add certbot
150 ```
151
152 and then set it up:
153
154 ```shell
155 sudo mkdir -p /var/lib/letsencrypt/
156 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --standalone
157 ```
158
159 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).
160
161 * Copy the example nginx configuration to the nginx folder
162
163 ```shell
164 sudo cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/conf.d/pleroma.conf
165 ```
166
167 * Before starting nginx edit the configuration and change it to your needs (e.g. change servername, change cert paths)
168 * Enable and start nginx:
169
170 ```shell
171 sudo rc-update add nginx
172 sudo service nginx start
173 ```
174
175 If you need to renew the certificate in the future, uncomment the relevant location block in the nginx config and run:
176
177 ```shell
178 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --webroot -w /var/lib/letsencrypt/
179 ```
180
181 #### OpenRC service
182
183 * Copy example service file:
184
185 ```shell
186 sudo cp /opt/pleroma/installation/init.d/pleroma /etc/init.d/pleroma
187 ```
188
189 * Make sure to start it during the boot
190
191 ```shell
192 sudo rc-update add pleroma
193 ```
194
195 #### Create your first user
196
197 If your instance is up and running, you can create your first user with administrative rights with the following task:
198
199 ```shell
200 sudo -Hu pleroma MIX_ENV=prod mix pleroma.user new <username> <your@emailaddress> --admin
201 ```
202
203 #### Further reading
204
205 * [Admin tasks](Admin tasks)
206 * [Backup your instance](Backup-your-instance)
207 * [Configuration tips](General tips for customizing pleroma fe)
208 * [Hardening your instance](Hardening-your-instance)
209 * [How to activate mediaproxy](How-to-activate-mediaproxy)
210 * [Small Pleroma-FE customizations](Small customizations)
211 * [Updating your instance](Updating-your-instance)
212
213 ## Questions
214
215 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**.