さくらVPSにApache・独自ドメイン・マルチドメイン設定・無料SSL設定
昨今のレンタルサーバは、PHP、mySQL、WORDPRESSの簡易インストールまで至れり尽くせりです。それはそれでとても便利なのですが、 さくらのVPSでゴリゴリとサーバを操作してみようと思いました。
10数年前は、自宅に実際に箱型PCを置いてVineLINUXなんかでサーバを構築し、固定IPアドレスを契約し、公開していました。 また、LPIC レベル1、レベル2の資格を取ったりもしました。 しかし、今時、自宅にサーバ置く時代でもないので、さくらVPSサービスを利用し、サーバ構築をすることにしました。
当ページ内作業は2019年に実施した記録です。
OSインストール
CentOS7をインストールしました。
※さくらのVPSとして、私は1Gプラン(仮想2Core CPU)年間利用料金10,692円(2019年金額)を契約しました。
昔のように自宅に実際にPC置いて、サーバ構築・公開に比べると金額も手間も随分とお得と思います。
VPSにログイン
さくらのVPSを自宅のパソコンから操作するには、SSHクライアントというソフトウエアから行います。
Windowsのコマンドプロンプトみたいな感じです。
Windowsからはマニュアル通り、Puttyを使います。この辺りは、10数年前と変わっていないようです。
PuttyのダウンロードからクライアントPCへのインストールは、コチラを参考にしてください。
なんか難しそうに思いますが、とにかくやってみることをお薦めします。
サーバ構築が出来たときの達成感は何物にも代得難いです!
Puttyの起動
Puttyを起動すると、次のような画面が表示されます。HOST NAME(OR IP ADDRESS)の箇所にIPアドレスを入力して、Openをクリック。
次のような警告画面が最初のみ表示されますが、「はい」をクリック。
VPSに接続できましたら、rootと入力して、Enterキーを押す。
パスワードを求められので、VPSの仮登録完了お知らせメールに記載されている初期パスワードを入力。
root@IPAddress’sのIPAddressには、ご自分のIPアドレスが表示されます。
1 2 3 4 5 6 |
login as: root root@IPAddress's password: SAKURA Internet [Virtual Private Server SERVICE] [root@ik1-999-11122 ~]# |
OSをアップデート
1 |
[root@ik1-999-11122 ~]# yum update |
以下の表示が出てきたら、yをクリック。Completeが表示されれば、アップデート完了。
1 |
Is this ok [y/d/N]: |
一般ユーザの作成
rootでログインすることはサーバが乗っ取られるリスクが大きく、非常に危険ですので、一般ユーザーを作成し、rootではなく、一般ユーザーでログインできるようにします。
vpsuserという一般ユーザーを作成し、パスワードを設定。
一般ユーザーでログインできることを確認するために、一旦SSHの接続を解除。
1 2 3 4 5 6 7 |
[root@ik1-999-11122 ~]# adduser vpsuser [root@ik1-999-11122 ~]# passwd vpsuser Changing password for user vpsuser. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@ik1-999-11122 ~]#exit |
Puttyを起動し、一般ユーザー vpsuserでログイン。
ログイン後、su – でrootに切り替える。
1 2 3 4 5 6 7 8 9 |
login as: vpsuser vpsuser@IPAddress's password: SAKURA Internet [Virtual Private Server SERVICE] [vpsuser@ik1-999-11122 ~]$ su - Password: Last failed login: Fri May 3 12:34:44 JST 2019 on pts/0 There were 2 failed login attempts since the last successful login. |
次にrootで直接ログインできないように、sshd_configファイルを編集。
cdでデイレクトリ移動、ls でデイレクトリ情報の表示をし、sshd_configファイルがあることを確認し、念のために cp でsshd_config.oldというファイル名でバックアップを取る。
vimでsshd_configファイルを編集。
1 2 3 4 5 6 7 8 |
[root@ik1-999-11122 ~]# cd /etc/ssh [root@ik1-999-11122 ssh]# ls moduli ssh_host_ed25519_key sshd_config ssh_config ssh_host_ed25519_key.pub sshd_config.orig ssh_host_ecdsa_key ssh_host_rsa_key sshd_config.rpmnew ssh_host_ecdsa_key.pub ssh_host_rsa_key.pub [root@ik1-999-11122 ssh]# cp ssh_config sshd_config.old [root@ik1-999-11122 ssh]# vim sshd_config |
下のような画面が現れるので、やや戸惑うかと思いますが、
#PermitRootLogin yesの行まで移動し、
iキーをクリックし、挿入モード(INSERTモード)にし、PermitRootLogin noとする。
※なにをやっているのか分からなくなったら、ESCキーをクリックしてから:q!と入力すると保存せずに終了させることが出来ます。再度iキーをクリックし、挿入モード(INSERTモード)とし編集すると良いと思います。私はそうしています。
1 |
#PermitRootLogin yes |
下のようにPermitRootLogin noと書き換えたら、:wでファイルを保存し、
ZZでvimエディタを終了させる。
1 |
PermitRootLogin no |
sshdを再起動し、設定を有効にする。
1 |
[root@ik1-999-11122 ssh]# systemctl restart sshd.service |
Puttyでrootでログインできないことを確認。
Apacheをインストール
httpサーバのApacheをインストール。
1 |
[root@ik1-999-11122 ~]# yum install httpd |
インストールしたら、httpdを起動。
1 |
[root@ik1-999-11122 ~]# systemctl start httpd |
ファイアウオールが有効になっており、http通信が遮断されていますので、httpおよびhttps通信を解除。
ファイアウオールを再起動し、サーバ起動時にhttpdも起動するように設定。
1 2 3 4 5 6 |
[root@ik1-999-11122 ~]# firewall-cmd --add-service=http --zone=public --permanent success [root@ik1-999-11122 ~]# firewall-cmd --add-service=https --zone=public --permanent success [root@ik1-999-11122 ~]# systemctl restart firewalld [root@ik1-999-11122 ~]# systemctl enable httpd |
ブラウザで自分のIPアドレスを打つと、Apacheが起動していることが確認できました!テンションが上がるだろうと思います。
SFTPでファイルをアップロード
httpサーバのApacheが起動してテンションがアップしましたが、ファイルを転送できないと意味がありません。 ファイルを転送するために、クライアントPCでは、FileZilla Clientを利用します。
その前にapacheのドキュメントルートである/var/www/htmlデイレクトリに一般ユーザーvpsuserがファイルをアップロードできるようします。
ドキュメントルートの権限を変更
/var/www/htmlに一般ユーザがファイルアップロードできるように権限を設定します。
/var/www/に移動し、html/デイレクトリの権限、所有者、所有グループ名を確認。
所有者はrootになっており全ての権限を有しています。所有グループもrootで読み、実行のみの権限です。
1 2 3 4 5 |
[root@ik1-999-11122 ~]# cd /var/www [root@ik1-999-11122 www]# ls -l total 0 drwxr-xr-x 2 root root 6 Apr 24 22:46 cgi-bin drwxr-xr-x 2 root root 6 Apr 24 22:46 html |
所有者をapache、所有グループをvpsuserとして、vpsuserにも読み、書き、実行の権限を与える。
1 2 3 4 |
[root@ik1-999-11122 www]# chown apache:vpsuser html [root@ik1-999-11122 www]# chmod 775 html [root@ik1-999-11122 www]# ls -l drwxrwxr-x 2 apache vpsuser 6 Apr 24 22:46 html |
SFTPでファイルをアップロード
設定は以下の様に、IPアドレス、ポート番号、一般ユーザーであるvpsuser、そのパスワードを入力し、接続をクリック。
接続すると一般ユーザーのホームデイレクトリである/home/vpsuserに接続される。
赤丸箇所を二階層上がり、そこから/var/www/htmlと三階層下がり、htmlファイルをアップロード。
HTMLファイルの転送をブラウザで確認!
独自ドメイン取得、DNS設定
WEBサーバを公開するにあたり、IPアドレスで閲覧というのもスマートではありません。
お名前COMで独自ドメインweb-web.workというドメインを取得し、さくらのVPSサーバと紐づけることにします。
お名前COMでの設定
DNSの設定は、ドメイン管理会社のコントロールパネルで行う。
お名前COMの場合、以下の様にDNS関連環境の設定→DNSレコード設定で、AレコードにIPアドレスを設定。
DNSの浸透に一時間ほどかかりましたが、ブラウザにweb-web.workと入力すると、WEBサイトが表示さました!
www.web-web.workのようにwww付でのアクセスも可能にしたい場合は、下のようにする。
しかし、これではIPアドレス:ドメイン=1:1でしか運用できません。
IPアドレス:ドメイン=1:nとして、1つのIPアドレスに対して、複数のドメインを運用できるようにします。
マルチドメイン
どうせなら、さくらVPSサーバで複数のドメインを運用してみます。
先ほどのweb-web.workと新たに取得したtea-m.workの二つのドメインを運用します。
上手く行けば、お友達のドメインとWEBサイトを運用しても良いですね(笑)!
一つのIPアドレスで複数のドメインを運用
IPアドレスは一個しかありません。複数のドメインを運用できるようにサーバを設定しなければいけません。
var/www/htmlの下に、mkdirコマンドで、var/www/html/web-web.work/public_html/とvar/www/html/web-web.work/public_html/デイレクトリを作成し、所有者や権限を設定し、適当なHTMLファイルをアップロードしておく。
1 2 3 4 5 6 7 8 9 10 11 12 |
[root@ik1-999-11122 html]# mkdir web-web.work/ [root@ik1-999-11122 html]# mkdir web-web.work/public_html/ [root@ik1-999-11122 html]# mkdir tea-m.work/ [root@ik1-999-11122 html]# mkdir tea-m.work/public_html/ [root@ik1-999-11122 html]# chown apache:vpsuser web-web.work/ [root@ik1-999-11122 html]# chown apache:vpsuser tea-m.work/ [root@ik1-999-11122 html]# chmod 775 web-web.work/ [root@ik1-999-11122 html]# chmod 775 tea-m.work/ [root@ik1-999-11122 html]# chmod 775 web-web.work/public_html/ [root@ik1-999-11122 html]# chmod 775 tea-m.work/public_html/ [root@ik1-999-11122 html]# chown apache:vpsuser web-web.work/public_html/ [root@ik1-999-11122 html]# chown apache:vpsuser tea-m.work/public_html/ |
Apache Virtualhostの設定
Apache2.4.6は、httpd.confを参照すると、Include conf.modules.d/*.confとあるように、 conf.modules.d/デイレクトリ内の*.confファイルを読み込むようになっている。
conf.modules.d/に移動し、touchコマンドでvirtual.confファイルを作成し、viで編集。
1 2 3 4 5 6 |
[root@ik1-999-11122 ~]# cd /etc/httpd/ [root@ik1-999-11122 httpd]# ls conf conf.d conf.modules.d logs modules run [root@ik1-999-11122 httpd]# cd conf.modules.d/ [root@ik1-999-11122 conf.modules.d]# touch virtual.conf [root@ik1-999-11122 conf.modules.d]# vi virtual.conf |
virtual.confファイルを以下のように編集。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<VirtualHost *:80> DocumentRoot /var/www/html/web-web.work/public_html ServerName web-web.work CustomLog logs/web-web.work-access.log common ErrorLog logs/web-web.work-error.log AddDefaultCharset UTF-8 <Directory "/var/www/html/web-web.work/public_html/"> AllowOverride All </Directory> </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/html/tea-m.work/public_html ServerName tea-m.work CustomLog logs/tea-m.work-access.log common ErrorLog logs/tea-m.work-error.log AddDefaultCharset UTF-8 <Directory "/var/www/html/tea-m.work/public_html/"> AllowOverride All </Directory> </VirtualHost> |
virtual.conf編集を確認するだけであれば、catコマンドを使う。
1 |
[root@ik1-999-11122 conf.modules.d]# cat virtual.conf |
バーチャルホストを許可する設定にhttpd.confを編集。
紛らわしいが、httpd.confは、/etc/httpd/conf/に有る。
1 2 3 4 5 6 |
[root@ik1-999-11122 conf.d]# cd ../conf [root@ik1-999-11122 conf]# ls -l total 28 -rw-r--r-- 1 root root 11753 Apr 24 22:44 httpd.conf -rw-r--r-- 1 root root 13077 Apr 24 22:46 magic [root@ik1-999-11122 conf]# vi httpd.conf |
httpd.conf内の、Listen 80の下行に、追記。
1 2 |
Listen 80 NameVirtualHost *:80 |
Apacheを再起動。
1 |
[root@ik1-999-11122 conf.modules.d]# systemctl restart httpd |
さくらVPSコントロールパネルで設定
さくらのVPSコントロールパネルで二つのドメインそれぞれに設定が必要です。
ネームサーバ登録
ドメイン名にドメインを入力
サーバのIPアドレスを入力
ゾーンがどのようになっているのか確認
お名前COMで設定
お名前COMで、ドメインtea-m.workに対して、DNS環境設定→DNSレコードを利用する で以下のように設定。
続けて、お名前COMで、ネームサーバの変更→ 他のネームサーバーを利用で、二つのドメインに対して、プライマリサーバ ns1.dns.ne.jp セカンダリサーバ ns1.dns.ne.jp と設定が必須
マルチドメインでのWEBサイト公開を確認
ブラウザでhttp://web-web.work/を確認!
ブラウザでhttp://tea-m.work/を確認!
さくらVPSでマルチドメインを確認!
無料SSL証明書Let’s Encryptの導入
問い合わせパネルやショッピングカードのみならず、サイト全体を常時SSL化することがここ一年ほどの間に標準になってきています。 SSL証明書も当然導入します。
ApacheがSSLを使えるようにするためには、mod_sslをまずはインストールします。
1 |
[root@ik1-999-11122 ~]# yum install mod_ssl |
httpdを再起動
1 |
[root@ik1-999-11122 ~]# systemctl restart httpd |
ファイアウオールでhttps通信が許可されているのか確認
1 2 3 |
[root@ik1-999-11122 ~]# firewall-cmd --list-all 略 services: dhcpv6-client ssh http https |
Pythonをインストール
流行りのPythonのインストールが必要なよう。
1 |
[root@ik1-999-11122 ~]# yum install certbot python2-certbot-apache |
Let’s Encryptをインストール
certbotというLet’s Encryptのコマンドで証明書をインストール。
マルチドメインでの運用を行うので、複数のドメインに対して行う。-d web-web.work -d tea-m.workの部分。
1 |
[root@ik1-999-11122 ~]# certbot --apache -d web-web.work -d tea-m.work |
途中気を付けないといけない点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
[root@ik1-999-11122 ~]# certbot --apache -d web-web.work -d tea-m.work Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): Let's Encryptからのお知らせを受け取るEMAILアドレスを入力 Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A規約に同意 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: NLet's EncryptのパートナーにEmailを公開したくないのでNに 略 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Redirecting vhost in /etc/httpd/conf.modules.d/virtual.conf to ssl vhost in /etc/httpd/conf.modules.d/virtual-le-ssl.conf Redirecting vhost in /etc/httpd/conf.modules.d/virtual.conf to ssl vhost in /etc/httpd/conf.modules.d/virtual-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://web-web.work and https://tea-m.work You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=web-web.work https://www.ssllabs.com/ssltest/analyze.html?d=tea-m.work - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
httpdを再起動。
ブラウザでhttp://web-web.work/を入力すると、https://web-web.work/にリダイレクトされ、SSL化していることを確認!
ブラウザでhttp://tea-m.work/を入力すると、https://tea-m.work/にリダイレクトされ、SSL化していることを確認!
さくらVPSでTWO ドメインともSSL化を確認!
CRONで証明書の更新を自動化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
[root@ik1-999-11122 ~]# vi /etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 0 3 * * * root /usr/bin/certbot renew |