Что делать, если вы хотите создать нетривиальный веб-сайт и / или веб-сервис?
Как развернуть производственный сервер Apache с python для frontend и C ++ для backend и MySQL для обеспечения устойчивости?
Какой клей вы должны использовать?
Как настроить все эти мелочи?
Общие условия:
LAMP-stack = ubuntu Common Условия: развертывание inux + Apache + MySQL + Python
LAMP-C ++ = развертывание LAMP-стека с C ++
A
Это руководство далека от полного или идеального, но я хотел дать некоторую окупаемость сообщества. Я надеюсь, что он либо поможет людям, либо, по крайней мере, создать точку вспышки, чтобы обсудить такой тип развертывания. Я хочу уточнить, что выбор комбинации python / c ++ выходит за рамки этой дискуссии. AFAIK, это одно из проявлений интереса к отрасли или, по крайней мере, дает много xp.
Common Stack:
Ubuntu 14.04.1 x64 (lsb_release -a) Apache 2.4.7 , построенный 22 июля 2014 г. (apache2 -v) mod_wsgi 2.7 (cd /usr/lib/apache2/modules/; find . -name "*wsgi*") python 2.7.6 (python -V) Boost.Python AKA libboost_python-py27.so.1.54.0 (cd /usr/lib; find . -name "*boost*";) GCC 4.8.2 ([ f6]) GNU Make 3.81 (make -v) Oracle Connector / C ++ 7.1.1.3 AKA libmysqlcppconnd (cd /usr/lib; find . -name "*mysqlcppconn*") mysql 14.14 (mysql -V)Выглядит немного страшно, поэтому я опишу один
Общий стек:
Ubuntu 14.04.1 x64 (lsb_release -a) Вы знаете основы linux Apache 2.4.7, построенный 22 июля 2014 года (apache2 -v) mysite.com должно быть заменено именем, которое вы выбрали для своего сайта mod_wsgi 2.7 (cd /usr/lib/apache2/modules/; find . -name "*wsgi*") [ ! d30]LAMP-C ++ с web.py
Все файлы, доступные в git repo -> link
1) Сеть:
Если вы хотите видеть свою службы / сайта в домашней подсети (192.168.xxx.xxx IP-s), то вы должны убедиться, что IP-адреса стабильны. У меня есть роутер, у которого есть встроенный DHCP-сервер, который передает IP-адреса домашней подсети устройствам, на основе которых сначала подключен. Существует два способа решения этой проблемы: вы можете настроить устройство конфигурации на предпочтительный IP-адрес в домашней подсети или настроить DHCP-исключения на вашем маршрутизаторе (например, через веб-интерфейс, 192.168.1.1). После настройки (или если вам не нужны никакие настройки на основе ваших настроек маршрутизации), вы можете определить IP-адрес своего компьютера с помощью ifconfig Update / etc / hosts, чтобы иметь правильное разрешение DNS на вашей машине dev:#loopback
127.0.0.1 localhost #default
127.0.1.1 MY_PC #if your PC has a name
#home subnet
#192.168.1.2 mysite.com #ethernet IP
192.168.1.10 mysite.com #wifi IP
2) Apache
Если вы хотите видеть свою службу / сайт в домашней подсети (192.168.xxx.xxx IP-адреса), вы должны убедиться, что IP-адреса стабильны. У меня есть роутер, у которого есть встроенный DHCP-сервер, который передает IP-адреса домашней подсети устройствам, на основе которых сначала подключен. Существует два способа решения этой проблемы: вы можете настроить устройство конфигурации на предпочтительный IP-адрес в домашней подсети или вы можете настроить исключения DHCP на своем маршрутизаторе (например, через веб-интерфейс, 192.168.1.1).Если вы хотите увидеть свой сервис / сайт в домашней подсети (192.168.xxx.xxx IP-адреса), тогда вы должны убедиться, что IP-адреса стабильны. У меня есть роутер, у которого есть встроенный DHCP-сервер, который передает IP-адреса домашней подсети устройствам, на основе которых сначала подключен. Существует два способа решения этой проблемы: вы можете настроить устройство конфигурации на предпочтительный IP-адрес в домашней подсети или настроить DHCP-исключения на вашем маршрутизаторе (например, через веб-интерфейс, 192.168.1.1).
cd /etc/apache2 && ll
После настройки (или если вам не нужны никакие настройки, основанные на настройках маршрутизации), вы можете определить IP-адрес своего компьютера с помощью ifconfig После настройки (или в случае, если вам не нужна ни одна на основе вашей маршрутизации предпочтения), вы можете определить IP-адрес своего компьютера с ifconfig
# sets Apache listen on port 80
Listen *:80
Обновить / etc / hosts, чтобы иметь правильное разрешение DNS на вашей машине dev: #loopback
127.0.0.1 localhost #default
127.0.1.1 MY_PC #if your PC has a name
#home subnet
#192.168.1.2 mysite.com #ethernet IP
192.168.1.10 mysite.com #wifi IP
Обновите / etc / hosts, чтобы иметь правильное разрешение DNS на вашей машине dev:
<VirtualHost 0.0.0.0:80>
WSGIScriptAlias / /path/to/wsgi/entry/point/script/
<Directory /path/to/work/>
Require all granted
Options Indexes FollowSymLinks
</Directory>
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /path/to/work/www/mysite/
<Directory /path/to/work/www/mysite/>
Require all granted
Options Indexes FollowSymLinks
</Directory>
# to serve static content
Alias /static /path/to/work/www/mysite/static/
#for wsgi script, if you intend ro use .py extension
AddType text/html .py
</VirtualHost>
проверить права на каталог вашего сайта. добавьте свой сайт: sudo a2ensite mysite.com
перезапустите службу apache2: sudo service apache2 restart
проверьте, что apache2 запущен: ps ax | grep apache2
проверьте, что apache прослушивает порт 80 при подключении от кого-либо: sudo netstat -anp | grep apache
Выход вроде: tcp6 0 0 :::80 :::* LISTEN 1996/apache2
[d17 ] Заполните конфигурацию (у Apache 2.4 есть другой макет конфигурации, скажем, Apache 2.2): sudo apt-get install libapache2-mod-wsgi
ports.conf:
sites-available / mysite.com.conf (точно с ".com" part !!!):
sudo apt-get install python
sudo apt-get install python-pip
3) mod_wsgi
sudo pip install web.py
После этого вы должны иметь wsgi.conf и wsgi.load в каталоге / etc /apache2/mods-enabled.
sudo apt-get autoremove
sudo apt-get install libboost-all-dev
4) Установить python
5) Установить web.py (сайт webpy.org был заменен ссылкой )
6) Установить boost (autoremove помогло мне с проблемой сломанных пакетов, поэтому на всякий случай):
7) Установить mysql:
link [!d45 ]
Создайте тест базы данных, приветствуйте таблицу с идентификатором INT и VARCHAR (100) msg и вставьте 'Hello world!' внутрь. Ссылка, приведенная выше, содержит некоторые ресурсы о том, как достичь этого внизу, если вы новичок в mysql.
Если вы хотите увидеть свой сервис / сайт в домашней подсети ( 192.168.xxx.xxx IP-s), вы должны убедиться, что IP-адреса стабильны. У меня есть роутер, у которого есть встроенный DHCP-сервер, который передает IP-адреса домашней подсети устройствам, на основе которых сначала подключен. Существует два способа решения этой проблемы: вы можете настроить устройство конфигурации на предпочтительный IP-адрес в домашней подсети или настроить DHCP-исключения на вашем маршрутизаторе (например, через веб-интерфейс, 192.168.1.1).
cd /etc/apache2 && ll
[ ! d16] Обновите переменные среды .bashrc PATH для LD и PYTHON: # PATH env vars
export PATH=$PATH:/usr/lib/x86_64-linux-gnu
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib:/usr/local/lib
export PYTHONPATH = $PYTHONPATH:\
/path/to/work/:\
/path/to/work/myproject/:\
/path/to/work/myproject/mysite/:\
/path/to/work/myproject/myproject_back/:\
/path/to/work/www:\
/path/to/work/www/mysite/
После настройки (или если вам не нужны ни один на основе ваших настроек маршрутизации), вы можете определить IP-адрес своего компьютера с помощью [ f24]
# sets Apache listen on port 80
Listen *:80
Записать код на Python: Обновить / etc / hosts, чтобы иметь правильное разрешение DNS на вашей машине dev:
<VirtualHost 0.0.0.0:80>
WSGIScriptAlias / /path/to/wsgi/entry/point/script/
<Directory /path/to/work/>
Require all granted
Options Indexes FollowSymLinks
</Directory>
ServerName mysite.com
ServerAlias www.mysite.com
DocumentRoot /path/to/work/www/mysite/
<Directory /path/to/work/www/mysite/>
Require all granted
Options Indexes FollowSymLinks
</Directory>
# to serve static content
Alias /static /path/to/work/www/mysite/static/
#for wsgi script, if you intend ro use .py extension
AddType text/html .py
</VirtualHost>
myproject_front .py: [указать WSGIScriptAlias в apache2 config] import web #web.py framework
import gateway_front #python adapter to c++
urls = (
'/.*', 'hello', #url pattern for web.py to call hello.GET beneath
)
class hello:
def GET(self):
#some browsers don't like plain text, so I use html
web.header( 'Content-type', 'text/html' )
g = gateway_front.Gate() # get gateway to c++
s = g.hello() # get 'Hello World' message
return str(s) # return it as a HTTP response
#sets web.py's func as WSGI entry point
application = web.application(urls, globals()).wsgifunc()
# to test from console
def main():
g = backend.Gate()
s = g.getDefaultQuote()
print s
if __name__ == '__main__':
main()
проверить права на каталог вашего сайта. проверить права на каталог вашего сайта.
добавить свой сайт:sudo a2ensite mysite.com
добавить свой сайт:
Это было взято из официальной документации Oracle, ссылки и немного модифицировано.#include <stdlib.h>
#include <iostream>
#include <string>
#include "mysql_connection.h"
#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
using namespace std;
char const* hello()
try {
sql::Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res;
/* Create a connection */
driver = get_driver_instance();
// MySQL IP address and your username
con = driver->connect("tcp://127.0.0.1:3306", "username", "username");
/* Connect to the MySQL test database */
con->setSchema("test"); //your db name
stmt = con->createStatement();
res = stmt->executeQuery("SELECT * from hello;");
string result;
while (res->next()) {
/* Access column data by alias or column name */
result = res->getString("msg"); // field in db with actual 'Hello World'
return result.c_str();
}
delete res;
delete stmt;
delete con;
} catch (sql::SQLException &e) {
cerr << "# ERR: SQLException in " << __FILE__;
cerr << "(" << __FUNCTION__ << ") on line "
<< __LINE__ << endl;
cerr << "# ERR: " << e.what();
cerr << " (MySQL error code: " << e.getErrorCode();
cerr << ", SQLState: " << e.getSQLState() << " )" << endl;
}
перезапустить службу apache2: sudo service apache2 restart
перезапустить службу apache2:
проверить, что apache2 запущен:ps ax | grep apache2
[d48 ] Кстати, Oracle сделал бесплатный графический интерфейс для mysql, он называется MySQL Workbench, здесь. Вам потребуется регистрация Oracle (бесплатно), чтобы загрузить ее. Лампа-C++ с Джанго и антресоли
все файлы доступны в git РЕПО -> ссылка
1) сеть:
если вы хотите видеть вашего сервиса/сайта на домашней подсети (192.168.ХХХ.ХХХ ИС-ы), то вы должны убедиться, что IP-адреса являются стабильными. У меня есть маршрутизатор, который имеет встроенный DHCP-сервер, который дает домашней подсети IP-S для устройств на основе которого подключен первый. Есть два способа решить эту проблему: вы можете настроить устройство, чтобы иметь предпочтительный IP в домашней подсети или вы можете настроить исключения DHCP на маршрутизаторе (например, через веб-интерфейс, 192.168.1.1). После настройки (или в случае необходимости никто на основе ваших предпочтений маршрутизации), вы можете определить IP-адрес компьютера с ifconfig обновить /etc/hosts, чтобы иметь правильные разрешения в DNS на компьютере разработчика: [Ф1]2) Апачи
если вы хотите видеть вашего сервиса/сайта на домашней подсети (192.168.ХХХ.ХХХ ИС-ы), то вы должны убедиться, что IP-адреса являются стабильными. У меня есть маршрутизатор, который имеет встроенный DHCP-сервер, который дает домашней подсети IP-S для устройств на основе которого подключен первый. Есть два способа решить эту проблему: вы можете настроить устройство, чтобы иметь предпочтительный IP в домашней подсети или вы можете настроить исключения DHCP на маршрутизаторе (например, через веб-интерфейс, 192.168.1.1).если вы хотите видеть вашего сервиса/сайта на домашней подсети (192.168.ХХХ.ХХХ ИС-ы), то вы должны убедиться, что IP-адреса являются стабильными. У меня есть маршрутизатор, который имеет встроенный DHCP-сервер, который дает домашней подсети IP-S для устройств на основе которого подключен первый. Есть два способа решить эту проблему: вы можете настроить устройство, чтобы иметь предпочтительный IP в домашней подсети или вы можете настроить исключения DHCP на маршрутизаторе (например, через веб-интерфейс, 192.168.1.1).
[Ф3] после настройки (или в случае, если вам необходима ни одна основанные на маршрутизации предпочтения), вы можете определить IP-адрес компьютера с ifconfigпосле настройки (или в случае, если вам необходима ни одна основанные на маршрутизации предпочтения), вы можете определить IP-адрес компьютера с ifconfig
[ф5] обновить /etc/hosts, чтобы иметь правильные разрешения в DNS на компьютере разработчика: [Ф1]обновить /etc/hosts, чтобы иметь правильные разрешения в DNS на компьютере разработчика:
[ф6] проверьте права для каталога вашего сайта. добавить свой сайт: [ф7] перезагрузить apache2 не сервис: нажать [F8] проверить, что apache2 не работает: [F9] и проверить, что Apache слушает порт 80 на подключения от кого: [ф10] Выходные данные: [ф11] [dиода d17]заполнить конфиги (например, Apache 2.4 имеет различные компоновки конфигурации, скажем, Апач 2.2):[!dиода d17] [ф12]порты.конф:
сайтах-доступно/мой_сайт.ком.конф (именно с ".com" часть!!!):
[от f13]3) mod_wsgi
[ф14]после этого вы должны были тут wsgi.conf и тут wsgi.загрузить в каталог /etc/apache2 не/модов с поддержкой.
[ф15] [и D40]4) установить Python[!и D40] [dрайвер d41]5) установить Django[!dрайвер d41]6) Установка наддува (autoremove помог мне с разбитыми выпуска пакетов, так на всякий случай):
[d43 см.]7) установить MySQL:[!d43 см.] [ф16]создайте тестовую базу данных, таблицы привет с инт ИД и varchar(100) msg и вставить 'Привет мир!' в нее. По ссылке выше есть некоторые ресурсы о том, как достичь этого на дне, если вы новичок в MySQL.
кстати, Oracle сделала бесплатный GUI для MySQL, он называется верстак MySQL можно здесь. Вам потребуется регистрация в Oracle (это бесплатно), чтобы скачать ее.
то есть куски MySQL для питона:
[f17 в]и если что-то пойдет не так, по этой -> ссылке
8) установить Oracle Разъем/C++ из здесь, инструкция по установке здесь. У них нет .deb-пакет, поэтому я построил его из исходников, было всего 3 команды и без боли. Вам потребуется регистрация в Oracle (это бесплатно), чтобы скачать ее.
[ф18]9) Установка и настройка Мезонина
[зг19]руководство по установке Мезонина, чем предлагает вам использовать createdb и [ф35] от фантик manage.py . Для БД я использовал другой подход и для сервера - Apache и не Джанго дев сервер.
[размером d57]в мой_сайт реж, созданные антресоли, в local_config.py:[!размером d57] [ф20]не выполнять
[клавиши f21], который будет создавать таблицы Джанго вместе с БД , созданные в (7)
ALLOWED_HOSTS изменения в settings.py в мезонине-создан мой_сайт реж:
добавить следующее urls.py:
сразу после строки [f36 в]. это необходимо, чтобы иметь простой текстовый вывод сервиса на мой_сайт/тест/ URL-адрес вместе с антресоли домашнюю страницу mysite.com URL-адрес.
[ф22] [d63, как]10) собрать статические файлы[!d63, как] [ф23] [d64 с]создать /статический/ subdir в вашем mysite реж если нет[!d64 с]если вы хотите видеть вашего сервиса/сайта на домашней подсети (192.168.ХХХ.ХХХ ИС-ы), то вы должны убедиться, что IP-адреса являются стабильными. У меня есть маршрутизатор, который имеет встроенный DHCP-сервер, который дает домашней подсети IP-S для устройств на основе которого подключен первый. Есть два способа решить эту проблему: вы можете настроить устройство, чтобы иметь предпочтительный IP в домашней подсети или вы можете настроить исключения DHCP на маршрутизаторе (например, через веб-интерфейс, 192.168.1.1).
[Ф3] обновить ваш .путь bashrc и переменные окружения для ЛД и Python: [f25 привод датчика]после настройки (или в случае, если вам необходима ни одна исходя из ваших предпочтений маршрутизации), вы можете определить IP-адрес компьютера с ifconfig
[ф5] написать код Python:обновить /etc/hosts, чтобы иметь правильные разрешения в DNS на компьютере разработчика:
[ф6] wsgi.py:from __future__ import unicode_literals
import os
import sys
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
sys.path.append( '/path/to/work/myproject/mysite' )
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
проверьте права для каталога вашего сайта. проверьте права для каталога вашего сайта.
import sys
import backend.gateway
class Gate(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Gate, cls).__new__(
cls, *args, **kwargs)
return cls._instance
def hello(self):
return backend.gateway.hello()
def main():
g = Gate()
s = g.hello()
print s
if __name__ == '__main__':
main()
добавить свой сайт: [ф7] добавить свой сайт:
[ф30] перезапустить службу apache2 не: [ф8]перезапустить службу apache2 не:
[f32 из] проверить, что apache2 не работает: [F9] ипроверить, что apache2 не работает:
там в разделе пути в settings.py config (который Джанго конфигурации с мезонином аддоны), нужно проверить настройку STATIC_URL и добавить путь к Джанго-админ статических файлов
обновить ваш .путь bashrc и переменные окружения для ЛД и Python: [f25 привод датчика] обычный текст 'привет мир' в www.mysite.com/test (эту часть необходимо, если вы хотите сделать веб-сервис с API наряду с сайта)теперь мы можем собирать статические файлы в одном месте - это то, что Джанго авторы предлагают для хранения все CSS, и JS, TXT и т. д содержание
обычный текст 'привет мир' в www.mysite.com/test (эту часть необходимо, если вы хотите сделать веб-сервис с API наряду с сайта) написать код Python:11) теперь нам нужно заполнить в Python и C++ код
gateway.py:
gateway_back.cpp: