文章转载自(如有侵权联系删除):http://www.weixiuzhan.cn/news/show-13562.html

阿里云学生you惠入口:https://promotion.aliyun.com/ntms/act/campus2018.html

网站部署

  • 1. 云服务器的介绍与采购
    • 1.2 云服务器的购买
  • 2. 云服务器可视化以及远程连接传输
    • 2.1 实现Centos可视化
    • 2.2 Xshell 实现远程连接
    • 2.3 Xftp 实现文件传输
  • 3. 配置环境 下载必要软件
    • 3.41 tushare 库的安装
    • 3.42 Pandas 的安装
    • 3.43 PrettyTable 的安装
    • 3.11 首先创建一个文件夹
    • 3.12 开始下载Python安装包
    • 3.13 解压缩Python安装包
    • 3.14 安装前的准备工作
    • 3.15 安装python 3.8.2
    • 3.16 Python 3.8.2 的位置 调用 以及 pip3
    • 3.1 安装Python 3.8.2
    • 3.2 Django 3.0.1的安装
    • 3.3 SQLite3的安装
    • 3.4 其他Django 中用到的库的导入
  • 4. 项目迁移
    • 4.1 文件传输到云端
    • 4.2 项目迁移
    • 4.3 将setting.py 中的 ALLOWED_HOSTS 中加上公网ip
    • 4.4 项目绑定公网ip地址和开放端口
  • 5. 保持项目始终在服务器中运行
    • 5.1 下载screen
    • 5.2 创建新进程
    • 5.3 从新进程返回主进程
    • 5.4 从主进程进入子进程
    • 5.5 完全退出子进程
    • 5.6 最终效果
  • 6. 用到的Linux命令
    • 6.1 进入文件夹的操作
    • 6.2 文件夹的创建与删除
    • 6.3 文件的复制
    • 6.4 查看version

1. 云服务器的介绍与采购

服务器是提供计算服务器、网络服务的一种设备。当我们访问一个网站时,点击这个网站会发出访问请求,服务器会响应服务请求,并相对应地进行处理,反馈相对应的数据。如果我们想要把自己的网站让别人也能看到,那就必须要放到服务器上。云服务器说白了就是远程不知放在哪个机房的一台电脑,可以通过远程控制部署自己的项目。云服务器相对传统的服务器而言,在部署项目时您无需提前采购硬件设备,而是根据业务需要,随时创建所需数量的云服务器ECS实例。在使用过程中,随着业务的扩展,您可以随时扩容磁盘、增加带宽。如果不再需要云服务器,也能随时释放资源,节省费用.

阿里云新手最全面教程 从购买到项目发布插图
  1. 实例 等同于一台虚拟机,包含CPU、内存、操作系统、网络、磁盘等最基础的计算组件
  2. 实例规格 是指实例的配置,包括vCPU核数、内存、网络性能等。实例规格决定了ECS实例的计算和存储能力
  3. 镜像 是指ECS实例运行环境的模板,一般包括操作系统和预装的软件。操作系统支持多种Linux发行版本和不同的Windows版本
  4. 块存储-包括基于分布式存储架构的 云盘和共享块存储,以及基于物理机本地硬盘的 本地存储。
  5. 快照 是指某一个时间点上一块弹性块存储的数据备份
  6. 安全组 由同一地域内具有相同保护需求并相互信任的实例组成,是一种虚拟防火墙,用于设置实例的网络访问控制

而比较常见的分为个人服务器,企业级服务器。一般我们需要的是个人服务器。个人服务器的选择有两种 两者的区别详情见: 阿里云轻量应用服务器和ECS云服务器哪个好?有什么不同

  • 云服务器ECS (Elastic Compute Service)
  • 轻量级服务器

总的来说: 阿里云ECS云服务器类似于一台放在云端的可以自主选择配置的空白电脑主机,需要自己选择CPU、内存、硬盘、带宽配置并自行安装操作系统,适合有一定互联网建站经验和服务器运维基础的用户。而轻量应用服务器相当于你购买已经安装好操作系统的电脑主机,适合对服务器操作不太熟练的新手用户

1.2 云服务器的购买

这里选择了阿里云服务器, 注册 学生认证 购买优惠产品, 这里选择了轻量级服务器, 自己本身的话了解还不是很多应该比较难上手运维工作先从这款轻量级的入手吧.

阿里云新手最全面教程 从购买到项目发布插图1

阿里云的学生版还是很亲民的, 如果不是学生的话这一套就1000+了

阿里云新手最全面教程 从购买到项目发布插图2

注意这里要选择 应用镜像和系统镜像了, 两者的本质区别是应用镜像依托于系统镜像之上, 应用镜像提供了相应的应用及其环境依赖 就不用了自己配置了 但是应用镜像也对应了相应的系统镜像. 具体的介绍:

应用镜像和系统镜像

阿里云新手最全面教程 从购买到项目发布插图3
阿里云新手最全面教程 从购买到项目发布插图4

这里面还有一个关系型数据库 RDBS (Relationship Data Base System) 和一个对象存储资源包(还不知道是什么)

阿里云新手最全面教程 从购买到项目发布插图5

2. 云服务器可视化以及远程连接传输

2.1 实现Centos可视化

阿里云新手最全面教程 从购买到项目发布插图6

在点击远程访问后 进入管理员模式

sudo su root

之后安装安装X(X Window System)

yum groupinstall "X Window System"

安装需要的图形界面软件

yum groupinstall "GNOME Desktop"

设置默认通过桌面环境启动服务器, 完成后默认通过图形界面远程访问

systemctl set-default graphical.target

安装 epel库 和 xrdp库

yum install epel-release
yum install xrdp

启动xrdp服务并设置为开机启动

systemctl start xrdp
systemctl enable xrdp

在这里所有的库都已经完成了下一步是用windows 本地远程连接
注意这里一定要开放3389端口这是为了让本地windows能远程连接
还要开房80 和 8080 端口目的是为了让公网ip能被找到

阿里云新手最全面教程 从购买到项目发布插图7

这里加入了3389不加入连接一定失败
之后windows+R 输入 mstsc

阿里云新手最全面教程 从购买到项目发布插图8

在这里输入ip地址注意是公网ip

阿里云新手最全面教程 从购买到项目发布插图9

输入root和设置好的密码就能进入了

阿里云新手最全面教程 从购买到项目发布插图10

成功图:

阿里云新手最全面教程 从购买到项目发布插图11

这个地方的运行内存实在太小了开了pycharm就到了1.7 所以就用这个当一个文件管理器好了其实也没必要因为Xftp很强大.

2.2 Xshell 实现远程连接

首先下载Xshell 然后开始配置
出现welcome就完成了

2.3 Xftp 实现文件传输

下载Xftp 点击新建
填好相应的信息后
直接把文件拖到响应的地方就好了 此时

3. 配置环境 下载必要软件

3.1 安装Python 3.8.2

3.11 首先创建一个文件夹

mkdir ~/Desktop/Python 创建一个 新的文件夹用来存储 新的Python 安装包和 Python 安装包
cd /Desktop/Python        进入这个目录下 准备后续工作

3.12 开始下载Python安装包

注意你可以选择自己想要的版本 所有版本如链接所示[Python安装包]

如果没有下载wget的话:

yum -y install wget

开始下载

wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz

下载成功的样子:

3.13 解压缩Python安装包

tar zxf Python-3.8.0.tgz

用ls去看下Python目录下是否有了解压后的Python安装包

阿里云新手最全面教程 从购买到项目发布插图12

这时候看一下我们的图形界面

3.14 安装前的准备工作

为了防止编译过程中环境依赖出错先完成环境的加载

yum update -y

yum groupinstall -y 'Development Tools'

yum install -y gcc openssl-devel bzip2-devel libffi-devel

3.15 安装python 3.8.2

首先配置路径以及相关的设置 这里用configure

./configure prefix=/usr/local/python3 --enable-optimizations

– prefix 选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share,比较凌乱。

如果配置–prefix,如:./configure --prefix=/usr/local/python3可以把所有资源文件放在 /usr/local/python3 的路径中,不会杂乱.用了–prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个相同的操作系统机器即可.当然要卸载程序,也可以在原来的make 目录下用一次make uninstall,但前提是make文件指定过uninstall.
–enable-optimizations是优化选项(LTO,PGO 等)加上这个 flag 编译后,性能有 10% 左右的优化,但是这会明显的增加编译时间,老久了.

然后使用 make install 去安装

make install

这里出现了第一个bug

Could not import runpy module
Traceback (most recent call last):
  File "/root/Python/Python-3.8.2/Lib/runpy.py", line 15, in <module>
    import importlib.util
  File "/root/Python/Python-3.8.2/Lib/importlib/util.py", line 14, in <module>
    from contextlib import contextmanager
  File "/root/Python/Python-3.8.2/Lib/contextlib.py", line 4, in <module>
    import _collections_abc
SystemError: <built-in function compile> returned NULL without setting an error
generate-posix-vars failed
make[1]: *** [pybuilddir.txt] Error 1
make[1]: Leaving directory `/root/Python/Python-3.8.2'
make: *** [profile-opt] Error 2

这个bug的原因是gcc的版本太低必须要8.10 以上才能完美运行, 这里给的解决方案是把后面的–enable optimization 去掉 直接用./Confirgure -profix 就好了

接着出现了第二个BUG

Could not import runpy module
Traceback (most recent call last):
  File "/root/Desktop/Python/Python-3.8.2/Lib/runpy.py", line 15, in <module>
    import importlib.util
  File "/root/Desktop/Python/Python-3.8.2/Lib/importlib/util.py", line 14, in <module>
    from contextlib import contextmanager
  File "/root/Desktop/Python/Python-3.8.2/Lib/contextlib.py", line 4, in <module>
    import _collections_abc
SystemError: <built-in function compile> returned NULL without setting an error
generate-posix-vars failed
make: *** [pybuilddir.txt] Error 1

这个Bug可能是由于编译语言符号的问题 但是这里建议先把刚刚安装失败的路径清空 或者换一个安装路径 用这个:

./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

到这一步完美解决

最后最简单的方式应该是

./configure --prefix=/usr/local --enable-unicode=ucs4 --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"

然后 直接

make install

3.16 Python 3.8.2 的位置 调用 以及 pip3

到这里终于完成了Python的安装 安装在了 /usr/local下

阿里云新手最全面教程 从购买到项目发布插图13

用python3 就可以执行 Python

阿里云新手最全面教程 从购买到项目发布插图14

用pip3 就可以install各种包了

阿里云新手最全面教程 从购买到项目发布插图15

3.2 Django 3.0.1的安装

pip3 install Django==3.0.1 这里选择和项目版本号相同的

3.3 SQLite3的安装

wget https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz

老方法用wget从官网下载最新版本
接下来就是解压

tar xvf sqlite-autoconf-3310100.tar.gz

接着 看一下 文件夹里是不是解压好了

阿里云新手最全面教程 从购买到项目发布插图16

好接下来就是 安装了

先进入

cd sqlite-autoconf-3310100

这里有两种进入方式还有一种是 cd ./~ 这样是绝对路径上面是相对路径
然后配置

./configure 这里没用上面的profile 意味着采取了默认安装不指定路径
具体的安装位置和上面说的应该是一样的
可视化界面看不到home之上的目录

然后最后一步就是安装

make install

通过python3 导入sqlite3 然后查看 sqlite3的版本发现的确是更新了.

阿里云新手最全面教程 从购买到项目发布插图17

3.4 其他Django 中用到的库的导入

3.41 tushare 库的安装

3.42 Pandas 的安装

3.43 PrettyTable 的安装

阿里云新手最全面教程 从购买到项目发布插图18

4. 项目迁移

4.1 文件传输到云端

先用Xflp把项目传过来这里我放到了桌面上
看一下图形界面确定下

4.2 项目迁移

cd ~/Desktop/demo 进入manage.py所在的位置
python3 manage.py migrate 完成第一次迁移 目的是使下面的模块全部生效

阿里云新手最全面教程 从购买到项目发布插图19
阿里云新手最全面教程 从购买到项目发布插图20

第二次迁移 这个不知道有什么意义 不过保险起见还是迁移了吧

python3 manage.py makemigrations
python3 manage.py migrate

4.3 将setting.py 中的 ALLOWED_HOSTS 中加上公网ip

这里的ALLOWED_HOSTS 里面包含的是可以访问的ip 这里只需要加上公网ip就好了因为别人的访问都是通过公网ip地址访问的Django项目

4.4 项目绑定公网ip地址和开放端口

python3 manage.py runserver 0.0.0.0:8000

注意开放8000端口

阿里云新手最全面教程 从购买到项目发布插图21

5. 保持项目始终在服务器中运行

有三种方式 nohub 最为简单

nohup python3 manage.py runserver 0.0.0.0:800

第二种方式是单独开个进程用screen

5.1 下载screen

yum install screen 首先安装screen

阿里云新手最全面教程 从购买到项目发布插图22

5.2 创建新进程

screen -S name name用于标注这个窗口的作用

阿里云新手最全面教程 从购买到项目发布插图23

这里已经新开了一个窗口就相当于一个新进程

在这个新的线程下启动服务器后端

5.3 从新进程返回主进程

现在从这个新线程中返回主线程

Ctrl+a 然后再按下d 这个时候 但是子线程还是在运行的

阿里云新手最全面教程 从购买到项目发布插图24

可以看到这里已经detached出来了

5.4 从主进程进入子进程

screen -ls 罗列所有进程情况以及PID
screen -r -d 加上 PID 如果只有一个进程的话 只用 -r -d

阿里云新手最全面教程 从购买到项目发布插图25

可以看到又回来了

5.5 完全退出子进程

完全退出的话

exit

5.6 最终效果

6. 用到的Linux命令

6.1 进入文件夹的操作

cd ~/ 表示从home开始往下找
cd ./表示从当前目录去找下级目录
cd ../表示从当前目录去找上层目录
cd ..去上一层
cd ../..往上返回两层

6.2 文件夹的创建与删除

mkdir [-p] dirName 这里的-p是用来保证所经历的文件路径都存在不存在就创建
mkdir -p BBB/Desktop 这是在BBB 下创建 Desktop如果BBB不存在则先新建BBB
rm [fir] 文件或目录 f i r 分别是三种不同的参数类型代表了不同的设置

-f:强制删除
-i:交互模式,在删除前询问用户是否操作
-r:递归删除,常用在目录的删除

rm -i /test/file1 这是交互式删除/test 下的 file1 文件夹

6.3 文件的复制

cp [-adfilprsu] 源文件(source) 目标文件(destination) 这个参数有很多对应了很多模式

-a:是指archive的意思,也说是指复制所有的目录
-d:若源文件为连接文件(link file),则复制连接文件属性而非文件本身
- f:强制(force),若有重复或其它疑问时,不会询问用户,而强制复制 
-i:若目标文件(destination)已存在,在覆盖时会先询问是否真的操作
-l:建立硬连接(hard link)的连接文件,而非复制文件本身
-p:与文件的属性一起复制,而非使用默认属性
-r:递归复制,用于目录的复制操作
-s:复制成符号连接文件(symbolic link),即“快捷方式”文件
-u:若目标文件比源文件旧,更新目标文件 

着重这几条
-a:是指archive的意思,也说是指复制所有的目录
- f:强制(force),若有重复或其它疑问时,不会询问用户,而强制复制 
-s:复制成符号连接文件(symbolic link),即“快捷方式”文件
-u:若目标文件比源文件旧,更新目标文件 

cp -Rf /home/user1/* /root/temp/

这里面的* 为把user1/下的全部复制

6.4 查看version

--version
Python3 --version