Webserver med Linux

Indledning

I denne guide vil du lære hvordan man opretter en LAMP webserver. LAMP står for Linux, Apache, MySQL og Php. I denne guide vil vi anvende mariaDB som SQL server i stedet for MySQL.

De tjenester der skal tilføjes serveren er følgende:

Tjeneste Beskrivelse
Apache 2
PHP 7
MariaDB
phpmyadmin
Nextcloud
Wordpress
Webmin

Derudover vil konfigurere serveren sådan at hver lokal bruger også får adgang til sin egen personlige web-server

Ønsker du ikke at anvende database baserede hjemmesideframeworks som f.eks. Nextcloud, Wordpress, Joomla osv, kan du udelade afsnittet med mariaDB og PHP

Apache 2

Apache installeres med følgende kommando

sudo apt -y install apache2

Kontroller at den virker ved at åbne en browser og indtast webserverens IP-adresse. Her vælger vi 127.0.0.1, da det er maskinens lokale webserver.

Selve webserverens filer ligger i mappen /var/www/html:

Aktiver SSL (https)

Som standard anvender Apache HTTP. Her vil vi installere SSL, så vi kan anvende HTTPS, så siden kan godkendes med et certifikat. Vær opmærksom på at det ikke betyder at en side er sikker. Det eneste et certifikat betyder er, at der er nogen der har udstedt et certifikat til siden. Når browseren rammer en side der kræver certifikat, beder den om en bekræftigelse fra de udbydere som browseren stoler på. Hvis browseren ikke kan få bekræftiget det certifikat der ligger advarer den brugeren.

Kør følgende kommandoer:

sudo a2enmod ssl sudo a2ensite default-ssl.conf sudo service apache2 reload

Herefter vil du kunne anvende HTTPS. Skriv adressen https://127.0.0.1. Vær opmærksom på, at det giver en fejl når man anvender serveren, da siden ikke har noget certifikat.

Vælg Avanceret og Fortsæt til 127.0.0.1 (usikkert)

Herefter kommer siden frem i browseren, hvor https er rødt og streget over. Fremover vil browseren huske undtagelsen og lade dig ind uden andre advarsler end overstregningen.

Siden er stadig krypteret, men for at undgå denne fejl skal man anskaffe og konfigurere et certifikat. Det kan man gøre gratis fra f.eks: https://letsencrypt.org/.

PHP 7

sudo apt -y install php7.0 libapache2-mod-php7.0 php7.0-mbstring php7.0-mcrypt php7.0-xmlrpc php7.0-mysql

Efter installationen skal Apache genstartes, så ændringer kan slå igennem:

sudo service apache2 reload

For at kontrollere at PHP er installeret korrekt skal vi: opretter vi filen /var/www/html/info.php med lidt kode

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Tjek siden i browseren på adressen 127.0.0.1/info.php:

Efter det er kontrolleret bør info.php slettes igen, da filen indeholder tekniske informationer om serverens installation.

sudo rm /var/www/html/info.php

Nogle tricks

Her er nogle af de praktiske tricks jeg anvender på min webserver

Symbolsk link

Her vil vi oprette en genvej (symbolsk link) til /var/www/html. Det gør vi ved at "binde" en mappe i vores hjemme-mappe til webserverens mappe. Link-mappen får samme navn som den mappe den linker til.

Opret det symbolske link:

ln -s /var/www/html/ ~/html

Tjek om linket er oprettet og det virker:

tj@tj-VirtualBox:~$ ls -al ~ | grep html
lrwxrwxrwx  1 tj   tj     14 maj 27 01:50 html -> /var/www/html/
tj@tj-VirtualBox:~$ cd html
tj@tj-VirtualBox:~/html$ ls -l
totalt 20
drwxr-xr-x 2 root root  4096 maj 27 01:45 .
drwxr-xr-x 3 root root  4096 maj 27 01:05 ..
-rw-r--r-- 1 root root 11321 maj 27 01:05 index.html

Gør dig selv til ejer

Ved at gøre dig selv til ejer af www-serverens filer kan du redigere direkte i filerne uden at bekymre dig om rettighederne.

Ændr ejerskab og rettigheder for filerne i mappen /var/www/html til dig selv - i dette tilfælde tj

sudo chown -R tj:tj /var/www/html sudo chmod 705 -R /var/www/html
tj@tj-VirtualBox:~$ ls -al /var/www/html
totalt 20
drwx---r-x 2 tj   tj    4096 maj 27 01:45 .
drwxr-xr-x 3 root root  4096 maj 27 01:05 ..
-rwx---r-x 1 tj   tj   11321 maj 27 01:05 index.html

Læg mærke til at man bliver nød til at bruge den fulde sti til mappen for at se indholdet. Hvis man viser en liste ved at bruge det symbolske link sker der følgende:

tj@tj-VirtualBox:~$ ls -l ~/html
lrwxrwxrwx 1 tj tj 14 maj 27 01:50 /home/tj/html -> /var/www/html/

Grunden til at vi ikke ser indholdet af den mappe det symbolske link henviser til skyldes, at linket egentlig er en fil. Derfor kan man ikke liste indholdet af mappen. Man kan godt godt "ramme" en fil igennem det symbolske link f.eks:

cat ~/html/index.html | head -5
tj@tj-VirtualBox:~$ cat ~/html/index.html | head -5

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <!--
    Modified from the Debian original for Ubuntu

Personlige hjemmesider

Hvis man har flere brugere på webserveren kan man give hver af dem deres egen hjemmeside på webserveren. Den kan så tilgås fra adressen: *serveradresse*/~*brugernavn*

Alle brugere bliver oprettet ud fra en skabelon som ligger i /etc/skel.

tj@tj-VirtualBox:~$ ls -al /etc/skel
totalt 28
drwxr-xr-x   2 root root  4096 maj 27 00:58 .
drwxr-xr-x 139 root root 12288 maj 27 10:56 ..
-rw-r--r--   1 root root   220 sep  1  2015 .bash_logout
-rw-r--r--   1 root root  3771 sep  1  2015 .bashrc
-rw-r--r--   1 root root   655 jun 24  2016 .profile

I denne mappe skal vi have oprettet en privat www-mappe, som vi kalder public_html. I denne mappe læger vi mapperne: images til billeder, css til CSS filer og js til Javascript filer.

sudo mkdir -p /etc/skel/public_html/images /etc/skel/public_html/css /etc/skel/public_html/js

Herefter opretter vi filerne index.html, som indeholder en enkelt linie: Overskriften "Din Hjemmeside"

echo "<h1>Din hjemmeside</h1>" | sudo tee /etc/skel/public_html/index.html

Det sidste vi skal have gjort er at ændre filrettighederne for brugernes www-mapper.

sudo chmod -R 705 /etc/skel/public_html

Vi kan tjekke filstrukturen med kommandoen tree, som vi først skal have installeret:

sudo apt install tree tree /etc/skel -pua --dirsfirst
tj@tj-VirtualBox:~$ tree /etc/skel -pua --dirsfirst
/etc/skel
├── [drwx---r-x root    ]  public_html
│   ├── [drwx---r-x root    ]  css
│   ├── [drwx---r-x root    ]  images
│   ├── [drwx---r-x root    ]  js
│   └── [-rwx---r-x root    ]  index.html
├── [-rw-r--r-- root    ]  .bash_logout
├── [-rw-r--r-- root    ]  .bashrc
└── [-rw-r--r-- root    ]  .profile

4 directories, 4 files

På webservere er det normen at man giver filerne 705 rettigheder. På den måde har ejeren af mappen læse, skrive og udføre på alle filer, men alle kan læse og udføre når de åbner filen i en browser.

Apache2 har slået PHP fra i brugerens directories. For at slå det til skal vi udkommentere følgende i /etc/apache2/mods-enabled/php7.0.conf. Ændr det fra:

sudo nano /etc/apache2/mods-enabled/php7.0.conf
# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off 
    </Directory> 
</IfModule> 

til ...

# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
#<IfModule mod_userdir.c> <--- Start linien med #
#    <Directory /home/*/public_html> <--- Start linien med #
#        php_admin_flag engine Off <--- Start linien med #
#    </Directory> <--- Start linien med #
#</IfModule> <--- Start linien med #

Som det sidste skal vi have aktiveret brugernes webfolders i apache2 og genstartet tjenesten

sudo a2enmod userdir sudo service apache2 reload

Test ved at oprette brugeren testweb og naviger til 127.0.0.1/~testweb i en browser og tilgå brugerens mappe over FTP. Vær opmærksom på at det kun er brugere, der er oprettet efter ændringen der får oprettet disse mapper.

sudo adduser testweb

Åbn browseren og sæt adressen til 127.0.0.1\~testweb for at test den personlige hjemmeside.

Vær opmærksom på at det kun er brugere, der er oprettet efter ændringen der får oprettet disse mapper. Ønsker du at give de oprindelige brugere deres egen web-mappe skal de kopieres ind og der skal ændres ejerskab.Her gøres det for min bruger tj.

cp -R /etc/skel/public_html /home/tj chown -R tj:tj /home/tj/public_html/

Tjek at det virker:

mariaDB og PHPMyAdmin

Opsætningen af mariaDB og PHPMyAdmin skal gøres over 3 trin:

  1. Installation og opsætning af mariaDB pg PHPMyAdmin
  2. Installation af PHPMyAdmin
  3. Sætte rettigheder for kørsel af mariaDB

Grunden til at opsætningen skal køres over 3 stadier skyldes, at vi ønsker at give adgang til databasen fra andre end systemets rootbruger. For at undgå problemer med rettighederne skal mariaDB og PHPMyAdmin sættes op før vi roder med rettighederne for tilgangen til databasen.

mariaDB

sudo apt install -y mariadb-server mariadb-client

Kør konfigurationen af mariaDB

sudo mysql_secure_installation

I dette script bliver mariaDB sat op, så den er klar til brug. Da det er en ny installation har databasen endnu ikke noget password, så det skal vi oprette. Ellers er de svar du skal anvende angivet med en taste.

tj@tj-VirtualBox:~$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): Enter 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y y
New password: <--- Indtast password for databasens root bruger
Re-enter new password: <--- Gentag password for databasens root bruger
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y y
 - Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
 ... Failed!  Not critical, keep moving...
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
tj@tj-VirtualBox:~$

Der er to brugere der nu har adgang til databasen. Det er systemets root og databasens rod. Som det er lige nu er det kun systemets rod der har lov til at logge på databasen. Det skal ændres, sådan at andre brugere også kan logge på databasen. Start mysql som systemets rod

PHPMyAdmin

For at administrere MySQL databaser anvender man ofte PHPMyAdmin

sudo apt install php-gettext phpmyadmin -y

Under installationen skal der gøres følgende:

  1. Vælge webserver der skal køre PHPMyAdmin
  2. Opsætning af nødvendig database til PHPMyAdmin
  3. Lave root password til PHPMyAdmin

Vælg Apache2 med piletasterne og gå ned til O.k. ved at trykke på Tab. Gennemfør dine valg ved hjælp af Enter.

Sæt databasen op ved at vælge Ja

Indtast password 2 gange til PHPMyAdmins root-konto. I denne testopstilling vælger jeg vælger jeg 123qwe.

Genstart Apache 2

sudo service apache2 reload

Konfiguration af mariaDB

Som det er lige nu kan databasen kun tilgås ved hjælp af root-shell. Det ændrer vi, så alle brugere med mariaDB's root password kan få adgang til databasen.

sudo mysql
tj@tj-VirtualBox:~$ sudo mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 65
Server version: 10.0.25-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Herefter køres følgende kommandoer i mysql. Husk at afslutte kommandoerne med ;:

USE mysql; UPDATE user SET plugin='' WHERE user='root'; FLUSH PRIVILEGES; exit
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]> update user set plugin='' where User='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> exit
Bye
tj@tj-VirtualBox:~$                <--- Tilbage på kommandolinien

Prøv herefter at logge på mysql's root, med din egen bruger (altså uden sudo):

mysql -u root -p
tj@tj-VirtualBox:~$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 53
Server version: 10.0.25-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> exit
Bye
tj@tj-VirtualBox:~$

Vi logger også på PHPMyAdmin fra en browser med adressen: 127.0.0.1/phpmyadmin.

Efter vi er logget ind med PHPMyAdmin's root får vi adgang til brugerfladen.

Nextcloud

Denne guide er lavet med udgangspunkt i installationsguiden fra nextclouds egen hjemmeside: https://docs.nextcloud.org/server/9/admin_manual/installation/source_installation.html

Nextcloud anbefaler at man installerer nogle ekstra PHP-moduler

sudo apt -y install php7.0-curl php7.0-bz2 php7.0-zip php7.0-intl php-imagick

Herefter er vi klar til at hente Nextcloud fra serveren fra adressen https://download.nextcloud.com/server/releases. Den nyeste version hedder latest.tar.bz2. Vi henter filen med nedestående kommando som også gemmer mappen i vores hjemmemappe.

wget -P ~ https://download.nextcloud.com/server/releases/latest.tar.bz2
tj@tj-VirtualBox:~$ wget -P ~ https://download.nextcloud.com/server/releases/latest.tar.bz2
--2017-05-27 15:28:01--  https://download.nextcloud.com/server/releases/latest.tar.bz2
Løser download.nextcloud.com (download.nextcloud.com)... 88.198.160.133
Tilslutter download.nextcloud.com (download.nextcloud.com)|88.198.160.133|:443... forbundet.
HTTP forespørgsel sendt, afventer svar... 200 OK
Længde: 41743343 (40M) [application/x-bzip2]
Gemmer til: '/home/tj/latest.tar.bz2'

latest.tar.bz2      100%[===================>]  39,81M  14,2MB/s    in 2,8s    

2017-05-27 15:28:04 (14,2 MB/s) - '/home/tj/latest.tar.bz2' gemt [41743343/41743343]

Vi udpakker filerne, som kommer til at ligge i mappen ~/nextcloud. Det er standard på Unix systemer, at man pakker sine filer i mapper.

tar -xjf latest.tar.bz2

Kopier ~/nextcloud til /var/www

sudo cp -r ~/nextcloud /var/www/

Tjek at mappen er flyttet:

ls -al /var/www/nextcloud
tj@tj-VirtualBox:~$ ls -al /var/www
totalt 16
drwxr-xr-x  4 root root 4096 maj 27 15:35 .
drwxr-xr-x 15 root root 4096 maj 27 01:05 ..
drwx---r-x  2 tj   tj   4096 maj 27 01:45 html
drwxr-xr-x 14 root root 4096 maj 27 15:35 nextcloud

Opret mappe til data i /srv/nextcloudData. Data bør ligge i mappen /srv, for at følge standarden. Og så ved man også hvor ens data er!

sudo mkdir /srv/nextcloudData Midlertidige rettigheder

Sæt midlertidige bruger- og filrettigheder på nextcloud

sudo chown -R www-data:www-data /var/www/nextcloud sudo chmod -R 700 /var/www/nextcloud

... og datamappen

sudo chown -R www-data:www-data /srv/nextcloudData/ sudo chmod -R 700 /srv/nextcloudData

Konfigurer Apache

For at kunne udbyde nextcloud skal der oprettes en konfigurationsfil i Apache. Opret følgende fil /etc/apache2/sites-available/nextcloud.conf med nedestående indhold:

sudo nano /etc/apache2/sites-available/nextcloud.conf
Alias /nextcloud "/var/www/nextcloud/"

<Directory /var/www/nextcloud/>
  Options +FollowSymlinks
  AllowOverride All

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /var/www/nextcloud
 SetEnv HTTP_HOME /var/www/nextcloud

</Directory>

Lav herefter et symbolsk link til filen, så Apache kan tilgå den.

sudo ln -s /etc/apache2/sites-available/nextcloud.conf /etc/apache2/sites-enabled/nextcloud.conf

Som det sidste skal vi sikre os at nogle moduler er startet op i Apache

sudo a2enmod rewrite headers

Genstart Apache2, så ændringer kan blive aktiveret.

sudo service apache2 reload

Kontroller at nextcloud kører ved at gå til adressen https://127.0.0.1/nextcloud:

Det vi har her er konfigurationsskærmen til Nextcloud. Som vi udfylder senere:

Opret database

Før vi går i gang med at konfigurere Nextcloud skal vi have oprettet en database og en administrator til databasen. Det gør vi ved hjælp af kommandolinien:

  1. Log på databaseserveren
  2. mysql -u root -p
  3. Opret databasen nextcloudDB
  4. CREATE DATABASE nextcloudDB;
  5. Opret brugeren nextcloud og med password: 123qwe, da den er oprettet til test.
  6. CREATE USER nextcloud@localhost IDENTIFIED BY '123qwe';
  7. Giv brugeren nextcloud fulde rettigheder til databasen
  8. GRANT ALL PRIVILEGES ON nextcloudDB.* TO nextcloud@localhost;
  9. Genindlæs rettighedenrne for hele databasen
  10. FLUSH PRIVILEGES;
  11. Luk forbindelsen databaseserveren
  12. exit

Det kommer til at se ud som følger. Input er markeret med rødt:

tj@tj-VirtualBox:~$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.0.25-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE nextcloudDB;
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> CREATE USER nextcloud@localhost IDENTIFIED BY '123qwe';
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloudDB.* TO nextcloud@localhost;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> exit
Bye

Konfigurer Nextcloud

Åbn Nextcloud i browseren på adressen: https://127.0.0.1/nextcloud. Første gang Nextcloud startes på skal admin kontoen konfigureres. Herunder er konfigurationssiden "klippet" over:

Administrator konto

Dette er kontoen som skal anvendes til at administrere Nextcloud med. Det kan f.eks. være at oprette brugere, sætte deres rettigheder og installere apps.

Felt Beskrivelse
Username Indsæt navnet på den bruger der skal administrere Nextcloud. F.eks: nextadmin
Password Giv administrationsbrugeren et password. F.eks: 123qwe

Placering af data

Her placeres de data som brugerne lægger op. På den måde er data ikke tilgængelige for selve webserveren, men kræver adgang til databasen.

Felt Beskrivelse
Data folder Mappen som filerne fra Nextcloud skal lægges i. Her har vi valgt /srv/nextcloudData
Felt Beskrivelse
Database user Her skal vi angive den bruger der ejer databasen. I dette tilfælde: nextcloud
Database password Angiv password til databasen: I dette tilfælde: 123qwe
Database name Angiv databasens navn: I dette tilfælde: nextcloudDB
Localhost Angiv databasens placering. I vores tilfælde skal det ikke ændres da databasen ligger på samme fysiske maskine som webserveren.

Afslut installationen

Klik på Afslut opsætning, for at afslutte konfigurationen af Nextcloud. Efter lidt til start Nextcloud op.

Optimering af Nextcloud

Konfigurer opcache

Indsæt følgende linier (markeret med rødt) i bunden af nano /etc/php/7.0/apache2/php.ini

sudo nano /etc/php/7.0/apache2/php.ini
; Local Variables:
; tab-width: 4
; End:

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

Genstart Apache

sudo service apache2 reload

Konfigurer datacache

For at optimere data i nextcloud skal programmet PACu installeres:

sudo apt install php-apcu

For at aktivere cachen skal linien 'memcache.local' => '\OC\Memcache\APCu', indsættes i /var/www/nextcloud/config/config.php

sudo nano /var/www/nextcloud/config/config.php
<?php
$CONFIG = array (
  'instanceid' => 'ocjqh4o6v92k',
  'passwordsalt' => 'QXlXhIo9QUmnXMW4yUUhIG5OgvkbQB',
  'secret' => 'W7QTN0u+VfL3HeWsd092T09RIXmS39HMfZUyv/pAfGjioVR/',
  'trusted_domains' => 
  array (
    0 => '127.0.0.1',
  ),
  'datadirectory' => '/srv/nextcloudData',
  'overwrite.cli.url' => 'https://127.0.0.1/nextcloud',
  'dbtype' => 'mysql',
  'version' => '12.0.0.29',
  'dbname' => 'nextcloudDB',
  'dbhost' => 'localhost',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'nextcloud',
  'dbpassword' => '123qwe',
  'installed' => true,
  'memcache.local' => '\OC\Memcache\APCu', ←Indsæt her
);
?>

Indsæt herefter linien: apc.enable_cli = 1 nedest i /etc/php/7.0/apache2/php.ini

sudo nano /etc/php/7.0/apache2/php.ini
....

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

apc.enable_cli = 1

Genstart Apache

sudo service apache2 reload

Konfigurering af max filstørrelse

Som standard er Nextcloud sat til at filer ikke må være større end 513 MB. Det kan være upraktisk hvis man f.eks. ønsker at bruge nextclouod til backup eller ISO-filer. For at ændre dette skal vi have ændret i den skjulte fil .htaccess, der ligger i Nextclouds webmappe /var/www/nextcloud.

sudo nano /var/www/nextcloud/.htaccess

Find tekststrengen <IfModule mod_php7.c> og de to linier med upload_max_filesize og post_max_size.

<IfModule mod_php7.c>
  php_value upload_max_filesize 513M
  php_value post_max_size 513M
  php_value memory_limit 512M
  php_value mbstring.func_overload 0
  php_value default_charset 'UTF-8'
  php_value output_buffering 0
  <IfModule mod_env.c>
    SetEnv htaccessWorking true
  </IfModule>
</IfModule>

Ændr værdierne fra 513M til 4G (513 Mb til 4Gb), sådan at der står:

<IfModule mod_php7.c>
  php_value upload_max_filesize 4G
  php_value post_max_size 4G
  php_value memory_limit 512M
  php_value mbstring.func_overload 0
  php_value default_charset 'UTF-8'
  php_value output_buffering 0
  <IfModule mod_env.c>
    SetEnv htaccessWorking true
  </IfModule>
</IfModule>

Genstart Apache 2 for at ændringerne slår igennem.

sudo service apache2 reload

Sæt sikkerheden

Som det er nu er sikkerheden på nextcloudfilerne sat rimeligt. Men for at de bliver så sikre som muligt skal der gøres en del arbejde. Hertil anvendes der et script, som er vist herunder:

Sørg for at du står i din home-mappe, opret filen og kopier indholdet af nedestående script in i filen nextcloud_rettigheder.sh

cd ~ nano nextcloud_rettigheder.sh
#!/bin/bash

### Scriptet er taget fra nedestående og tilrettet denn guide
### https://docs.nextcloud.org/server/9/admin_manual/installation/installation_wizard.html#setting-strong-directory-permissions
### Relevante linier er udkommenteret og der er indsat kommentarer ved 
### linier der er tilføjet

datapath='/srv/nextcloudData' ### Tilføjet path til data
ncpath='/var/www/nextcloud'
htuser='www-data'
htgroup='www-data'
rootuser='root' 

printf "Creating possible missing Directories\n"
#mkdir -p $ncpath/data
mkdir -p $ncpath/assets
mkdir -p $ncpath/updater

printf "chmod Files and Directories\n"
find ${ncpath}/ -type f -print0 | xargs -0 chmod 0640
find ${ncpath}/ -type d -print0 | xargs -0 chmod 0750

### linier tilføjet for at sætte rettigheder på datapath
find ${datapath}/ -type f -print0 | xargs -0 chmod 0640
find ${datapath}/ -type d -print0 | xargs -0 chmod 0750

printf "chown Directories\n"
chown -R ${rootuser}:${htgroup} ${ncpath}/
chown -R ${htuser}:${htgroup} ${ncpath}/apps/
chown -R ${htuser}:${htgroup} ${ncpath}/assets/
chown -R ${htuser}:${htgroup} ${ncpath}/config/
chown -R ${htuser}:${htgroup} ${ncpath}/data/
chown -R ${htuser}:${htgroup} ${ncpath}/themes/
chown -R ${htuser}:${htgroup} ${ncpath}/updater/

### Linie tilføjet for at sætte rettigheder på datapath
chown -R ${htuser}:${htgroup} ${datapath}/


chmod +x ${ncpath}/occ

printf "chmod/chown .htaccess\n"
if [ -f ${ncpath}/.htaccess ]
 then
  chmod 0644 ${ncpath}/.htaccess
  chown ${rootuser}:${htgroup} ${ncpath}/.htaccess
fi
if [ -f ${datapath}/.htaccess ]
 then
  chmod 0644 ${datapath}/.htaccess
  chown ${rootuser}:${htgroup} ${datapath}/.htaccess
fi

Sæt rettigheder så filen kan køres:

chmod 700 nextcloud_rettigheder.sh

Scriptet er lavet så det skal køres i en root-shell. Det gør vi ved at køre kommandoen sudo su.

tj@tj-VirtualBox:~$ sudo su
Adgangskode: 
root@tj-VirtualBox:/home/tj#

Læg mærke til at linien skifter fra tj@tj-VirtualBox:~$ til root@mainsrv:/home/tj#. Kør scriptet i root-shell med kommandoen:

./nextcloud_rettigheder.sh
root@tj-VirtualBox:/home/tj# ./nextcloud_rettigheder.sh 
Creating possible missing Directories
chmod Files and Directories
chown Directories
chmod/chown .htaccess
root@tj-VirtualBox:/home/tj# 

Efter scriptet er kørt er alle filer og mapper konfigureret på den bedst mulige måde. Afslut root-shell med kommandoen exit.

root@tj-VirtualBox:/home/tj# exit
exit
tj@tj-VirtualBox:~$ 

Hvis du ikke har logget af nextcloud, skal du gøre det nu, for at alle ændringer slår igennem. Log ind ved hjælp af din nextadmin bruger og dennes password og tjek at alt virker.

Wordpress

Wordpress er en meget populær CMS (Content Management System, som gør det nemt at oprette en hjemmeside. Her vil vi installere Wordpress, så den overtager ens hjemmeside.

Hent den nyeste version af wordpress

wget -P ~ https://wordpress.org/latest.tar.gz

Udpak filen

tar -xzf ~/latest.tar.gz

Kopier Wordpress over i webserverens mappe

sudo cp -r ~/wordpress/* /var/www/html

Opret en mappe til uploads:

sudo mkdir /var/www/html/wp-content/uploads

Fjern index.html, som blev oprettet under installationen af Apache.

sudo rm /var/www/html/index.html Midlertidige rettigheder

Sæt midlertidige ejerskab og skriverettigheder for wordpress

sudo chown -R www-data:www-data /var/www/html sudo chmod -R 755 /var/www/html

Opret database

  1. Log på databaseserveren
  2. mysql -u root -p
  3. Opret databasen wordpressDB
  4. CREATE DATABASE wordpressDB;
  5. Opret brugeren wordpress og med password: 123qwe.
  6. CREATE USER wordpress@localhost IDENTIFIED BY '123qwe';
  7. Giv brugeren wordpress fulde rettigheder til databasen
  8. GRANT ALL PRIVILEGES ON wordpressDB.* TO wordpress@localhost;
  9. Genindlæs rettighederne for hele databasen
  10. FLUSH PRIVILEGES;
  11. Luk forbindelsen databaseserveren
  12. exit
tj@tj-VirtualBox:~$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.0.25-MariaDB-0ubuntu0.16.04.1 Ubuntu 16.04

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE wordpressDB;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE USER wordpress@localhost IDENTIFIED BY '123qwe';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpressDB.* TO wordpress@localhost;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit
Bye
tj@tj-VirtualBox:~$ 

Sæt upload indstillinger

Som standard er Wordpress sat til at uploade filer der maksimalt er 2 MB store. Dette er uhensigtsmæssigt, hvis man vil lægge video og lignene på på sin side. Derfor vil vi ændre det til 64 MB. Ændr følgende 4 linier i filen /etc/php/7.0/apache2/php.ini. Åbn php.ini med kommandoen:

sudo nano /etc/php/7.0/apache2/php.ini

Find nedestående linier og ændr størrelsen til 64MB og 300. Brug Ctrl+w til at finde linierne.

upload_max_filesize 64M

post_max_size 64M

max_execution_time 300

max_input_time 300

Genstart Apache

sudo service apache2 reload

Konfigurer Wordpress

Da vi har sat wordpress til at være roden på vores webserver, skal vi blot indtaste IP-adressen i browseren: https://127.0.0.1/. Første gang Wordpress startes bliver man ført igennem konfigurationen. Herunder er vist og forklaret:

Vælg sprog

Vælg dansk og tryk Fortsæt

Velkomstside med forklaring af processen

Siden er blot til information vælg Lad os komme i gang

Angiv database information
Felt Beskrivelse
Databasenavn Angiv navnet på din database. Her: wordpressDB. Husk forskellen mellem store og små bogstaver.
Brugernavn Angiv den bruger som administrerer databasen. Her: wordpress.
Adgangskode Angiv databasebrugerens adgangskode. Her: 123qwe
Database Host Angiv databasens adresse. På netværk anvender computere og tjenester IP-adresser til at identificere sig. Her: localhost. Localhost svarer til at det er den samme maskine som webserveren befinder sig på.
Tabelpræfiks Er der flere Wordpress brugere i i samme database kan man adskille dem ved at indsætte et præfiks i alle tabelnavnene. På den måde kan man sortere i hvilke data der tilhører hvilke brugere. Behold wp_.

Efter informationerne er indtastet. Vælg Send og Start installation på den næste side.

Nødvendige informationer
Felt Beskrivelse
Sidetitel Hvad skal titlen være på siden?
Brugernavn Dette brugernavn er til sidens administrator. Her har jeg valgt Thomas
Adgangskode Her skal du angive en adgangskode til administratoren. Som du kan se bliver koden 123qwe angivet som svag. En god adgangskode bør have mindst 8 tegn (gerne mere), som er en blanding mellem store og små bogstaver, tal og tegn.

Af samme grund skal det bekræftiges at man anvender en svag adgangskode.
Din e-mail Wordpress-administratorens email. Anvendes til notifikationer og vigtige beskeder.
Søgemaskinesynlighed Ved at sætte flueben her vil nogle søgemaskiner ikke indeksere din hjemmeside. Det er ikke nogen garanti for at det også forholder sig sådan.

Efter at informationerne er indtastet vælges Installer Wordpress, og der kommer en side der bekræftiger at Wordpress er installeret med succes. Vælg Login.

Første login

Login med dit valgte brugernavn og kode. Vælg kun Husk mig, hvis du sidder på din lokale computer.

Efter login får du adgang til kontrolpanelet.

Første kig på din side

I øverste venstre hjørne klikker du på "Min side", hvorefter du får adgang til din hjemmeside som den ser ud for dem som besøger den.

Sæt sikkerheden

Problemet med sikkerhed er, at en ting er hvad der er sikkert, og en anden ting er hvad der er let. Hvis man ønsker at det skal være let at opdatere og vedligeholde Wordpress, så bliver man nød til at åbne for rettigheder. Herunder er angivet anvisninger til en fornuftig opsætning. Og her vil vi anvende scriptet herunder:

Sørg for at du står i din home-mappew og kopier indholdet af nedestående script ind i filen wordpress_rettigheder.sh

cd ~ nano wordpress_rettigheder.sh
#!/bin/bash

### Scriptet er inspireret af
### https://docs.nextcloud.org/server/9/admin_manual/installation/installation_wizard.html#setting-strong-directory-permissions
### Rettelser er lavet efter de guidelines som anbefales af wordpress:
### https://codex.wordpress.org/Hardening_WordPress

wpPath='/var/www/html'
htuser='www-data'
htgroup='www-data'
rootuser='root'

printf "chmod Files and Directories\n"
find ${wpPath}/ -type f -print0 | xargs -0 chmod 0640
find ${wpPath}/ -type d -print0 | xargs -0 chmod 0750

printf "chown Directories\n"
chown -R ${rootuser}:${htgroup} ${wpPath}/
chown -R ${htuser}:${htgroup} ${wpPath}/wp-admin/
chown -R ${htuser}:${htgroup} ${wpPath}/wp-content/
chown -R ${htuser}:${htgroup} ${wpPath}/wp-includes/

printf "chmod/chown .htaccess\n"
chmod 0644 ${wpPath}/.htaccess
chown ${rootuser}:${htgroup} ${wpPath}/.htaccess

Sæt rettigheder så filen kan køres:

chmod 700 wordpress_rettigheder.sh

Scriptet er lavet så det skal køres i en root-shell. Det gør vi ved at køre kommandoen sudo su.

tj@tj-VirtualBox:~$ sudo su
Adgangskode: 
root@tj-VirtualBox:/home/tj#

Læg mærke til at linien skifter fra tj@tj-VirtualBox:~$ til root@mainsrv:/home/tj#. Kør scriptet i root-shell med kommandoen:

./nextcloud_rettigheder.sh
root@mainsrv:/home/tj# ./wordpress_rettigheder.sh 
chmod Files and Directories
chown Directories
chmod/chown .htaccess
root@mainsrv:/home/tj# 

Efter scriptet er kørt er alle filer og mapper konfigureret på den bedst mulige måde. Afslut root-shell med kommandoen exit.

root@tj-VirtualBox:/home/tj# exit
exit
tj@tj-VirtualBox:~$