Merge branch 'align-mastodon-conversations' into 'develop'
[akkoma] / docs / installation / centos7_en.md
1 # Installing on CentOS 7
2 ## Installation
3
4 This guide is a step-by-step installation guide for CentOS 7. It also assumes that you have administrative rights, either as root or a user with [sudo permissions](https://www.digitalocean.com/community/tutorials/how-to-create-a-sudo-user-on-centos-quickstart). 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 <username> -s $SHELL -c 'command'` instead.
5
6 ### Required packages
7
8 * `postgresql` (9,6+, CentOS 7 comes with 9.2, we will install version 11 in this guide)
9 * `elixir` (1.5+)
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 update the system, if not already done:
24
25 ```shell
26 sudo yum update
27 ```
28
29 * Install some of the above mentioned programs:
30
31 ```shell
32 sudo yum install wget git unzip
33 ```
34
35 * Install development tools:
36
37 ```shell
38 sudo yum group install "Development Tools"
39 ```
40
41 ### Install Elixir and Erlang
42
43 * Add the EPEL repo:
44
45 ```shell
46 sudo yum install epel-release
47 sudo yum -y update
48 ```
49
50 * Install Erlang repository:
51
52 ```shell
53 wget -P /tmp/ https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
54 sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
55 ```
56
57 * Install Erlang:
58
59 ```shell
60 sudo yum install erlang erlang-parsetools erlang-xmerl
61 ```
62
63 * Download [latest Elixir release from Github](https://github.com/elixir-lang/elixir/releases/tag/v1.8.1) (Example for the newest version at the time when this manual was written)
64
65 ```shell
66 wget -P /tmp/ https://github.com/elixir-lang/elixir/releases/download/v1.8.1/Precompiled.zip
67 ```
68
69 * Create folder where you want to install Elixir, we’ll use:
70
71 ```shell
72 sudo mkdir -p /opt/elixir
73 ```
74
75 * Unzip downloaded file there:
76
77 ```shell
78 sudo unzip /tmp/Precompiled.zip -d /opt/elixir
79 ```
80
81 * Create symlinks for the pre-compiled binaries:
82
83 ```shell
84 for e in elixir elixirc iex mix; do sudo ln -s /opt/elixir/bin/${e} /usr/local/bin/${e}; done
85 ```
86
87 ### Install PostgreSQL
88
89 * Add the Postgresql repository:
90
91 ```shell
92 sudo yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
93 ```
94
95 * Install the Postgresql server:
96
97 ```shell
98 sudo yum install postgresql11-server postgresql11-contrib
99 ```
100
101 * Initialize database:
102
103 ```shell
104 sudo /usr/pgsql-11/bin/postgresql-11-setup initdb
105 ```
106
107 * Open configuration file `/var/lib/pgsql/11/data/pg_hba.conf` and change the following lines from:
108
109 ```plain
110 # IPv4 local connections:
111 host all all 127.0.0.1/32 ident
112 # IPv6 local connections:
113 host all all ::1/128 ident
114 ```
115
116 to
117
118 ```plain
119 # IPv4 local connections:
120 host all all 127.0.0.1/32 md5
121 # IPv6 local connections:
122 host all all ::1/128 md5
123 ```
124
125 * Enable and start postgresql server:
126
127 ```shell
128 sudo systemctl enable --now postgresql-11.service
129 ```
130
131 ### Install PleromaBE
132
133 * Add a new system user for the Pleroma service:
134
135 ```shell
136 sudo useradd -r -s /bin/false -m -d /var/lib/pleroma -U pleroma
137 ```
138
139 **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.
140
141 * Git clone the PleromaBE repository and make the Pleroma user the owner of the directory:
142
143 ```shell
144 sudo mkdir -p /opt/pleroma
145 sudo chown -R pleroma:pleroma /opt/pleroma
146 sudo -Hu pleroma git clone -b master https://git.pleroma.social/pleroma/pleroma /opt/pleroma
147 ```
148
149 * Change to the new directory:
150
151 ```shell
152 cd /opt/pleroma
153 ```
154
155 * Install the dependencies for Pleroma and answer with `yes` if it asks you to install `Hex`:
156
157 ```shell
158 sudo -Hu pleroma mix deps.get
159 ```
160
161 * Generate the configuration: `sudo -Hu pleroma mix pleroma.instance gen`
162 * Answer with `yes` if it asks you to install `rebar3`.
163 * This may take some time, because parts of pleroma get compiled first.
164 * After that it will ask you a few questions about your instance and generates a configuration file in `config/generated_config.exs`.
165
166 * 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):
167
168 ```shell
169 mv config/{generated_config.exs,prod.secret.exs}
170 ```
171
172 * The previous command creates also the file `config/setup_db.psql`, with which you can create the database:
173
174 ```shell
175 sudo -Hu postgres psql -f config/setup_db.psql
176 ```
177
178 * Now run the database migration:
179
180 ```shell
181 sudo -Hu pleroma MIX_ENV=prod mix ecto.migrate
182 ```
183
184 * Now you can start Pleroma already
185
186 ```shell
187 sudo -Hu pleroma MIX_ENV=prod mix phx.server
188 ```
189
190 ### Finalize installation
191
192 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 a systemd service file for Pleroma.
193
194 #### Nginx
195
196 * Install nginx, if not already done:
197
198 ```shell
199 sudo yum install nginx
200 ```
201
202 * Setup your SSL cert, using your method of choice or certbot. If using certbot, first install it:
203
204 ```shell
205 sudo yum install certbot-nginx
206 ```
207
208 and then set it up:
209
210 ```shell
211 sudo mkdir -p /var/lib/letsencrypt/
212 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --standalone
213 ```
214
215 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).
216
217 ---
218
219 * Copy the example nginx configuration to the nginx folder
220
221 ```shell
222 sudo cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/conf.d/pleroma.conf
223 ```
224
225 * Before starting nginx edit the configuration and change it to your needs (e.g. change servername, change cert paths)
226 * Enable and start nginx:
227
228 ```shell
229 sudo systemctl enable --now nginx
230 ```
231
232 If you need to renew the certificate in the future, uncomment the relevant location block in the nginx config and run:
233
234 ```shell
235 sudo certbot certonly --email <your@emailaddress> -d <yourdomain> --webroot -w /var/lib/letsencrypt/
236 ```
237
238 #### Other webserver/proxies
239
240 You can find example configurations for them in `/opt/pleroma/installation/`.
241
242 #### Systemd service
243
244 * Copy example service file
245
246 ```shell
247 sudo cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service
248 ```
249
250 * Edit the service file and make sure that all paths fit your installation
251 * Enable and start `pleroma.service`:
252
253 ```shell
254 sudo systemctl enable --now pleroma.service
255 ```
256
257 #### Create your first user
258
259 If your instance is up and running, you can create your first user with administrative rights with the following task:
260
261 ```shell
262 sudo -Hu pleroma MIX_ENV=prod mix pleroma.user new <username> <your@emailaddress> --admin
263 ```
264
265 #### Further reading
266
267 * [Admin tasks](Admin tasks)
268 * [Backup your instance](Backup-your-instance)
269 * [Configuration tips](General tips for customizing pleroma fe)
270 * [Hardening your instance](Hardening-your-instance)
271 * [How to activate mediaproxy](How-to-activate-mediaproxy)
272 * [Small Pleroma-FE customizations](Small customizations)
273 * [Updating your instance](Updating-your-instance)
274
275 ## Questions
276
277 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**.