Ubuntu 22.04でLAMP環境をつくる

ConoHa VPSでUbuntu 22.04のテンプレートを使って、LAMP(Linux + Apache + MySQL + PHP)環境をセットアップするまでの手順をメモします。

rootログイン・ユーザー作成・公開鍵認証

ConoHaで新規登録するときにコントロールパネルで入力した、rootパスワードでログイン。

ssh root@{IPアドレス}

ユーザーを作成する(ここでは例として shikakun にしてますが、任意の名前へ変更してください)

adduser shikakun

パスワードとFull Nameを入力後、作成したユーザーをsudoコマンドを利用する「sudoユーザー」に追加する。

usermod -G sudo shikakun

無事にユーザーを作成できたので、rootユーザーから切り替える。

su - shikakun

あわせて、公開鍵認証でSSHログインできるようにする。ローカル環境の公開鍵をコピーし、 ~/.ssh/authorized_keys に書いておく。

mkdir .ssh
cd .ssh
echo -e "ssh-rsa  AAAAXXXXXXXXXX ..........(略).......... XXX" >> authorized_keys
cd ~
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

SSHログインのポート番号の変更

SSHログインのポート番号はデフォルトで22だけど、狙われやすいのでセキュリティを高める目的でポート番号を変更する。(ここでは例として 22000 にしてますが、任意の数字へ変更してください)

sudo vim /etc/ssh/sshd_config

以下のように書き換えてポート番号を変更する。

- #Port 22
+ Port 22000

あわせて、rootログインも無効にしておく。

- PermitRootLogin yes
+ PermitRootLogin no

ファイルを保存したら、sshdをリロードして設定を有効にする。

systemctl reload sshd

ufwでポート番号22000でアクセスできるように設定する。

sudo ufw status
sudo ufw allow 22000/tcp

ポート番号22はもう使わないので、 ufw status numberedOpenSSH が設定されている番号を確認しつつ ufw delete コマンドで許可を削除する。

sudo ufw status numbered
sudo ufw delete 1
sudo ufw status numbered
sudo ufw delete 2

ローカル環境の ~/.ssh/config に以下のように追記することで、 ssh conoha のようにIPアドレスやポートを省略してアクセスできるようになる。

Host conoha
  Hostname {IPアドレス}
  User shikakun
  Port 22000
  IdentityFile ~/.ssh/id_rsa

LAMP環境をつくる

apache2をインストールして、ポートのアクセスを許可する。

sudo apt update
sudo apt install apache2
sudo ufw app list
sudo ufw allow in "Apache"
sudo ufw status

http://{IPアドレス}/ へアクセスすると、It worksページが見える!

つづけてMySQLをインストール。

sudo apt install mysql-server
sudo mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '********';

Ctrl + D で抜けたら sudo mysql_secure_installation を実行して設定を完了させる。そしてPHPをインストール。

sudo apt install php libapache2-mod-php php-mysql

php -v でバージョンを確認できればインストール完了。

独自ドメインでアクセス・常時SSL化

IPアドレスではなく独自ドメイン dev.shikakun.com でアクセスできるようにしたい。あと常時SSL化もしたい!

今回はCloudflareのDNSで管理しているドメイン(shikakun.com)を適用するため、Cloudflareの管理画面で dev.shikakun.com をAレコードで追加する。IPv4 addressにはサーバーのIPアドレスを指定。

公開するドキュメントのルートディレクトリや、apache2の設定ファイルを用意する。

sudo mkdir /var/www/dev.shikakun.com
sudo chown -R $USER:$USER /var/www/dev.shikakun.com
sudo vim /etc/apache2/sites-available/dev.shikakun.com.conf

dev.shikakun.com.conf の内容はこんなかんじ。

<VirtualHost *:80>
  ServerName dev.shikakun.com
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/dev.shikakun.com
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

a2ensite コマンドでシンボリックリンクを張ったら、apache2を再起動。

sudo a2ensite dev.shikakun.com
systemctl reload apache2

http://dev.shikakun.com/ でapache2のページが見えるようになった!

/var/www/dev.shikakun.com/info.php に以下のようなPHPファイルを置くと、PHPが動いていることも確認できる(秘匿情報が含まれているので、確認したら削除する)。

<?php
phpinfo();

常時SSL化のためにポートのアクセスを許可する。

sudo ufw allow in "Apache Secure"

certbotをインストールし、Let's EncryptのSSL証明書を発行。

sudo apt install certbot
sudo certbot certonly --webroot --webroot-path /var/www/dev.shikakun.com/ -d dev.shikakun.com -m {メールアドレス}
sudo ls /etc/letsencrypt/live/dev.shikakun.com/
sudo vim /etc/apache2/sites-available/dev.shikakun.com.conf

apache2の設定ファイルを以下のように書き換える。

<VirtualHost *:443>
  ServerName dev.shikakun.com
  ServerAdmin webmaster@localhost
  DocumentRoot /var/www/dev.shikakun.com
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  SSLCertificateFile /etc/letsencrypt/live/dev.shikakun.com/cert.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/dev.shikakun.com/privkey.pem
  SSLCertificateChainFile /etc/letsencrypt/live/dev.shikakun.com/chain.pem
</VirtualHost>

a2enmodコマンドでsslを有効にしたあと、apache2を再起動。

sudo a2enmod ssl
sudo systemctl reload apache2

https://dev.shikakun.com/ でアクセスできるようになり、SSLが有効になってる!

ここまできたら http:// でアクセスしたら https:// へリダイレクトしたい!ということで、以下のように設定した。

sudo a2enmod rewrite
sudo vim /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
    ..........(略)..........

    RewriteEngine on
    RewriteCond %{HTTPS} off
    RewriteRule ^/(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</VirtualHost>
sudo systemctl reload apache2

やりたいことぜんぶできた〜!これで、WordPressをインストールしたりできるようになった!