Я недавно изучаю Python, я использовал колбу для реализации персонального блога, и я хочу развернуть ее на сервер. Потому что я был новичком, я все наткнулся и, наконец, получил это в основном сделать. Онлайн-материалы не очень дружелюбны до новичков, все они в битах и кусках, поэтому я разобрал их. С одной стороны, они являются моими собственными рекордами, которые удобны для дальнейшего использования. С другой стороны, я надеюсь помочь новичкам, как я.
помещение
-
Сервер есть (иначе будет бардак), можно обратиться к покупкеРекомендация качественного зарубежного vps
-
Иметь личное доменное имя (конечно, вы можете напрямую использовать IP-доступ, но это немного странно, не так ли? Вы можете пойти на GoDaddy, чтобы купить доменное имя
1. Установите git
Вы можете выбрать github или Bitbucket.Конечно, вы также можете собрать сервер git самостоятельно, но я не думаю, что это необходимо.Я выбираю Bitbucket, в основном потому, что его частная библиотека бесплатна
sudo yum install git
Продолжение ничем не отличается от нашей локальной разработки.Настройте ключ ssh и код клона, и он не будет расширен.Каталог проекта рекомендуется размещать в/home/www/
Вниз
2. Установите MySQL
Добавить источник MySQL YUM
$wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'
$sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm
$yum repolist all | grep mysql
mysql-connectors-community/x86_64 MySQL Connectors Community 36
mysql-tools-community/x86_64 MySQL Tools Community 47
mysql57-community/x86_64 MySQL 5.7 Community Server 187
Установите последнюю версию
$sudo yum install mysql-community-server
Запустите службу MySQL
$sudo service mysqld start
$sudo systemctl start mysqld #CentOS 7
$sudo systemctl status mysqld
● mysqld.service - MySQL Community Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Sat 2017-05-27 12:56:26 CST; 15s ago
Process: 2482 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS)
Process: 2421 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 2481 (mysqld_safe)
CGroup: /system.slice/mysqld.service
├─2481 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─2647 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/...
Описание уже работает
изменить пароль
$ mysql -uroot -p
Здесь вам необходимо ввести пароль.Mysql сгенерирует пароль по умолчанию во время установки.Используйтеgrep "temporary password" /var/log/mysqld.log
команда, строка после последней кавычки возвращаемого результата является паролем по умолчанию root
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
Изменить код
Установите кодировку по умолчанию в /etc/my.cnf
[client]
default-character-set = utf8
[mysqld]
default-storage-engine = INNODB
character-set-server = utf8
collation-server = utf8_general_ci #不区分大小写
collation-server = utf8_bin #区分大小写
collation-server = utf8_unicode_ci #比 utf8_general_ci 更准确
создать базу данных
mysql> CREATE DATABASE <datebasename> CHARACTER SET utf8;
3. Установите питон3 пип3
CentOS 7 по умолчанию устанавливает Python 2. Если вам нужно использовать Python 3, вы можете вручную загрузить исходный код Python, скомпилировать и установить его.
Установите Python 3
sudo mkdir /usr/local/python3 # 创建安装目录
$ wget --no-check-certificate https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz # 下载 Python 源文件
# 注意:wget获取https的时候要加上:--no-check-certifica
$ tar -xzvf Python-3.6.2.tgz # 解压缩包
$ cd Python-3.6.2 # 进入解压目录
sudo ./configure --prefix=/usr/local/python3 # 指定创建的目录
sudo make
sudo make install # 编译安装
При выполнении ./configure может появиться сообщение об ошибке configure: ошибка: в $PATH не найден приемлемый компилятор C, это связано с тем, что соответствующий компилятор не установлен, просто установите его.
sudo yum install gcc-c++
(Использование sudo yum install gcc-c++ автоматически установит/обновит gcc и другие зависимые пакеты.)
Настройте две версии для сосуществования
Создайте мягкую ссылку на python3:
$ sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3
так что черезpython
Команда использует Python 2,python3
использовать Python 3.
установить пункт
$ sudo yum -y install epel-release # 首先安装 epel 扩展源
$ sudo yum -y install python-pip # 安装 python-pip
$ sudo yum clean all # 清除 cache
Кажется, таким образом можно установить только pip 2. Если вы хотите установить pip для Python 3, вы можете установить его через следующий исходный код.
# 下载源代码
$ wget --no-check-certificate https://github.com/pypa/pip/archive/9.0.1.tar.gz
$ tar -zvxf 9.0.1.tar.gz # 解压文件
$ cd pip-9.0.1
$ python3 setup.py install # 使用 Python 3 安装
Создать ссылку:
$ sudo ln -s /usr/local/python3/bin/pip /usr/bin/pip3
апгрейд пип
$ pip install --upgrade pip
4. Установите ганикорн
Gunicorn(Unicorn) — это эффективный сервер Python WSGI, который обычно используется для запуска приложения wsgi (написанного нами в соответствии со спецификацией написания приложения WSGI) или инфраструктуры wsgi (например, Django, Paster), которая эквивалентна Tomcat в Java. WSGI — один из таких протоколов: это интерфейс между программой Python и запросами пользователя. Роль сервера WSGI состоит в том, чтобы принять и проанализировать запрос пользователя, вызвать соответствующий объект Python для завершения обработки запроса, а затем вернуть соответствующий результат. Короче говоря, gunicorn инкапсулирует базовую реализацию HTTP.Мы запускаем службу через gunicorn, а пользовательские запросы и услуги передаются через gunicorn.
Создайте виртуальную среду
cd /home/www/blog
mkdir venv
python3 -m venv venv
Активируйте виртуальную среду:
source venv/bin/activate
затем согласноrequirements.txt
Зависимости установки файла:
pip3 install -r requirements.txt
установить пушечное оружие
pip3 install gunicorn
Создайте файл wsgi.py в корневом каталоге проекта.
from app import create_app
application = create_app('production')
if __name__ == '__main__':
application.run()
Больше не запускайте сервис через manage.py, который используется только во время разработки.
Запустите службу:
gunicorn -w 4 -b 127.0.0.1:8000 wsgi:application
5. Установите Nginx
Nginx — это высокопроизводительный веб-сервер. Обычно используется для создания обратного прокси-сервера на переднем конце. Так называемое прямое и обратное (Reverse) есть как раз на английском языке. Служба агента, короче говоря, запрос выдается из локальной сети из локальной сети, а затем достигает интернет-сервера.Прокси для этого процесса является агентом пересылки. Если запрос из Интернета, сначала введите прокси-сервер, затем перенаправьте прокси-сервер на целевой сервер локальной сети.В это время прокси-сервер является обратным агентом (относительно вперед).
Прокси-сервер: { клиент --- " прокси-сервер } --- " сервер
Обратный прокси: клиент ---> {прокси-сервер ---> сервер }
{} означает локальную сеть
nginx может делать как прямое, так и обратное.
$ yum -y install nginx
Запустите службу nginx
$ service nginx start
STOP NGINX SERVICE
$ service nginx stop
Перезапустите службу nginx.
$ service nginx restart
изящный перезапуск
Конфигурация nginx изменилась и может перезагружаться без закрытия и открытия
$ nginx -s reload
После запуска введите ip адрес сервера в браузере, вы можете увидеть
сюдаyum
Установитьnginx
Это завершено
добавить конфигурацию
Файл конфигурации nginx:/etc/nginx/nginx.conf
server {
listen 80;
server_name adisonhyh.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- Слушайте HTTP-порт по умолчанию с номером 80
- server_name: доменное имя личного сайта
- Проксируйте запрос на локальный порт 8000 (порт, указанный службой запуска пушки) Оставшаяся копия proxy_set_header
отношения между gunicorn и nginx:
Gunicorn может предоставлять услуги в одиночку, но производственные среды вообще нет. Прежде всего, статические ресурсы (JSCSIMG) займет много запросов ресурсов, а для самого оружия он должен уделять больше внимания действительным бизнес-запросам и переработке вместо того, чтобы тратить ресурсы по статическим ресурсам; кроме того, что нет Запустите одновременно, начните несколько процессов и нескольких портов для балансировки нагрузки.
Роль nginx состоит в том, чтобы компенсировать вышеуказанные проблемы.Во-первых, как интерфейсный сервер, он может обрабатывать все статические файловые запросы. внутренний сервер, поэтому мы можем запустить несколько процессов пушки, а затем позволить nginx выполнять балансировку нагрузки и пересылать запросы нескольким процессам пушки, чтобы повысить эффективность обработки сервера и вычислительную мощность. Наконец, nginx также может настроить множество процессов, связанных с безопасностью, аутентификацией и т. д., что может сделать ваш веб-сайт более ориентированным на деловое письмо и передать некоторые правила пересылки и другие связанные с бизнесом вещи в nginx.
После завершения настройки откройте локальный браузер, введите имя домена, и вы сможете получить к нему доступ.
6.supervisor
Supervisor — хороший выбор, если вам нужно, чтобы процесс выполнялся постоянно, и он автоматически перезапустится, если процесс будет прерван по разным причинам. Супервизор управляет процессом, запуская эти управляемые процессы как подпроцессы супервизора с помощью fork/exec, поэтому нам нужно только добавить путь к исполняемому файлу процесса, которым нужно управлять, в файл конфигурации супервизора. В это время управляемый процесс рассматривается как дочерний процесс супервизора.Если дочерний процесс имеет ненормальный терминал, родительский процесс может точно получить информацию о ненормальном терминале дочернего процесса.Установив autostart=true в файл конфигурации, аварийное прерывание может быть реализовано Автоматический перезапуск дочерних процессов.
установить супервайзер
$ pip install supervisor
$ echo_supervisord_conf > supervisor.conf # 生成 supervisor 默认配置文件
$ vim supervisor.conf # 修改 supervisor 配置文件,添加 gunicorn 进程管理
Добавьте внизу блога файл конфигурации supervisor.conf (обратите внимание, что мой рабочий путьwww/home/blog/
)
[program:blog]
command=/home/www/blog/venv/bin/gunicorn -w4 -b0.0.0.0:8000 wsgi:application ;supervisor启动命令
directory=/home/www/blog ; 项目的文件夹路径
startsecs=0 ; 启动时间
stopwaitsecs=0 ; 终止等待时间
autostart=false ; 是否自动启动
autorestart=false ; 是否自动重启
stdout_logfile=/home/www/blog/logs/gunicorn.log ; log 日志
stderr_logfile=/home/www/blog/logs/gunicorn.err ; 错误日志
Запустите gunicorn с супервизором
$ sudo supervisord -c supervisor.conf
$ sudo supervisorctl start blog
Введите настроенный адрес в адресную строку браузера, чтобы получить доступ к веб-сайту.
7. fabric
На последнем этапе мы используем структуру для реализации удаленной работы и развертывания.FabricИнструмент Python, похожий на Makefiles, но способный выполнять команды на удаленных серверах.
установить ткань
pip install fabric
Создайте новый файл fabfile.py в каталоге блога.
import os
from fabric.api import local, env, run, cd, sudo, prefix, settings, execute, task, put
from fabric.contrib.files import exists
from contextlib import contextmanager
env.hosts = ['204.152.201.69']
env.user = 'root'
env.password = '****'#密码
env.group = "root"
DEPLOY_DIR = '/home/www/blog'
VENV_DIR = os.path.join(DEPLOY_DIR, 'venv')
VENV_PATH = os.path.join(VENV_DIR, 'bin/activate')
@contextmanager
def source_virtualenv():
with prefix("source {}".format(VENV_PATH)):
yield
def update():
with cd('/home/www/blog/'):
sudo('git pull')
def restart():
with cd(DEPLOY_DIR):
if not exists(VENV_DIR):
run("virtualenv {}".format(VENV_DIR))
with settings(warn_only=True):
with source_virtualenv():
run("pip install -r {}/requirements.txt".format(DEPLOY_DIR))
with settings(warn_only=True):
stop_result = sudo("supervisorctl -c {}/supervisor.conf stop all".format(DEPLOY_DIR))
if not stop_result.failed:
kill_result = sudo("pkill supervisor")
if not kill_result:
sudo("supervisord -c {}/supervisor.conf".format(DEPLOY_DIR))
sudo("supervisorctl -c {}/supervisor.conf reload".format(DEPLOY_DIR))
sudo("supervisorctl -c {}/supervisor.conf status".format(DEPLOY_DIR))
sudo("supervisorctl -c {}/supervisor.conf start all".format(DEPLOY_DIR))
@task
def deploy():
execute(update)
execute(restart)
Теперь, если код обновлен, вы можете выполнить удаленное развертывание непосредственно локально.
fab deploy