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