LoginSignup
0
0

More than 1 year has passed since last update.

Sakura VPSサーバにCentOS Stream9を突っ込んでApache(Let's encrypt)、MariaDB、NodeJSあたりをサクッと準備する方法

Last updated at Posted at 2022-03-13

ただのインストールメモです。

Webサーバ立てて、DBとNodeがあれば何か作れるよねって事で、インストールメモです。Let's encrypt周りの部分は、Stream9の少し前のバージョンではSnapdが手動でないと入らなかったりと、同じStream9でも、Web上の情報が色々なので、2022年3月14日時点でのインストールログを残しておきます。
仮にtmu.acというホスト名を割り当てるという事で説明します。

OS初期化設定

SakuraのコンソールでOS再インストールを選び、以下の設定でCentOS Stream9をインストールする。

項目 選択
OSインストール形式 標準OS
インストールOS CentOS Stream9 X86_64
新しい管理ユーザーのパスワード 内緒💛
スタートアップスクリプト利用 Setup and update
初回起動時にパッケージ更新する 更新する
日本語環境 ja_JP.UTF-8 に変更する ja_JP.UTF-8 に変更する
ホスト名を設定する tmu.ac
SSHポートを変更する 22
ログインユーザ名 内緒💛
github.com に登録済みの公開鍵を設定 内緒💛
キーボード配列 変更しない
VM内部のファイアウォール 有効化する
ウェブ管理インタフェース Cockpit インストールする
IPv6 有効化する
スワップ(swapfile) 作成しない
パッケージ管理システム Snappy(snap) インストールする
SELinux 有効化しない
カーネルクラッシュダンプ 有効化しない
タイムゾーン 変更しない
パケットフィルター設定 利用しない
サーバーへのSSHキー登録 登録する
SSHキー 内緒💛
パスワードを利用したログイン 無効にする

各種インストール

Apache+PHP+PostgreSQL+MariaDB+VIMのインストール

sudo dnf install -y httpd mod_ssl httpd-tools httpd-devel httpd-manual php php-cli php-gd php-pdo php-mbstring mariadb mariadb-server vim

Webサーバまわり

Apaceh起動

sudo sh -c "echo \"ServerName hogehoge.com:80\" >> /etc/httpd/conf.d/my.conf"
sudo systemctl enable --now httpd

Firewallでhttpとhttpsを許可

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd --reload

Snapdのインストール(Let's Encryptに必要)

sudo dnf -y install epel-release
sudo dnf --enablerepo=epel -y install snapd
sudo systemctl enable --now snapd.service snapd.socket
sudo ln -s /var/lib/snapd/snap /snap

もしかしたら端末立ち上げなおす必要があるような情報があったので、そうしてみましたが、source ~/.bachrcで十分かもしれない。あるいは、そのままでも行けるかもしれない。(未調査)

sudo snap install core
sudo snap refresh core

Let's Encryptのインストールと証明書取得

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --apache
# 本来なら上のコマンドで行けるはずだが、エラーがでるので、昔ながらの方法で。
sudo certbot certonly --webroot -w /var/www/html -d tmu.ac

成功すれば証明書のパスが表示される。

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/tmu.ac/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/tmu.ac/privkey.pem
This certificate expires on 2022-06-11.

このパスをApacheの設定ファイルを突っ込む。

sudo sh -c "echo \"
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile    /etc/letsencrypt/live/tmu.ac/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/tmu.ac/privkey.pem
</VirtualHost>\" >> /etc/httpd/conf.d/my.conf"

Apache再起動(この時点で https://tmu.ac/ でSSL接続できるはず)

sudo systemctl restart httpd

ついでに、Cockpictへ証明書のインストール。.cert形式じゃないとダメみたいなのでfullchainとprivkeyくっつけて.certを作り、Cockpitの証明書格納ディレクトリに、そのシンボリックリンクを置く。

sudo sh -c "cat /etc/letsencrypt/live/tmu.ac/fullchain.pem /etc/letsencrypt/live/tmu.ac/privkey.pem > /etc/letsencrypt/live/tmu.ac/ssl.cert"
sudo ln -s /etc/letsencrypt/live/tmu.ac/ssl.cert  /etc/cockpit/ws-certs.d/ssl.cert

Cockpit再起動(https://tmu.ac:9090/でCockpitにセキュアに接続できるはず)

sudo systemctl restart cockpit.socket

証明書更新のcrontab組み込み(pemからcert作成も含む)

certbotで定期的に証明書をrenewするようcronに組み込む。certbotは証明書の残り期間を見て、ちょうど良い時のみrenewsするので、比較的こまめにcertbotを動かしていても問題はない。ここでは、毎週月曜日の3時23分に行う事とする。時間は0分は(世界中でその時間に動くcronが多そうという根拠ない理由で)避け、テキトーに選ぶと良いかも。

sudo sh -c "echo '
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
23 03 * * 1 sudo certbot renew --deploy-hook \"sudo sh -c \\\"cat /etc/letsencrypt/live/tmu.ac/fullchain.pem /etc/letsencrypt/live/tmu.ac/privkey.pem > /etc/letsencrypt/live/tmu.ac/ssl.cert;sudo systemctl restart httpd\\\"\"' >> /etc/cron.d/0SSLUpdate"

証明書をroot以外からも見られるよう専用のグループを作っておく

letsencrypt(別に名前はなんでも良い)というグループを作って、自分や他のユーザに割り当てておきましょう。nodeでwssサーバ作るときとかに、証明書へのアクセスが必要になります。

groupadd letsencrypt
usermod -aG letsencrypt *username*
sudo chown root:letsencrypt  /etc/letsencrypt/{live,archive}/
sudo chmod g+rx /etc/letsencrypt/{live,archive}/

※新しい端末を使わないと設定が反映されませんので、確認したい場合は注意。

RDBまわり

MariaDB (MySQL)の初期設定

MariaDBの起動

sudo systemctl enable -now mariadb
mysql_secure_installation

MariaDB データベース&ユーザ作成

mysql -u root -p
CREATE DATABASE *dbname*;
CREATE user *username*;
GRANT ALL ON dbname.* TO username@localhost IDENTIFIED BY '*password*';
exit

ログイン方法

mysql -u username -D dbname -p
passwordを入れる

NodeJSまわり

バージョン管理システムVoltaインストール(失敗)

Volta: https://docs.volta.sh/guide/
Voltaというバージョン管理システムが良さげ。

Voltaをインストール

curl https://get.volta.sh | bash

ん?

  Installing latest version of Volta (1.0.5)
    Checking for existing Volta installation
    Fetching archive for Linux, version 1.0.5
curl: (22) The requested URL returned error: 404

Error: Could not download Volta version '1.0.5'. See https://github.com/volta-cli/volta/releases for a list of available releases

うーん、できない。

たぶん、CentOS Stream9のopensslが3.0なのが悪さをしている模様。

上記コマンドを実行するとGitHubからVoltaをダウンロードしてインストールしてくれるのですが、そのダウンロードするファイルが『volta-1.0.5-linux-openssl-1.1.tar.gz』のようにopensslのバージョン別にファイルが用意されています。って事で、opebnssl-3.0.tar.gzはまだない。やむを得ず、時間が解決するのを待つ事にする。

結局MVNを使ってnode最新版のインストール

と言う訳で気を取り直して、MVNをインストールしnode最新版をインストール。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
source ~/.bashrc
nvm install node

めでたしめでたし。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0