记一次WordPress主页端口搬家
最开始接触docker,是为了部署一个叫做ShareLaTeX的东西。因为啥都不懂,故跟着网上许多博客教程一通瞎操作,就把ShareLaTeX部署在了服务器的80端口上;后又用docker搭建了WordPress博客,部署在了2333端口。
刚开始用着倒还舒服,但强迫症日益发作,我心想,作为一个个人博客,怎么能部署在奇奇怪怪的2333端口呢,就老想着能不能把这俩容器的端口换一下。
说干就干,但个人当时对docker以及WordPress的运行机制也并非特别熟悉,因此在搬家路上踩了不少坑。
后来发现其实修改docker-compose.yml文件然后更新一下容器即可(前提是容器数据已单独挂载)
我上网搜索了一下,找到了两种方法,第一种方法简单粗暴,直接删除容器新建一个,并重新指定端口即可,但似乎docker容器被删除后,存在里面的数据就没了(当时还不了解docker容器的本地挂载),我也没有试过储存并转移已有容器的数据,万一玩崩了就不太好,因此我试了下看上去比较稳妥的方法二:修改容器配置文件,重启docker服务。
文中提到docker会将所有容器的配置信息存放在/var/lib/doc ...
使用uWSGI与Nginx部署Django项目
Django项目在本地开发完成后,我们还需要将它部署到服务器上,以使得大家都能访问。这里我选择使用uWSGI和Nginx来提供web服务。
主要软硬件依赖
系统:Ubuntu18.04,1核CPU,2G内存,40G系统盘,5Mbps峰值带宽
Python3.6
uWSGI 2.0.19.1 (处理动态请求)
Nginx 1.14.0 (处理静态文件)
当然以上版本只是个参考(并且已经部署成功了),可以视具体情况变动。
uWSGI、Nginx、django项目与客户端的交互过程如下图所示:
安装软件安装python3.6我的Ubuntu镜像自带3.6版本的python,否则需要手动安装,可以参考这个链接
安装pip3sudo apt install python3-pip
安装Django项目的依赖库可以一个一个用pip3命令安装,也可以简单粗暴一点,用requirements.txt快速安装:
# 进入你的django项目根目录
cd /path/to/django/project
pip3 freeze > requirements.txt
pip3 install -r req ...
Django从入门到放弃:后台管理工具
Django提供了一套友好完善的web端后台数据可视化管理工具。
Admin页面如 Django从入门到放弃:路由与视图 一文中提到的,若你在urls.py的urlpatterns中添加了以下一项(默认是自带的):
path('admin/', admin.site.urls),
则你可以通过访问http://127.0.0.1/admin/进入一个登录界面,所有项目的超级管理员账号都可以在此登录。登录成功后,会看到所有已注册app及其已注册数据表的可视化。
这里举一个简单的例子,在one_app目录下的models.py中添加以下几行:
from django.db import models
class Student(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=255)
class Meta:
managed = False
db_table = 'student'
并将其同步到 ...
Django从入门到放弃:会话与登录
Session首先引用百度百科对session的解释:
Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。
百度百科:session(计算机术语)
个人对session的理解是:在用户登录成功时,服务器生成一个不易伪造的sessionid,发送到客户端,依靠cookie存放在浏览器中,用户在接下来的所有请求中,都带上这个cookie,服务器通过比对用户发来的sessionid对用户 ...
Django从入门到放弃:请求与表单
RequestDjango框架在收到web客户端请求的时候,会先判断请求的url,通过urls.py路由文件把该url映射到视图函数,然后执行视图函数的一系列操作,返回给客户端一个response。在前文中也已经定义过一些很简单的视图函数,容易发现它们都必须携带一个参数request(当然你可以任意起名,叫request只是因为传入的对象是一个WSGIRequest)。
这个request变量自带了一堆属性,例如method、GET、POST、user、session等。
其中通过request.method可以判断请求的方法,当请求方法为GET时,request.GET会返回一个QueryDict对象(和字典类似),其包含了该次请求的所有GET参数;POST方法同理。
request.user可以获得一个User对象,为当前登录的用户,以后讲到登录功能时再提。
Form表单通常用于发起POST请求(当然也可以GET),以下举一个django框架中表单的例子。
首先,在templates文件夹下放一个form.html,写入一个简单的登录表单:
<!DOCTYPE html>
& ...
Django从入门到放弃:模型(数据库)
Models模型是django对数据库的支持方式,一般写在models.py文件当中。Django支持的数据库有sqlite3、MySQL、PostgreSQL等,我用的是MySQL。
数据库配置找到settings.py文件大约77行:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
可见默认的数据库为sqlite3,于是我把这些代码全注释掉,并换成以下:
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql',
'NAME': 'helloworld_db',# 数据库名
'HOST': '127.0.0.1',# 数据库地址,若为本机则是127.0. ...
Django从入门到放弃:模板与静态文件
Templates前文通过HttpResponse返回了一个简单到不能再简单的网页,但如果想要返回复杂一点的网页,应该怎么办呢?
当然你完全可通过HttpResponse返回一个巨大的html字符串,但这样让人感觉很不爽,其实可以预先把html文件写好放在一个templates文件夹里,后面直接返回这个文件就可以了。这就是django的模板功能。配置模板目录需要做以下两件事:
在项目根目录下创建文件夹templates
在settings.py第56行左右找到’DIRS’开头的代码并修改成下面这样:
'DIRS': [BASE_DIR + '/templates', ],
使用方法:
templates文件夹下放入xxx.html
views.py文件添加:
from django.shortcuts import render
视图函数中可以通过
return render(request, 'xxx.html')
来直接返回这个模板页面。
render函数还支持向模板文件传递数据,例如:
return render(request, 'hello.html', {'u ...
Django从入门到放弃:路由与视图
urls和viewsurls.py文件其实定义了项目的路由,路由通俗来讲可以理解成网址去掉主机名之后的剩余部分。
urls.py文件中默认只定义了一个path('admin/', admin.site.urls),可以尝试访问http://127.0.0.1/admin/,就可以看到一个登录页面,这个东西就是个网站后台数据库管理平台,以后再说。
当然我们可以加入自己的url,例如如果我们希望访问http://127.0.0.1/hello时得到一个写了helloworld的网页,就可以在urls.py中这么搞:
在导入部分添加:
from . import views
在urlpatterns列表中添加:
path('hello/', views.hello),
桥豆麻袋!?views是什么玩意?
views.py在django中被称为视图文件,其实就是包含了一些后端的逻辑,用来处理各种请求,views.hello意为views.py文件中的hello函数,新添加的path('hello/', views.hello)表示用hello函数来处理来 ...
Django从入门到放弃:项目的目录结构
前言大约半年多以前,我莫名其妙的对web开发产生了一些兴趣,通过对这个从未涉足过的领域的一点点简单了解,我认识到一个事实:PHP是最好的语言,作为一名Pythoner,我是不会承认的。
另外我深知Python比较擅长的领域包含:“数据挖掘”、“爬虫”、“人工智能”、“Web开发”……emmmmm,虽然如此,但懒得学习其他语言的我仍然选择使用python作为后端开发语言,何况也有不少大型网站是用python作为后端语言的,例如“豆瓣”、“NASA官网”等等,这也给了我一些学习的底气。
通过一些了解,我发现目前有四种主流的python web框架,分别是Flask、Django、Tornado和Twisted,一通仔细了解以后,发现Django的开发效率似乎独占鳌头(作为一名懒人且小白,还有什么比效率高更诱人的),因此毫不犹豫地选择了django。关于django,它有着非常详细的官方文档,同时网上大佬们的相关博文多如牛毛,我作为一个后来者,就用这个系列记录一下作为一个web领域的小白在学习django框架的过程中遇到的知识点和问题的解决,不会讲很多django框架的细节,目的是希望能给到 ...
ShareLaTeX服务器部署
Overleaf是一款功能强大的多人共享在线latex编译器,很多人都会在上面编辑论文,但由于长城防火墙的存在,在国内访问这一部署于国外的网站通常响应缓慢。因此有必要自己搭建一下类似的服务以方便各类论文、文档的撰写。
写这篇文章时,博主本人还是一个Linux小白(对着Shell黑框框不知道这玩意能干啥的那种),因此在搭建过程中踩了不少的坑,在一一爬出这些坑,最终搭建成功以后,本人写了一点经验如下文所示。
本文参考自这篇文章:
引用站外地址,不保证站点的可用性和安全性
Docker部署ShareLaTeX
m.mamicode.com
主要软硬件依赖
阿里云轻量应用服务器学生机一台(系统镜像:Ubuntu18.04,1核CPU 2G内存 40G系统盘 5Mbps峰值带宽),用学生机主要是因为穷
Docker 社区版,版本19.03.12
安装Docker首先使用SSH工具连接服务器( ...