Как развернуть: ubuntu | apache | python | C ++ | mysql [закрыт]

Что делать, если вы хотите создать нетривиальный веб-сайт и / или веб-сервис?

Как развернуть производственный сервер 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]
1
задан 5 December 2014 в 14:23

2 ответа

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 (бесплатно), чтобы загрузить ее.

0
ответ дан 24 May 2018 в 01:32

Лампа-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:

0
ответ дан 24 May 2018 в 01:32

Другие вопросы по тегам:

Похожие вопросы: