YifanChen's Blog

一个专注技术的新手程序员

0%

迁移云服务器

1、租云服务器,配置其免密登录

将本地的公钥复制到云服务器的~/.ssh/authorized_keys中,或者使用云服务器平台提供的密钥,在本地的.ssh文件夹中添加密钥在本地的位置
第一次登录云服务器(未配置免密登录)的具体流程可以参照以下步骤:

IR_Group_7_project Demo Instruction

  1. Login our VM instance
    Move key to secure location (eg. ~/.ssh in linux), then
1
2
chmod 600 path/to/shaoxi_key.pem
ssh -i path/to/shaoxi_key.pem shaoxi@52.174.147.101

2、在云服务器中安装docker

安装步骤参见官网:https://docs.docker.com/engine/install/ubuntu/
一般安装的版本为20.10.9,使用命令:VERSION_STRING=5:20.10.9~3-0~ubuntu-focal
查看docker是否安装成功:docker --version

3、在云服务器平台开放以下端口

22, 8000, 443, 80, 20000,协议均为TCP,源和目的地都为任何(0.0.0.0)

4、将本地的C:\Users\chen yi fan\django_lesson_1.tar上传到云服务器里

在powershell中执行的具体的命令为:
scp .\django_lesson_1.tar azureuser@20.123.135.13:~/

5、将镜像xxxx从本地文件xxxx.tar中加载出来

sudo docker load -i xxxx.tar

6、查看镜像是否成功加载出来

查看所有镜像的命令: sudo docker images

7、使用镜像重新创建并运行容器

docker run -p 20000:22 -p 8000:8000 -p 80:80 -p 443:443 --name django_server -itd django_lesson:1.1

8、登录到容器中

sudo docker attach django_server
登录为root用户

9、创建非root用户

adduser acs
赋予其sudo权限:usermod -aG sudo acs
设置密码

10、配置容器的免密登录

配置免密登录的过程是:在容器的.ssh/authorized_keys中写入本地的.ssh文件夹(C:\Users\chen yi fan.ssh)中的公钥的内容
然后修改本地的.ssh/config文件,添加容器的信息,例如:

1
2
3
4
Host django_azure
HostName 20.123.135.13
User acs
Port 20000

11、从本地/其他云服务器上登录到容器的命令

ssh acs@ip -p 20000
退出容器时注意不要关闭容器,而是挂起容器:ctrl+p ctrl+q

12、完成容器的一些配置:

nginx配置:
(1)修改yxc的acapp中的服务器IP
(2)将服务器的IP添加到项目的settings.py的ALLOWED_HOSTS中
(3)将yxc提供的nginx.conf写入容器的/etc/nginx/nginx.conf文件中
(4)将yxc提供的acapp.key写入容器的/etc/nginx/cert/acapp.key文件中
(5)将yxc提供的acapp.pem写入容器的/etc/nginx/cert/acapp.pem文件中
(6)启动nginx服务:sudo /etc/init.d/nginx start
(7)启动uwsgi服务:uwsgi --ini scripts/uwsgi.ini

redis配置:
(1)安装redis:pip install django_redis
(2)启动redis-server:sudo redis-server /etc/redis/redis.conf
(3)用top命令看有没有进程叫redis-server

django channels配置:
(1)安装channels_redis:pip install channels_redis
(2)启动django_channels:
在~/acapp目录下执行:daphne -b 0.0.0.0 -p 5015 acapp.asgi:application

同时启动https(uwsgi)和wss(daphne)协议的服务后,项目就应该可以正常运行

13、启动https和wss服务

启动https服务:uwsgi --ini scripts/uwsgi.ini

启动wss服务:daphne -b 0.0.0.0 -p 5015 acapp.asgi:application


重启云服务器

在云平台暂停云服务器后重新启动服务器并进入容器

1. 在云平台启动云服务器

需要等待5-10分钟才能完成重启的过程

2. 查看云服务器中已有的容器

运行命令:sudo docker ps -a

3. 启动被暂停/退出的容器

运行命令:sudo docker start django_server

4. 进入容器

在vscode上选择django_azure,点击进入即可

5. 启动容器中的服务

主要需要启动以下五个服务:

启动nginx服务:sudo /etc/init.d/nginx start

启动redis-server:sudo redis-server /etc/redis/redis.conf

启动uwsgi(https)服务:uwsgi --ini scripts/uwsgi.ini

启动wss服务:daphne -b 0.0.0.0 -p 5015 acapp.asgi:application

启动match system服务:./main.py

如何搭建和维护个人博客

个人博客的实现方式

使用GitHub Pages和Hexo框架搭建和维护个人博客

注意事项

注意1

尽量避免在一点不止一行的情况下使用:

的结构,因为这会导致网页上的博客渲染异常。在这种情况下,建议每一点使用一个小标题

注意2

在线博客的刷新需要几分钟时间,请在更新博客后稍安勿躁。在线博客各部分的更新速度不同,比如博客内容先更新了,但日志还没有更新,这是正常现象,稍稍等待即可

注意3

由于托管博客的仓库有两个分支,其中的master分支总会在我部署博客时实时更新,因此source分支在发布新博客时更新即可,不需要实时更新

注意4

使用VSCode在本地编辑博客即可,博客的内容可以复制自Typora,在VSCode中点击md文件左上角的铅笔符号(Edit in VSCode)即可在VSCode中编辑博客内容,每次编辑完后记得运行部署脚本将博客更新部署到网站上

博客结构

本博客计划同时按照标签页(tags)和分类页(categories)进行分类。分类是更大的范畴,主要分为算法、web开发、工具使用、个人随笔和找工记录五大类。标签页是更小的范畴,有Python, C++, Java, Django, Springboot, Typora, GitHub Pages, Hexo, VsCode, 简历等等。一般一篇文章只隶属于一个category,但可以同时拥有多个标签。

本博客可以通过网址:
https://yfchenkeepgoing.github.io/
访问,注意由于GitHub Pages是静态网页,因此出现延迟请稍安勿躁。另外,本博客所在的仓库地址为:https://github.com/yfchenkeepgoing/yfchenkeepgoing.github.io
其中有两个分支,分别为master和source。master托管了正在运行的博客,其中的内容在每次运行部署脚本后就会被更新。source托管了博客文件夹的所有源文件,需要通过git命令进行更新。博客网页与master分支中的内容进行了绑定。

个人博客的特点和功能

  1. 配置站点信息
  2. 修改为next主题
  3. 进行了next主题的配置,包括样式、favicon、avatar、rss、code、top、reading_process、bookmark、github_banner、pangu、math、pjax
  4. 采用gitalk存储并显示评论,需要评论者使用GitHub登录
  5. 使用了标签页和分类页
  6. 拥有搜索页

如何搭建个人博客

参见知乎链接:
https://zhuanlan.zhihu.com/p/371995929

其中指导非常详细,但过程较为繁琐,本文不再赘述。本文的重点在于如何维护搭建好的个人博客。

如何维护个人博客

本地调试

进入博客的根目录下,然后调用 Hexo 的 generate 命令,将 Hexo 编译生成 HTML 代码,命令如下:

1
hexo generate

然后我们利用 Hexo 提供的 serve 命令把博客在本地运行起来,命令如下:

1
2
hexo serve
hexo new "Day 30 Leetcode 332, 51, 37"

然后通过链接:http://localhost:4000/即可访问到渲染出的博客页面。注意:在这种情况下,博客页面只对自己可见,因此上述命令只能用于调试。

维护在线博客

增加新的文章并将其分类到特定的tags和categories中

新建一篇名为HelloWorld的文章,在本地博客的根目录下执行命令:

1
hexo new hello-world

创建的文章会出现在 source/_posts 文件夹下,是 MarkDown 格式。
在文章开头通过如下格式添加必要信息:

1
2
3
4
5
6
7
8
9
10
11
12
---
title: hello-world # 自动创建,如hello_world
date: 日期 # 自动创建,如2024-01-20 02:07:51
tags:
- 标签1
- 标签2
- 标签3
categories:
- 分类1
- 分类2
- 分类3
---

开头下方撰写正文,MarkDown 格式书写即可。这样在下次编译的时候就会自动识别标题、时间、类别等等,另外还有其他的一些参数设置,可以参考文档:https://hexo.io/zh-cn/docs/writing.html

标签和分类的区别

Tags(标签)
标签是用来描述博客文章中的具体细节的关键词。
它们是扁平的,不形成层次结构。
标签可以非常具体,也可以非常多,用于描述文章的具体内容,如“Python”、“Web开发”、“机器学习”等。
一个文章可以有多个标签,标签的数量通常比分类多

Categories(分类)
分类通常用来表示博客文章的主要主题或大的分组。
它们是层次性的,可以有子分类,形成一个结构化的树状层次,例如:“技术”可以有子分类如“编程”、“网页设计”等。
分类通常较少,更宽泛,用于将文章分配到几个广泛的、互相排斥的主题中。
一个博客文章通常只属于一个或少数几个分类

使用示例:
假设您写了一篇关于Python网络编程的博客文章。您可以将这篇文章归类到“编程”分类下,并给它加上“Python”、“网络编程”、“套接字编程”等标签。

总结:
分类用于表示文章的主要主题,是更广泛的分组工具。
标签用于详细描述文章的内容和细节,是更具体的关键词。

通过部署脚本部署在线博客

在根目录下新建一个 deploy.sh 的脚本文件,内容如下:

1
2
3
4
5
hexo clean

hexo generate

hexo deploy

在部署发布的时候只需要执行:

1
sh deploy.sh

就可以完成博客的更新了,非常方便。

注意,在发布博客时只能执行上述命令,不能执行 ./deploy.sh,否则博客无法正常发布。

(1)标题

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题

(2)快捷键

普通模式和源代码模式:ctrl+/
md语法正确显示需要在有文字的一行后面再空一行,把鼠标放在有文字的最后一行的后两行的位置

标题:按下ctrl和+,则当前行变成第六级的标题,每按一次ctrl和+则当前标题的等级提升一级。按下ctrl和-则是按下ctrl和+的逆向操作。

(3)字体

加粗
倾斜
斜体加粗
删除线 (~2删除线~2)
==高亮==
我是^上标^
我是~下标~ (注意用英文的~)

(4)列表

无序列表:
下一级是加号前面空两格
第一级是实心的圆,第二级是空心的圆,第三级开始都是实心的小方框

  • 一二三四五
    • 上山打老虎
      • 老虎没打到
        • 打到小松鼠

有序列表:

  1. 一二三四五
  2. 上山打老虎
  3. 老虎没达到
  4. 打到小松鼠

(5)表格

MON TUE WED THU FRI
上山 上山 上山 上山 上山
打老虎 打老虎 打老虎 打老虎 打老虎

在普通模式下,输入:|MON|TUE|WED|THU|FRI|,再输入回车,即可出现表格,可以增加表格的行和列,以及左右居中等等

(6)引用

下一级别:加一个>

一二三四五

上山打老虎

老虎没达到

打到小松鼠

(7)分割线

疯狂打——-即可


==(7)代码==

我是代码

1
2
3
4
5
6
7
8
# include <iostream>

using namespace std;

int main()
{
cout << "hello world" << endl;
}

(8)字数和侧边栏

字数在右下角
侧边栏在左侧,可以通过在普通模式中点击左下角的小圆圈呼出
大纲也在侧边栏中

(9)插入图片

将图片放入到图片文件夹中,然后复制图片将其直接粘贴进来即可

Snipaste_2023-12-27_04-15-35

Snipaste_2023-12-27_04-12-14

(10)改变字体颜色

将字体改变为红色:<font color=red>文字 </font>

==平常用高亮即可,不要用红色==

(11) diff代码块

1
2
3
- 这行被删除了
+ 这行被添加了
这行没有改变

(12) enter和shift enter的区别

enter: 新起一段(空一行)
shift enter: 新起一行

(13) markdown source code


## (1)标题

# 一级标题

## 二级标题

### 三级标题

#### 四级标题

##### 五级标题

###### 六级标题

## (2)快捷键

普通模式和源代码模式:ctrl+/
md语法正确显示需要在有文字的一行后面再空一行,把鼠标放在有文字的最后一行的后两行的位置

标题:按下ctrl和+,则当前行变成第六级的标题,每按一次ctrl和+则当前标题的等级提升一级。按下ctrl和-则是按下ctrl和+的逆向操作。

## (3)字体

**加粗**
*倾斜*
***斜体加粗***
~~删除线~~ (~*2删除线~*2)
==高亮==
我是^上标^
我是~下标~       (注意用英文的~)

## (4)列表

无序列表:
下一级是加号前面空两格
第一级是实心的圆,第二级是空心的圆,第三级开始都是实心的小方框

+ 一二三四五
  + 上山打老虎
    + 老虎没打到
      + 打到小松鼠

有序列表:

1. 一二三四五
2. 上山打老虎
3. 老虎没达到
4. 打到小松鼠

## (5)表格

| MON    | TUE    | WED    | THU    | FRI    |
| ------ | ------ | ------ | ------ | ------ |
| 上山   | 上山   | 上山   | 上山   | 上山   |
| 打老虎 | 打老虎 | 打老虎 | 打老虎 | 打老虎 |

在普通模式下,输入:|MON|TUE|WED|THU|FRI|,再输入回车,即可出现表格,可以增加表格的行和列,以及左右居中等等

## (6)引用

下一级别:加一个>

> 一二三四五
>
>> 上山打老虎
>>
>>> 老虎没达到
>>>
>>>> 打到小松鼠
>>>>
>>>
>>

## (7)分割线

疯狂打-----即可

---

##==(7)代码==

`我是代码`

1
2
3
4
5
6
7
8
# include <iostream>

using namespace std;

int main()
{
cout << "hello world" << endl;
}
## (8)字数和侧边栏 字数在右下角 侧边栏在左侧,可以通过在普通模式中点击左下角的小圆圈呼出 大纲也在侧边栏中 ## (9)插入图片 将图片放入到图片文件夹中,然后复制图片将其直接粘贴进来即可 ![Snipaste_2023-12-27_04-15-35](D:/OneDrive%20-%20stu.xjtu.edu.cn/%E5%9B%BE%E7%89%87/Snipaste_2023-12-27_04-15-35.png) ![Snipaste_2023-12-27_04-12-14](D:/OneDrive%20-%20stu.xjtu.edu.cn/%E5%9B%BE%E7%89%87/Snipaste_2023-12-27_04-12-14.png) ## (10)改变字体颜色 将字体改变为红色:``文字 `` ==平常用高亮即可,不要用红色== ## (11) diff代码块
1
2
3
- 这行被删除了
+ 这行被添加了
这行没有改变
## (12) enter和shift enter的区别 enter: 新起一段(空一行) shift enter: 新起一行