服务器预设置

请选择你的服务器

首先你得有一台年轻人自己的服务器,目前来说腾讯云,阿里云等国内的云平台都有学生优惠,对于学生党来说,最便宜的就够用了。我使用的服务器系统是Ubuntu Server 20.04 LTS 64bit。

SSH远程连接

这部分介绍SSH远程连接服务器的具体操作,保姆级别哟

首先我们要配置SSH远程连接我们的服务器,毕竟谁也不想每次操作服务器都得登录云平台,那样太麻烦了。

  1. 首先我们要在控制台中点击登录,第一步要初始化超级用户ROOT的密码,进入superuser权限:
    1
    2
    sudo passwd     # 初始化密码
    su # 切换到ROOT超级用户
  2. 然后我们要修改相关的配置文件,允许SSH远程连接服务器:
    1
    vim /etc/ssh/sshd_config    # 编辑ssh配置文件
  3. 打开文件后,对如下行按照注释进行修改:
    1
    2
    3
    4
    RSAAuthentication yes                       # 开启rsa验证,需要添加
    PubkeyAuthentication yes # 开启公钥登录,一般被注释掉了,去掉前面的#就好
    AuthorizedKeysFile .ssh/authorized_keys # 公钥保存位置,原来就有
    PasswordAuthentication yes # 开启使用密码登录
  4. 保存退出后使用如下指令重启SSH服务
    1
    service sshd restart        # 重启ssh服务
  5. 再在root模式下使用如下指令添加一个用户:
    1
    adduser takune  # takune替换为你的用户名
    输入密码之后即可成功创建一个新用户。
  6. 由于部分服务器操作需要sudo权限,因此我们要给新添加的用户设置相关的权限:
    1
    2
    3
    4
    vim /etc/sudoers            # 在该文件下配置新用户的sudo权限

    # User privilege specification
    takune ALL=(ALL:ALL) ALL # 添加sudo权限,使用wq!强制保存配置
  7. 获取本地SSH公钥之后,按照如下步骤进行配置:
    1
    2
    3
    4
    5
    6
    ssh takune@123.45.56.890    # takune为你的用户名,@后面为服务器的IP地址
    mkdir .ssh # 在该用户的根目录创建一个.ssh文件夹
    cd .ssh # 进入.ssh文件夹
    touch authorized_keys # 创建名字为authorized_keys的文件
    vim authorized_keys # 编辑该文件内容,将SSH公钥复制到文件中后保存退出即可远程SSH连接
    sudo service sshd restart # 使用sudo权限重启SSH服务
    到这一步我们终于实现了通过SSH远程连接服务器,就可以更加方便地操作服务器了。

服务器安装Mysql以及相关配置

通过上一part的配置,我们现在可以使用的本地的powershell远程连接服务器进行相关操作了。下面我们将介绍在服务器安装Mysql的具体步骤以及相关配置使得我们可以远程连接服务器的mysql。

服务器安装mysql步骤

  1. 通过以下指令更新apt管理的资源包,这样才能够安装的最新版本的Mysql
    1
    sudo apt update
  2. 通过以下指令安装Mysql
    1
    sudo apt install mysql-server
  3. 安装以后通过以下指令查看mysql运行状态;
    1
    sudo systemctl status mysql
    输出如下所示时,表示mysql已经处于允许状态。
    Mysql状态查询

mysql远程连接相关配置

在实际开发中,我们往往需要远程连接数据库并对其中的数据进行增删改查的操作。但是在默认情况下,mysql仅监听本地连接。若想允许远程连接数据库,首先需要修改配置文件,让mysql可以监听远程固定IP或所有远程IP。因此这一部分我们将修改mysql的相关配置文件,以实现远程连接的目的。

修改配置文件mysqld.cnf

其中配置文件mysqld.cnf的路径一般为/etc/mysql/mysql.conf.d/mysqld.cnf

  1. 通过以下命令进入配置文件mysqld.cnf
    1
    sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
  2. 进入配置文件后,找到bind-address所在那一行,默认值为127.0.0.1,表示仅监听本地连接。因此我们要将其改为远程IP可访问。通过使用通配符IP地址0.0.0.0可以实现任意IP连接,或者是指定的IP地址。在这里我们将其设置为0.0.0.0,即允许所有IP访问。
    修改mysql配置文件
  3. 重启mysql服务
    1
    sudo systemctl restart mysql

在部分mysql版本的配置文件中没有bind-address这一行,在适当的地方加上就行

添加新的mysql用户

由于使用ROOT用户进行远程连接可能会出现无法使用密码登录的情况,因此最好创建一个新的用户。

  1. 首先使用sudo权限进入mysql;
    1
    sudo mysql
  2. 进入mysql后,创建一个新的用户,并且设置为使用密码作为认证方式;
    1
    CREATE USER 'userName'@'%' IDENTIFIED WITH mysql_native_password BY 'passwd';
    上述命令中,%表示IP任意,userNamepasswd修改为自己的用户名和密码。
  3. 赋予刚刚创建的用户所有数据库的权限,使之成为新的管理用户;
    1
    GRANT ALL PRIVILEGES ON *.* TO 'userName'@'%' WITH GRANT OPTION;
  4. 刷新mysql访问权限,退出mysql。
    1
    2
    FLUSH PRIVILEGES;
    EXIT;
    到此为止我们就实现了服务器端mysql的安装,并且能够远程连接了。

    服务器安装Django环境

在本步骤中我们将在服务器搭建Django,并且采用Miniconda来对环境进行管理。

Miniconda

介绍一下,Conda是在Windows、macOS和Linux上运行的开源软件包管理系统和环境管理系统。Conda可以快速安装、运行和更新软件包及其依赖项。Conda可以轻松地在本地计算机上的环境中创建,保存,加载和切换。它是为Python程序创建的,但可以打包和分发适用于任何语言的软件。

因此我们选择安装Anaconda或者Miniconda来管理服务器的Python环境,我选择的是Miniconda(问就是没钱)。

  1. 你可以在清华镜像下载对应的Miniconda安装包。下载Miniconda

  2. 在本地用powershell输入如下指令将下载好的安装包上传到服务器;

    1
    scp /path takune@0.0.0.0:/home/takune/

    将上述指令中的/path替换为Miniconda安装包的路径,takune替换为你的服务器用户名,0.0.0.0替换为你的服务器的IP地址。

  3. 登录服务器使用如下指令进行miniconda的安装;

    1
    bash name   # 将name替换为Miniconda安装包的名字

    然后按照提示一路安装即可。

搭建Django环境

  1. 使用conda指令创建一个django环境(使用的是python3.8版本);
    1
    conda create --name django python=3.8 
    这样就完成了服务器Django环境的相关配置了,然后将你的后端项目上传即可。

    配置uWSGI

介绍:uWSGI可以理解为一个可持续运行的后端的服务器模块,可以修改相关配置文件指定进程、线程的最大数量。

使用conda指令安装uWSGI:

1
conda install -c conda-forge uwsgi

按照提示进行相关配置即可

配置Nginx

  1. 下载Nginx;
    1
    sudo apt install nginx
  2. 启动Nginx服务;
    1
    sudo systemctl start nginx

部署前端

配置完成Nginx后,打开Nginx文件夹下的nginx.conf文件,其内容有如下一行:

1
include /etc/nginx/conf.d/*.conf;

因为该文件include了文件夹conf.d中所有后缀为.conf的文件,所以我们只要在文件夹conf.d中添加对应的.conf文件即可。因此我们需要新建web.conf,并将如下内容复制到其中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
server {
listen 80;
server_name 00.000.00.00; # add your server IP if you haven't domain
# if you have domain, use this
# listen 443 ssl;
# server_name your domain name;

location / {
root /home/takune/fronted-demo; # It's your fronted-demo path
index index.html index.htm;
try_files $uri $uri/ /index.html;
}

location /api {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8080;
}

# ssl_certificate /etc/nginx/ssl/zewan.top.crt;
# ssl_certificate_key /etc/nginx/ssl/zewan.top.key;
# ssl_session_timeout 5m;
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
# ssl_prefer_server_ciphers on;

error_page 497 https://$host$uri?$args;
}

保存并且退出,使用如下指令检查相关配置和重启服务:
1
2
sudo nginx -t           # 检查nginx是否存在错误
sudo nginx -s reload # 重启nginx服务

到此我们就成功将前端部署到服务器上。