首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

RHEL 5.3 源碼編譯搭建 LAMP + Django 整合開發環境

     編輯:PHP 綜合知識

專案背景

企業業務需同時支援 PHP (既有系統) 與 Python Django (新專案) 開發框架,決定在同一伺服器建立 LAMP + Django 共存環境,共用 Apache 前端、MySQL 資料庫,透過 mod_wsgi 整合 Django。

環境規劃

  • OS:RHEL 5.3 (2.6.18 kernel)
  • 安裝前綴:/usr/local/apache、/usr/local/mysql、/usr/local/php、/usr/local/python
  • 核心源碼包:
    • Django-1.2.5.tar.gz
    • httpd-2.2.14.tar.gz
    • mysql-5.1.45.tar.gz
    • php-5.2.5.tar.gz
    • mod_wsgi-3.3.tar.gz
    • freetds-stable0.64.tgz (SQL Server 連接)
    • gd-2.0.33.tar.gz
  • 系統級依賴:yum -y install lib* freetype* zlib-devel openssl-devel pcre-devel libxml2-devel curl-devel libjpeg-devel libpng-devel sqlite-devel readline-devel

Apache 編譯安裝 (支援 mod_wsgi、SSL、Rewrite)

  1. 建立運行用戶/群組:
    groupadd htdocs
    useradd -g htdocs -s /sbin/nologin htdocs
    
  2. 解壓並編譯:
    tar zxvf httpd-2.2.14.tar.gz
    cd httpd-2.2.14
    ./configure \
      --prefix=/usr/local/apache \
      --enable-dav --enable-dav-fs \
      --enable-so \
      --enable-modules=most \
      --enable-mods-shared=all \
      --enable-info \
      --enable-rewrite \
      --enable-deflate \
      --enable-ssl \
      --with-mpm=prefork
    make && make install
    

MySQL 編譯安裝


groupadd mysql
useradd -g mysql -s /sbin/nologin mysql

tar zxvf mysql-5.1.45.tar.gz
cd mysql-5.1.45
./configure \
  --prefix=/usr/local/mysql \
  --with-charset=utf8 --with-collation=utf8_general_ci \
  --with-extra-charsets=all \
  --with-plugins=innobase,myisam,partition
make && make install

cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
cp support-files/my-medium.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld; chkconfig mysqld on
service mysqld start

PHP 編譯安裝 (標準 LAMP 配置)


tar zxvf php-5.2.5.tar.gz
cd php-5.2.5
./configure \
  --prefix=/usr/local/php \
  --with-apxs2=/usr/local/apache/bin/apxs \
  --with-mysql=/usr/local/mysql \
  --with-mysqli=/usr/local/mysql/bin/mysql_config \
  --with-pdo-mysql=/usr/local/mysql \
  --with-config-file-path=/usr/local/php/etc \
  --enable-mbstring --enable-sockets --enable-ftp --enable-gd-native-ttf \
  --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir \
  --with-curl --with-openssl --with-mcrypt --with-mhash \
  --enable-bcmath --enable-zip --enable-soap --enable-calendar
make && make install

cp php.ini-production /usr/local/php/etc/php.ini
# 編輯 php.ini 設定 date.timezone、error_log 等

Python 2.6 + Django + mod_wsgi 整合

  1. 安裝 Python 2.6 (RHEL 5 預設 2.4,需升級):
    
    wget https://www.python.org/ftp/python/2.6.9/Python-2.6.9.tgz
    tar zxvf Python-2.6.9.tgz
    cd Python-2.6.9
    ./configure --prefix=/usr/local/python26 --enable-shared --enable-unicode=ucs4
    make && make install
    echo "/usr/local/python26/lib" > /etc/ld.so.conf.d/python26.conf
    ldconfig
    
  2. 安裝 setuptools/pip:
    
    wget https://bootstrap.pypa.io/ez_setup.py -O - | /usr/local/python26/bin/python
    wget https://bootstrap.pypa.io/get-pip.py -O - | /usr/local/python26/bin/python
    
  3. 安裝 Django:
    
    /usr/local/python26/bin/pip install Django==1.2.5
    
  4. 編譯安裝 mod_wsgi (綁定 Python 2.6):
    
    tar zxvf mod_wsgi-3.3.tar.gz
    cd mod_wsgi-3.3
    ./configure --with-apxs=/usr/local/apache/bin/apxs --with-python=/usr/local/python26/bin/python
    make && make install
    # 輸出:modules/mod_wsgi.so 已複製至 Apache modules 目錄
    
  5. Apache 載入 mod_wsgi 並配置 Django 站點:
    
    # httpd.conf 新增
    LoadModule wsgi_module modules/mod_wsgi.so
    
    # 虛擬主機範例
    <VirtualHost *:80>
        ServerName django.example.com
        DocumentRoot /var/www/html/django_project/public
        
        WSGIDaemonProcess django_project python-path=/var/www/html/django_project:/usr/local/python26/lib/python2.6/site-packages
        WSGIProcessGroup django_project
        WSGIScriptAlias / /var/www/html/django_project/django_project/wsgi.py
        
        <Directory /var/www/html/django_project/django_project>
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>
        
        Alias /static/ /var/www/html/django_project/static/
        <Directory /var/www/html/django_project/static>
            Require all granted
        </Directory>
        
        Alias /media/ /var/www/html/django_project/media/
        <Directory /var/www/html/django_project/media>
            Require all granted
        </Directory>
    </VirtualHost>
    
  6. 重啟 Apache 驗證:
    
    /usr/local/apache/bin/apachectl restart
    

共用資料庫配置

PHP 與 Django 共用同一 MySQL 實例,分別建立獨立資料庫與用戶:


-- PHP 應用
CREATE DATABASE php_app CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL ON php_app.* TO 'php_user'@'localhost' IDENTIFIED BY 'php_pass';

-- Django 應用
CREATE DATABASE django_app CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL ON django_app.* TO 'django_user'@'localhost' IDENTIFIED BY 'django_pass';

Django settings.py 配置:


DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_app',
        'USER': 'django_user',
        'PASSWORD': 'django_pass',
        'HOST': 'localhost',
        'PORT': '3306',
        'OPTIONS': {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"},
    }
}

常見問題與解決

問題解決
mod_wsgi 編譯報錯: Python.h not found安裝 python-devel 或指定 --with-python 指向含 headers 的安裝路徑
Apache 啟動報錯: mod_wsgi.so undefined symbol: PyUnicodeUCS2_*Python 編譯需加 --enable-unicode=ucs4,重編 mod_wsgi 綁定同一 Python
Django 靜態檔案 404確認 collectstatic 已執行、Alias 路徑正確、目錄權限可讀
PHP 與 Django 衝突使用不同虛擬主機、不同 DocumentRoot、PHP 用 mod_php、Django 用 mod_wsgi 互不干擾

維護建議

  • 定期備份 /usr/local/apache/conf、/usr/local/php/etc、/var/www/html、MySQL 資料目錄。
  • 監控 Apache error_log、Django logs/django.log、PHP error_log。
  • 升級策略:PHP/Apache/MySQL 升級遵循 LAMP 流程;Django 升級在 virtualenv 隔離環境測試後修改 WSGI python-path。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved