最近租了一台阿里云服务器,秉着不将它闲置的想法,从零基础学习开始搭建了一个Web服务,顺便在这里做个笔记。
创建名为 admin 的用户组 # groupadd admin
添加名为 jhm 的用户 # useradd jhm -g admin
给 jhm 用户设置密码 # passwd jhm
查看用户 # vim /etc/passwd
查看用户组 # vim /etc/group
jhm 用户下次本地可以这样登陆 $ ssh jhm@IP地址
# sudo vim /etc/sudoers
root ALL=(ALL) ALL
jhm ALL=(ALL) ALL
# 按 esc 退出编辑模式,按 shift+: 进入命令模式,输入 wq!强制保存并退出
# vim /etc/ssh/sshd_config
PermitRootLogin no
# 将井号删去并把 yes 改为 no
# systemctl restart sshd.service
在本地计算机找到 .ssh 文件 $ cd .ssh
(如没有就 mkdir 一个)
生成密钥对 $ ssh-keygen -t rsa -C jhm -f jhmfile
$ vim .ssh/config
Host jhm
HostName IP地址
Port 22
User jhm
IdentityFile ~/.ssh/jhmfile
远程拷贝公钥 $ scp jhmfile.pub jhm@IP地址:.
登陆云服务器 jhm 账户,创建 .ssh 文件夹 $ mkdir .ssh
在 .ssh 文件夹中创建 authorized_keys 文件 $ touch authorized_keys
将公钥内容写入 authorized_keys 文件中 $ cat jhmfile.pub >> ~/.ssh/authorized_keys
总用量 32
drwx------ 3 jhm admin 4096 2月 19 23:17 .
... ...
drwxr-xr-x 2 jhm admin 4096 2月 19 23:21 .ssh
$ chmod 700 .ssh
总用量 32
drwx------ 3 jhm admin 4096 2月 19 23:17 .
... ...
drwx------ 2 jhm admin 4096 2月 19 23:21 .ssh
$ chmod 600 authorized_keys
总用量 12
drwx------ 2 jhm admin 4096 2月 19 23:21 .
drwx------ 3 jhm admin 4096 2月 19 23:17 ..
-rw-r--r-- 1 jhm admin 385 2月 19 23:24 authorized_keys
$ ssh jhm
# sudo vim /etc/vimrc
,并按个人习惯添加或修改 参考链接set nu # 显示行号
syntax on # 语法高亮
set tabstop=4 # tab退4格
先对 yum 进行升级 $ sudo yum update
安装 yum 自动更新插件 $ sudo yum install -y cronie yum-cron
修改 yum 的配置文件 $ sudo vim /etc/yum/yum-cron.conf
apply_updates yes
$ sudo systemctl start crond
,$ sudo systemctl start yum-cron
安装防火墙 $ sudo yum install -y firewalld
,启动防火墙 $ sudo systemctl start firewalld.service
修改端口配置(四个地方)
a) 修改服务器中 ssh 本身的配置 开放的默认端口是 22,为了安全起见需要对其进行修改。进入配置文件 ,将 Port 改为其他数字,比如 12580 $ sudo vim /etc/ssh/sshd_config
b) 修改防火墙中关于 ssh 的配置 先将其拷贝到当前防火墙的工作路径中,然后再对 xml 文件进行修改,将 port 改为 12580 $ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/
,$ sudo vim /etc/firewalld/services/ssh.xml
c) 修改阿里云控制台实例中的安全组 新建添加 12580 端口。需要使用网页版控制台终端(在本地进行重启服务会导致断开链接)进行远程登录,重启远程服务,重启防火墙服务 $ sudo systemctl restart sshd.service
,$ sudo systemctl restart firewalld.service
d) 修改本地计算机上的 .ssh 文件 对其下的 config 文件进行编辑,将 Port 改为 12580
Host jhm
HostName IP地址
Port 12580
User jhm
IdentityFile ~/.ssh/jhmfile
安装 Python3 环境依赖 $ sudo yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel gcc libffi-devel nginx
下载 Python3 安装包(两种方法)
a) 在线下载 在 Python网站 上选择合适的 python 版本的 tgz 安装包下载地址 $ wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
(以 3.6.8 为例)
b) 远程拷贝 因为在线下载网速会很慢,可以先在本地下载好 tgz 安装包,通过 scp 的方式上传至服务器
解压缩 $ tar -zxvf Python-3.6.8.tgz
安装 Python3
a) 创建文件 cd 到 /usr/local/ 创建文件 $ sudo mkdir python3
b) 指定安装路径 cd 到 Python-3.6.8 文件夹,指定安装路径 $ ./configure --prefix=/usr/local/python3
c) 编译和安装 在 Python-3.6.8 文件夹下,输入 make && make install
a) Python3 软链 $ sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3
b) pip3 软链 $ sudo ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
下载虚拟环境 $ sudo pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
创建虚拟环境软链接 $ sudo ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
新建项目文件夹 $ sudo mkdir myproject
创建虚拟环境 $ virtualenv venv(虚拟环境名称)
进入/退出虚拟环境 $ source venv/bin/activate
,$ deactivate
下载 MySQL $ sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
安装 repo 文件 $ sudo rpm -ivh mysql57-community-release-el7-9.noarch.rpm
$ sudo yum install mysql-server
启动 MySQL 服务 $ sudo systemctl start mysqld
获取临时密码 $ sudo grep 'temporary password' /var/log/mysqld.log
2020-02-25T07:12:09.795178Z 1 [Note] A temporary password is generated for root@localhost: DeC/pka2qk
$ sudo rm -rf /var/lib/mysql
,重启 MySQL 服务 $ sudo systemctl restart mysqld
,再去获取临时密码修改密码,先用临时密码登录 $ mysql -u root -p
,修改密码 $ set password="密码"
设置开机自启动 $ systemctl enable mysqld
配置默认编码为 utf8,编辑 $ sudo vim /etc/my.cnf
character_set_server=utf8 init_connect='SET NAMES utf8'
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple flask_sqlalchemy PyMySQL flask-script flask-migrate
a) 进入 mysql 数据库 use mysql;
b) 查看 user 表的 host 值 select host,user from user;
(即可进行连接访问的主机/IP名称)
c) 修改 host 值 update user set host='%' where host='localhost';
(以通配符%的内容增加主机/IP地址,也可以直接增加IP地址)
d) 刷新 MySQL 的系统权限相关表 flush privileges;
$ sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
,重启防火墙 $ sudo firewall-cmd --reload
(记得还要去阿里云控制台安全组中新添一个 3306 的规则)参考链接进入虚拟环境,安装 Flask pip3 install flask
创建 flask 文件 sudo vim myproject/flask_test.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello ~"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5000, debug=True)
打开 5000 端口 sudo firewall-cmd --permanent --add-port=5000/tcp
,操作完必须重启 sudo firewall-cmd --reload
(记得还要去阿里云控制台安全组中新添一个 5000 的规则) 参考链接
启动 flask 测试服务 python3 flask_test.py
,在浏览器访问 http://IP地址:5000
在虚拟环境中,使用 pip3 安装 uWSGI $ sudo pip3 install uwsgi
创建 uWSGI 软链 $ sudo ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
使用 yum 安装 Nginx $ sudo yum -y install nginx
编辑 uWSGI 的配置文件 sudo vim myproject/uwsgi.ini
[uwsgi]
#uwsgi启动时所使用的地址与端口
socket = 127.0.0.1:5000
#虚拟环境目录
home = /home/jhm/myproject/venv
#项目目录
pythonpath = /home/jhm/myproject
#指向网站根目录
chdir = /home/jhm/myproject
#python启动程序文件
wsgi-file = flask_test.py
#python程序内用于启动的application变量名
callable = app
#处理器数
processes = 4
#线程数
threads = 2
#状态监测地址
stats = 127.0.0.1:9191
$ sudo vim /etc/nginx/nginx.conf
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include for more information.
server {
listen 80 default_server;
server_name IP地址;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
uwsgi_param UWSGI_PYHOME /home/jhm/myproject/venv;
uwsgi_param UWSGI_CHDIR /home/jhm/myproject;
uwsgi_param UWSGI_SCRIPT flask_test:app;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
启动 nginx 服务 $ sudo systemctl start nginx
重启 nginx 服务 $ sudo systemctl restart nginx.service
启动 uwsgi 服务器 $ uwsgi -d --ini uwsgi.ini
关闭 uwsgi 服务器 $ pkill -f uwsgi -9
在本地新建一个文件夹 flask-centos,使用 vscode 打开(需要中文界面,下载安装插件 Chinese)
下载安装插件 sftp,按快捷键 ⇧+⌘+p, 打开控制面板,搜索 sftp.config,会生成一个 .vscode 文件夹里面有一个 sftp.json 对其进行配置 参考链接
{
"name": "flask-centos",
"host": "IP地址",
"protocol": "sftp/ftp",
"port": 22,
"username": "jhm",
"password":"密码",
"remotePath": "~/myproject",
"uploadOnSave": true,
"ignore": [".vscode", ".git", ".DS_Store", "__pycache__"],
"syncOption": {"delete": true}
}
下载 按快捷键 ⇧+⌘+p, 打开控制面板,搜索 SFTP:Sync Remote -> Local
上传 按快捷键 ⇧+⌘+p, 打开控制面板,搜索 SFTP:Sync Local -> Remote
权限问题报错 如果修改了代码是无法是无法成功同步的,可能是因为权限问题。登陆服务器,$ cd myproject/
,ls -al 查看
drwxr-xr-x 3 root root 4096 2月 22 13:22 myproject
$ sudo chown -R jhm myproject
drwxr-xr-x 3 jhm root 4096 2月 22 13:22 myproject
参考链接
启动防火墙 $ sudo systemctl start firewalld.service
查看防火墙状态 $ sudo firewall-cmd --state
允许http通信 $ sudo firewall-cmd --permanent --zone=public --add-service=http
允许https通信 $ sudo firewall-cmd --permanent --zone=public --add-service=https
打开某个端口 sudo firewall-cmd --permanent --zone=public --add-port=5000/tcp
重启防火墙 $ sudo firewall-cmd --reload
查看开启的所有端口 $ sudo firewall-cmd --zone=public --list-ports
关闭某个端口 sudo firewall-cmd --permanent --zone=public --remove-port=5000/tcp
停止防火墙 $ sudo systemctl stop firewalld.service
禁止防火墙开机启动 $ sudo systemctl disable firewalld.service
CentOS相关
uWSGI+nginx1
uWSGI+nginx2
MySQL相关
防火墙相关1
防火墙相关2