Remove precompiled javascript (#55)
[akkoma] / docs / installation / arch_linux_en.md
1 # Installing on Arch Linux
2
3 {! backend/installation/otp_vs_from_source_source.include !}
4
5 ## Installation
6
7 This guide will assume that you have administrative rights, either as root or a user with [sudo permissions](https://wiki.archlinux.org/index.php/Sudo). 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 akkoma`; in this case, use `su <username> -s $SHELL -c 'command'` instead.
8
9 ### Required packages
10
11 * `postgresql`
12 * `elixir`
13 * `git`
14 * `base-devel`
15 * `cmake`
16 * `file`
17
18 #### Optional packages used in this guide
19
20 * `nginx` (preferred, example configs for other reverse proxies can be found in the repo)
21 * `certbot` (or any other ACME client for Let’s Encrypt certificates)
22 * `ImageMagick`
23 * `ffmpeg`
24 * `exiftool`
25
26 ### Prepare the system
27
28 * First update the system, if not already done:
29
30 ```shell
31 sudo pacman -Syu
32 ```
33
34 * Install some of the above mentioned programs:
35
36 ```shell
37 sudo pacman -S git base-devel elixir cmake file
38 ```
39
40 ### Install PostgreSQL
41
42 [Arch Wiki article](https://wiki.archlinux.org/index.php/PostgreSQL)
43
44 * Install the `postgresql` package:
45
46 ```shell
47 sudo pacman -S postgresql
48 ```
49
50 * Initialize the database cluster:
51
52 ```shell
53 sudo -iu postgres initdb -D /var/lib/postgres/data
54 ```
55
56 * Start and enable the `postgresql.service`
57
58 ```shell
59 sudo systemctl enable --now postgresql.service
60 ```
61
62 ### Install media / graphics packages (optional, see [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md))
63
64 ```shell
65 sudo pacman -S ffmpeg imagemagick perl-image-exiftool
66 ```
67
68 ### Install AkkomaBE
69
70 * Add a new system user for the Akkoma service:
71
72 ```shell
73 sudo useradd -r -s /bin/false -m -d /var/lib/akkoma -U akkoma
74 ```
75
76 **Note**: To execute a single command as the Akkoma system user, use `sudo -Hu akkoma command`. You can also switch to a shell by using `sudo -Hu akkoma $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 akkoma -s $SHELL -c 'command'` and `su -l akkoma -s $SHELL` for starting a shell.
77
78 * Git clone the AkkomaBE repository and make the Akkoma user the owner of the directory:
79
80 ```shell
81 sudo mkdir -p /opt/akkoma
82 sudo chown -R akkoma:akkoma /opt/akkoma
83 sudo -Hu akkoma git clone https://akkoma.dev/AkkomaGang/akkoma.git /opt/akkoma
84 ```
85
86 * Change to the new directory:
87
88 ```shell
89 cd /opt/akkoma
90 ```
91
92 * Install the dependencies for Akkoma and answer with `yes` if it asks you to install `Hex`:
93
94 ```shell
95 sudo -Hu akkoma mix deps.get
96 ```
97
98 * Generate the configuration: `sudo -Hu akkoma MIX_ENV=prod mix pleroma.instance gen`
99 * Answer with `yes` if it asks you to install `rebar3`.
100 * This may take some time, because parts of akkoma get compiled first.
101 * After that it will ask you a few questions about your instance and generates a configuration file in `config/generated_config.exs`.
102
103 * 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):
104
105 ```shell
106 sudo -Hu akkoma mv config/{generated_config.exs,prod.secret.exs}
107 ```
108
109 * The previous command creates also the file `config/setup_db.psql`, with which you can create the database:
110
111 ```shell
112 sudo -Hu postgres psql -f config/setup_db.psql
113 ```
114
115 * Now run the database migration:
116
117 ```shell
118 sudo -Hu akkoma MIX_ENV=prod mix ecto.migrate
119 ```
120
121 * Now you can start Akkoma already
122
123 ```shell
124 sudo -Hu akkoma MIX_ENV=prod mix phx.server
125 ```
126
127 ### Finalize installation
128
129 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 a systemd service file for Akkoma.
130
131 #### Nginx
132
133 * Install nginx, if not already done:
134
135 ```shell
136 sudo pacman -S nginx
137 ```
138
139 * Create directories for available and enabled sites:
140
141 ```shell
142 sudo mkdir -p /etc/nginx/sites-{available,enabled}
143 ```
144
145 * Append the following line at the end of the `http` block in `/etc/nginx/nginx.conf`:
146
147 ```Nginx
148 include sites-enabled/*;
149 ```
150
151 * Setup your SSL cert, using your method of choice or certbot. If using certbot, first install it:
152
153 ```shell
154 sudo pacman -S certbot certbot-nginx
155 ```
156
157 and then set it up:
158
159 ```shell
160 sudo mkdir -p /var/lib/letsencrypt/
161 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --standalone
162 ```
163
164 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).
165
166 ---
167
168 * Copy the example nginx configuration and activate it:
169
170 ```shell
171 sudo cp /opt/akkoma/installation/nginx/akkoma.nginx /etc/nginx/sites-available/akkoma.nginx
172 sudo ln -s /etc/nginx/sites-available/akkoma.nginx /etc/nginx/sites-enabled/akkoma.nginx
173 ```
174
175 * Before starting nginx edit the configuration and change it to your needs (e.g. change servername, change cert paths)
176 * Enable and start nginx:
177
178 ```shell
179 sudo systemctl enable --now nginx.service
180 ```
181
182 If you need to renew the certificate in the future, uncomment the relevant location block in the nginx config and run:
183
184 ```shell
185 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --webroot -w /var/lib/letsencrypt/
186 ```
187
188 #### Other webserver/proxies
189
190 You can find example configurations for them in `/opt/akkoma/installation/`.
191
192 #### Systemd service
193
194 * Copy example service file
195
196 ```shell
197 sudo cp /opt/akkoma/installation/akkoma.service /etc/systemd/system/akkoma.service
198 ```
199
200 * Edit the service file and make sure that all paths fit your installation
201 * Enable and start `akkoma.service`:
202
203 ```shell
204 sudo systemctl enable --now akkoma.service
205 ```
206
207 #### Create your first user
208
209 If your instance is up and running, you can create your first user with administrative rights with the following task:
210
211 ```shell
212 sudo -Hu akkoma MIX_ENV=prod mix pleroma.user new <username> <your@emailaddress> --admin
213 ```
214
215 #### Further reading
216
217 {! backend/installation/further_reading.include !}
218
219 {! backend/support.include !}