总结了在Windows 10 WSL的Ubuntu 18.04上创建Django Apache开发环境的步骤。
步骤
允许apache2通过mod_wsgi访问python。另外,我将使VS代码可用作可与WSL一起使用的远程IDE。
由于无法在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