Uruchamianie WordPress na OpenBSD 6.6 z OpenBSDs HTTPD

Wprowadzenie

Biorąc pod uwagę upodobanie OpenBSD do bezpieczeństwa, sensowne jest jedynie zasilenie go swoją witryną WordPress, szczególnie dlatego, że WordPress i PHP są zwykle ruchomymi celami dla dzieciaków skryptów. Ponieważ httpd OpenBSD jest zaprojektowany głównie do obsługi stron statycznych, operacje POST są zarezerwowane dla procesów fastcgi i slowcgi. Utrudnia to nieuczciwemu aktorowi potencjalne przerwanie procesu serwera WWW i uzyskanie dostępu do serwera. Operacje POST są przesyłane potokowo do procesu fastcgi i używają zewnętrznego interpretera. W tym artykule omówimy nie tylko konfigurację witryny WordPress, ale także podstawowe techniki konserwacji oraz sposoby tworzenia kopii zapasowych i przywracania witryny i jej bazy danych. Gdziekolwiek widzisz example.comjako domenę, zamień ją na swoją domenę.

Konfiguracja początkowa

Jeśli jeszcze tego nie zrobiłeś, musisz utworzyć /etc/doas.confplik. Polecenie doas jest łatwym zamiennikiem sudo dla OpenBSD. Dla wygody dodałem opcję nopass, abyś nie musiał ponownie wpisywać hasła podczas korzystania z Doas. Jeśli nie chcesz tego mieć, po prostu pomiń nopass.

su -
echo "permit nopass keepenv :wheel" > /etc/doas.conf

W zależności od tego, w jaki sposób OpenBSD został spakowany do wdrożenia, czasami menedżer pakietów może nie mieć skonfigurowanego repozytorium. Aby skonfigurować oficjalne repozytorium OpenBSD, musimy utworzyć /etc/installurlplik.

doas su
echo "https://cdn.openbsd.org/pub/OpenBSD" > /etc/installurl
exit

Teraz musimy dodać PHP i dodatkowe moduły, które będą potrzebne WordPressowi do obsługi takich rzeczy jak obrazy i szyfrowanie. Po wyświetleniu monitu wybierz instalację najnowszego pakietu PHP. Jedną rzeczą, którą musisz zrobić, to skopiować pliki modułu ini z przykładowego katalogu do głównego. Należy to zrobić, aby włączyć dodatkowe moduły PHP.

doas pkg_add -r mariadb-client mariadb-server php php-curl php-mysqli php-zip pecl73-mcrypt pecl73-imagick wget
doas cp /etc/php-7.3.sample/* /etc/php-7.3/.

Uzyskaj certyfikaty Let's Encrypt

W dzisiejszym świecie witryny muszą być obsługiwane za pośrednictwem protokołu SSL lub muszą zostać zmniejszone przez wyszukiwarki. Na szczęście OpenBSD ma świetną aplikację o nazwie acme-client. Klient acme automatycznie wygeneruje nowy klucz prywatny i zażąda nowego, w pełni ważnego certyfikatu. Klient-klient zależy od posiadania serwera WWW, dlatego musimy utworzyć szybką domyślną definicję serwera.

Utwórz w swoim ulubionym edytorze /etc/httpd.conf. Inne definicje serwerów dodamy do pliku później. Na razie to wystarczy, aby acme-client działał poprawnie.

prefork 5
types { include "/usr/share/misc/mime.types" }

server "default" {
    listen on egress port 80
    root "/htdocs"
    directory index "index.html"

    location "/.well-known/acme-challenge/*" {
        request strip 2
        root "/acme"
    }
}

Utwórz również przy użyciu swojego ulubionego edytora /etc/acme-client.conf.

authority letsencrypt {
    api url "https://acme-v02.api.letsencrypt.org/directory"
    account key "/etc/acme/letsencrypt-privkey.pem"
}

authority letsencrypt-staging {
    api url "https://acme-staging-v02.api.letsencrypt.org/directory"
    account key "/etc/acme/letsencrypt-staging-privkey.pem"
}

domain example.com {
    alternative names { www.example.com }
    domain key "/etc/ssl/private/example.com.key"
    domain full chain certificate "/etc/ssl/example.com.crt"
    sign with letsencrypt
}

Teraz musimy włączyć i uruchomić httpd. Gdy to zrobimy, możemy uruchomić acme-client i poczekać, aż uzyska nowy, nowy certyfikat. Gdy to zrobimy, dodamy zadanie crona, aby automatycznie żądać nowego co 7 dni, więc nie musimy się martwić o wygaśnięcie.

doas rcctl enable httpd
doas rcctl start httpd
doas acme-client -v example.com

Teraz tworzymy zadanie crona. Dodaj ten wiersz poniżej ostatniego wpisu. W takim przypadku informujemy klienta acme o żądaniu nowego certyfikatu o godzinie 1:00 w każdą sobotę.

doas crontab -e
0       1       *       *       6       acme-client -F example.com && rcctl reload httpd

Konfigurowanie HTTPD dla WordPress

Teraz nadszedł czas, aby skonfigurować httpd dla WordPress. Zamiast umieszczać definicję naszej witryny bezpośrednio w /etc/httpd.conf, umieścimy ją w osobnym pliku o nazwie /etc/httpd.conf.example.comi umieścimy w głównym pliku konfiguracyjnym. Zasadniczo dobrą praktyką jest rozdzielanie tych dwóch, utrzymywanie definicji dla całej witryny w głównym pliku konfiguracyjnym i ustawień specyficznych dla domeny w innym.

Dodaj następujący wiersz na dole /etc/httpd.confpliku:

include "/etc/httpd.conf.example.com"

Teraz używając swojego ulubionego edytora, stwórz swój /etc/httpd.conf.example.com. Dla wygody będziemy tworzyć osobne pliki dziennika dla Twojej domeny. Ułatwia to ściganie potencjalnych problemów z witryną.

server "example.com" {
    listen on egress port 80
    alias "www.example.com"

    # Automatically redirect to SSL
    block return 302 "https://$SERVER_NAME$REQUEST_URI"

    log {
            access "access-example.com"
            error "error-example.com"
    }
}

server "example.com" {
    listen on egress tls port 443
    alias "www.example.com"
    root "/htdocs/wordpress"
    directory index "index.php"

    log {
            access "access-example.com"
            error "error-example.com"
    }
    tcp { nodelay, backlog 10 }

    tls {
            certificate "/etc/ssl/example.com.crt"
            key "/etc/ssl/private/example.com.key"
    }
    hsts {
            # max-age value is the number of seconds in 1 year
            max-age 31556952
            preload
            subdomains
    }

    location "/.well-known/acme-challenge/*" {
            root "/acme"
            request strip 2
    }
    location "/posts/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/page/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/feed/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "/htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/comments/feed/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
     location "/wp-json/*" {
            fastcgi {
                    param SCRIPT_FILENAME \
                            "htdocs/wordpress/index.php"
                    socket "/run/php-fpm.sock"
            }
    }
    location "/wp-login.php*" {
            authenticate "WordPress" with "/htdocs/htpasswd"
            fastcgi socket "/run/php-fpm.sock"
    }
    location "*.php*" {
            fastcgi socket "/run/php-fpm.sock"
    }
}

Aby zwiększyć bezpieczeństwo, wprowadzimy dodatkowy monit o podanie nazwy użytkownika i hasła podczas logowania do strony administracyjnej WordPress. Ponieważ dzieciaki skryptowe lubią wielokrotnie próbować brutalnie wymusić logowanie do WordPressa, tworzymy dodatkowe logowanie na poziomie serwera WWW. Zazwyczaj uzyskują około 5 domysłów, zanim WordPress zgłosi błąd 401 Nieautoryzowany.

doas su
cd /var/www/htdocs
doas htpasswd htpasswd <user>
doas chown www:www htpasswd
doas chmod 0640 htpasswd
doas rcctl reload httpd

Przygotuj i skonfiguruj PHP i PHP-FPM

Musimy wprowadzić zmiany w php, aby Twoja instalacja WordPress mogła wysyłać e-maile. WordPress i niektóre wtyczki polegają na możliwości wysyłania wiadomości e-mail z powiadomieniami o aktualizacjach, alertach i zmianach. Brak możliwości wysyłania wiadomości e-mail może spowodować uszkodzenie niektórych funkcji WordPress. Ponieważ httpd działa w środowisku chrootowanym, musimy powiedzieć php, jak wysyłać e-maile. Ponadto musimy zrobić kilka tweeksów wydajnościowych do php-fpm.

Poszukaj sendmail_pathlinii /etc/php-7.3.inii wprowadź następującą zmianę:

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; sendmail_path =
sendmail_path = /bin/femail -t -i

Poszukaj następujących wierszy /etc/php-fpm.confi zmień je w następujący sposób:

pm.start_servers = 5
pm.min_spare_servers = 1
pm.max_spare_servers = 6

Następnym krokiem jest włączenie i uruchomienie php-fpm.

doas rcctl enable php73_fpm
doas rcctl start php73_fpm

Przygotuj i skonfiguruj MariaDB

MariaDB to drop-in zamienny widelec MySQL. Musimy wykonać wstępne prace konfiguracyjne i przygotowanie bazy danych dla WordPress.

Zanim będziemy mogli efektywnie korzystać z MariaDB, musimy pozwolić demonowi mysql zużywać więcej zasobów niż domyślny. Aby to zrobić, wprowadź następujące zmiany /etc/login.conf, dodając ten wpis na dole.

mysqld:\
    :openfiles-cur=1024:\
    :openfiles-max=2048:\
    :tc=daemon:

Musimy dokonać pewnych zmian w pliku konfiguracyjnym MariaDB, /etc/my.cnf. Dzięki komunikacji klienta i serwera mysql za pośrednictwem gniazda domeny UNIX zamiast TCP można zmniejszyć zużycie pamięci serwera. Nie musisz wprowadzać wszystkich zmian sugerowanych poniżej. Dwoma ważnymi do zmiany są socketlinia i komentowanie bind-addresslinii. To powoduje przeniesienie gniazda do /var/wwwśrodowiska chroot, dzięki czemu WordPress może połączyć się z bazą danych. Komentując bind-addresslinię, uniemożliwiamy MariaDB nasłuchiwanie na porcie TCP.

[client-server]
socket=/var/www/var/run/mysql/mysql.sock
#port=3306

# This will be passed to all MariaDB clients
[client]
#password=my_password

# The MariaDB server
[mysqld]
# To listen to all IPv4 network addresses, use "bind-address = 0.0.0.0"
#bind-address=127.0.0.1
# Directory where you want to put your data
#data=/var/mysql
# This is the prefix name to be used for all log, error and replication files
#log-basename=mysqld
# Logging
#log-bin=/var/mysql/mariadb-bin
#max_binlog_size=100M
#binlog_format=row
#expire_logs_days = 7
#general-log
#slow_query_log
query_cache_type = 1
query_cache_limit = 1M
query_cache_size = 16M

Teraz musimy uruchomić plik binarny instalacji MariaDB oraz włączyć i uruchomić MariaDB. Ta procedura ustawi hasło roota i opcjonalnie upuści testową bazę danych. Dobrym pomysłem jest przestrzeganie wszystkich sugestii na etapie bezpiecznej instalacji.

doas mysql_install_db
doas rcctl enable mysqld
doas rcctl start mysqld
doas mysql_secure_installation

Utwórz bazę danych WordPress i użytkownika bazy danych. Pamiętaj, aby zastąpić <wp_user>wybraną nazwą użytkownika bazy danych i <password>złożonym hasłem do wyboru.

mysql -u root -p 
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO '<wp_user>'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
EXIT

Zainstaluj i skonfiguruj WordPress

WordPress nie miał oficjalnego portu OpenBSD od dłuższego czasu, ponieważ działa prawie od razu po wyjęciu z pudełka. Pobierz, rozpakuj i przenieś folder instalacyjny WordPress.

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xvfz latest.tar.gz
doas mv wordpress /var/www/htdocs/.
doas chown -R www:www /var/www/htdocs/wordpress
doas chmod 0755 /var/www/htdocs/wordpress
cd /var/www/htdocs/wordpress/
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Musimy skopiować /etc/resolv.confi /etc/hostsdo katalogu, który zamierzamy utworzyć, o nazwie /var/www/etc. Dzieje się tak, aby WordPress mógł z powodzeniem dotrzeć na rynek. Będziesz go potrzebował do pobierania wtyczek i motywów za pośrednictwem strony administracyjnej WordPress. Ważne jest również, aby wtyczka Jet Pack działała poprawnie.

doas mkdir /var/www/etc
doas cp /etc/hosts /var/www/etc/.
doas cp /etc/resolv.conf /var/www/etc/.

Stąd przejdź do swojej witryny WordPress za pomocą https za pomocą adresu URL określonego w definicji serwera WWW. Jeśli wszystko działa poprawnie, powinieneś zobaczyć kreatora instalacji WordPress. Gdy przejdziesz do opcji określenia serwera bazy danych, powinieneś użyćlocalhost:/var/run/mysql/mysql.sock

Po zainstalowaniu WordPress nadszedł czas, aby skonfigurować permalinki, aby wyglądały bardziej przyjaźnie dla SEO. Na ekranie administratora WordPress przejdź do Settings -> Permalinks. Kliknij opcję Struktura niestandardowa i wpisz /posts/%postname%. Po wprowadzeniu tej zmiany kliknij przycisk Zapisz zmiany. Masz teraz znacznie ładniej wyglądające linki. Na przykład bezpośredni link będzie wyglądał następująco:https://example.com/posts/example-blog-post

Odtąd powinieneś mieć podstawową stronę internetową gotową do pracy. Upewnij się, że instalujesz wtyczki takie jak Jet Pack i WP-Super Cache. Wtyczka WP-Super Cache pomaga przyspieszyć twoją stronę, buforując strony i eliminując ciągłe przeszukiwanie bazy danych, a JetPack zapewnia doskonałe statystyki oglądalności.

Tworzenie kopii zapasowej witryny i bazy danych WordPress

Nie trzeba dodawać, że tworzenie kopii zapasowej witryny i bazy danych jest bardzo ważne. Na szczęście jest to stosunkowo łatwa rzecz. Wykonaj kopię zapasową zarówno do katalogu domowego, a następnie możesz skopiować je za pomocą scp do innej lokalizacji. Możesz również utworzyć migawkę za pomocą Panelu sterowania Vultr. Jest to dobry pomysł, aby zrobić obie te rzeczy.

cd /var/www/htdocs
tar cvfz wordpress.tgz wordpress/
cp wordpress.tgz /home/user
mysqldump -u root -p wordpress > wordpress.sql && gzip wordpress.sql

Przywracanie witryny WordPress

Jeśli baza danych uległa uszkodzeniu i konieczne jest przywrócenie, wykonaj następujące czynności:

gunzip wordpress.sql.gz
mysql -u root -p wordpress
DROP USER '<user>'@'localhost';
DROP DATABASE wordpress;
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO '<wp_user>'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
EXIT
mysql -u root -p wordpress < wordpress.sql

Jeśli dokonałeś zmiany w pliku skryptu WordPress, który coś zepsuł, zawsze możesz ponownie zainstalować WordPress za pomocą administracyjnego panelu sterowania. Poszukaj Updatessekcji i kliknij link. Poszukaj przycisku oznaczonego Re-install Now. To przynajmniej naprawi to, co jest zepsute, ale większość konfiguracji powinna pozostać nienaruszona.

Jeśli baza danych jest w dobrej formie, ale przypadkowo edytowałeś plik i zepsułeś rzeczy do tego stopnia, że ​​nie możesz nawet dostać się do konsoli administracyjnej WordPress, wykonaj następujące czynności:

rm /var/www/htdocs/wordpress
cp /home/user/wordpress.tgz /tmp
tar xvfz wordpress.tgz
mv wordpress /var/www/htdocs/.
chown -R www:www /var/www/htdocs/wordpress
cd /var/www/htdocs/wordpress
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;


Leave a Comment

Funkcjonalności warstw architektury referencyjnej Big Data

Funkcjonalności warstw architektury referencyjnej Big Data

Przeczytaj blog, aby w najprostszy sposób poznać różne warstwy w architekturze Big Data i ich funkcjonalności.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Chcesz zobaczyć rewolucyjne wynalazki Google i jak te wynalazki zmieniły życie każdego człowieka dzisiaj? Następnie czytaj na blogu, aby zobaczyć wynalazki Google.

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Whatsapp w końcu uruchomił aplikację Desktop dla użytkowników komputerów Mac i Windows. Teraz możesz łatwo uzyskać dostęp do Whatsapp z systemu Windows lub Mac. Dostępne dla Windows 8+ i Mac OS 10.9+

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

Energia jądrowa jest zawsze pogardzana, nigdy jej nie szanujemy z powodu przeszłych wydarzeń, ale nie zawsze jest zła. Przeczytaj post, aby dowiedzieć się więcej na ten temat.

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Koncepcja autonomicznych samochodów, które wyjadą na drogi za pomocą sztucznej inteligencji, to marzenie, które mamy już od jakiegoś czasu. Ale pomimo kilku obietnic nigdzie ich nie widać. Przeczytaj ten blog, aby dowiedzieć się więcej…

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Wzrasta liczba ataków ransomware, ale czy sztuczna inteligencja może pomóc w radzeniu sobie z najnowszym wirusem komputerowym? Czy AI jest odpowiedzią? Przeczytaj tutaj, wiedz, że sztuczna inteligencja jest zmorą lub zgubą

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

Sztuczna inteligencja nie jest dla ludzi nową nazwą. Ponieważ sztuczna inteligencja jest włączona do każdego strumienia, jednym z nich jest opracowywanie narzędzi zwiększających ludzką wydajność i dokładność. Skorzystaj z tych niesamowitych narzędzi uczenia maszynowego i uprość swoje codzienne zadania.

Wgląd w 26 technik analizy Big Data: część 2

Wgląd w 26 technik analizy Big Data: część 2

Zawsze potrzebujemy Big Data Analytics do efektywnego zarządzania danymi. W tym artykule omówiliśmy kilka technik analizy Big Data. Sprawdź ten artykuł.

Ataki DDOS: krótki przegląd

Ataki DDOS: krótki przegląd

Czy jesteś również ofiarą ataków DDOS i nie masz pewności co do metod zapobiegania? Przeczytaj ten artykuł, aby rozwiązać swoje pytania.