maanantai 11. lokakuuta 2021

AWS EC2 osa 4: Let's Encrypt

Tämä teksti jatkaa Amazon EC2-virtuaalipalvelimen asennusta. Lue sarjan edellinen osa tästä blogista!

7. Let's Encrypt

Let's Encrypt antaa palvelimelle ilmaisen ja turvallisen SSL-sertifikaatin. Asenna Let's Encrypt Amazon EC2-virtuaalipalvelimeen alla olevilla ohjeilla.

7.1 Ota käyttöön Extra Packages for Enterprise Linux (EPEL) -pakettikokoelma komennolla:

sudo amazon-linux-extras install epel

7.2 Asenna Let's Encrypt EPEL-kokoelmasta komennolla:

sudo yum install certbot certbot-apache

7.3 Lisää sivusto Apacheen komennolla:

sudo vim /etc/httpd/vhosts.d/korpelankauppa.conf

missä korpelankauppa on sivuston lyhyt nimi. Muokkaa tiedostoa siten, että siinä lukee:

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName korpelankauppa.fi
    ServerAlias www.korpelankauppa.fi
</VirtualHost>

Tarkista tiedoston muoto ja käynnistä Apache uudelleen komennoilla:

sudo apachectl configtest sudo systemctl restart httpd

7.4 Hanki SSL-sertifikaatti sivustolle komennolla:

sudo certbot --apache --no-self-upgrade certonly

Älä anna certbotin muokata entistä tai luoda uutta asetustiedostoa sivustolle! Jos certbot kaikesta huolimatta luo uuden tiedoston hakemistoon /etc/httpd/vhosts.d, niin poista se.

7.5 Lisää HTTPS-asetukset saitille komennolla:

sudo vim /etc/httpd/vhosts.d/korpelankauppa.conf

Muokkaa tiedostoa siten, että siinä lukee:

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName korpelankauppa.fi
    ServerAlias www.korpelankauppa.fi

    # Redirect to https
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =korpelankauppa.fi [OR]
    RewriteCond %{SERVER_NAME} =www.korpelankauppa.fi
    RewriteRule ^ https://korpelankauppa.fi%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<Directory "/home/ec2-user/korpelankauppa">
    Options SymLinksIfOwnerMatch IncludesNoExec
    AllowOverride all
    Require all granted
</Directory>

<VirtualHost *:443>
    DocumentRoot /home/ec2-user/korpelankauppa
    ServerName korpelankauppa.fi
    ServerAlias www.korpelankauppa.fi
    SSLEngine on

    # Redirect to non-www domain
    RewriteEngine on
    RewriteCond %{SERVER_NAME} =www.korpelankauppa.fi
    RewriteRule ^ https://korpelankauppa.fi%{REQUEST_URI} [END,NE,R=permanent]

    # Enable forward secrecy
    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder On
    SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
    SSLCertificateFile /etc/letsencrypt/live/korpelankauppa.fi/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/korpelankauppa.fi/privkey.pem
</VirtualHost>

missä korpelankauppa.fi on sivustosi verkkotunnus ja /home/ec2-user/korpelankauppa on hakemisto, jossa sivusto tulee sijaitsemaan.

7.6 Luo www-hakemisto komennolla:

cd mkdir korpelankauppa

ja lisää juureen index.html tiedosto komennolla:

cd korpelankauppa echo OK > index.html

7.7 Tarkista, että asetustiedosto on muodoltaan virheetön komennolla:

sudo apachectl configtest

7.8 Käynnistä Apache uudelleen komennolla:

sudo systemctl restart httpd

Avaa nettiselain ja mene osoitteeseen http://korpelankauppa.fi (tms). Jos kaikki meni oikein, niin selain ohjaa sinut osoitteeseen https://korpelankauppa.fi ja ruudulle tulee näkyviin teksti "OK".

7.9 Avaa root-käyttäjän crontab komennolla:

sudo crontab -e

ja lisää tiedostoon rivi:

M H * * D /usr/bin/certbot renew --no-self-upgrade -q

missä M on satunnainen minuutti 0-59, H on satunnainen tunti 0-23 ja D on satunnainen viikonpäivä 0-6 (0 sunnuntai, 1 maanantai jne). Certbot käynnistyy annettuna aikana ja päivittää sertifikaatit tarvittaessa uusiin.

7.10 Asenna nettikauppa hakemistoon /home/ec2-user/korpelankauppa (tms) ja jatka sivuston kehitystä!

Jos PHP-koodin tarvitsee kirjoittaa johonkin hakemistoon, niin anna kirjoitusoikeudet komennoilla:

chgrp -R www-data logs chmod -R g+rw logs find logs -type d -exec chmod g+sx {} \; find logs -type d -exec setfacl -dm g::rwx {} \;

missä logs on avattava hakemisto.

sunnuntai 10. lokakuuta 2021

AWS EC2 osa 3: PHP

Tämä teksti jatkaa Amazon EC2-virtuaalipalvelimen asennusta. Lue edellinen osa tästä blogista.

6 PHP:n asennus

6.1 Asenna PHP 8.0 ja FPM Amazonin pakettivalikoimasta komennolla:

sudo amazon-linux-extras install php8.0

6.2 Jos kyseessä on kehityspalvelin, niin aseta Apachen ja FPM:n lokitiedostot luettavaksi komennoilla:

sudo chgrp www-data /var/log/php-fpm /var/log/httpd sudo chmod g+rwx /var/log/php-fpm /var/log/httpd

Tämä yksinkertaistaa virheiden jäljitystä, kun lokeja voidaan tutkia ilman pääkäyttäjän oikeuksia.

6.3 Avaa editoriin /etc/php-fpm.d/www.conf tiedosto komennolla:

sudo vim /etc/php-fpm.d/www.conf

ja muokkaa user ja group rivit muotoon:

user = apache
group = www-data

Tämä antaa PHP-koodin kirjoittaa www-data -ryhmän omistukseen annettuihin hakemistoihin ja tiedostoihin.

6.4 Asenna usein tarvittavat PHP-moduulit komennolla:

sudo yum install php-mbstring php-xml php-intl php-gd php-opcache php-pear php-devel

6.5 Ota PHP 8.0:n ajonaikainen kääntäminen käyttöön tuotantopalvelimella avaamalla tiedosto /etc/php.d/10-opcache.ini editoriin komennolla:

sudo vim /etc/php.d/10-opcache.ini

ja lisää tiedoston loppuun rivit:

; Enable JIT
opcache.jit_buffer_size=64M
opcache.jit=tracing

6.6 Asenna APCu-välimuisti komennolla:

sudo pecl install apcu

Lisää moduuli PHP:n käynnistykseen komennolla:

echo extension=apcu.so | sudo tee /etc/php.d/20-apcu.ini

6.7 Luo PHP testitiedosto komennolla:

sudo vim /var/www/html/phpinfo.php

ja lisää tiedostoon rivi:

<?php phpinfo();

6.8 Käynnistä FPM komennolla:

sudo systemctl start php-fpm

6.9 Käynnistä Apache uudelleen komennolla:

sudo systemctl restart httpd

Avaa nettiselain ja mene osoitteeseen http://korpelankauppa.fi/phpinfo.php, missä korpelankauppa.fi on EC2-virtuaalipalvelimen verkkotunnus. Varmista, että sivulla näkyy tiedot PHP:n versiosta ja asennetuista moduuleista.

6.10 Aseta FPM käynnistymään automaattisesti bootissa komennolla:

sudo systemctl enable php-fpm

Poista tarpeeton PHP-testitiedosto komennolla:

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

Jatka seuraavaksi Let's Encryptin asennukseen (osa 4).

maanantai 4. lokakuuta 2021

AWS EC2 osa 2: Apache ja MariaDB

Tämä teksti jatkaa AWS EC2-virtuaalipalvelimen asennusta. Katso tekstin ensimmäinen osa tästä blogista.

4. MariaDB:n asennus

Kirjaudu sisään EC2-palvelimelle SSH:lla ja suorita seuraavat valmistelutoimet SSH:ssa.

4.1 Asenna MariaDB 1.05 komennolla:

sudo amazon-linux-extras install mariadb10.5

4.2 Käynnistä MariaDB komennolla:

sudo systemctl start mariadb

4.3 Poista testitaulut komennolla:

sudo mysql_secure_installation

4.4 Tarkista, että tietokanta avautuu komennolla:

mysql -uroot -p

Poistu mysql-komentotulkista komennolla exit.

4.5 Jos mysql-komentotulkki käynnistui oikein, niin asenna MariaDB käynnistymään automaattisesti komennolla:

sudo systemctl enable mariadb

Tietokanta on nyt käytössä, ja voit jatkaa Apachen asennukseen.

5. Apachen asennus

5.1 Asenna Apache ja SSL-tuki komennolla:

sudo yum install httpd mod_ssl

5.2 Lisää www-data ryhmä komennolla:

sudo groupadd www-data

5.3 Lisää apache ja ec2-user käyttäjät www-data ryhmään komennoilla:

sudo usermod -a -G www-data apache sudo usermod -a -G www-data ec2-user

Jos käytät ec2-userin tilalla tai rinnalla muita ylläpitokäyttäjiä, niin lisää heidät vastaavasti www-data -ryhmään.

5.4 Lisää palvelulle tyhjä etusivu seuraavilla komennoilla:

cd /var/www/html sudo touch index.html robots.txt favicon.ico

Tämän tarkoituksena on, että jos palvelimen konfiguraatiossa tapahtuu virhe, niin käyttäjälle näytetään vain tyhjä valkea sivu.

5.5 Luo vhosts.d-hakemisto, jonne tallennetaan saittien konfiguraatiotiedostot komennolla:

sudo mkdir /etc/httpd/vhosts.d

Avaa /etc/httpd/conf/httpd.conf tiedosto muokattavaksi komennolla:

sudo vim /etc/httpd/conf/httpd.conf

ja lisää tiedoston loppuun rivit:

# Load virtual hosts
IncludeOptional vhosts.d/*.conf

5.6 Avaa /etc/httpd/conf.modules.d/00-mpm.conf tiedosto editoriin ja kommentoi tai poista rivejä siten, että tiedostoon jää vain:

LoadModule mpm_event_module modules/mod_mpm_event.so

5.7 Käynnistä Apache komennolla:

sudo systemctl start httpd

Avaa nettiselain ja mene osoitteeseen http://korpelankauppa.fi, missä korpelankauppa.fi on varaamasi verkkotunnus. Jos kaikki meni OK, niin näet tyhjän valkea sivun ilman virheilmoituksia.

5.8 Aseta Apache käynnistymään bootissa komennolla:

sudo systemctl enable httpd

Jatka seuraavaksi PHP:n asennukseen (osa 3).

lauantai 2. lokakuuta 2021

AWS EC2 osa 1: käyttöjärjestelmä

Näillä ohjeilla avaat Amazonin EC2-virtuaalipalvelimen esimerkiksi omaa nettikauppaa varten.

1. AWS-tilin rekisteröinti

Avaa nettiselain ja mene osoitteeseen aws.amazon.com. Rekisteröi sieltä uusi AWS tili. Tarvitset tilin rekisteröimiseen sähköpostiosoitteen, luottokortin, verkkopankkitunnukset ja puhelinnumeron.

2. EC2-virtuaalipalvelimen varaaminen

Kirjaudu sisään AWS Consoleen osoitteessa aws.amazon.com/console ja suorita seuraavat toimenpiteet.

2.1 Etsi yläpalkin avulla EC2-palvelu ja klikkaa luo uusi EC2 instanssi.

2.2 Asennus pysähtyy jossain vaiheessa avainpariin. Luo uusi avainpari AWS:ssä ja tallenna avainpari tietokoneellesi $HOME/.ssh hakemistoon esimerkiksi nimellä aws.pem.

2.3 Varmista, että aws.pem tiedosto ei ole ryhmän luettavissa suorittamalla komento omalla koneellasi komento:

chmod 0600 ~/.ssh/aws.pem

2.4 Käynnistä instanssi.

2.5 Etsi AWS Consolesta Network & Security otsikko sivupalkista ja avaa Security Groups välilehti. Etsi käytettävä security group ja avaa palvelimeen sisäänpäin tulevat portit 22 (SSH), 80 (HTTP) ja 443 (HTTPS).

2.6 Klikkaa sivupalkista Elastic IPs ja varaa instanssille IP-osoite. Ota IP-osoite talteen.

2.7 Liitä edellä varaamasi IP-osoite network interfacelle samalla välilehdellä.

2.8 Jos sinulla ei ole vielä verkkotunnusta, niin käytä Amazon Route 53 -palvelua ja luo uusi vyöhyke (zone) verkkotunnukselle. Saat Route 53 -palvelusta nimipalvelimet, joiden avulla voit varata verkkotunnuksen esimerkiksi Ficoralta.

2.9 Kun sinulla on verkkotunnus, niin lisää verkkotunnuksen DNS-hallintaan (joko Route 53 tai muu) A-tyyppinen tietue, jonka nimenä on joko verkkotunnus + piste (esim korpelankauppa.fi.) tai aliverkkotunnus (esim www) ja arvona on edellä saamasi IP-osoite.

2.10 Lisää omalle koneellesi .ssh/config tiedostoon rivit:

Host ALIAS VERKKOTUNNUS
User ec2-user
Hostname VERKKOTUNNUS
IdentityFile ~/.ssh/aws.pem

missä ALIAS on palvelimen lyhyt nimi (esim korpelankauppa) ja VERKKOTUNNUS on palvelimen täydellinen nimi (esim korpelankauppa.fi).

2.11 Kirjaudu SSH:lla palvelimelle komennolla:

ssh ALIAS

missä ALIAS on kohdassa 2.7 palvelimelle antamasi lyhyt nimi. Jos kaikki meni OK, niin pääset kirjautumaan palvelimelle ilman salasanaa: ensimmäisellä kerralla sinun pitää vain vahvistaa, että haluat muodostaa yhteyden uudelle palvelimelle.

3. Käyttöjärjestelmän valmistelu

Kirjaudu EC2-virtuaalipalvelimelle SSH:lla kohdan 2.11 mukaan ja suorita seuraavat valmistelutoimet SSH:ssa.

3.1 Päivitä käyttöjärjestelmä komennolla:

sudo yum update

3.2 Asenna usein tarvittavat työkalut suorittamalla komennot:

sudo yum install git gcc make

3.3 Aseta palvelimen selväkielinen nimi komennolla:

echo NIMI | sudo tee /etc/hostname

missä NIMI on palvelimen pitkä nimi, esim korpelankauppa.fi

3.4 Aseta aikavyöhyke komennoilla:

cd /etc sudo ln -sf ../usr/share/zoneinfo/Europe/Helsinki localtime

3.5 Käynnistä palvelin uudelleen komennolla:

sudo reboot

Kirjaudu ulos ja odota, kunnes palvelin käynnistyy uudelleen. Jatka seuraavaksi MariaDB:n asennukseen (osa 2).