博客部署與踩坑記錄

我也不知道到底是我閱讀時有所遺漏還是文檔沒有及時更新

雖然MySQL的入門指南裡連接服務器部分裡說,如果你是使用APT安裝的那麼在安裝階段就你已經指定過密碼了,然而並沒有。根據Ubuntu的MySQL安裝文檔,首次連接數據庫的時候沒有要密碼,因為它是使用auth_socket進行驗證的。雖然StackOverflow裡這個回答所提到的MySQL原生密碼已經deprecated,但至少啟發我東拼西湊出一條咒語:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY RANDOM PASSWORD;

這次主要遇到的困難就是這個,其他的沒什麼可說的,跟著文檔一步一步做就可以了,寫這個備忘錄主要是方便我自己搞砸了以後炸掉重來。

基礎信息:

  • 服務器提供商: Hetzner
  • 系統: Ubuntu 22.04.5 LTS

如果在創建服務器前沒有添加SSH,那麼Hetzner會通過電子郵件把默認密碼以明文的形式發送給你。

新建鑰匙對

ssh-keygen -o

默認情況下它會在用戶文件夾裡.ssh/id_ed25519

安裝服務器

安裝與配置Apache: Ubuntu文檔

apt update
apt install apache2

通過SSH連接服務器時默認就是root模式所以無需添加sudo關鍵字。安裝完成後,瀏覽器地址欄輸入http://你的IP地址就可以看到Apache2的默認頁面,裡面包含了怎樣配置服務器的基礎文檔。對於還不太用得到太複雜的功能的新手來說這份文檔已經足夠。

進入/etc/apache2/sites-available,裡面有兩個文件,分別是000-default.conf和default-ssl.conf,前者是你剛才通過裸IP打開的那個頁面所使用的配置文件,把它複製一份然後根據需要進行編輯,比如我這裡是

<VirtualHost *:80>
  ServerName invisible.literaturesandbox.net
  DocumentRoot /var/www/invisible
</VirtualHost>

ServerName是網站的域名,DocumentRoot是你在服務器裡放置文件的目錄,移步到這個文件夾新建index.html,裡面隨便寫點什麼,打開 http://域名 就會看到它(配置SSL證書前protocol只能是http)

配置SSL證書。

我在網上隨便找了個certbot文檔,這裡除了certbot本體你還需要安裝一個叫python3-certbot-apache的package

apt install certbot python3-certbot-apache

然後運行

certbot --apache

它會掃描你的站點配置。根據指示進行操作即可。接下來如果回到/etc/apache2/sites-available你會發現多出來了一個invisible-le-ssl.conf

編程語言與數據庫

依舊是跟隨Ubuntu Server的指南

安裝PHP:文檔

apt install php
apt install libapache2-mod-php

我不知道後面這個package的具體用途是什麼。

安裝MySQL:文檔

apt install mysql-server

查看MySQL運行狀態

service mysql status

安裝PHP-MySQL拓展

apt install php-mysql

其他package也是按照這個規則進行命名的,比如後面安裝Typecho的時候提示缺少mbstring拓展,需要補充的package名稱是php-mbstring

安裝Typecho

打開Typecho的下載頁面複製鏈接(比如我這裡選擇的是正式版)

wget https://github.com/typecho/typecho/releases/latest/download/typecho.zip

這裡unzip的表現與Windows桌面裡不太一樣,它會把所有東西倒在當前目錄裡,而不會新建一個叫typecho的子文件夾。根據前面Apache的配置,這一步應該在/var/www/invisible裡進行

然後打開https://invisible.literaturesandbox.net就可以看到安裝頁面

上传目录无法写入, 请手动将安装目录下的 /usr/uploads 目录的权限设置为可写然后继续升级

有兩個方案,要麼設置權限為全局可寫,要麼把這個目錄的歸屬權轉移給PHP用戶。我選擇後者轉移用戶(假設你依舊在/var/www/invisible這個目錄裡)

chown -R www-data usr/uploads

這裡www-data是PHP用戶:如果不確定,你可以在隔壁新建一個PHP文件用來打印相關信息

<?php phpinfo(); ?>

在這個頁面裡你會找到所有你需要的信息(例如當前PHP版本與已啟用的拓展),包括PHP所在用戶名。

進入下一個頁面,數據庫相關配置

此時SSH裡運行

mysql -u root

兩種可能性,沒有密碼prompt,或者出現prompt但按下回車鍵(輸入空密碼)就可以連接數據庫。說明這裡它採取其他方式進行驗證的,畢竟前面使用apt安裝MySQL服務器的時候並沒有要求用戶設置密碼。

不知道是我閱讀時有所遺漏還是文檔沒有及時更新,MySQL的入門指南裡連接服務器部分裡說,如果你是使用APT安裝的那麼在安裝階段就你已經指定過密碼了(然而並沒有)。

回到Ubuntu的MySQL安裝文檔,首次連接數據庫的時候沒有要密碼,因為它是使用auth_socket進行驗證的。

然而Typecho安裝頁面裡,如果密碼欄留空會報錯:

对不起, 无法连接数据库, 请先检查数据库配置再继续进行安装: "SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost'"

我想到的解決方案就是手動設置密碼。雖然StackOverflow裡這個回答所提到的MySQL原生密碼已經deprecated,但至少啟發我東拼西湊出一條咒語:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY RANDOM PASSWORD;

(懶得想密碼索性讓它給我隨機生成一條)

完整日誌如下

root@ubuntu-2gb-fsn1-1:/var/www/invisible# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.43-0ubuntu0.22.04.2 (Ubuntu)

Copyright (c) 2000, 2025, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY RANDOM PA
SSWORD;
+------+-----------+----------------------+-------------+
| user | host      | generated password   | auth_factor |
+------+-----------+----------------------+-------------+
| root | localhost | n7`;j>tL/pr^>)tYd]F4 |           1 |
+------+-----------+----------------------+-------------+
1 row in set (0.01 sec)

mysql>

這個密碼當然是我寫博客的時候另外找工具隨機生成的:如果沒猜錯的話,它的規則應該是20位,允許ASCII裡所有可見字符(我不確定是否允許引號)

留言

您的邮箱地址不会被公开。 必填项已用 * 标注