雖然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裡所有可見字符(我不確定是否允許引號)