使用公钥私钥来登陆而不是账号密码,公钥私钥需要简单的在本地生成一下。Github 的生成 SSH 公钥私钥的教程:Generating SSH keys
可能需要使用 -i
参数选择一下本地的私钥,一个示例的 ssh 连接如下:
ssh -p 20123 username@domain.com -i ~/.ssh/my_rsa
让操作服务器更安全的方法,摘自(谈谈全栈工程师):
简单来说,大体步骤有以下几点:
- 新建一个用户,以后都不要用 root 登录了。
- 使用 SSH 的名值对的登录方法,禁用用户名密码的登录方法。
- 禁用 root 账户通过 SSH 登录。
- 安装一个防火墙。
- 安装 Fail2Ban,杜绝字典攻击
这里用选择这样的操作来新建一个用户,主要是强制添加了一个用户目录。然后再去设置用户的密码。
# useradd -m -d /home/myname myname
# passwd myname
添加 sudo 权限,参考 sudo - How can I add a new user as sudoer using the command line?:
# adduser <username> sudo
lock 掉用户的密码,使它不能用密码。
# passwd -l <username>
更多的用户管理参考《鸟哥的 Linux 私房菜》里面的 Linux 账号管理。
在使用数据库之前需要配置下数据库。如果用的是 VPS 可能就在本机上面安装了,如果是云服务的话多是使用专门的数据库服务。下面的是连接数据库服务器并创建数据库的操作。
$ mysql --host=mysql.domain.com --user=username --password=password
mysql> CREATE DATABASE db_name CHARACTER SET utf8mb4;
参考:Connecting to the MySQL Server
只有 Flask 还不够,还需要其他工具支持。
(venv)$ pip install gunicorn
首先是单纯运行 Gunicorn,因为是 venv 环境,所以需要先启动 venv 才可以。
下面是启动了 5 个 wooker 的 gunicorn 程序的代码:
gunicorn simplecms:app -b localhost:8000 -w 5
如果想配置更多的运行参数参考这一篇文章。
首先是一个配置文件,写在 /etc/supervisor/conf.d
路径下面创建 simplecms.conf
文件:
[program:simplecms]
command = /home/simplecms/simple-cms/venv/bin/gunicorn simplecms:app -b localhost:8000 -w 5
directory = /home/simplecms/simple-cms
user = simplecms
这里面因为 gunicorn 是安装在 venv 里面的,所以需要写全路径才能够启动。
添加了一些 log 输出之后的:
[program:simplecms]
command = /home/simplecms/simple-cms/venv/bin/gunicorn simplecms:app -b 0.0.0.0:8001 -w 5 --log-file /tmp/gunicorn.log
directory = /home/simplecms/simple-cms
stdout_logfile = /tmp/supervisor.log
user = simplecms
如何 log 错误信息看这里:
- Error Logging in Nginx+Gunicorn+Supervisor+Django - Stack Overflow
- python - Logging in Flask on Gunicorn and Supervisor - Stack Overflow
Nginx 的 log 信息在 /var/log/nginx/
下的 access.log
和 error.log
。
supervisord
似乎默认是启动的,可以 ps -aux | grep supervisord
检测一下。
之后是几个常用的操作:
$ superviosrctl reload # 重新加载配置文件
$ superviosrctl update
$ superviosrctl start xxx
$ superviosrctl stop xxx
$ superviosrctl status xxx
$ superviosrctl help # 查看更多命令
只是最简单的先配置出来了,之后可能还需要有更多的配置。
配置文件在 /etc/nginx/sites-available/
下面,配置完了之后软链接一份到 /etc/nginx/sites-enabled/ghost.conf
下面。记得把默认的 default.conf
删掉以免冲突。
一个很简单的配置文件:
server {
listen 80;
server_name example.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
}
做软链接:
$ sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf
开启关闭服务有两种方法:
$ sudo service nginx restart
$ sudo /etc/init.d/nginx restart
参考:
- Ghost 的配置教程 Basic nginx config
- Deploying Gunicorn,比较复杂的 Gunicorn 文档中的 Nginx 的配置方法
- 使用
nginx -t
来检测配置文件是否正确:nginx configtest vs nginx -t - DEVGET.NET
整体的部署教程:
- Flask Deployment on Linux,超赞的教程。有详细的 SSH 连接配置信息、用户设置、数据库初始化和链接、Apache 的配置、程序的初始化和升级管理
- Kickstarting Flask on Ubuntu - setup and deployment,也是比较全面,亮点在 Nginx 的配置、Supervisor 的配置、Git Hook 的实用、整个自动化部署
- Launching your Flask web application on Linux with Gunicorn and Nginx -,简单的一个小 Demo 的运行过程,可以参考
- Deploy Flask App on Ubuntu(Virtualenv Gunicorn Nginx Supervisor) · defshine/flaskblog Wiki,一个实际 Flask Blog 项目的 Deploy 教程,所以更加的简明,项目中还有对应的配置文件可以参考
- Setting up Django with Nginx, Gunicorn, virtualenv, supervisor and PostgreSQL,虽然是 Django 的,不过很多还是蛮类似的,写的也不错
- 在阿里云CentOS7中配置基于Nginx+Supervisor+Gunicorn的Flask项目 - simpleapples,也是从什么都没有开始的配置,不过有些过于简单
- 独立 WSGI 容器 Flask 官方文档,几种类似 gunicorn 的容器以及 Nginx 需要做的一点配置
- 部署Web App - 廖雪峰:主要是 Nginx + Supervisor,讲的原理会比较清晰
- Flask+Nginx+Gunicorn+Redis+Mysql搭建一个小站:主要是 Nginx + Gunicorn。Nginx 的配置记录的篇实际记录型的,可以参考;Gunicorn 也有一点配置的信息