总结了在Windows 10 WSL的Ubuntu 18.04上创建Django Apache开发环境的步骤。

步骤

允许apache2通过mod_wsgi访问python。另外,我将使VS代码可用作可与WSL一起使用的远程IDE。

  • 安装anaconda3
  • 安装django
  • 创建一个django项目并迁移
  • 安装apache2
  • 安装mod_wsgi
  • 添加到apache2配置文件
  • 使vscode可用
  • 由于无法在WSL中使用systemctl,因此apache的操作会发生一些变化,因此在使用anaconda时,除非您使用pip安装mod_wsgi,否则您必须自行更改参考设置,很难理解apache2.conf的设置,我觉得很容易跌倒。

    1. WSL安装

    启用WSL并安装Ubuntu 18.04
    https://qiita.com/matarillo/items/61a9ead4bfe2868a0b86

    更新

    终奌站

    1
    2
    sudo apt update
    sudo apt upgrade

    2.安装Apache2

    安装并启动apache2和apache2-dev

    终奌站

    1
    2
    3
    sudo apt install apache2
    sudo apt install apache2-dev
    sudo /etc/init.d/apache2 start

    现在apache应该在http://本地主机上等待。如果在浏览器中打开它,则将打开文档根目录/ var / www / html /中的index.html。

    停止就是停止

    终奌站

    1
    sudo /etc/init.d/apache2 stop

    重新启动以反映设置更改时重新启动

    终奌站

    1
    sudo /etc/init.d/apache2 restart

    3.安装Anaconda

    安装pyenv

    终奌站

    1
    git clone https://github.com/yyuu/pyenv.git ~/.pyenv

    路径

    终奌站

    1
    2
    3
    4
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(pyenv init -)"' >> ~/.bashrc
    source ~/.bashrc

    检查可以安装的anaconda版本。

    终奌站

    1
    pyenv install -l | grep anaconda

    安装选定版本的anaconda。在下面,安装了2020.02版本。

    终奌站

    1
    2
    3
    pyenv install anaconda3-2020.02
    pyenv rehash
    pyenv global anaconda3-2020.02

    路径。

    终奌站

    1
    2
    3
    echo 'export PATH="$PYENV_ROOT/versions/anaconda3-2020.2/bin/:$PATH"' >> ~/.bashrc
    conda init
    source ~/.bashrc

    创建一个conda环境。下面我们创建一个名为django的python3.7环境。 xxxx是用户名。

    终奌站

    1
    2
    3
    4
    conda create -n django python=3.7
    echo 'export PYTHONHOME=/home/xxxx/.pyenv/versions/anaconda3-2020.02' >> ~/.bashrc
    echo 'export PYTHONPATH=/home/xxxx/.pyenv/versions/anaconda3-2020.02/bin:/home/xxxx/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages' >> ~/.bashrc
    conda create django

    4.安装django

    安装并检查版本

    终奌站

    1
    2
    pip install django
    django-admin --version

    创建一个项目并尝试。您可以通过创建目录并执行django-admin startproject hoge来创建名为hoge的项目。

    终奌站

    1
    2
    3
    mkdir django
    cd django
    django-admin startproject proj1

    执行从python创建的目录中创建的manage.py,以运行简单服务器并检查操作。

    终奌站

    1
    2
    3
    cd proj1
    python manage.py migrate
    python manage.py runserver

    在浏览器中打开

    http://本地主机:8000,您应该看到django示例页面。

    5.安装mod_wsgi

    可以从apt安装mod_wsgi,但默认情况下,在完成apt安装python而不是anaconda时,将与apt一起安装的mod_wsgi设置为引用python。如果您使用anaconda,我认为从pip安装会更容易。

    终奌站

    1
    2
    pip install mod_wsgi
    pip install mod-wsgi-httpd

    路径。
    xxxx是用户名。

    终奌站

    1
    2
    echo 'export PATH=/home/xxxx/.pyenv/versions/anaconda3-2020.02/bin:$PATH' >> ~/.bashrc
    source ~/.bashrc

    Mod_wsgi现在应该可以工作了。让我们运行一个简单的服务器并检查操作。以下命令将在http:// localhost:8000等待简单服务器,因此请在浏览器中将其打开。

    终奌站

    1
    mod_wsgi-express start-server


    如果mod_wsgi-express服务器正常运行,您将看到一个与上面的示例页面不同的图像。

    最后,获取要写入Apache2配置文件中的信息。

    终奌站

    1
    mod_wsgi-express module-config

    终奌站

    1
    2
    LoadModule wsgi_module "/home/xxxx/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so"
    WSGIPythonHome "/home/xxxx/.pyenv/versions/anaconda3-2020.02"

    让我们将以上内容复制并粘贴到某个地方。

    6.链接apache和mod_wsgi

    django将apache2.conf添加为官方文件。
    https://docs.djangoproject.com/ja/2.0/howto/deployment/wsgi/modwsgi/

    如果您在/ home / xxxx / django /中创建了一个

    django项目,则该项目将类似于以下内容。前两行是mod_wsgi-express module-config中显示的内容的副本,其中wsgi.py的路径在WSGIScriptAlias创建的django项目目录中创建,而WSGIPython在WSGIPythonPath创建的django项目中。目录PATH和Direcoty是上面的wsgi.py目录PATH。

    /etc/apache2/apache2.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    LoadModule wsgi_module /home/xxxx/.pyenv/versions/anaconda3-2020.02/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so
    WSGIPythonHome /home/xxxx/.pyenv/versions/anaconda3-2020.02

    WSGIScriptAlias / /home/xxxx/django/proj1/proj1/wsgi.py
    WSGIPythonPath /home/xxxx/django/proj1


    <Directory /home/xxxx/django/proj1/proj1>
    <Files wsgi.py>
    Require all granted
    </Files>
    </Directory>

    我更改了Apache设置,因此重新启动它。

    终奌站

    1
    sudo /etc/init.d/apache2 restart

    在浏览器中打开

    http:// localhost并检查。

    如果像上面一样,就可以了。

    如果apache2.conf的内容不正确或无法安装某些软件包,则将发生内部服务器错误,如下所示。

    仅凭这一点很难理解原因,因此让我们通过查看Apache错误日志来进行判断。如果保留默认设置,则可以在下面看到它。

    终奌站

    1
    tail -f /var/log/apache2/error.log

    我认为是因为我忘了放东西或PATH不同。

    7.允许VScode开发

    WSL没有GUI,但是如果使用VScode的WSL扩展名,则可以使用GUI进行开发。在Windows 10上安装VScode后启用WSL扩展。

    当使用以下命令从WSL启动VS代码时,似乎Windows端的VS代码将从WSL端运行。

    终奌站

    1
    2
    cd test
    code .

    顺便说一句,权限限制与Ubuntu相同,因此您可以在执行代码时使用权限进行编辑。例如,在放置apahce静态文件的/ var / www / html /中,所有者为root,因此,如果您尝试从用户帐户更改它,则会出现如下图所示的错误。如果您更改所有者,则可以更改它,但是我不知道它是否对安全性有好处,所以请告诉我。顺便说一句,似乎sudo代码无法执行。

    终奌站

    1
    Unable to write file 'vscode-remote://wsl+ubuntu-18.04/var/www/html/test.html' (NoPermissions (FileSystemError): Error: EACCES: permission denied, open '/var/www/html/test.html')

    参考

    https://docs.djangoproject.com/ja/2.0/howto/deployment/wsgi/modwsgi/
    https://codelab.website/anaconda-django/
    https://qiita.com/itisyuu/items/dafa535adc8197208af1
    https://blog.capilano-fw.com/?p=369