Saturday, March 13, 2021

Nginx 架兩個站

既然開始玩伺服器當然就要盡量使用資源。底下是新增一個站的筆記。

首先去設定一個 Type A DNS record ,導向同一個 server 

比如 exp.yourdomain.com > 999.999.999.999 

接下來在伺服器新增一個根目錄。和首頁的資訊

mkdir /var/www/exp
vim /var/www/exp/index.html

<html>
        <title>Chieh's experiment site</title>
        <h1>This is Chieh's experimental setting with Nginx webserver. </h1>
</html>

 

再來設定 Nginx。

vim /etc/nginx/sites-available/exp.yourdomain.com

server {
        listen 80;
        listen [::]:80;
        root /var/www/exp;
        index index.html index.htm;
        server_name exp.yourdomain.com;

   location / {
       try_files $uri $uri/ =404;
   }

}

告訴 Nginx 我們要啟動這個網站

ln -s /etc/nginx/sites-available/exp.yourdomain.com /etc/nginx/sites-enabled/

測試沒有問題

nginx -t

重啟 Nginx server

service nginx restart

打完收工....

啊,當然要啟動安全連線,這裡使用 Certbot 安裝並註冊憑證。

certbot --nginx

隨意拿個瀏覽器測試,安全連線也沒有問題:


輕鬆寫意,我也沒有料到這麼容易。

剛成功架好第二個 WordPress ,基本上就是照著前一篇,1) 新增資料庫和使用者 2) 設定該站的 Nginx server 3)下載 WordPress 並更新設定,其實不困難,只是即使是這樣簡單的任務,像我不熟悉的情況下,還是會需要 debug 一些低級錯誤XD,設定的時候還是不能夠傻傻單純複製貼上哈哈。



Thursday, March 11, 2021

用 Certbot 安裝免費的 Let’s Encrypt 憑證

 寫完上篇以後,搜尋到了一個可以得到免費憑證的機構 Let’s Encrypt 。真是佛心來著。其實基本上照步驟叫 Certbot 機器人做就可以了。安裝這個會需要能夠使用 root 權限設定已經在跑的 http 網站。依序安裝snapd,certbot,並執行即可。

設定 nginx SSL 安全連線

上篇設定好了 Wordpress 可是只能用 http 連線,一直看到瀏覽器提醒很討厭,所以就來研究一下怎麼設定 nginx 網站的SSL連線。參考資料是這篇。以下指令都要用root權限執行。


1. 製作憑證/密鑰。


我不是很確定系統哪裡放密鑰比較好,所以我參考這篇放在 /root 下面:

mkdir /root/certs/

接下來用這個指令製作密鑰:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /root/certs/nginx.key -out /root/certs/nginx.crt

系統會問你一串問題,但最重要的是 Common Name (e.g. server FQDN or YOUR name)要填正確的 domain name

執行完後會得到一組密鑰,其中 nginx.crt 是公開的憑證,nginx.key 是系統的密鑰。


2. 設定 nginx


vim /etc/nginx/sites-available/default

重點如下:

listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate     /root/certs/nginx.crt;
ssl_certificate_key /root/certs/nginx.key;
ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers         HIGH:!aNULL:!MD5;

存檔後重啟 nginx:

nginx -t
service nginx restart

基本上就大功告成了

3. 附記


雖然這樣就結束設定,但是瀏覽器不會喜歡這個憑證。因為這個憑證沒有經過認證。連線是安全的,但是因為每個人都可以設定,現在的瀏覽器喜歡經過認證的憑證。稍微查了一下,十分昂貴呢。所以我也不確定這個小小的個人 project 會不會變成吸金怪獸....


Wordpress 架站筆記

好久沒更新了,其實主要是因為現在線上資源太多,基本上資訊唾手可得,也就懶惰了。但是Covid疫情的關係,閒著也是閒著,來嘗試架個站,放一點心得筆記好了。

目標: 試著架個 Wordpress server,順便把這個多年來使用 Linux 的興趣拿來實作。

主要就是參考這個網頁 https://restorebin.com/wordpress-on-digitalocean/

照著說明設定好 Digitalocean 和 Domain Name 之後,正式進入架站。我用 Ubuntu 20 (Debian對不起)

所需軟體為 Nginx, MySQL, and PHP (也就是所謂的 LEMP Stack)。我對這些都完全沒經驗,所以就是走一步算一步。

1. Nginx


聽說是個小巧可愛的 Webserver,設定十分容易。

apt-get update
apt-get install nginx
service nginx restart

裝完應該可以看到網頁 homepage

2. PHP 7.4


我沒有改 Source,直接裝下列 package:

apt-get install php7.4 php7.4-cli php7.4-common php7.4-fpm php7.4-curl php7.4-mbstring php7.4-mysql php7.4-zip php7.4-xml php7.4-gd php7.4-intl php7.4-soap

3. MySQL 8.0


apt-get install mysql-server php7.4-mysql

因為版本不同,所以開始 database 的指令改成

mysqld --initialize
mysql_secure_installation


這邊會被要求設定mysql的root密碼和一些安全設定,照步驟做就可以了

4. 接下來照步驟設定一個資料庫給 Wordpress 用,沒什麼大問題


用這個指令進入 mysql

mysql -u root -p

輸入密碼之後,在 mysql 之下,下下面的指令新增一個使用者給 Wordpress 的資料庫

CREATE DATABASE wpdatabase;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'wppassword';
GRANT ALL ON wpdatabase.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
exit;


上述安全性的設定 (wpdatabase, wpuser, wppassword) 記得改掉啊....

5. 接下來設定 nginx


vim /etc/nginx/sites-available/default

重點如下:

server { 
listen 80 default_server; 
listen [::]:80 default_server; 
root /var/www/demo; 
index index.php index.html index.htm index.nginx-debian.html; 
server_name demo.yourdomain.com;  
 
location / { 
try_files $uri $uri/ /index.php$is_args$args; 
}  
 
location ~ \.php$ { 
include snippets/fastcgi-php.conf; 
fastcgi_pass unix:/run/php/php7.4-fpm.sock; 
} 
 
location ~ /\.ht { 
deny all; 
} 
}

存檔後重啟 nginx:

nginx -t
service nginx restart

6. 安裝 Wordpress:

把 Wordpress 抓到 /tmp 然後解安裝

cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar zxvf latest.tar.gz

用提供的檔案來做設定,之後把整個 Wordpress 複製到網頁的目錄下

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
sudo cp -a /tmp/wordpress/. /var/www/demo


接下來需要改權限

chown -R www-data:www-data /var/www/demo

7. 設定 Wordpress

用 Wordpress 提供的工具製作密鑰:

curl -s https://api.wordpress.org/secret-key/1.1/salt/

會得到如下資料:

把上面這些東西複製起來,取代 /var/www/demo/wp-config.php 裡面的相關部分,另外設定好MySQL的資料庫和使用者

define('DB_NAME', 'wpdatabase');
define('DB_USER', 'wpuser');
define('DB_PASSWORD', 'wppassword');


並且加入這行

define('FS_METHOD', 'direct');

重新開機之後,用網頁開啟伺服器的網址,就可以在線上設定部落格了。