一文白嫖阿里云服务器+配置基本开发环境+博客等服务部署
零、 (白嫖) 步骤
阿里云的学生优惠会送一张无门槛300元代金券(传送门: 阿里云高校计划_云工开物_助力高校科研与教育加速-阿里云 ),刚好够白嫖用券专区中的小服务器一整年(还多出15块可以买个20g的流量包);个人配置如下:
- 实例规格:ecs.e-c1m1.large;
- CPU&内存:2核2G;
- 操作系统:Ubuntu 22.04 LTS 64位;
- 带宽计费方式:按使用流量;
- 公网带宽:5 Mbps;
注:别选固定带宽,这是另外的价钱;
白嫖完后,进入配置;
一、本地远程连接
1.1 密钥对认证
由于本人采用密钥对进行认证,在创建并绑定密钥对后会自动下载一个 .pem 的文件到本地,ssh连接需要采用以下方式:
- 直接连接:
ssh -i ~/.ssh/你的私钥文件 用户名@服务器IP- 简化连接方式
每次手动输入私钥文件显然过于不便了,我们可以将私钥文件添加到SSH配置文件中;
nano ~/.ssh/config增加配置如下:
Host 服务器别名(随便取) HostName 服务器IP User 用户名 IdentityFile ~/.ssh/你的私钥文件 Port 22按下 ^x 和 y 保存后,可以直接采用服务器别名连接:
ssh 服务器别名1.2 常见问题
- 连接时报错:
Warning: Permanently added '你的服务器IP' (ED25519) to the list of known hosts. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for '你的私钥文件地址' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. Load key "你的私钥文件地址": bad permissions 用户名@服务器IP: Permission denied (publickey).这是因为SSH出于安全考虑,要求私钥文件的权限必须足够严格,不允许其他用户访问。你需要修改私钥文件的权限,确保只有你自己可以读取和写入:
chmod 600 ~/.ssh/你的私钥文件二、基本环境配置
2.1 基本工具安装
- 系统更新
sudo apt updatesudo apt upgrade -y- 基本工具安装(有些已经自带)
sudo apt install -y build-essential curl wget git vim htop net-tools- 防火墙配置
sudo apt install -y ufwsudo ufw allow sshsudo ufw allow httpsudo ufw allow httpssudo ufw enable2.2 安装Docker
以下步骤也可以直接参考 Docker 官方文档;
# 安装所需依赖sudo apt install -y apt-transport-https ca-certificates gnupg lsb-release
# 添加 Docker 的官方 GPG 密钥(通过阿里云镜像)sudo mkdir -p /etc/apt/keyrings && \curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && \sudo apt-get update
# 安装最新的 Dockersudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin常见问题
由于运营商网络等不稳定因素可能导致镜像加速器无法成功拉取到指定版本的容器镜像,阿里云提供了免费的镜像加速器,配置步骤如下:
- 登录容器镜像服务控制台。
- 在左侧导航栏选择镜像工具 > 镜像加速器
- 在镜像加速器页面获取加速器地址。
接下来,在云服务器上更新 Docker 配置:
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["你的镜像加速器地址"]}EOFsudo systemctl daemon-reloadsudo systemctl restart docker最后,验证是否可以成功拉取 Docker Hub镜像:
sudo docker run hello-world如果看到以下输出,说明成功拉取!
Hello from Docker!This message shows that your installation appears to be working correctly.2.3 配置 git
- 这里采用使用 SSH 密钥认证,首先在云服务器上生成 SSH 密钥对;
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"可以直接一路回车到底,默认情况下,密钥会保存到 ~/.ssh/id_rsa;
- 将公钥添加到 GitHub 账户
# 查看公钥内容cat ~/.ssh/id_rsa.pub复制后,登录到 GitHub,进入 Settings -> SSH and GPG keys,点击 New SSH key,将公钥复制到 GitHub 的文本框中并保存;
- 验证连接
# 测试连接ssh -T git@github.com如果配置成功,会观察到输出如下信息:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.2.4 安装 Anaconda
- 下载 Anaconda 的安装包
你可以在 官网 自行查找需要的版本,替换以下链接即可:
wget https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh- 安装anaconda
# 授予可执行权限chmod +x Anaconda3-2024.10-1-Linux-x86_64.sh
# 执行./Anaconda3-2024.10-1-Linux-x86_64.sh然后疯狂回车(中间需要输入一次yes)即可;
- 验证安装
打开新的终端,输入:
conda --version如果输出正确的 conda 版本,则说明安装成功并且正确配置环境变量;
conda 24.9.22.5 安装 MySQL
- 安装 MySQL APT 存储库
sudo wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb- 安装 MySQL 服务器
#安装 MySQL 服务器sudo apt install -y mysql-server#启动 MySQL 服务sudo systemctl start mysql#检查启动状态sudo systemctl status mysql#在系统启动时自动启动。sudo systemctl enable mysql- 安装安全向导(可选)
sudo mysql_secure_installation它会让你自信选择安全策略,包括如下内容:
- Would you like to setup VALIDATE PASSWORD component?
- 是否需要启用
VALIDATE PASSWORD组件?
- 是否需要启用
- There are three levels of password validation policy:
- LOW Length >= 8
- MEDIUM Length >= 8, numeric, mixed case, and special characters
- STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
- 这里选择输入 2 ,表示设置密码策略要求密码至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符,并且密码总长度至少为8个字符;
- Remove anonymous users?
- 是否移除匿名用户?
- 这里输入 y ,表示移除;
- Disallow root login remotely?
- 禁止MySQL的
root用户从远程登录; - 这里选择 y;
- 禁止MySQL的
- Remove test database and access to it?
- 是否需要移除MySQL自带的
test数据库? - 无所谓,删了吧;
- 是否需要移除MySQL自带的
- Reload privilege tables now?
- 输入 y ,重新加载权限表,使得更改生效;
- 配置安全组规则
配置安全组时,MySQL 默认使用3306端口。确保实例安全组的入站规则开放3306端口。如果选择了不同的端口,请根据实际情况调整安全组设置。具体步骤请参考添加安全组规则。
- 添加用于远程访问的用户
将以下输入的 <username> 和 <password> 部分自行修改;
sudo mysql -uroot -p \-e "CREATE USER '<username>'@'%' IDENTIFIED BY '<password>';" \-e "GRANT ALL PRIVILEGES ON *.* TO '<username>'@'%' WITH GRANT OPTION;" \-e "FLUSH PRIVILEGES;"执行后需要输入 root 账户的密码;
- 登录 mysql 账户验证
sudo mysql -u <username> -p输入密码后,进入 mysql 环境,成功!
输入以下内容可以退出 mysql 环境:
exit;2.6 配置 Node.js 开发环境
- 下载 NVM 源码
git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`- 配置环境变量
sudo sh -c 'echo ". ~/.nvm/nvm.sh" >> /etc/profile'source /etc/profile- 设置镜像源
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node- 自行下载所需版本,例如:
nvm install v23.3.0若观察到以下输出,说明安装成功:
Computing checksum with sha256sumChecksums matched!Now using node v23.3.0 (npm v10.9.0)Creating default alias: default -> v23.3.02.7 配置 Java 环境
- 安装所需版本的JDK(以Java 1.8 为例):
sudo apt-get install -y openjdk-8-jdk如果需要下载其他版本,可以运行以下命令查看:
sudo apt search openjdk- 验证安装
java -version2.8 Screen 工具
在通过 Scp 等远程传输文件时,特别是大文件时,往往因为 SSH 连接不稳定而导致中断。而 Screen 工具提供了从单个 SSH 会话中使用多个 shell 窗口的能力。当会话被分离或网络中断时 Screen 会话中启动的进程仍将运行,我们可以随时重新连接到 Screen 会话。
- 安装 Screen
sudo apt install screen- 创建一个会话
screen -S test- 挂起一个会话
按下 Ctrl + a + d 即可保持这个 Screen 到后台并回到我们 SSH 的主终端;
- 恢复一个会话
screen -r -d test即可重新进入该 Screen;
- 查看已经存在的 Screen 终端
screen -ls2.9 安装 Nginx 环境
- 使用 Nginx 官方源安装;
#更新系统已安装软件并更新包管理工具sudo apt update -y#Nginx安装前必要环境sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring#导入官方Nginx签名密钥curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null#设置apt仓库echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list#安装nginxsudo apt install -y nginx接下来根据实际需要修改配置文件;
三、搭建 Cloudreve 云盘
3.1 快速部署
下载 Cloudreve 发布版本,你可以自行从 Release 选择适合你的操作系统的;
wget https://github.com/cloudreve/Cloudreve/releases/download/3.8.3/cloudreve_3.8.3_linux_amd64.tar.gz
# 创建程序目录mkdir -p /usr/local/cloudreve
# 解压获取到的主程序到所在目录tar -zxvf cloudreve_3.8.3_linux_amd64.tar.gz -C /usr/local/cloudreve
cd /usr/local/cloudreve# 赋予执行权限chmod +x ./cloudreve
# 启动 Cloudreve./cloudreve观察到以下输出,说明启动成功:
在首次启动时,会创建初始管理员账号,请注意保管下方的管理员密码,此密码只会在首次启动时出现;
Cloudreve 默认会监听5212端口,你可以在浏览器中访问 http://服务器IP:5212 进入 Cloudreve。注意需要增加阿里云服务器的安全组规则。
3.2 启动进程守护
- 编辑配置文件
vim /usr/lib/systemd/system/cloudreve.service
[Unit]Description=CloudreveDocumentation=https://docs.cloudreve.orgAfter=network.targetAfter=mysqld.serviceWants=network.target
[Service]WorkingDirectory=/usr/local/cloudreveExecStart=/usr/local/cloudreve/cloudreveRestart=on-abnormalRestartSec=5sKillMode=mixed
StandardOutput=nullStandardError=syslog
[Install]WantedBy=multi-user.target- 更新配置并启动
# 更新配置systemctl daemon-reload
# 启动服务systemctl start cloudreve
# 设置开机启动systemctl enable cloudreve- 管理命令
# 启动服务systemctl start cloudreve
# 停止服务systemctl stop cloudreve
# 重启服务systemctl restart cloudreve
# 查看状态systemctl status cloudreve- 访问前端服务
通过 https://你的服务器IP:5212 即可访问;
四、部署 hexo 博客
纯纯自用罢了;
4.1 服务端 git 的有关配置
- 创建一个单独的用户用于管理仓库;
sudo adduser gitsudo passwd git- 设置 git 用户 sudo 权限;
sudo chmod 740 /etc/sudoerssudo vim /etc/sudoers添加一行:
git ALL=(ALL) ALL按下 :wq 保存更改,然后:
sudo chmod 400 /etc/sudoers- 上传公钥到服务器并添加到 git 用户
在本机执行:
scp ~/.ssh/id_rsa.pub root@<你的服务器IP>:/home/git/tempkey.pub -i ~/.ssh/你的私钥文件.pem然后登录服务器:
ssh 你的服务器别名sudo su - gitmkdir -p ~/.sshcat ~/tempkey.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keyschmod 700 ~/.sshexit你同样可以在本机化简配置:
Host 你的服务器别名_2 HostName 你的服务器公网IP User git IdentityFile ~/.ssh/id_rsa Port 224.2 配置 Git 仓库和部署钩子
- 初始化一个裸仓库;
su gitcd ~git init --bare hexo.git- 添加 post-receive 自动部署钩子;
vi ~/hexo.git/hooks/post-receive输入以下内容并保存退出(
#!/bin/bashGIT_WORK_TREE=/data/hexo git checkout -f赋予执行权限:
chmod +x ~/hexo.git/hooks/post-receive- 创建部署目录并授权
sudo mkdir -p /data/hexosudo chown -R git:git /data/hexosudo chmod -R 755 /data/hexo4.3 Hexo 配置
4.3.x 关于资源文件夹的问题
当然,使用图床等工具,直接在 markdown 中插入外链是最方便的,并且不用担心在博客迁移时发生问题。不过如果你想要保存图片在本地,那么可以参考如下方法:
- 保存图片在
source/文件夹下;
这是肯定的,区别只是在于后面的引用格式问题;
- 如果图片的目录为
source/img/example.png;
那么,默认配置下,你的引用格式应该为
如果你希望不同文章的图片保存在不同目录,你可以自行修改保存路径和相应的引用格式(注意是相对于 source 文件夹的路径);当然,你也可以使用 Hexo 提供的配置方式,将配置文件 _config.yml 修改为:
post_asset_folder: true但你每次通过命令行新建一个文章时,它会自动在 _posts 文件夹下生成一个同名文件夹,你可以将文章图片都放在该文件夹中,此时引用格式为:
但是,这并不是特别方便,特别是对于需要通过别的阅读器,比如 Typora 等进行阅读。如果你希望维持相对路径格式又能对图片进行分类,你可以通过修改 Typora 设置来进行,但我推荐使用插件 hexo-asset-link 插件,这个插件可以保留你原本写的路径结构,即:
安装和配置方法如下:
npm install hexo-asset-link --save在 _config.yml 中添加:
asset_link: enable: true post_asset_folder: true重新生成并部署即可!
其余部分暂略;
4.4 部署 Hexo 博客
4.4.x 部署 Hexo 博客到云服务器
- 安装
hexo-deployer-git插件;
npm install hexo-deployer-git --save- 修改
_config.yml中的 deploy 部分;
deploy: type: git repo: git@你的服务器别名_2:/home/git/hexo.git branch: master- 运行以下命令进行部署;
hexo cleanhexo generatehexo deploy或直接写成:
hexo c && hexo g && hexo d- 修改 Nginx 配置文件;
sudo vim /etc/nginx/nginx.conf为:
user nginx;worker_processes auto;
error_log /var/log/nginx/error.log notice;pid /var/run/nginx.pid;
events { worker_connections 1024;}
http { include /etc/nginx/mime.types; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on; keepalive_timeout 65;
include /etc/nginx/conf.d/*.conf;}- 修改虚拟主机配置;
sudo vim /etc/nginx/conf.d/default.conf如果没有域名,则修改为:
server { listen 80; listen [::]:80; server_name 你的公网IP;
location / { root /data/hexo; index index.html index.htm; }
error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}如果仅有域名,则修改为:
server { listen 80; listen [::]:80; server_name yourdomain.com;
location / { root /data/hexo; index index.html index.htm; }
error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}如果你有域名并申请过 SSL 安全证书,则修改为:
server { listen 80; listen [::]:80; server_name yourdomain.com;
rewrite ^(.*)$ https://${server_name}$1 permanent;}
server { listen 443 ssl; server_name yourdomain.com;
ssl_certificate /path/to/your/cert.pem; ssl_certificate_key /path/to/your/key.pem;
ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on;
location / { root /data/hexo; index index.html index.htm; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; }}注意将上面的域名、SSL 证书的路径字段替换为你实际的。
- 启动 Nginx 进程;
sudo systemctl start nginxsudo systemctl status nginxsudo systemctl reload nginx阿里云服务器一般默认开放了 80 和 443 端口,如果服务商不同,请自行开放防火墙;
- 配置域名解析(如果没有域名,则无需进行这一步);
如果你使用的是阿里云的 DNS,那么你需要登录域名管理后台,添加一条 A 记录:
| 主机记录 | 类型 | 记录值 | TTL |
|---|---|---|---|
| blog | A | 你的公网IP | 600(s) |
解析是否生效可以通过以下命令进行验证:
ping yourdomain.com如果你的域名 DNS 指向了非服务商,比如我使用了 Cloudflare 的 DNS,那么你需要在 Cloudflare 的控制面板中设置,添加 A 记录:
| 类型 | 主机名 | 内容(IP 地址) | TTL | 代理状态 |
|---|---|---|---|---|
| A | blog | 你的服务器公网IP | 自动 | 关闭小云朵(点一下变灰) |
说明:如果你只是做博客访问,把“代理状态”的小云朵关闭(变灰),否则 Nginx 会收到 Cloudflare 的 IP 而不是你用户的真实 IP;
特别说明:
如果你使用的是中国大陆的服务器,那么需要提交备案申请,未备案域名将无法通过 HTTP/HTTPS 正常访问,云服务商会限制端口 80 和 443。如果你想通过云服务器部署个人博客,请遵循有关规定。
不过我懒。
补充:
备案时应该要求你的域名 DNS 指向阿里云 DNS,否则存在不通过的风险。(我记得备案的时候用途就不能写个人博客来着)
4.4.y 配置服务到 Github Page 或其他托管平台
把 Hexo 部署到 GitHub Pages 或其他托管平台并绑定你的域名也同样可行且省事,而且完全免费、无需备案。
- 新建一个 Github 仓库;
命名为:(啥也不用勾选,空的公开仓库即可)
XXX.github.io- 修改 Hexo 的配置文件;
将 deploy 部分改为:
deploy: type: git repo: 你的仓库地址 branch: main如果你默认 GitHub 用 master 分支,那就把 branch 改为 master 即可;
- 绑定域名;
首先,添加一个名为 CNAME 的文件到 source 目录下:
echo "yourdomain.com" > source/CNAME登录 Cloudflare ,添加如下记录:
| 类型 | 名称 | 值 |
|---|---|---|
| CNAME | blog | XXX.github.io |
确保开启了 小云朵(代理)图标,启用 CDN 与 HTTPS;
重新部署博客:
hexo clean && hexo g && hexo d- 设置 GitHub Pages 部署配置;
在你的仓库中打开「Settings」→「Pages」,设置以下内容:
- Source 设为:main 分支(或者 master,看你哪个在用)
- Branch folder 选的是 / (root)
- Custom domain 应该已填写为:yourdomain.com
在重新部署一次,如果 DNS 已生效,那么就可以正常浏览你的博客了!
五、WebDav 网盘服务部署
5.1 说明
Zotero 默认提供 300M 大小的云同步空间,但同步较慢,且文献一多(主要是附件占用,不同步附件基本上用不完)空间就不够用了,好在它还提供了第三方云盘服务支持,本体直接支持 WebDav(坚果云等),或者使用插件来使用第三方网盘服务(比如百度云这种),区别如下:(来源:Zotero中文社区)
| 对比项 | Zotero 官方存储空间 / WebDAV 同步 | Attanger + 同步盘 方案 |
|---|---|---|
| 配置难度 | 简单 | 复杂 |
| 多台电脑上同步附件 | 是 | 是 |
| 更改附件存储位置/自定义存放附件的文件夹名 | 否 | 是 |
| 支持的网盘种类 | 很少 | 较多 |
| 是否可以在移动端 Zotero/Papership 打开附件 | 是 | 否 |
5.2 部署步骤
- 安装完整的 Nginx 模块:
之前已经介绍并且配置过 Nginx 做端口转发,不过默认的 Nginx 并不提供 WebDav 模块,需要安装完整版:
sudo apt updatesudo apt install nginx-full apache2-utils- 创建存储目录:
注意需要使用 www-data 用户组,它是 Nginx 的默认运行用户,具有读写权限,权限范围仅有 Web 服务需要访问的目录,确保安全性。
sudo mkdir -p /var/www/zoterosudo chown -R www-data:www-data /var/www/zotero- 创建 WebDav 用户:
# 创建用户sudo htpasswd -c /etc/nginx/webdav.passwd username
# 之后添加用户sudo htpasswd /etc/nginx/webdav.passwd anotherusername回车后会让你输出密码。
- 配置 Nginx:
编辑配置文件:(也可以在默认配置文件 /etc/nginx/sites-available/default 中编辑)
sudo nano /etc/nginx/conf.d/webdav.conf具体内容可参考:
server { listen 80; server_name yourdomainname.com;
location /zotero/ { alias /var/www/zotero/; autoindex on; dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; create_full_put_path on; dav_access user:rw group:rw all:r;
auth_basic "Restricted"; auth_basic_user_file /etc/nginx/webdav.passwd;
client_max_body_size 2G;
limit_except GET OPTIONS { allow all; } }}- 在 Zotero 中修改配置并验证是否生效:
打开 Zotero,在“设置” “同步” “文件同步”,选择 WebDav,填入你的服务器配置以及用户认证信息即可。

- 启用 HTTPS 以及证书认证;
可选,由于我的服务器没备案,这一步就省略了。
注:不定期随缘更新中…
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!



